`)}popupDebug(){window.open(this.getDebugURI())}iframeDebug(){const e=document.createElement("iframe");e.width=""+window.innerWidth,e.height=""+window.innerHeight,e.style.position="absolute",e.style.left="0",e.style.top="0",e.style.zIndex="10000",document.body.appendChild(e),e.contentWindow.document.open(),e.contentWindow.document.write(this.getDebugHTML()),e.contentWindow.document.close(),e.contentWindow.document.body.style.background="white";const t=document.createElement("button");t.style.position="absolute",t.style.top="0",t.style.right="0",t.style.zIndex="10001",document.body.appendChild(t),t.textContent="close",["pointerdown","click","touchdown"].forEach(i=>{t.addEventListener(i,()=>{document.body.removeChild(e),document.body.removeChild(t)},!0)})}getPDOMDebugHTML(){let e="";const t="font-weight: bold; font-size: 120%; margin-top: 5px;",i="    ";e+=`
Accessible Instances

`,function t(n,s){e+=s+ac(`${n.isRootInstance?"":n.node.tagName} ${n.toString()}`)+"
",n.children.forEach(e=>{t(e,s+i)})}(this._rootPDOMInstance,""),e+=`
Parallel DOM

`;let n=this._rootPDOMInstance.peer.primarySibling.outerHTML;n=n.replace(/>\n<");const s=n.split("\n");let r="";for(let o=0;o",n||(r+=i)}return e}foreignObjectRasterization(t){const i={};let n=0;function s(e){e.id||(e.id="unknown-canvas-"+n++),i[e.id]=e.toDataURL()}!function e(t){if(t instanceof Rg)_.each(t.blocks,t=>{e(t)});else if(t instanceof Xm&&t.firstDrawable&&t.lastDrawable){for(let i=t.firstDrawable;i!==t.lastDrawable;i=i.nextDrawable)e(i);e(t.lastDrawable),(t instanceof og||t instanceof Eg)&&t.canvas&&t.canvas instanceof window.HTMLCanvasElement&&s(t.canvas)}Wg&&t instanceof Wg&&(t.domElement instanceof window.HTMLCanvasElement&&s(t.domElement),Array.prototype.forEach.call(t.domElement.getElementsByTagName("canvas"),e=>{s(e)}))}(this._rootBackbone);const r=document.implementation.createHTMLDocument("");r.documentElement.innerHTML=this.domElement.outerHTML,r.documentElement.setAttribute("xmlns",r.documentElement.namespaceURI),r.documentElement.appendChild(document.createElement("style")).innerHTML=`.${Ps.A.ROOT_CLASS_NAME} { display:none; } `;let o=r.documentElement.getElementsByTagName("canvas");o=Array.prototype.slice.call(o);for(let e=0;e{e.elementToSVGDataURL(r.documentElement,a,l,t)};let c=0,d=!1;const u=Array.prototype.slice.call(r.documentElement.getElementsByTagName("image"));for(let e=0;e{const e=new window.Image,n=t;e.onload=()=>{const t=document.createElement("canvas");t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),n.setAttribute("xlink:href",t.toDataURL()),0==--c&&h()},e.onerror=()=>{0==--c&&h()},e.src=i})())}d||h()}popupRasterization(){this.foreignObjectRasterization(e=>{e&&window.open(e)})}getTrailFromPDOMIndicesString(e){if(!this._rootPDOMInstance)return null;let t=this._rootPDOMInstance;const i=e.split("-");for(let n=0;n
${(new window.XMLSerializer).serializeToString(e)}
`,a=new window.Image;a.onload=()=>{r.drawImage(a,0,0),n(s.toDataURL())},a.onerror=()=>{n(null)};const l=new TextEncoderLite("utf-8").encode(o),h=fromByteArray(l);a.src="data:image/svg+xml;base64,"+h}static assertSubtreeDisposed(e){0}static addInputListener(e){_.includes(us.inputListeners,e)||us.inputListeners.push(e)}static removeInputListener(e){us.inputListeners.splice(_.indexOf(us.inputListeners,e),1)}static hasInputListener(e){return _.includes(us.inputListeners,e)}static interruptInput(){const e=us.inputListeners.slice(0);for(let t=0;t{(0,He.Ay)(!i.hasOwnProperty(t)||void 0!==i[t],"Undefined not allowed for key: "+t),void 0!==i[t]&&(e[t]=i[t])}))}jA.INTERRUPT_OTHER_POINTERS=e=>{var t,i,n;null==(n=window.phet)||null==(i=n.joist)||null==(t=i.display)||t.interruptOtherPointers(null==e?void 0:e.pointer)},it.A.register("Display",jA),ve.A.register("mutate",_A);const ZA=_A,XA=["left","right","center","origin"],JA=["top","bottom","center","origin"],$A=["left","right","center"],ey=["top","bottom","center"];let ty=class e extends Ve.A{static getAllowedAligns(e){return[...e===Ee.HORIZONTAL?XA:JA,null]}static getAllowedRestrictedAligns(e){return[...e===Ee.HORIZONTAL?$A:ey,null]}static alignToInternal(t,i){return t===Ee.HORIZONTAL?e.horizontalAlignToInternal(i):e.verticalAlignToInternal(i)}static horizontalAlignToInternal(e){return null===e?null:iy[e]}static verticalAlignToInternal(e){return null===e?null:ny[e]}static internalToAlign(e,t){return null===t?null:e===Ee.HORIZONTAL?t.horizontal:t.vertical}constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Number.POSITIVE_INFINITY;super(),this.horizontal=e,this.vertical=t,this.padRatio=i}};ty.START=new ty("left","top",0),ty.END=new ty("right","bottom",1),ty.CENTER=new ty("center","center",.5),ty.ORIGIN=new ty("origin","origin"),ty.enumeration=new Pe.A(ty,{phetioDocumentation:"Alignment for layout containers"});const iy={left:ty.START,right:ty.END,center:ty.CENTER,origin:ty.ORIGIN},ny={top:ty.START,bottom:ty.END,center:ty.CENTER,origin:ty.ORIGIN};it.A.register("LayoutAlign",ty);const sy=["margin","xMargin","yMargin","leftMargin","rightMargin","topMargin","bottomMargin","minContentWidth","minContentHeight","maxContentWidth","maxContentHeight"],ry=Gr(e=>class extends e{mutateConfigurable(e){(0,l.A)(e,["margin"],["xMargin","yMargin"]),(0,l.A)(e,["xMargin"],["leftMargin","rightMargin"]),(0,l.A)(e,["yMargin"],["topMargin","bottomMargin"])}setConfigToBaseDefault(){this._leftMargin=0,this._rightMargin=0,this._topMargin=0,this._bottomMargin=0,this._minContentWidth=null,this._minContentHeight=null,this._maxContentWidth=null,this._maxContentHeight=null,this.changedEmitter.emit()}setConfigToInherit(e){e&&void 0!==e.leftMargin||(this._leftMargin=null),e&&void 0!==e.rightMargin||(this._rightMargin=null),e&&void 0!==e.topMargin||(this._topMargin=null),e&&void 0!==e.bottomMargin||(this._bottomMargin=null),e&&void 0!==e.minContentWidth||(this._minContentWidth=null),e&&void 0!==e.minContentHeight||(this._minContentHeight=null),e&&void 0!==e.maxContentWidth||(this._maxContentWidth=null),e&&void 0!==e.maxContentHeight||(this._maxContentHeight=null),this.changedEmitter.emit()}get leftMargin(){return this._leftMargin}set leftMargin(e){this._leftMargin!==e&&(this._leftMargin=e,this.changedEmitter.emit())}get rightMargin(){return this._rightMargin}set rightMargin(e){this._rightMargin!==e&&(this._rightMargin=e,this.changedEmitter.emit())}get topMargin(){return this._topMargin}set topMargin(e){this._topMargin!==e&&(this._topMargin=e,this.changedEmitter.emit())}get bottomMargin(){return this._bottomMargin}set bottomMargin(e){this._bottomMargin!==e&&(this._bottomMargin=e,this.changedEmitter.emit())}get xMargin(){return this._leftMargin}set xMargin(e){this._leftMargin===e&&this._rightMargin===e||(this._leftMargin=e,this._rightMargin=e,this.changedEmitter.emit())}get yMargin(){return this._topMargin}set yMargin(e){this._topMargin===e&&this._bottomMargin===e||(this._topMargin=e,this._bottomMargin=e,this.changedEmitter.emit())}get margin(){return this._topMargin}set margin(e){this._leftMargin===e&&this._rightMargin===e&&this._topMargin===e&&this._bottomMargin===e||(this._leftMargin=e,this._rightMargin=e,this._topMargin=e,this._bottomMargin=e,this.changedEmitter.emit())}get minContentWidth(){return this._minContentWidth}set minContentWidth(e){this._minContentWidth!==e&&(this._minContentWidth=e,this.changedEmitter.emit())}get minContentHeight(){return this._minContentHeight}set minContentHeight(e){this._minContentHeight!==e&&(this._minContentHeight=e,this.changedEmitter.emit())}get maxContentWidth(){return this._maxContentWidth}set maxContentWidth(e){this._maxContentWidth!==e&&(this._maxContentWidth=e,this.changedEmitter.emit())}get maxContentHeight(){return this._maxContentHeight}set maxContentHeight(e){this._maxContentHeight!==e&&(this._maxContentHeight=e,this.changedEmitter.emit())}constructor(){super(...arguments),this._leftMargin=null,this._rightMargin=null,this._topMargin=null,this._bottomMargin=null,this._minContentWidth=null,this._minContentHeight=null,this._maxContentWidth=null,this._maxContentHeight=null,this.changedEmitter=new ot.A}});it.A.register("MarginLayoutConfigurable",ry);const oy=ry,ay=["orientation","align","cellAlign","stretch","grow"].concat(sy),ly=Gr(e=>class extends(oy(e)){mutateConfigurable(e){super.mutateConfigurable(e),ZA(this,ay,e)}setConfigToBaseDefault(){this._align=ty.CENTER,this._cellAlign=ty.START,this._stretch=!1,this._grow=0,super.setConfigToBaseDefault()}setConfigToInherit(e){e&&void 0!==e.align||(this._align=null),e&&void 0!==e.cellAlign||(this._cellAlign=null),e&&void 0!==e.stretch||(this._stretch=null),e&&void 0!==e.grow||(this._grow=null),super.setConfigToInherit(e)}get orientation(){return this._orientation===Ee.HORIZONTAL?"horizontal":"vertical"}set orientation(e){const t="horizontal"===e?Ee.HORIZONTAL:Ee.VERTICAL;this._orientation!==t&&(this._orientation=t,this.orientationChangedEmitter.emit(),this.changedEmitter.emit())}get align(){const e=ty.internalToAlign(this._orientation.opposite,this._align);return e}set align(e){const t=ty.alignToInternal(this._orientation.opposite,e);this._align!==t&&(this._align=t,this.changedEmitter.emit())}get cellAlign(){const e=ty.internalToAlign(this._orientation,this._cellAlign);return e}set cellAlign(e){const t=ty.alignToInternal(this._orientation,e);this._cellAlign!==t&&(this._cellAlign=t,this.changedEmitter.emit())}get stretch(){return this._stretch}set stretch(e){this._stretch!==e&&(this._stretch=e,this.changedEmitter.emit())}get grow(){return this._grow}set grow(e){this._grow!==e&&(this._grow=e,this.changedEmitter.emit())}constructor(){super(...arguments),this._orientation=Ee.HORIZONTAL,this._align=null,this._cellAlign=null,this._stretch=null,this._grow=null,this.orientationChangedEmitter=new ot.A}});it.A.register("FlowConfigurable",ly);const hy=ly;let cy=class{initializeLayoutLine(){this.min=0,this.max=Number.POSITIVE_INFINITY,this.minOrigin=Number.POSITIVE_INFINITY,this.maxOrigin=Number.NEGATIVE_INFINITY,this.size=0,this.position=0}hasOrigin(){return isFinite(this.minOrigin)&&isFinite(this.maxOrigin)}};it.A.register("LayoutLine",cy);let dy=class e extends cy{initialize(e,t){return this.orientation=e,this.cells=t,this.initializeLayoutLine(),this}getMinimumSize(e){return(this.cells.length-1)*e+_.sum(this.cells.map(e=>e.getMinimumSize(this.orientation)))}freeToPool(){e.pool.freeToPool(this)}clean(){this.cells.length=0,this.freeToPool()}constructor(e,t){super(),this.initialize(e,t)}};dy.pool=new Se.A(dy,{defaultArguments:[Ee.HORIZONTAL,[]]}),it.A.register("FlowLine",dy);const uy=["left","right","center","spaceBetween","spaceAround","spaceEvenly"],py=["top","bottom","center","spaceBetween","spaceAround","spaceEvenly"];let my=class extends Ve.A{static getAllowedJustificationValues(e){return e===Ee.HORIZONTAL?uy:py}static justifyToInternal(e,t){return e===Ee.HORIZONTAL?gy[t]:Ay[t]}static internalToJustify(e,t){return e===Ee.HORIZONTAL?t.horizontal:t.vertical}constructor(e,t,i){super(),this.spacingFunctionFactory=e,this.horizontal=t,this.vertical=i}};my.START=new my(()=>()=>0,"left","top"),my.END=new my(e=>t=>0===t?e:0,"right","bottom"),my.CENTER=new my(e=>t=>0===t?e/2:0,"center","center"),my.SPACE_BETWEEN=new my((e,t)=>i=>0!==i?e/(t-1):0,"spaceBetween","spaceBetween"),my.SPACE_AROUND=new my((e,t)=>i=>(0!==i?2:1)*e/(2*t),"spaceAround","spaceAround"),my.SPACE_EVENLY=new my((e,t)=>i=>e/(t+1),"spaceEvenly","spaceEvenly"),my.enumeration=new Pe.A(my,{phetioDocumentation:"Justify for layout containers"});const gy={left:my.START,right:my.END,center:my.CENTER,spaceBetween:my.SPACE_BETWEEN,spaceAround:my.SPACE_AROUND,spaceEvenly:my.SPACE_EVENLY},Ay={top:my.START,bottom:my.END,center:my.CENTER,spaceBetween:my.SPACE_BETWEEN,spaceAround:my.SPACE_AROUND,spaceEvenly:my.SPACE_EVENLY};it.A.register("LayoutJustification",my);let yy=class e{initialize(e){return this.trail=e,this}checkPreconditions(){}get node(){return this.trail.lastNode()}get bounds(){return this.trail.parentToGlobalBounds(this.node.bounds)}get visibleBounds(){return this.trail.parentToGlobalBounds(this.node.visibleBounds)}get width(){return this.bounds.width}get height(){return this.bounds.height}get x(){return this.trail.getParentTransform().transformX(this.node.x)}set x(e){this.node.x=this.trail.getParentTransform().inverseX(e)}get y(){return this.trail.getParentTransform().transformY(this.node.y)}set y(e){this.node.y=this.trail.getParentTransform().inverseY(e)}get translation(){return this.trail.getParentTransform().transformPosition2(this.node.translation)}set translation(e){this.node.translation=this.trail.getParentTransform().inversePosition2(e)}get left(){return this.trail.getParentTransform().transformX(this.node.left)}set left(e){this.node.left=this.trail.getParentTransform().inverseX(e)}get right(){return this.trail.getParentTransform().transformX(this.node.right)}set right(e){this.node.right=this.trail.getParentTransform().inverseX(e)}get centerX(){return this.trail.getParentTransform().transformX(this.node.centerX)}set centerX(e){this.node.centerX=this.trail.getParentTransform().inverseX(e)}get top(){return this.trail.getParentTransform().transformY(this.node.top)}set top(e){this.node.top=this.trail.getParentTransform().inverseY(e)}get bottom(){return this.trail.getParentTransform().transformY(this.node.bottom)}set bottom(e){this.node.bottom=this.trail.getParentTransform().inverseY(e)}get centerY(){return this.trail.getParentTransform().transformY(this.node.centerY)}set centerY(e){this.node.centerY=this.trail.getParentTransform().inverseY(e)}get leftTop(){return this.trail.getParentTransform().transformPosition2(this.node.leftTop)}set leftTop(e){this.node.leftTop=this.trail.getParentTransform().inversePosition2(e)}get centerTop(){return this.trail.getParentTransform().transformPosition2(this.node.centerTop)}set centerTop(e){this.node.centerTop=this.trail.getParentTransform().inversePosition2(e)}get rightTop(){return this.trail.getParentTransform().transformPosition2(this.node.rightTop)}set rightTop(e){this.node.rightTop=this.trail.getParentTransform().inversePosition2(e)}get leftCenter(){return this.trail.getParentTransform().transformPosition2(this.node.leftCenter)}set leftCenter(e){this.node.leftCenter=this.trail.getParentTransform().inversePosition2(e)}get center(){return this.trail.getParentTransform().transformPosition2(this.node.center)}set center(e){this.node.center=this.trail.getParentTransform().inversePosition2(e)}get rightCenter(){return this.trail.getParentTransform().transformPosition2(this.node.rightCenter)}set rightCenter(e){this.node.rightCenter=this.trail.getParentTransform().inversePosition2(e)}get leftBottom(){return this.trail.getParentTransform().transformPosition2(this.node.leftBottom)}set leftBottom(e){this.node.leftBottom=this.trail.getParentTransform().inversePosition2(e)}get centerBottom(){return this.trail.getParentTransform().transformPosition2(this.node.centerBottom)}set centerBottom(e){this.node.centerBottom=this.trail.getParentTransform().inversePosition2(e)}get rightBottom(){return this.trail.getParentTransform().transformPosition2(this.node.rightBottom)}set rightBottom(e){this.node.rightBottom=this.trail.getParentTransform().inversePosition2(e)}get widthSizable(){return this.node.widthSizable}get heightSizable(){return this.node.heightSizable}isSizable(e){return e===Ee.HORIZONTAL?this.widthSizable:this.heightSizable}get minimumWidth(){var e;const t=ir(this.node)?null!=(e=this.node.minimumWidth)?e:0:this.node.width;return Math.abs(this.trail.getParentTransform().transformDeltaX(t))}get minimumHeight(){var e;const t=nr(this.node)?null!=(e=this.node.minimumHeight)?e:0:this.node.height;return Math.abs(this.trail.getParentTransform().transformDeltaY(t))}getMinimum(e){return e===Ee.HORIZONTAL?this.minimumWidth:this.minimumHeight}get maxWidth(){return null===this.node.maxWidth?null:Math.abs(this.trail.getParentTransform().transformDeltaX(this.node.maxWidth))}set maxWidth(e){this.node.maxWidth=null===e?null:Math.abs(this.trail.getParentTransform().inverseDeltaX(e))}get maxHeight(){return null===this.node.maxHeight?null:Math.abs(this.trail.getParentTransform().transformDeltaY(this.node.maxHeight))}set maxHeight(e){this.node.maxHeight=null===e?null:Math.abs(this.trail.getParentTransform().inverseDeltaY(e))}getMax(e){return e===Ee.HORIZONTAL?this.maxWidth:this.maxHeight}attemptPreferredSize(e,t){if(this.isSizable(e))if(null===t)this.node[e.preferredSize]=null;else{t=Math.abs(this.trail.getParentTransform()[e===Ee.HORIZONTAL?"inverseDeltaX":"inverseDeltaY"](t));const i=this.getMinimum(e);t=Math.max(i,t);const n=this.getMax(e);null!==n&&(t=Math.min(n,t)),this.node[e.preferredSize]=t}}get preferredWidth(){if(ir(this.node)){const e=this.node.preferredWidth;return null===e?null:Math.abs(this.trail.getParentTransform().transformDeltaX(e))}return null}set preferredWidth(e){this.attemptPreferredSize(Ee.HORIZONTAL,e)}get preferredHeight(){if(nr(this.node)){const e=this.node.preferredHeight;return null===e?null:Math.abs(this.trail.getParentTransform().transformDeltaY(e))}return null}set preferredHeight(e){this.attemptPreferredSize(Ee.VERTICAL,e)}get visible(){return this.node.visible}set visible(e){this.node.visible=e}dispose(){this.trail=null,this.freeToPool()}freeToPool(){e.pool.freeToPool(this)}constructor(e){this.initialize(e)}};yy.pool=new Se.A(yy,{maxSize:1e3}),it.A.register("LayoutProxy",yy);let fy=class{addNode(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];t&&(e._activeParentLayoutConstraint=this),e.boundsProperty.lazyLink(this._updateLayoutListener),e.visibleProperty.lazyLink(this._updateLayoutListener),sr(e)&&(e.minimumWidthProperty.lazyLink(this._updateLayoutListener),e.isWidthResizableProperty.lazyLink(this._updateLayoutListener)),rr(e)&&(e.minimumHeightProperty.lazyLink(this._updateLayoutListener),e.isHeightResizableProperty.lazyLink(this._updateLayoutListener)),this._listenedNodes.add(e)}removeNode(e){e._activeParentLayoutConstraint===this&&(e._activeParentLayoutConstraint=null),e.boundsProperty.unlink(this._updateLayoutListener),e.visibleProperty.unlink(this._updateLayoutListener),sr(e)&&(e.minimumWidthProperty.unlink(this._updateLayoutListener),e.isWidthResizableProperty.unlink(this._updateLayoutListener)),rr(e)&&(e.minimumHeightProperty.unlink(this._updateLayoutListener),e.isHeightResizableProperty.unlink(this._updateLayoutListener)),this._listenedNodes.delete(e)}layout(){}get isLocked(){return this._layoutLockCount>0}lock(){this._layoutLockCount++}unlock(){this._layoutLockCount--}validateLocalPreferredWidth(e){0}validateLocalPreferredHeight(e){0}validateLocalPreferredSize(e){0}updateLayout(){if(this.isLocked)this._layoutAttemptDuringLock=!0;else{this.lock();do{this._layoutAttemptDuringLock=!1,this.layout()}while(this._layoutAttemptDuringLock);this.unlock()}}updateLayoutAutomatically(){this._enabled&&this.updateLayout()}createLayoutProxy(e){const t=e.getTrails(e=>e===this.ancestorNode);return 1===t.length?yy.pool.create(t[0].removeAncestor()):null}get enabled(){return this._enabled}set enabled(e){this._enabled!==e&&(this._enabled=e,this.updateLayoutAutomatically())}dispose(){const e=[...this._listenedNodes.keys()];for(let t=0;te.isConnected()&&e.proxy.bounds.isValid()&&(!this.excludeInvisible||e.node.visible))}get excludeInvisible(){return this._excludeInvisible}set excludeInvisible(e){this._excludeInvisible!==e&&(this._excludeInvisible=e,this.updateLayoutAutomatically())}setProxyPreferredSize(e,t,i){t[e.preferredSize]=i}setProxyMinSide(e,t,i){Math.abs(t[e.minSide]-i)>1e-9&&(t[e.minSide]=i)}setProxyOrigin(e,t,i){Math.abs(t[e.coordinate]-i)>1e-9&&(t[e.coordinate]=i)}dispose(){this.preferredWidthProperty.unlink(this._updateLayoutListener),this.preferredHeightProperty.unlink(this._updateLayoutListener),this.layoutOriginProperty.unlink(this._updateLayoutListener),super.dispose()}constructor(e,i){const n=(0,t.Ay)()({preferredWidthProperty:new d.A(null),preferredHeightProperty:new d.A(null),minimumWidthProperty:new d.A(null),minimumHeightProperty:new d.A(null),layoutOriginProperty:new d.A(Te.A.ZERO)},i);super(e),this._excludeInvisible=!0,this.layoutBoundsProperty=new r.A(Ie.NOTHING,{valueComparisonStrategy:"equalsFunction"}),this.preferredWidthProperty=n.preferredWidthProperty,this.preferredHeightProperty=n.preferredHeightProperty,this.minimumWidthProperty=n.minimumWidthProperty,this.minimumHeightProperty=n.minimumHeightProperty,this.layoutOriginProperty=n.layoutOriginProperty,this.preferredWidthProperty.lazyLink(this._updateLayoutListener),this.preferredHeightProperty.lazyLink(this._updateLayoutListener),this.layoutOriginProperty.lazyLink(this._updateLayoutListener)}};it.A.register("NodeLayoutConstraint",by);const Py=[...ay,"spacing","lineSpacing","justify","justifyLines","wrap","excludeInvisible"];let Vy=class e extends(hy(by)){updateSeparatorVisibility(){let e=0;for(;ee;i--){const e=this.cells[i];e._isSeparator?(e.node.visible=t,t=!1):e.node.visible&&e.node.boundsProperty.value.isValid()&&(t=!0)}}layout(){super.layout();const e=this._orientation,t=this._orientation.opposite;this.updateSeparatorVisibility();const i=this.filterLayoutCells(this.cells);if(this.displayedCells=i,!i.length)return this.layoutBoundsProperty.value=Ie.NOTHING,this.minimumWidthProperty.value=null,void(this.minimumHeightProperty.value=null);let n=this.getPreferredProperty(e).value;const s=this.getPreferredProperty(t).value,r=Math.max(...i.map(t=>t.getMinimumSize(e)||0));r>(n||Number.POSITIVE_INFINITY)&&(n=r);const o=[];if(this.wrap){let t=[],s=n||Number.POSITIVE_INFINITY;for(;i.length;){const r=i.shift(),a=r.getMinimumSize(e);0===t.length?(t.push(r),s-=a):this.spacing+a<=s+1e-7?(t.push(r),s-=this.spacing+a):(o.push(dy.pool.create(e,t)),s=n||Number.POSITIVE_INFINITY,t=[r],s-=a)}t.length&&o.push(dy.pool.create(e,t))}else o.push(dy.pool.create(e,i));o.forEach(e=>{e.cells.forEach(i=>{if(e.min=Math.max(e.min,i.getMinimumSize(t)),e.max=Math.min(e.max,i.getMaximumSize(t)),i.effectiveAlign===ty.ORIGIN){const n=i.getOriginBounds();e.minOrigin=Math.min(n[t.minCoordinate],e.minOrigin),e.maxOrigin=Math.max(n[t.maxCoordinate],e.maxOrigin)}}),isFinite(e.minOrigin)&&isFinite(e.maxOrigin)?e.size=Math.max(e.min,e.maxOrigin-e.minOrigin):e.size=e.min});const a=Math.max(...o.map(e=>e.getMinimumSize(this.spacing))),l=_.sum(o.map(e=>e.size))+(o.length-1)*this.lineSpacing,h=this.wrap?r:a,c=Math.max(a,n||0),d=Math.max(l,s||0),u=this.layoutOriginProperty.value[e.coordinate],p=this.layoutOriginProperty.value[e.opposite.coordinate];o.forEach(t=>{const i=_.sum(t.cells.map(t=>t.getMinimumSize(e))),n=this.spacing*(t.cells.length-1);let s,r=c-i-n;for(t.cells.forEach(t=>{t.size=t.getMinimumSize(e)});r>1e-7&&(s=t.cells.filter(t=>0!==t.effectiveGrow&&t.sizee.effectiveGrow)),i=Math.min(Math.min(...s.map(t=>(t.getMaximumSize(e)-t.size)/t.effectiveGrow)),r/t);s.forEach(e=>{e.size+=i*e.effectiveGrow}),r-=i*t}const o=this._justify.spacingFunctionFactory(r,t.cells.length);let a=u;t.cells.forEach((t,i)=>{a+=o(i),i>0&&(a+=this.spacing),t.reposition(e,t.size,a,!0,0,t.effectiveCellAlign),a+=t.size})});const m=d-l,g=(o[0].hasOrigin()?o[0].minOrigin:0)+p;let A=g;if(null===this._justifyLines)o.forEach(e=>{e.size+=m/o.length}),o.forEach(e=>{e.position=A,A+=e.size+this.lineSpacing});else{const e=this._justifyLines.spacingFunctionFactory(m,o.length);o.forEach((t,i)=>{A+=e(i),t.position=A,A+=t.size+this.lineSpacing})}o.forEach(e=>e.cells.forEach(i=>{i.reposition(t,e.size,e.position,i.effectiveStretch,-e.minOrigin,i.effectiveAlign)}));const y=u,f=u+c,b=g,P=g+d;this.layoutBoundsProperty.value=Ie.oriented(e,y,b,f,P),this.minimumWidthProperty.value=e===Ee.HORIZONTAL?h:l,this.minimumHeightProperty.value=e===Ee.HORIZONTAL?l:h,this.finishedLayoutEmitter.emit(),o.forEach(e=>e.clean())}get justify(){const e=my.internalToJustify(this._orientation,this._justify);return e}set justify(e){const t=my.justifyToInternal(this._orientation,e);this._justify!==t&&(this._justify=t,this.updateLayoutAutomatically())}get justifyLines(){if(null===this._justifyLines)return null;{const e=my.internalToJustify(this._orientation,this._justifyLines);return e}}set justifyLines(e){const t=null===e?null:my.justifyToInternal(this._orientation.opposite,e);this._justifyLines!==t&&(this._justifyLines=t,this.updateLayoutAutomatically())}get wrap(){return this._wrap}set wrap(e){this._wrap!==e&&(this._wrap=e,this.updateLayoutAutomatically())}get spacing(){return this._spacing}set spacing(e){this._spacing!==e&&(this._spacing=e,this.updateLayoutAutomatically())}get lineSpacing(){return this._lineSpacing}set lineSpacing(e){this._lineSpacing!==e&&(this._lineSpacing=e,this.updateLayoutAutomatically())}insertCell(e,t){t.orientation=this.orientation,this.cells.splice(e,0,t),this.addNode(t.node),t.changedEmitter.addListener(this._updateLayoutListener),this.updateLayoutAutomatically()}removeCell(e){(0,a.A)(this.cells,e),this.removeNode(e.node),e.changedEmitter.removeListener(this._updateLayoutListener),this.updateLayoutAutomatically()}getCellQuantity(){return this.cells.length}reorderCells(e,t,i){this.cells.splice(t,i-t+1,...e),this.updateLayoutAutomatically()}getPreferredProperty(e){return e===Ee.HORIZONTAL?this.preferredWidthProperty:this.preferredHeightProperty}dispose(){this.lock(),this.cells.forEach(e=>this.removeCell(e)),this.displayedCells=[],super.dispose(),this.unlock()}static create(t,i){return new e(t,i)}constructor(e,t){super(e,t),this.cells=[],this._justify=my.SPACE_BETWEEN,this._justifyLines=null,this._wrap=!1,this._spacing=0,this._lineSpacing=0,this.displayedCells=[],this.setConfigToBaseDefault(),this.mutateConfigurable(t),ZA(this,Py,t),this.changedEmitter.addListener(this._updateLayoutListener),this.orientationChangedEmitter.addListener(()=>this.cells.forEach(e=>{e.orientation=this.orientation}))}};it.A.register("FlowConstraint",Vy);let vy=class e{get(e){return(0,He.Ay)(this._values.includes(e)),(0,He.Ay)(this._map.has(e)),this._map.get(e)}set(e,t){(0,He.Ay)(this._values.includes(e)),this._map.set(e,t)}map(t){return new e(this._enumeration,e=>t(this.get(e),e))}forEach(e){this._values.forEach(t=>e(this.get(t),t))}values(){return this._values.map(e=>this.get(e))}constructor(e,t){this._map=new Map,this._enumeration=e,this._values=e.enumeration.values,this._values.forEach(e=>{(0,He.Ay)(!this._map.has(e),"Enumeration key override problem"),this._map.set(e,t(e))})}};ve.A.register("EnumerationMap",vy);const wy=vy;let Ey=class e extends wy{get horizontal(){return this.get(Ee.HORIZONTAL)}set horizontal(e){this.set(Ee.HORIZONTAL,e)}get vertical(){return this.get(Ee.VERTICAL)}set vertical(e){this.set(Ee.VERTICAL,e)}with(t,i){return new e(t===Ee.HORIZONTAL?i:this.horizontal,t===Ee.VERTICAL?i:this.vertical)}static create(t){return new e(t(Ee.HORIZONTAL),t(Ee.VERTICAL))}map(t){return new e(t(this.horizontal,Ee.HORIZONTAL),t(this.vertical,Ee.VERTICAL))}constructor(e,t){super(Ee,i=>i===Ee.HORIZONTAL?e:t)}};ve.A.register("OrientationPair",Ey);const Sy=Ey;let Ty=class extends d.A{update(){const e=[],t=new Set,i=new ji(this.leafNode),n=this.rootNode;!function s(){const r=i.rootNode();t.add(r),r===n&&e.push(i.copy()),r.parents.forEach(e=>{i.addAncestor(e),s(),i.removeAncestor()})}(),t.forEach(e=>{this.listenedNodeSet.has(e)||this.addNodeListener(e)}),this.listenedNodeSet.forEach(e=>{t.has(e)||this.removeNodeListener(e)});const s=this.value;let r=s.length===e.length;if(r)for(let o=0;othis.removeNodeListener(e)),super.dispose()}constructor(e,t){super([]),this.listenedNodeSet=new Set,this.rootNode=e,this.leafNode=t,this._trailUpdateListener=this.update.bind(this),this.update()}};it.A.register("TrailsBetweenProperty",Ty);let Cy=class extends pe{dispose(){this.trailsBetweenProperty.dispose(),this.transformTracker&&this.transformTracker.dispose(),super.dispose()}constructor(e,t,i){const n=new Ty(e,t);super([n],e=>1===e.length?yy.pool.create(e[0].copy().removeAncestor()):null),this.transformTracker=null,this.trailsBetweenProperty=n,this.lazyLink((e,t)=>{t&&t.dispose()});const s=null==i?void 0:i.onTransformChange;s&&this.link(t=>{this.transformTracker&&(this.transformTracker.dispose(),this.transformTracker=null),t&&(this.transformTracker=new Ns(t.trail.copy().addAncestor(e)),this.transformTracker.addListener(s))})}};it.A.register("LayoutProxyProperty",Cy);let Iy=class{onLayoutOptionsChange(){}get node(){return this._node}isConnected(){return null!==this._proxy}get proxy(){return this._proxy}isSizable(e){return e===Ee.HORIZONTAL?this.proxy.widthSizable:this.proxy.heightSizable}dispose(){this.layoutProxyProperty&&this.layoutProxyProperty.dispose(),this.node.layoutOptionsChangedEmitter.removeListener(this.layoutOptionsListener)}constructor(e,t,i){i?(this.layoutProxyProperty=null,this._proxy=i):(this._proxy=null,this.layoutProxyProperty=new Cy(e.ancestorNode,t,{onTransformChange:()=>e.updateLayoutAutomatically()}),this.layoutProxyProperty.link(t=>{this._proxy=t,e.updateLayoutAutomatically()})),this._constraint=e,this._node=t,this.layoutOptionsListener=this.onLayoutOptionsChange.bind(this),this.node.layoutOptionsChangedEmitter.addListener(this.layoutOptionsListener)}};it.A.register("LayoutCell",Iy);var xy,Dy,ky,My,By,Oy,Ly;i(5018);const Ry=new o(!(null==(ky=window)||null==(Dy=ky.phet)||null==(xy=Dy.chipper)?void 0:xy.queryParameters)||(null==(Ly=window)||null==(Oy=Ly.phet)||null==(By=Oy.chipper)||null==(My=By.queryParameters)?void 0:My.allowLinks),{tandem:A.A.GENERAL_MODEL.createTandem("allowLinksProperty")});it.A.register("allowLinksProperty",Ry);const Ny=Ry,qy=(e,i)=>{const n=(0,t.Ay)()({requiredOnly:!1},i),s=[],r=new LineBreaker(e);r[Symbol.iterator]=()=>({next(){const e=r.nextBreak();return null!==e?{value:e,done:!1}:{done:!0}}});let o=0;for(const t of r){const e=t.position;n.requiredOnly&&!t.required||(o!==e&&s.push(new T(o,e)),o=t.position)}return o"element"===e.type.toLowerCase(),Yy=e=>"text"===e.type.toLowerCase(),Gy={scratchText:new Bc(""),himalayaGetAttribute(e,t){if(!t)return null;const i=_.find(t.attributes,t=>t.key===e);return i&&i.value||null},himalayaStyleStringToMap(e){const t=e.split(";"),i={};return t.forEach(e=>{if(e.length>0){const t=e.split(":");i[t[0].trim()]=t[1].trim()}}),i}},Uy=Gy;it.A.register("RichTextUtils",Gy);const zy=Gr(e=>class extends e{get isCleanable(){return!0}clean(){const e=this;for(let t=e._children.length-1;t>=0;t--){const i=e._children[t];e.removeChild(i),i.isCleanable&&i.clean()}e.matrix=Pt.IDENTITY,e.freeToPool()}});it.A.register("RichTextCleanable",zy);const Wy=zy;let Qy=class e extends(Wy(Cr)){initialize(e){return this.isLTR=e,this.leftSpacing=0,this.rightSpacing=0,this}addElement(e){const t=this.children.length>0,i=e.width>0,n=e.getScaleVector().x,s=e.leftSpacing*n,r=e.rightSpacing*n;return!(!t&&!i)&&(t?i?(this.isLTR?(e.left=this.localRight+this.rightSpacing+s,this.rightSpacing=r):(e.right=this.localLeft-this.leftSpacing-r,this.leftSpacing=s),this.addChild(e),!0):(this.isLTR?this.rightSpacing+=s+r:this.leftSpacing+=s+r,!1):(this.isLTR?(e.left=0,this.leftSpacing=s,this.rightSpacing=r):(e.right=0,this.leftSpacing=s,this.rightSpacing=r),this.addChild(e),!0))}addExtraBeforeSpacing(e){this.isLTR?this.leftSpacing+=e:this.rightSpacing+=e}freeToPool(){e.pool.freeToPool(this)}constructor(e){super(),this.initialize(e)}};Qy.pool=new Se.A(Qy),it.A.register("RichTextElement",Qy);const Ky=(e,t)=>{const i=he.decode(e);return void 0===t?i:`${t?"‪":"‫"}${i}‬`};let jy=class e extends(Wy(Bc)){initialize(e,t,i,n,s,r,o){let a="";for(;e.startsWith(" ");)a+=" ",e=e.slice(1);let l="";for(;e.endsWith(" ");)l=" ",e=e.slice(0,e.length-1);this.string=Ky(e,t),this.boundsMethod=n,this.font=i,this.fill=s,this.stroke=r,this.lineWidth=o;const h=a.length?Uy.scratchText.setString(a).setFont(i).width:0,c=l.length?Uy.scratchText.setString(l).setFont(i).width:0;return this.leftSpacing=t?h:c,this.rightSpacing=t?c:h,this}clean(){super.clean(),this.fill=null,this.stroke=null}fitsIn(e,t,i){return this.width+(t?i?this.leftSpacing:this.rightSpacing:0)<=e}freeToPool(){e.pool.freeToPool(this)}constructor(e,t,i,n,s,r,o){super(""),this.initialize(e,t,i,n,s,r,o)}};function _y(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ny.value;const i=phet&&phet.chipper&&phet.chipper.isFuzzEnabled();if(t&&!i){const t=window.open(e,"_blank");t&&t.focus()}}jy.pool=new Se.A(jy),it.A.register("RichTextLeaf",jy),it.A.register("openPopup",_y);const Zy=_y;let Xy=class e extends(cA(Wy(Cr))){initialize(e,t){return(!(arguments.length>2&&void 0!==arguments[2])||arguments[2])&&super.initialize(),this.innerContent=e,this.voicingNameResponse=e,"function"==typeof t?(this.fireListener=new Mr({fire:t,tandem:A.A.OPT_OUT}),this.addInputListener(this.fireListener),this.setPDOMAttribute("href","#"),this.setPDOMAttribute("target","_self"),this.accessibleInputListener={click:e=>{e.domEvent&&e.domEvent.preventDefault(),t()}},this.addInputListener(this.accessibleInputListener)):(this.fireListener=new Mr({fire:e=>{(null==e?void 0:e.isFromPDOM())&&e.domEvent.preventDefault(),self._linkEventsHandled&&e.handle(),Zy(t)},tandem:A.A.OPT_OUT}),this.addInputListener(this.fireListener),this.setPDOMAttribute("href",t),this.setPDOMAttribute("target","_blank"),this.allowLinksListener=e=>{this.visible=e},Ny.link(this.allowLinksListener)),this}clean(){super.clean(),this.fireListener&&(this.removeInputListener(this.fireListener),this.fireListener.dispose()),this.fireListener=null,this.accessibleInputListener&&(this.removeInputListener(this.accessibleInputListener),this.accessibleInputListener=null),this.allowLinksListener&&(Ny.unlink(this.allowLinksListener),this.allowLinksListener=null)}freeToPool(){e.pool.freeToPool(this)}constructor(e,t){super(),this.fireListener=null,this.accessibleInputListener=null,this.allowLinksListener=null,this.initialize(e,t,!1),this.mutate({cursor:"pointer",tagName:"a"})}};Xy.pool=new Se.A(Xy),it.A.register("RichTextLink",Xy);let Jy=class e extends(Wy(Cr)){initialize(e){return this.addChild(e),this}clean(){super.clean(),this.removeAllChildren()}fitsIn(e){return this.width<=e}freeToPool(){e.pool.freeToPool(this)}constructor(e){super(),this.leftSpacing=0,this.rightSpacing=0,this.initialize(e)}};Jy.pool=new Se.A(Jy),it.A.register("RichTextNode",Jy);let $y=class e extends(Wy(Cr)){initialize(e){return this.localBounds=new Ie(0,0,0,e),this}freeToPool(){e.pool.freeToPool(this)}constructor(e){super(),this.initialize(e)}};$y.pool=new Se.A($y),it.A.register("RichTextVerticalSpacer",$y);const ef=$y,tf=himalaya,nf=["boundsMethod","font","fill","stroke","lineWidth","subScale","subXSpacing","subYOffset","supScale","supXSpacing","supYOffset","capHeightScale","underlineLineWidth","underlineHeightScale","strikethroughLineWidth","strikethroughHeightScale","linkFill","linkEventsHandled","links","nodes","tags","replaceNewlines","align","leading","lineWrap",Bc.STRING_PROPERTY_NAME,"string"],sf=(window.QueryStringMachine&&QueryStringMachine.containsKey("stringTest"),new mc({size:20})),rf=["b","strong","i","em","sub","sup","u","s"],of="COMPLETE",af="INCOMPLETE",lf="NONE",hf={"font-family":"family","font-size":"size","font-stretch":"stretch","font-style":"style","font-variant":"variant","font-weight":"weight","line-height":"lineHeight"},cf=Object.keys(hf);["color"].concat(cf);let df=class e extends(Wo(Cr)){onStringPropertyChange(){this.rebuildRichText()}setStringProperty(t){return this._stringProperty.setTargetProperty(t,this,e.STRING_PROPERTY_TANDEM_NAME)}set stringProperty(e){this.setStringProperty(e)}get stringProperty(){return this.getStringProperty()}getStringProperty(){return this._stringProperty}getPhetioMouseHitTarget(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return"string"===hc.value?this.getStringPropertyPhetioMouseHitTarget(e):super.getPhetioMouseHitTarget(e)}getStringPropertyPhetioMouseHitTarget(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=this._stringProperty.getTargetProperty();return t instanceof g.A?t.getPhetioMouseHitTarget(e):"phetioNotSelectable"}initializePhetioObject(i,n){const s=(0,t.Ay)()({},n),r=this.isPhetioInstrumented();super.initializePhetioObject(i,s),A.A.PHET_IO_ENABLED&&!r&&this.isPhetioInstrumented()&&this._stringProperty.initializePhetio(this,e.STRING_PROPERTY_TANDEM_NAME,()=>new rc(this.string,(0,t.sF)({phetioReadOnly:!0,tandem:this.tandem.createTandem(e.STRING_PROPERTY_TANDEM_NAME),phetioDocumentation:"Property for the displayed text"},s.stringPropertyOptions)))}rebuildRichText(){const e="stretch"===this._lineWrap;this.widthSizable=e,this.pendingMinimumWidth=0,this.needPendingMinimumWidth=e;const t="stretch"===this._lineWrap?this.localPreferredWidth:this._lineWrap;if(this.freeChildrenToPool(),""===this.string)return void this.appendEmptyLeaf();let i,n=this.string.replace(/\u202a/g,'').replace(/\u202b/g,'').replace(/\u202c/g,"");this._replaceNewlines&&(n=n.replace(/\n/g,"
"));try{i=tf.parse(n)}catch(o){i=tf.parse("INVALID TRANSLATION")}this._linkItems.length=0;const s=null===t?Number.POSITIVE_INFINITY:t;let r=Qy.pool.create(!0);for(this._hasAddedLeafToLine=!1;i.length;){const e=i[0],t=r.bounds.isValid()?r.width:0,n=this.appendElement(r,e,this._font,this._fill,!0,s-t,1);n!==lf&&(r.bounds.isValid()?this.appendLine(r):this.appendLine(ef.pool.create(Uy.scratchText.setString("X").setFont(this._font).height)),r=Qy.pool.create(!0),this._hasAddedLeafToLine=!1),n!==af&&i.splice(0,1)}for(r.bounds.isValid()&&this.appendLine(r),0===this.lineContainer.getChildrenCount()&&this.appendEmptyLeaf(),this.alignLines();this._linkItems.length;)(()=>{const e=this._linkItems[0].element,t=this._linkItems[0].href;let i;const n=[];for(i=this._linkItems.length-1;i>=0;i--){const t=this._linkItems[i];t.element===e&&(n.push(t.node),this._linkItems.splice(i,1))}const s=Xy.pool.create(e.innerContent,t);for(this.lineContainer.addChild(s),i=0;i{const t=i.content.slice(e.min,e.max),o=jy.pool.create(t,r,n,this._boundsMethod,s,this._stroke,this._lineWidth),l=o.width*a;return o.dispose(),l})))),!l.fitsIn(c,this._hasAddedLeafToLine,r)){const e=Fy(i.content),t=e=>0===e.length?"":i.content.slice(e[0].min,e[e.length-1].max);if(this._hasAddedLeafToLine||e.length>1){const o=[];let a=!1;for(o.unshift(e.pop());e.length;){if(l.clean(),l=jy.pool.create(t(e),r,n,this._boundsMethod,s,this._stroke,this._lineWidth),l.fitsIn(c,this._hasAddedLeafToLine,r)||!(this._hasAddedLeafToLine||e.length>1)){a=!0;break}o.unshift(e.pop())}if(!a)return l.clean(),af;h=af,i.content=t(o)}}this._hasAddedLeafToLine=!0}else if(Hy(i)){if("br"===i.tagName)return of;if("span"===i.tagName){const e=Uy.himalayaGetAttribute("dir",i);e&&(r="ltr"===e)}if("node"===i.tagName){const e=Uy.himalayaGetAttribute("id",i),t=e&&this._nodes[e]||null;if(!t)return h;{if(l=Jy.pool.create(t),this._hasAddedLeafToLine&&!l.fitsIn(c))return l.clean(),af;const e=Uy.himalayaGetAttribute("align",i);if("center"===e||"top"===e||"bottom"===e){const t=Uy.scratchText.setString("Test").setFont(n).bounds;"center"===e?l.centerY=t.centerY:"top"===e?l.top=t.top:"bottom"===e&&(l.bottom=t.bottom)}}this._hasAddedLeafToLine=!0}else l=Qy.pool.create(r);const t=Uy.himalayaGetAttribute("style",i);if(t){const e=Uy.himalayaStyleStringToMap(t);e.color&&(s=new Wr(e.color));const i={};for(let t=0;te.node!==l),l.clean())}return h}setString(e){return e=""+e,this._stringProperty.set(e),this}set string(e){this.setString(e)}get string(){return this.getString()}getString(){return this._stringProperty.value}setBoundsMethod(e){return e!==this._boundsMethod&&(this._boundsMethod=e,this.rebuildRichText()),this}set boundsMethod(e){this.setBoundsMethod(e)}get boundsMethod(){return this.getBoundsMethod()}getBoundsMethod(){return this._boundsMethod}setFont(e){return this._font!==e&&(this._font=e,this.rebuildRichText()),this}set font(e){this.setFont(e)}get font(){return this.getFont()}getFont(){return this._font}setFill(e){return this._fill!==e&&(this._fill=e,this.rebuildRichText()),this}set fill(e){this.setFill(e)}get fill(){return this.getFill()}getFill(){return this._fill}setStroke(e){return this._stroke!==e&&(this._stroke=e,this.rebuildRichText()),this}set stroke(e){this.setStroke(e)}get stroke(){return this.getStroke()}getStroke(){return this._stroke}setLineWidth(e){return this._lineWidth!==e&&(this._lineWidth=e,this.rebuildRichText()),this}set lineWidth(e){this.setLineWidth(e)}get lineWidth(){return this.getLineWidth()}getLineWidth(){return this._lineWidth}setSubScale(e){return this._subScale!==e&&(this._subScale=e,this.rebuildRichText()),this}set subScale(e){this.setSubScale(e)}get subScale(){return this.getSubScale()}getSubScale(){return this._subScale}setSubXSpacing(e){return this._subXSpacing!==e&&(this._subXSpacing=e,this.rebuildRichText()),this}set subXSpacing(e){this.setSubXSpacing(e)}get subXSpacing(){return this.getSubXSpacing()}getSubXSpacing(){return this._subXSpacing}setSubYOffset(e){return this._subYOffset!==e&&(this._subYOffset=e,this.rebuildRichText()),this}set subYOffset(e){this.setSubYOffset(e)}get subYOffset(){return this.getSubYOffset()}getSubYOffset(){return this._subYOffset}setSupScale(e){return this._supScale!==e&&(this._supScale=e,this.rebuildRichText()),this}set supScale(e){this.setSupScale(e)}get supScale(){return this.getSupScale()}getSupScale(){return this._supScale}setSupXSpacing(e){return this._supXSpacing!==e&&(this._supXSpacing=e,this.rebuildRichText()),this}set supXSpacing(e){this.setSupXSpacing(e)}get supXSpacing(){return this.getSupXSpacing()}getSupXSpacing(){return this._supXSpacing}setSupYOffset(e){return this._supYOffset!==e&&(this._supYOffset=e,this.rebuildRichText()),this}set supYOffset(e){this.setSupYOffset(e)}get supYOffset(){return this.getSupYOffset()}getSupYOffset(){return this._supYOffset}setCapHeightScale(e){return this._capHeightScale!==e&&(this._capHeightScale=e,this.rebuildRichText()),this}set capHeightScale(e){this.setCapHeightScale(e)}get capHeightScale(){return this.getCapHeightScale()}getCapHeightScale(){return this._capHeightScale}setUnderlineLineWidth(e){return this._underlineLineWidth!==e&&(this._underlineLineWidth=e,this.rebuildRichText()),this}set underlineLineWidth(e){this.setUnderlineLineWidth(e)}get underlineLineWidth(){return this.getUnderlineLineWidth()}getUnderlineLineWidth(){return this._underlineLineWidth}setUnderlineHeightScale(e){return this._underlineHeightScale!==e&&(this._underlineHeightScale=e,this.rebuildRichText()),this}set underlineHeightScale(e){this.setUnderlineHeightScale(e)}get underlineHeightScale(){return this.getUnderlineHeightScale()}getUnderlineHeightScale(){return this._underlineHeightScale}setStrikethroughLineWidth(e){return this._strikethroughLineWidth!==e&&(this._strikethroughLineWidth=e,this.rebuildRichText()),this}set strikethroughLineWidth(e){this.setStrikethroughLineWidth(e)}get strikethroughLineWidth(){return this.getStrikethroughLineWidth()}getStrikethroughLineWidth(){return this._strikethroughLineWidth}setStrikethroughHeightScale(e){return this._strikethroughHeightScale!==e&&(this._strikethroughHeightScale=e,this.rebuildRichText()),this}set strikethroughHeightScale(e){this.setStrikethroughHeightScale(e)}get strikethroughHeightScale(){return this.getStrikethroughHeightScale()}getStrikethroughHeightScale(){return this._strikethroughHeightScale}setLinkFill(e){return this._linkFill!==e&&(this._linkFill=e,this.rebuildRichText()),this}set linkFill(e){this.setLinkFill(e)}get linkFill(){return this.getLinkFill()}getLinkFill(){return this._linkFill}setLinkEventsHandled(e){return this._linkEventsHandled!==e&&(this._linkEventsHandled=e,this.rebuildRichText()),this}set linkEventsHandled(e){this.setLinkEventsHandled(e)}get linkEventsHandled(){return this.getLinkEventsHandled()}getLinkEventsHandled(){return this._linkEventsHandled}setLinks(e){return this._links!==e&&(this._links=e,this.rebuildRichText()),this}getLinks(){return this._links}set links(e){this.setLinks(e)}get links(){return this.getLinks()}setNodes(e){return this._nodes!==e&&(this._nodes=e,this.rebuildRichText()),this}getNodes(){return this._nodes}set nodes(e){this.setNodes(e)}get nodes(){return this.getNodes()}setTags(e){return this._tags!==e&&(this._tags=e,this.rebuildRichText()),this}getTags(){return this._tags}set tags(e){this.setTags(e)}get tags(){return this.getTags()}setReplaceNewlines(e){return this._replaceNewlines!==e&&(this._replaceNewlines=e,this.rebuildRichText()),this}set replaceNewlines(e){this.setReplaceNewlines(e)}get replaceNewlines(){return this.getReplaceNewlines()}getReplaceNewlines(){return this._replaceNewlines}setAlign(e){return this._align!==e&&(this._align=e,this.rebuildRichText()),this}set align(e){this.setAlign(e)}get align(){return this.getAlign()}getAlign(){return this._align}setLeading(e){return this._leading!==e&&(this._leading=e,this.rebuildRichText()),this}set leading(e){this.setLeading(e)}get leading(){return this.getLeading()}getLeading(){return this._leading}setLineWrap(e){return this._lineWrap!==e&&(this._lineWrap=e,this.rebuildRichText()),this}set lineWrap(e){this.setLineWrap(e)}get lineWrap(){return this.getLineWrap()}getLineWrap(){return this._lineWrap}mutate(e){return super.mutate(e)}static stringWithFont(e,t){return`${e}`}static himalayaElementToString(t){if(Yy(t))return Ky(t.content);if(Hy(t)){const i=t.children.map(t=>e.himalayaElementToString(t)).join(""),n=Uy.himalayaGetAttribute("dir",t);return"ltr"===n||"rtl"===n?Ge.A.wrapDirection(i,n):i}return""}static himalayaElementToAccessibleString(t){if(Yy(t))return Ky(t.content);if(Hy(t)){let i=t.children.map(t=>e.himalayaElementToAccessibleString(t)).join("");const n=Uy.himalayaGetAttribute("dir",t);return"ltr"!==n&&"rtl"!==n||(i=Ge.A.wrapDirection(i,n)),_.includes(rf,t.tagName)?`<${t.tagName}>${i}`:i}return""}static getAccessibleStringProperty(t){return new ah([t],t=>{const i=tf.parse(t);let n="";return i.forEach(t=>{n+=e.himalayaElementToAccessibleString(t)}),n})}constructor(i,n){const s=(0,t.Ay)()({fill:"#000000",tandemNameSuffix:"Text",phetioType:e.RichTextIO,phetioVisiblePropertyInstrumented:!1},n);"string"==typeof i||"number"==typeof i?s.string=i:s.stringProperty=i,super(),this._font=sf,this._boundsMethod="hybrid",this._fill="#000000",this._stroke=null,this._lineWidth=1,this._subScale=.75,this._subXSpacing=0,this._subYOffset=0,this._supScale=.75,this._supXSpacing=0,this._supYOffset=0,this._capHeightScale=.75,this._underlineLineWidth=1,this._underlineHeightScale=.15,this._strikethroughLineWidth=1,this._strikethroughHeightScale=.3,this._linkFill="rgb(27,0,241)",this._linkEventsHandled=!1,this._links={},this._nodes={},this._tags={},this._replaceNewlines=!1,this._align="left",this._leading=0,this._lineWrap=null,this._linkItems=[],this._hasAddedLeafToLine=!1,this.needPendingMinimumWidth=!1,this.pendingMinimumWidth=0,this._stringProperty=new at("",!0,this.onStringPropertyChange.bind(this)),this.lineContainer=new Cr({}),this.addChild(this.lineContainer),this.rebuildRichText(),this.localPreferredWidthProperty.lazyLink(()=>this.rebuildRichText()),this.mutate(s)}};df.STRING_PROPERTY_TANDEM_NAME=Bc.STRING_PROPERTY_TANDEM_NAME,df.prototype._mutatorKeys=nf.concat(Cr.prototype._mutatorKeys),it.A.register("RichText",df),df.RichTextIO=new f.A("RichTextIO",{valueType:df,supertype:Cr.NodeIO,documentation:"The PhET-iO Type for the scenery RichText node"});let uf=class extends Aa{constructor(e,t,i,n,s,r){let o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:Pt.IDENTITY;const a=document.createElement("img");new Cr({scale:t,children:[e]}).toCanvas((function(e,t,i,n,s){a.src=e.toDataURL()}),-i*t,-n*t,s*t,r*t),super(a),this.setTransformMatrix(o.timesMatrix(Pt.scaling(1/t)))}};it.A.register("NodePattern",uf);let pf=class extends Iy{reposition(e,t,i,n,s,r){const o=n&&this.isSizable(e)?t:this.getMinimumSize(e);this.attemptPreferredSize(e,o),r===ty.ORIGIN?this.positionOrigin(e,i+s):this.positionStart(e,i+(t-this.getCellBounds()[e.size])*r.padRatio);const a=this.getCellBounds();return this.lastAvailableBounds[e.minCoordinate]=i,this.lastAvailableBounds[e.maxCoordinate]=i+t,this.lastUsedBounds.set(a),a}get effectiveLeftMargin(){return null!==this._leftMargin?this._leftMargin:this._marginConstraint._leftMargin}get effectiveRightMargin(){return null!==this._rightMargin?this._rightMargin:this._marginConstraint._rightMargin}get effectiveTopMargin(){return null!==this._topMargin?this._topMargin:this._marginConstraint._topMargin}get effectiveBottomMargin(){return null!==this._bottomMargin?this._bottomMargin:this._marginConstraint._bottomMargin}getEffectiveMinMargin(e){return e===Ee.HORIZONTAL?this.effectiveLeftMargin:this.effectiveTopMargin}getEffectiveMaxMargin(e){return e===Ee.HORIZONTAL?this.effectiveRightMargin:this.effectiveBottomMargin}get effectiveMinContentWidth(){return null!==this._minContentWidth?this._minContentWidth:this._marginConstraint._minContentWidth}get effectiveMinContentHeight(){return null!==this._minContentHeight?this._minContentHeight:this._marginConstraint._minContentHeight}getEffectiveMinContent(e){return e===Ee.HORIZONTAL?this.effectiveMinContentWidth:this.effectiveMinContentHeight}get effectiveMaxContentWidth(){return null!==this._maxContentWidth?this._maxContentWidth:this._marginConstraint._maxContentWidth}get effectiveMaxContentHeight(){return null!==this._maxContentHeight?this._maxContentHeight:this._marginConstraint._maxContentHeight}getEffectiveMaxContent(e){return e===Ee.HORIZONTAL?this.effectiveMaxContentWidth:this.effectiveMaxContentHeight}getMinimumSize(e){return this.getEffectiveMinMargin(e)+Math.max(this.proxy.getMinimum(e),this.getEffectiveMinContent(e)||0)+this.getEffectiveMaxMargin(e)}getMaximumSize(e){return this.getEffectiveMinMargin(e)+(this.getEffectiveMaxContent(e)||Number.POSITIVE_INFINITY)+this.getEffectiveMaxMargin(e)}attemptPreferredSize(e,t){if(this.proxy[e.sizable]){const i=this.getMinimumSize(e),n=this.getMaximumSize(e);let s=(t=(0,Ze.q)(t,i,n))-this.getEffectiveMinMargin(e)-this.getEffectiveMaxMargin(e);const r=this.proxy.getMax(e);null!==r&&(s=Math.min(r,s)),this._marginConstraint.setProxyPreferredSize(e,this.proxy,s),this.preferredSizeSet.set(e,!0)}}unsetPreferredSize(e){this.proxy[e.sizable]&&this._marginConstraint.setProxyPreferredSize(e,this.proxy,null)}positionStart(e,t){const i=this.getEffectiveMinMargin(e)+t;this._marginConstraint.setProxyMinSide(e,this.proxy,i)}positionOrigin(e,t){this._marginConstraint.setProxyOrigin(e,this.proxy,t)}getOriginBounds(){return this.getCellBounds().shiftedXY(-this.proxy.x,-this.proxy.y)}getCellBounds(){return this.proxy.bounds.withOffsets(this.effectiveLeftMargin,this.effectiveTopMargin,this.effectiveRightMargin,this.effectiveBottomMargin)}dispose(){Ee.enumeration.values.forEach(e=>{this.preferredSizeSet.get(e)&&this.unsetPreferredSize(e)}),super.dispose()}static createHelperNode(e,t,i){const n=new Cr,s=Hi.union(e.map(e=>Hi.bounds(e.lastAvailableBounds))),r=Hi.union(e.map(e=>Hi.bounds(e.lastUsedBounds))),o=Hi.union(e.map(e=>Hi.bounds(e.proxy.bounds))),a=Hi.bounds(t).shapeDifference(s),l=s.shapeDifference(r),h=r.shapeDifference(o),c=(e,t,i)=>{const n=new Bc(e,{font:new mc({size:6,family:"monospace"}),fill:t}),s=fa.bounds(n.bounds,{fill:i,children:[n]});return new uf(s,4,Math.floor(s.left),Math.ceil(s.top+1),Math.floor(s.width),Math.floor(s.height-2),Pt.rotation2(-Math.PI/4))};return n.addChild(new ua(a,{fill:c("spacing","#000","#fff"),opacity:.6})),n.addChild(new ua(l,{fill:c("empty","#aaa","#000"),opacity:.6})),n.addChild(new ua(h,{fill:c("margin","#600","#f00"),opacity:.6})),n.addChild(fa.bounds(t,{stroke:"white",lineDash:[2,2],lineDashOffset:2,lineWidth:.4})),n.addChild(fa.bounds(t,{stroke:"black",lineDash:[2,2],lineWidth:.4})),e.forEach(e=>{n.addChild(fa.bounds(e.getCellBounds(),{stroke:"rgba(0,255,0,1)",lineWidth:.4}))}),e.forEach(e=>{n.addChild(fa.bounds(e.proxy.bounds,{stroke:"rgba(255,0,0,1)",lineWidth:.4}))}),e.forEach(e=>{const t=e.getCellBounds(),s=new kr({tandem:A.A.OPT_OUT});n.addChild(fa.bounds(t,{inputListeners:[s]}));let r=i(e);e.effectiveLeftMargin&&(r+=`leftMargin: ${e.effectiveLeftMargin}\n`),e.effectiveRightMargin&&(r+=`rightMargin: ${e.effectiveRightMargin}\n`),e.effectiveTopMargin&&(r+=`topMargin: ${e.effectiveTopMargin}\n`),e.effectiveBottomMargin&&(r+=`bottomMargin: ${e.effectiveBottomMargin}\n`),e.effectiveMinContentWidth&&(r+=`minContentWidth: ${e.effectiveMinContentWidth}\n`),e.effectiveMinContentHeight&&(r+=`minContentHeight: ${e.effectiveMinContentHeight}\n`),e.effectiveMaxContentWidth&&(r+=`maxContentWidth: ${e.effectiveMaxContentWidth}\n`),e.effectiveMaxContentHeight&&(r+=`maxContentHeight: ${e.effectiveMaxContentHeight}\n`),r+=`layoutOptions: ${JSON.stringify(e.node.layoutOptions,null,2).replace(/ /g," ")}\n`;const o=new df(r.trim().replace(/\n/g,"
"),{font:new mc({size:12})}),a=fa.bounds(o.bounds.dilated(3),{fill:"rgba(255,255,255,0.8)",children:[o],leftTop:t.leftTop});n.addChild(a),s.isOverProperty.link(e=>{a.visible=e})}),n}constructor(e,t,i){super(e,t,i),this.preferredSizeSet=new Sy(!1,!1),this.lastAvailableBounds=Ie.NOTHING.copy(),this.lastUsedBounds=Ie.NOTHING.copy(),this._marginConstraint=e}};it.A.register("MarginLayoutCell",pf);let mf=class extends(hy(pf)){get effectiveAlign(){return null!==this._align?this._align:this.flowConstraint._align}get effectiveCellAlign(){return null!==this._cellAlign?this._cellAlign:this.flowConstraint._cellAlign}get effectiveStretch(){return null!==this._stretch?this._stretch:this.flowConstraint._stretch}get effectiveGrow(){return null!==this._grow?this._grow:this.flowConstraint._grow}onLayoutOptionsChange(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.node.layoutOptions&&this.setOptions(this.node.layoutOptions),super.onLayoutOptionsChange(),e||this.flowConstraint.updateLayoutAutomatically()}setOptions(e){const i=(0,t.Ay)()({isSeparator:!1},e);this._isSeparator=i.isSeparator,this.setConfigToInherit(i),this.mutateConfigurable(i)}constructor(e,t,i){super(e,t,i),this.size=0,this._isSeparator=!1,this.flowConstraint=e,this.orientation=e.orientation,this.onLayoutOptionsChange(!0)}};it.A.register("FlowCell",mf);const gf=["resize","layoutOrigin"];let Af=class extends(_o(Cr)){linkLayoutBounds(){this._constraint.layoutBoundsProperty.link(e=>{this.localBounds=e})}setExcludeInvisibleChildrenFromBounds(e){super.setExcludeInvisibleChildrenFromBounds(e),this._constraint.excludeInvisible=e}setChildren(e){if(this.constraint.isLocked)return super.setChildren(e);const t=this.getChildren();return this.constraint.lock(),super.setChildren(e),this.constraint.unlock(),_.isEqual(t,e)||this.constraint.updateLayoutAutomatically(),this}updateLayout(){this._constraint.updateLayout()}get resize(){return this._constraint.enabled}set resize(e){this._constraint.enabled=e}get layoutOrigin(){return this.layoutOriginProperty.value}set layoutOrigin(e){this.layoutOriginProperty.value=e}get constraint(){return this._constraint}dispose(){this._constraint.dispose(),super.dispose()}constructor(e){super(e),this.layoutOriginProperty=new ch(Te.A.ZERO)}};it.A.register("LayoutNode",Af);const yf={DISABLED_OPACITY:.45,DEFAULT_COLOR_PROFILE:"default",PROJECTOR_COLOR_PROFILE:"projector"};it.A.register("SceneryConstants",yf);const ff=yf,bf=[...gf,...Py.filter(e=>"excludeInvisible"!==e),"forward","forwardProperty"],Pf={orientation:"horizontal",spacing:0,align:"center",stretch:!1,forward:!0};let Vf=class extends Af{onFlowBoxChildInserted(e,t){const i=new mf(this._constraint,e,this._constraint.createLayoutProxy(e));if(this._cellMap.set(e,i),this.forward)this._constraint.insertCell(t,i);else{const e=this._constraint.getCellQuantity()-t;this._constraint.insertCell(e,i)}}onFlowBoxChildRemoved(e){const t=this._cellMap.get(e);this._cellMap.delete(e),this._constraint.removeCell(t),t.dispose()}onFlowBoxChildrenReordered(e,t){const i=this._children.slice(e,t+1);this.forward||i.reverse(),this._constraint.reorderCells(i.map(e=>this._cellMap.get(e)),e,t)}onFlowBoxChildrenChanged(){this._constraint.updateLayoutAutomatically()}onFlowBoxForwardReverseChanged(){this.onFlowBoxChildrenReordered(0,this._children.length-1),this.onFlowBoxChildrenChanged()}getCell(e){const t=this._cellMap.get(e);return t}get orientation(){return this._constraint.orientation}set orientation(e){this._constraint.orientation=e}get spacing(){return this._constraint.spacing}set spacing(e){this._constraint.spacing=e}get lineSpacing(){return this._constraint.lineSpacing}set lineSpacing(e){this._constraint.lineSpacing=e}get justify(){return this._constraint.justify}set justify(e){this._constraint.justify=e}get justifyLines(){return this._constraint.justifyLines}set justifyLines(e){this._constraint.justifyLines=e}get wrap(){return this._constraint.wrap}set wrap(e){this._constraint.wrap=e}get align(){return this._constraint.align}set align(e){this._constraint.align=e}get stretch(){return this._constraint.stretch}set stretch(e){this._constraint.stretch=e}get grow(){return this._constraint.grow}set grow(e){this._constraint.grow=e}get margin(){return this._constraint.margin}set margin(e){this._constraint.margin=e}get xMargin(){return this._constraint.xMargin}set xMargin(e){this._constraint.xMargin=e}get yMargin(){return this._constraint.yMargin}set yMargin(e){this._constraint.yMargin=e}get leftMargin(){return this._constraint.leftMargin}set leftMargin(e){this._constraint.leftMargin=e}get rightMargin(){return this._constraint.rightMargin}set rightMargin(e){this._constraint.rightMargin=e}get topMargin(){return this._constraint.topMargin}set topMargin(e){this._constraint.topMargin=e}get bottomMargin(){return this._constraint.bottomMargin}set bottomMargin(e){this._constraint.bottomMargin=e}get minContentWidth(){return this._constraint.minContentWidth}set minContentWidth(e){this._constraint.minContentWidth=e}get minContentHeight(){return this._constraint.minContentHeight}set minContentHeight(e){this._constraint.minContentHeight=e}get maxContentWidth(){return this._constraint.maxContentWidth}set maxContentWidth(e){this._constraint.maxContentWidth=e}get maxContentHeight(){return this._constraint.maxContentHeight}set maxContentHeight(e){this._constraint.maxContentHeight=e}setForwardProperty(e){return this._forwardProperty.setTargetProperty(e,this,null)}set forwardProperty(e){this.setForwardProperty(e)}get forwardProperty(){return this.getForwardProperty()}getForwardProperty(){return this._forwardProperty}setForward(e){return this.forwardProperty.set(e),this}set forward(e){this.setForward(e)}get forward(){return this.isForward()}isForward(){return this.forwardProperty.value}dispose(){this._constraint.lock(),this.childInsertedEmitter.removeListener(this.onChildInserted),this.childRemovedEmitter.removeListener(this.onChildRemoved),this.childrenReorderedEmitter.removeListener(this.onChildrenReordered),this.childrenChangedEmitter.removeListener(this.onChildrenChanged),this._forwardProperty.dispose();for(const e of this._cellMap.values())e.dispose();super.dispose()}setOrientation(e){return this.orientation=e,this}getOrientation(){return this.orientation}setSpacing(e){return this.spacing=e,this}getSpacing(){return this.spacing}setAlign(e){return this.align=e,this}getAlign(){return this.align}setResize(e){return this.resize=e,this}isResize(){return this.resize}getHelperNode(){return pf.createHelperNode(this.constraint.displayedCells,this.constraint.layoutBoundsProperty.value,e=>{let t="";const i=Ee.fromLayoutOrientation(e.orientation);return t+=`align: ${ty.internalToAlign(i,e.effectiveAlign)}\n`,t+=`stretch: ${e.effectiveStretch}\n`,t+=`grow: ${e.effectiveGrow}\n`,t})}mutate(e){return e?super.mutate(e):this}constructor(e){const i=(0,t.Ay)()({excludeInvisibleChildrenFromBounds:!0,resize:!0,disabledOpacity:ff.DISABLED_OPACITY,forward:Pf.forward,forwardProperty:null},e);super(),this._cellMap=new Map,this._constraint=new Vy(this,{preferredWidthProperty:this.localPreferredWidthProperty,preferredHeightProperty:this.localPreferredHeightProperty,minimumWidthProperty:this.localMinimumWidthProperty,minimumHeightProperty:this.localMinimumHeightProperty,layoutOriginProperty:this.layoutOriginProperty,orientation:Pf.orientation,spacing:Pf.spacing,align:Pf.align,stretch:Pf.stretch,excludeInvisible:!1}),this._forwardProperty=new at(Pf.forward,!1,this.onFlowBoxForwardReverseChanged.bind(this)),this.onChildInserted=this.onFlowBoxChildInserted.bind(this),this.onChildRemoved=this.onFlowBoxChildRemoved.bind(this),this.onChildrenReordered=this.onFlowBoxChildrenReordered.bind(this),this.onChildrenChanged=this.onFlowBoxChildrenChanged.bind(this),this.childInsertedEmitter.addListener(this.onChildInserted),this.childRemovedEmitter.addListener(this.onChildRemoved),this.childrenReorderedEmitter.addListener(this.onChildrenReordered),this.childrenChangedEmitter.addListener(this.onChildrenChanged);const n=_.omit(i,Vr),s=_.pick(i,Vr);this._constraint.lock(),this.mutate(n),this._constraint.unlock(),this._constraint.updateLayout(),this.mutate(s),this.linkLayoutBounds()}};Vf.DEFAULT_FLOW_BOX_OPTIONS=Pf,Vf.prototype._mutatorKeys=[...Ko,...bf,...Cr.prototype._mutatorKeys],it.A.register("FlowBox",Vf);const vf=["xAlign","yAlign","stretch","xStretch","yStretch","grow","xGrow","yGrow"].concat(sy),wf=Gr(e=>class extends(oy(e)){mutateConfigurable(e){super.mutateConfigurable(e),(0,l.A)(e,["stretch"],["xStretch","yStretch"]),(0,l.A)(e,["grow"],["xGrow","yGrow"]),ZA(this,vf,e)}setConfigToBaseDefault(){this._xAlign=ty.CENTER,this._yAlign=ty.CENTER,this._xStretch=!1,this._yStretch=!1,this._xGrow=0,this._yGrow=0,super.setConfigToBaseDefault()}setConfigToInherit(e){e&&void 0!==e.xAlign||(this._xAlign=null),e&&void 0!==e.yAlign||(this._yAlign=null),(!e||void 0===e.stretch&&void 0===e.xStretch)&&(this._xStretch=null),(!e||void 0===e.stretch&&void 0===e.yStretch)&&(this._yStretch=null),(!e||void 0===e.grow&&void 0===e.xGrow)&&(this._xGrow=null),(!e||void 0===e.grow&&void 0===e.yGrow)&&(this._yGrow=null),super.setConfigToInherit(e)}get xAlign(){const e=null===this._xAlign?null:this._xAlign.horizontal;return e}set xAlign(e){const t=ty.horizontalAlignToInternal(e);this._xAlign!==t&&(this._xAlign=t,this.changedEmitter.emit())}get yAlign(){const e=null===this._yAlign?null:this._yAlign.vertical;return e}set yAlign(e){const t=ty.verticalAlignToInternal(e);this._yAlign!==t&&(this._yAlign=t,this.changedEmitter.emit())}get grow(){return this._xGrow}set grow(e){this._xGrow===e&&this._yGrow===e||(this._xGrow=e,this._yGrow=e,this.changedEmitter.emit())}get xGrow(){return this._xGrow}set xGrow(e){this._xGrow!==e&&(this._xGrow=e,this.changedEmitter.emit())}get yGrow(){return this._yGrow}set yGrow(e){this._yGrow!==e&&(this._yGrow=e,this.changedEmitter.emit())}get stretch(){return this._xStretch}set stretch(e){this._xStretch===e&&this._yStretch===e||(this._xStretch=e,this._yStretch=e,this.changedEmitter.emit())}get xStretch(){return this._xStretch}set xStretch(e){this._xStretch!==e&&(this._xStretch=e,this.changedEmitter.emit())}get yStretch(){return this._yStretch}set yStretch(e){this._yStretch!==e&&(this._yStretch=e,this.changedEmitter.emit())}constructor(){super(...arguments),this._xAlign=null,this._yAlign=null,this._xStretch=null,this._yStretch=null,this._xGrow=null,this._yGrow=null}});it.A.register("GridConfigurable",wf);const Ef=wf;let Sf=class e extends cy{initialize(e,t,i){return this.index=e,this.cells=t,this.grow=i,this.initializeLayoutLine(),this}freeToPool(){e.pool.freeToPool(this)}clean(){this.cells.length=0,this.freeToPool()}constructor(e,t,i){super(),this.initialize(e,t,i)}};Sf.pool=new Se.A(Sf,{defaultArguments:[0,[],0]}),it.A.register("GridLine",Sf);const Tf=[...vf,"excludeInvisible","spacing","xSpacing","ySpacing"];let Cf=class e extends(Ef(by)){layout(){super.layout();const e=this.filterLayoutCells([...this.cells]);if(this.displayedCells=e,!e.length)return this.layoutBoundsProperty.value=Ie.NOTHING,this.minimumWidthProperty.value=null,this.minimumHeightProperty.value=null,void this.displayedLines.forEach(e=>e.clear());const t=new Sy(0,0),i=new Sy(this.preferredWidthProperty.value,this.preferredHeightProperty.value),n=new Ie(0,0,0,0);[Ee.HORIZONTAL,Ee.VERTICAL].forEach(s=>{const r=this._spacing.get(s),o=this.displayedLines.get(s);o.forEach(e=>e.clean()),o.clear();const a=_.sortedUniq(_.sortBy(_.flatten(e.map(e=>e.getIndices(s))))).map(t=>{const i=_.filter(e,e=>e.containsIndex(s,t)),n=Math.max(...i.map(e=>e.getEffectiveGrow(s))),r=Sf.pool.create(t,i,n);return o.set(t,r),r}),l=new Map(e.map(e=>[e,e.getIndices(s).map(e=>{const t=o.get(e);return t})])),h=e=>l.get(e),c=a.slice(0,-1).map(e=>"number"==typeof r?r:r[e.index]);e.forEach(e=>{if(1===e.size.get(s)){const t=o.get(e.position.get(s));if(t.min=Math.max(t.min,e.getMinimumSize(s)),t.max=Math.min(t.max,e.getMaximumSize(s)),e.getEffectiveAlign(s)===ty.ORIGIN){const i=e.getOriginBounds();t.minOrigin=Math.min(i[s.minCoordinate],t.minOrigin),t.maxOrigin=Math.max(i[s.maxCoordinate],t.maxOrigin)}}});{const t=1e-9,i=e=>_.sum(h(e).map(e=>e.min)),n=e=>i(e)(!isFinite(e.max)||e.mine.size.get(s)>1).filter(n);for(;a.length;){const l=e=>{const n=h(e).filter(o);if(!n.length)return null;const r=i(e),a=e.getMinimumSize(s)-r;if(ae.grow));return{cell:e,growingLines:n.slice(),space:a,weights:new Map(n.map(e=>{let t;return t=l>0?a*(e.grow/l):a/n.length,[e,t]}))}};let c=[];for(const e of a){const t=l(e);t&&c.push(t)}const d=()=>{c=c.map(e=>e.growingLines.some(e=>r.has(e))?l(e.cell):e).filter(e=>null!==e)};let u=[],p=!0;for(;p&&c.length;){p=!1,u=[];for(const n of e){const e=n.getMaximumSize(s);if(isFinite(e)){const s=h(n).filter(e=>c.some(t=>t.growingLines.includes(e)));if(s.length){const o=e-i(n);if(oe.growingLines)),t=new Map(e.map(e=>{let t=0;for(const i of c)i.growingLines.includes(e)&&(t+=i.weights.get(e));return[e,t]}));let i=Number.POSITIVE_INFINITY;for(const n of[...c,...u]){const e=_.sum(n.growingLines.map(e=>t.get(e)));i=Math.min(i,n.space/e)}for(const n of e){const e=t.get(n);n.min+=e*i}a=a.filter(n)}}}a.forEach(e=>{e.hasOrigin()?e.size=Math.max(e.min,e.maxOrigin-e.minOrigin):e.size=e.min});const d=_.sum(a.map(e=>e.size))+_.sum(c);t.set(s,d);const u=Math.max(d,i.get(s)||0);let p,m=u-d;for(;m>1e-7&&(p=a.filter(e=>e.grow>0&&e.sizee.grow)),t=Math.min(Math.min(...p.map(e=>(e.max-e.size)/e.grow)),m/e);p.forEach(e=>{e.size+=t*e.grow}),m-=t*e}const g=(a[0].hasOrigin()?a[0].minOrigin:0)+this.layoutOriginProperty.value[s.coordinate];n[s.minCoordinate]=g,n[s.maxCoordinate]=g+u,a.forEach((e,t)=>{const i=_.sum(a.slice(0,t).map(e=>e.size)),n=_.sum(c.slice(0,t));e.position=g+i+n}),e.forEach(e=>{const t=e.position.get(s),i=e.size.get(s),r=t+i-1,l=h(e),d=o.get(t);let u=0;t!==r&&a.slice(0,-1).forEach((e,i)=>{e.index>=t&&e.indexe.size))+u,m=d.position,g=e.reposition(s,p,m,e.getEffectiveStretch(s),-d.minOrigin,e.getEffectiveAlign(s));n[s.minCoordinate]=Math.min(n[s.minCoordinate],g[s.minCoordinate]),n[s.maxCoordinate]=Math.max(n[s.maxCoordinate],g[s.maxCoordinate])})}),this.layoutBoundsProperty.value=n,this.minimumWidthProperty.value=t.horizontal,this.minimumHeightProperty.value=t.vertical,this.finishedLayoutEmitter.emit()}get spacing(){return this.xSpacing}set spacing(e){this._spacing.get(Ee.HORIZONTAL)===e&&this._spacing.get(Ee.VERTICAL)===e||(this._spacing.set(Ee.HORIZONTAL,e),this._spacing.set(Ee.VERTICAL,e),this.updateLayoutAutomatically())}get xSpacing(){return this._spacing.get(Ee.HORIZONTAL)}set xSpacing(e){this._spacing.get(Ee.HORIZONTAL)!==e&&(this._spacing.set(Ee.HORIZONTAL,e),this.updateLayoutAutomatically())}get ySpacing(){return this._spacing.get(Ee.VERTICAL)}set ySpacing(e){this._spacing.get(Ee.VERTICAL)!==e&&(this._spacing.set(Ee.VERTICAL,e),this.updateLayoutAutomatically())}addCell(e){this.cells.add(e),this.addNode(e.node),e.changedEmitter.addListener(this._updateLayoutListener),this.updateLayoutAutomatically()}removeCell(e){this.cells.delete(e),this.removeNode(e.node),e.changedEmitter.removeListener(this._updateLayoutListener),this.updateLayoutAutomatically()}dispose(){this.lock(),[...this.cells].forEach(e=>this.removeCell(e)),this.displayedLines.forEach(e=>e.clear()),this.displayedCells=[],super.dispose(),this.unlock()}getIndices(e){const t=[];return this.cells.forEach(i=>{t.push(...i.getIndices(e))}),_.sortedUniq(_.sortBy(t))}getCell(e,t){return _.find([...this.cells],i=>i.containsRow(e)&&i.containsColumn(t))||null}getCellFromNode(e){return _.find([...this.cells],t=>t.node===e)||null}getCells(e,t){return _.filter([...this.cells],i=>i.containsIndex(e,t))}static create(t,i){return new e(t,i)}constructor(e,t){super(e,t),this.cells=new Set,this.displayedCells=[],this.displayedLines=new Sy(new Map,new Map),this._spacing=new Sy(0,0),this.setConfigToBaseDefault(),this.mutateConfigurable(t),ZA(this,Tf,t),this.changedEmitter.addListener(this._updateLayoutListener)}};it.A.register("GridConstraint",Cf);let If=class extends(Ef(pf)){get effectiveXAlign(){return null!==this._xAlign?this._xAlign:this.gridConstraint._xAlign}get effectiveYAlign(){return null!==this._yAlign?this._yAlign:this.gridConstraint._yAlign}getEffectiveAlign(e){return e===Ee.HORIZONTAL?this.effectiveXAlign:this.effectiveYAlign}get effectiveXGrow(){return null!==this._xGrow?this._xGrow:this.gridConstraint._xGrow}get effectiveYGrow(){return null!==this._yGrow?this._yGrow:this.gridConstraint._yGrow}getEffectiveGrow(e){return e===Ee.HORIZONTAL?this.effectiveXGrow:this.effectiveYGrow}get effectiveXStretch(){return null!==this._xStretch?this._xStretch:this.gridConstraint._xStretch}get effectiveYStretch(){return null!==this._yStretch?this._yStretch:this.gridConstraint._yStretch}getEffectiveStretch(e){return e===Ee.HORIZONTAL?this.effectiveXStretch:this.effectiveYStretch}onLayoutOptionsChange(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.setOptions(this.node.layoutOptions),super.onLayoutOptionsChange(),e||this.gridConstraint.updateLayoutAutomatically()}setOptions(e){const i=(0,t.Ay)()({column:0,row:0,horizontalSpan:1,verticalSpan:1},e);this.setConfigToInherit(i),this.position=new Sy(i.column,i.row),this.size=new Sy(i.horizontalSpan,i.verticalSpan),this.mutateConfigurable(i)}containsIndex(e,t){const i=this.position.get(e),n=this.size.get(e);return t>=i&&t"excludeInvisible"!==e),"rows","columns","autoRows","autoColumns"];let Df=class extends Af{setLines(e,t){const i=[];for(let n=0;ne.node)}getNodesInColumn(e){return this.constraint.getCells(Ee.HORIZONTAL,e).map(e=>e.node)}addRow(e){return this.rows=[...this.rows,e],this}addColumn(e){return this.columns=[...this.columns,e],this}insertRow(e,t){return this.rows=[...this.rows.slice(0,e),t,...this.rows.slice(e)],this}insertColumn(e,t){return this.columns=[...this.columns.slice(0,e),t,...this.columns.slice(e)],this}removeRow(e){return this.rows=[...this.rows.slice(0,e),...this.rows.slice(e+1)],this}removeColumn(e){return this.columns=[...this.columns.slice(0,e),...this.columns.slice(e+1)],this}set autoRows(e){this._autoRows!==e&&(this._autoRows=e,this.updateAutoRows())}get autoRows(){return this._autoRows}set autoColumns(e){this._autoColumns!==e&&(this._autoColumns=e,this.updateAutoColumns())}get autoColumns(){return this._autoColumns}updateAutoLines(e,t){if(null!==t&&0===this._autoLockCount){let i=0;this.constraint.lock(),this.children.filter(e=>e.bounds.isValid()&&(!this._constraint.excludeInvisible||e.visible)).forEach((n,s)=>{const r=s%t,o=Math.floor(s/t);n.layoutOptions&&n.layoutOptions[e.line]===r&&n.layoutOptions[e.opposite.line]===o&&1===n.layoutOptions.horizontalSpan&&1===n.layoutOptions.verticalSpan||(i++,n.mutateLayoutOptions({[e.line]:s%t,[e.opposite.line]:Math.floor(s/t),horizontalSpan:1,verticalSpan:1}))}),this.constraint.unlock(),i>0&&this.constraint.updateLayoutAutomatically()}}updateAutoRows(){this.updateAutoLines(Ee.VERTICAL,this.autoRows)}updateAutoColumns(){this.updateAutoLines(Ee.HORIZONTAL,this.autoColumns)}updateAllAutoLines(){this.updateAutoRows(),this.updateAutoColumns()}setChildren(e){const t=this.getChildren();return this._autoLockCount++,super.setChildren(e),this._autoLockCount--,_.isEqual(t,e)||this.updateAllAutoLines(),this}onGridBoxChildInserted(e,t){e.visibleProperty.lazyLink(this.onChildVisibilityToggled);const i=new If(this._constraint,e,this._constraint.createLayoutProxy(e));this._cellMap.set(e,i),this._constraint.addCell(i),this.updateAllAutoLines()}onGridBoxChildRemoved(e){const t=this._cellMap.get(e);this._cellMap.delete(e),this._constraint.removeCell(t),t.dispose(),this.updateAllAutoLines(),e.visibleProperty.unlink(this.onChildVisibilityToggled)}mutate(e){return(0,l.A)(e,["rows"],["columns"],["children","autoRows","autoColumns"]),super.mutate(e)}get spacing(){return this._constraint.spacing}set spacing(e){this._constraint.spacing=e}get xSpacing(){return this._constraint.xSpacing}set xSpacing(e){this._constraint.xSpacing=e}get ySpacing(){return this._constraint.ySpacing}set ySpacing(e){this._constraint.ySpacing=e}get xAlign(){return this._constraint.xAlign}set xAlign(e){this._constraint.xAlign=e}get yAlign(){return this._constraint.yAlign}set yAlign(e){this._constraint.yAlign=e}get grow(){return this._constraint.grow}set grow(e){this._constraint.grow=e}get xGrow(){return this._constraint.xGrow}set xGrow(e){this._constraint.xGrow=e}get yGrow(){return this._constraint.yGrow}set yGrow(e){this._constraint.yGrow=e}get stretch(){return this._constraint.stretch}set stretch(e){this._constraint.stretch=e}get xStretch(){return this._constraint.xStretch}set xStretch(e){this._constraint.xStretch=e}get yStretch(){return this._constraint.yStretch}set yStretch(e){this._constraint.yStretch=e}get margin(){return this._constraint.margin}set margin(e){this._constraint.margin=e}get xMargin(){return this._constraint.xMargin}set xMargin(e){this._constraint.xMargin=e}get yMargin(){return this._constraint.yMargin}set yMargin(e){this._constraint.yMargin=e}get leftMargin(){return this._constraint.leftMargin}set leftMargin(e){this._constraint.leftMargin=e}get rightMargin(){return this._constraint.rightMargin}set rightMargin(e){this._constraint.rightMargin=e}get topMargin(){return this._constraint.topMargin}set topMargin(e){this._constraint.topMargin=e}get bottomMargin(){return this._constraint.bottomMargin}set bottomMargin(e){this._constraint.bottomMargin=e}get minContentWidth(){return this._constraint.minContentWidth}set minContentWidth(e){this._constraint.minContentWidth=e}get minContentHeight(){return this._constraint.minContentHeight}set minContentHeight(e){this._constraint.minContentHeight=e}get maxContentWidth(){return this._constraint.maxContentWidth}set maxContentWidth(e){this._constraint.maxContentWidth=e}get maxContentHeight(){return this._constraint.maxContentHeight}set maxContentHeight(e){this._constraint.maxContentHeight=e}setExcludeInvisibleChildrenFromBounds(e){super.setExcludeInvisibleChildrenFromBounds(e),this.updateAllAutoLines()}dispose(){this._constraint.lock(),this.childInsertedEmitter.removeListener(this.onChildInserted),this.childRemovedEmitter.removeListener(this.onChildRemoved);for(const e of this._cellMap.values())e.dispose(),e.node.visibleProperty.unlink(this.onChildVisibilityToggled);super.dispose()}getHelperNode(){return pf.createHelperNode(this.constraint.displayedCells,this.constraint.layoutBoundsProperty.value,e=>{let t="";return t+=`row: ${e.position.vertical}\n`,t+=`column: ${e.position.horizontal}\n`,e.size.horizontal>1&&(t+=`horizontalSpan: ${e.size.horizontal}\n`),e.size.vertical>1&&(t+=`verticalSpan: ${e.size.vertical}\n`),t+=`xAlign: ${ty.internalToAlign(Ee.HORIZONTAL,e.effectiveXAlign)}\n`,t+=`yAlign: ${ty.internalToAlign(Ee.VERTICAL,e.effectiveYAlign)}\n`,t+=`xStretch: ${e.effectiveXStretch}\n`,t+=`yStretch: ${e.effectiveYStretch}\n`,t+=`xGrow: ${e.effectiveXGrow}\n`,t+=`yGrow: ${e.effectiveYGrow}\n`,t})}constructor(e){const i=(0,t.Ay)()({excludeInvisibleChildrenFromBounds:!0,resize:!0},e);super(),this._cellMap=new Map,this._autoRows=null,this._autoColumns=null,this._autoLockCount=0,this._constraint=new Cf(this,{preferredWidthProperty:this.localPreferredWidthProperty,preferredHeightProperty:this.localPreferredHeightProperty,minimumWidthProperty:this.localMinimumWidthProperty,minimumHeightProperty:this.localMinimumHeightProperty,layoutOriginProperty:this.layoutOriginProperty,excludeInvisible:!1}),this.onChildInserted=this.onGridBoxChildInserted.bind(this),this.onChildRemoved=this.onGridBoxChildRemoved.bind(this),this.onChildVisibilityToggled=this.updateAllAutoLines.bind(this),this.childInsertedEmitter.addListener(this.onChildInserted),this.childRemovedEmitter.addListener(this.onChildRemoved);const n=_.omit(i,Vr),s=_.pick(i,Vr);this._constraint.lock(),this.mutate(n),this._constraint.unlock(),this._constraint.updateLayout(),this.mutate(s),this.linkLayoutBounds()}};Df.prototype._mutatorKeys=[...Ko,...xf,...Cr.prototype._mutatorKeys],it.A.register("GridBox",Df);const kf={stretch:!0,isSeparator:!0};let Mf=class extends sc{constructor(e){super((0,t.hz)()({},{layoutOptions:kf,stroke:"rgb(100,100,100)"},e))}};it.A.register("Separator",Mf);let Bf=class extends(Wo(Mf)){constructor(e){super(),this.localPreferredWidthProperty.link(e=>{null!==e&&(this.x2=e)}),this.mutate(e)}};it.A.register("HSeparator",Bf);let Of=class extends Vf{onFlowBoxChildInserted(e,t){super.onFlowBoxChildInserted(e,t)}mutate(e){return super.mutate(e)}constructor(e){super((0,t.Ay)()({orientation:"horizontal"},e))}};it.A.register("HBox",Of);let Lf=class extends(Go(Mf)){constructor(e){super(),this.localPreferredHeightProperty.link(e=>{null!==e&&(this.y2=e)}),this.mutate(e)}};it.A.register("VSeparator",Lf);let Rf=class extends Vf{onFlowBoxChildInserted(e,t){super.onFlowBoxChildInserted(e,t)}mutate(e){return super.mutate(e)}constructor(e){super((0,t.Ay)()({orientation:"vertical"},e))}};it.A.register("VBox",Rf);let Nf=class extends Cr{calculateDOMBounds(){const e=$(this._element);return new Ie(0,0,e.width(),e.height())}invalidateDOM(){if(this.invalidateDOMLock)return;this.invalidateDOMLock=!0;const e=document.createElement("div");$(e).css({display:"hidden",padding:"0 !important",margin:"0 !important",position:"absolute",left:0,top:0,width:65535,height:65535}),this._container.removeChild(this._element),e.appendChild(this._element),document.body.appendChild(e);const t=this.calculateDOMBounds();this.invalidateSelf(t),this._$container.width(t.getWidth()),this._$container.height(t.getHeight()),document.body.removeChild(e),e.removeChild(this._element),this._container.appendChild(this._element),this.invalidateDOMLock=!1}createDOMDrawable(e,t){return Wg.createFromPool(e,t)}isPainted(){return!0}setElement(e){return this._element!==e&&(this._element&&this._container.removeChild(this._element),this._element=e,this._container.appendChild(this._element),this.invalidateDOM()),this}set element(e){this.setElement(e)}get element(){return this.getElement()}getElement(){return this._element}setPreventTransform(e){this._preventTransform!==e&&(this._preventTransform=e)}set preventTransform(e){this.setPreventTransform(e)}get preventTransform(){return this.isTransformPrevented()}isTransformPrevented(){return this._preventTransform}setAllowInput(e){this._allowInput!==e&&(this._allowInput=e,this.invalidateAllowInput(e))}isInputAllowed(){return this._allowInput}invalidateAllowInput(e){this._container.dataset.sceneryAllowInput=e?"true":"false",this._container.style.pointerEvents=e?"auto":"none"}set allowInput(e){this.setAllowInput(e)}get allowInput(){return this.isInputAllowed()}mutate(e){return super.mutate(e)}constructor(e,t){(e=>!(!e||!e.jquery))(e)&&(e=e[0]),super(),this._container=document.createElement("div"),this._container.style.position="absolute",this._container.style.left="0",this._container.style.top="0",this._allowInput=!1,this._$container=$(this._container),this.invalidateDOMLock=!1,this._preventTransform=!1,this.invalidateAllowInput(this._allowInput),t=yh({element:e},t),this.mutate(t),this.setRendererBitmask(Xi.bitmaskDOM)}};Nf.prototype._mutatorKeys=["element","preventTransform","allowInput"].concat(Cr.prototype._mutatorKeys),it.A.register("DOM",Nf);const qf=Gr(e=>class extends e{insertChild(e,t){throw new Error("Attempt to insert child into Leaf")}removeChildWithIndex(e,t){throw new Error("Attempt to remove child from Leaf")}constructor(){super(...arguments)}});it.A.register("Leaf",qf);const Ff=qf;let Hf=class extends(Ff(Cr)){constructor(e,t,i){super(),this.localBounds=new Ie(0,0,e,t),this.mutate(i)}};it.A.register("Spacer",Hf);let Yf=class extends Oo{initialize(e,t){super.initialize(e,t),this.contextChangeListener=this.contextChangeListener||this.onWebGLContextChange.bind(this),this.painter=null}createPainter(){return new(0,this.node.painterType)(this.webGLBlock.gl,this.node)}onWebGLContextChange(){this.painter=this.createPainter()}onAddToBlock(e){this.webGLBlock=e,this.painter=this.createPainter(),e.glChangedEmitter.addListener(this.contextChangeListener)}onRemoveFromBlock(e){e.glChangedEmitter.removeListener(this.contextChangeListener)}draw(){const e=this.instance.relativeTransform.matrix,t=this.painter.paint(e,this.webGLBlock.projectionMatrix);return t}dispose(){this.painter.dispose(),this.painter=null,this.webGLBlock&&(this.webGLBlock=null),super.dispose()}markPaintDirty(){this.markDirty()}get shaderAttributes(){return this.node.shaderAttributes}};Yf.prototype.webglRenderer=Xi.webglCustom,it.A.register("WebGLNodeDrawable",Yf),bs.mixInto(Yf);const Gf=Yf;let Uf=class extends Cr{setCanvasBounds(e){return this.invalidateSelf(e),this}set canvasBounds(e){this.setCanvasBounds(e)}get canvasBounds(){return this.getCanvasBounds()}getCanvasBounds(){return this.getSelfBounds()}isPainted(){return!0}invalidatePaint(){const e=this._drawables.length;for(let t=0;t{const t=e;return Wf.has(t)||Wf.set(t,new f.A(`ReferenceIO<${e.typeName}>`,{isValidValue:t=>N.A.isValueValid(t,e.validator),documentation:"Uses reference identity for serializing and deserializing, and validates based on its parameter PhET-iO Type.",parameterTypes:[e],toStateObject:e=>({phetioID:e.tandem.phetioID}),stateSchema:{phetioID:x.A},fromStateObject(e){if(phet.phetio.phetioEngine.hasPhetioObject(e.phetioID))return phet.phetio.phetioEngine.getPhetioElement(e.phetioID);throw new zf.A},applyState(e){}})),Wf.get(t)};u.A.register("ReferenceIO",Qf);const Kf=Qf,jf={isColorDef:e=>null===e||"string"==typeof e||e instanceof Wr||(0,se.w)(e)&&(null===e.value||"string"==typeof e.value||e.value instanceof Wr),scenerySerialize:e=>null===e?"null":e instanceof Wr?`'${e.toCSS()}'`:"string"==typeof e?`'${e}'`:jf.scenerySerialize(e.value),ColorDefIO:null};jf.ColorDefIO=new f.A("ColorDefIO",{isValidValue:jf.isColorDef,supertype:(0,C.A)(cn([x.A,Wr.ColorIO,Kf(r.A.PropertyIO((0,C.A)(cn([x.A,Wr.ColorIO]))))]))}),it.A.register("ColorDef",jf);const _f=jf,Zf=new Wr("transparent");let Xf=class e{isActiveSVGGradientStop(){return!!this.svgGradient}initialize(e,t,i){return this.svgGradient=e,this.color=i,this.ratio=t,this.svgElement=this.svgElement||document.createElementNS(Vo,"stop"),this.svgElement.setAttribute("offset",""+t),this.dirty=!0,this.update(),this.propertyListener=this.propertyListener||this.onPropertyChange.bind(this),this.colorListener=this.colorListener||this.markDirty.bind(this),(0,se.w)(i)?(i.lazyLink(this.propertyListener),i.value instanceof Wr&&(i.value.changeEmitter.addListener(this.colorListener),this.lastColor=i.value)):i instanceof Wr&&i.changeEmitter.addListener(this.colorListener),this}onPropertyChange(e,t){null!==this.lastColor&&(this.lastColor.changeEmitter.removeListener(this.colorListener),this.lastColor=null),e instanceof Wr&&(e.changeEmitter.addListener(this.colorListener),this.lastColor=e),this.markDirty()}markDirty(){this.dirty=!0,this.svgGradient.markDirty()}update(){if(!this.dirty)return;this.dirty=!1;let e=this.color;(0,se.w)(e)&&(e=e.value),null===e&&(e="transparent"),"string"==typeof e?Zf.setCSS(e):Zf.set(e);const t=`stop-opacity: ${Zf.a.toFixed(20)};`;Zf.alpha=1;const i=`stop-color: ${Zf.toCSS()};`;this.svgElement.setAttribute("style",`${i} ${t}`)}dispose(){const e=this.color;this.lastColor&&(this.lastColor.changeEmitter.removeListener(this.colorListener),this.lastColor=null),(0,se.w)(e)?e.hasListener(this.propertyListener)&&e.unlink(this.propertyListener):e instanceof Wr&&e.changeEmitter.removeListener(this.colorListener),this.color=null,this.svgGradient=null,this.freeToPool()}freeToPool(){e.pool.freeToPool(this)}constructor(e,t,i){this.lastColor=null,this.initialize(e,t,i)}};Xf.pool=new Se.A(Xf),it.A.register("SVGGradientStop",Xf);const Jf=Xf;let $f=class{isActiveSVGGradient(){return!!this.svgBlock}initialize(e,t){this.svgBlock=e,this.gradient=t;const i=void 0!==this.definition;this.definition=this.definition||this.createDefinition(),i||this.definition.setAttribute("gradientUnits","userSpaceOnUse"),t.transformMatrix?this.definition.setAttribute("gradientTransform",t.transformMatrix.getSVGTransform()):this.definition.removeAttribute("gradientTransform");const n=t.getSVGStops();this.stops=yi(this.stops);for(let s=0;s{e+=`.addColorStop( ${t.ratio}, ${_f.scenerySerialize(t.color)} )`}),e}constructor(e,t,i,n){super(),this.start=new Te.A(e,t),this.end=new Te.A(i,n)}};tb.prototype.isLinearGradient=!0,it.A.register("LinearGradient",tb);let ib=class e extends $f{initialize(e,t){return super.initialize(e,t),this.definition.setAttribute("cx",""+t.largePoint.x),this.definition.setAttribute("cy",""+t.largePoint.y),this.definition.setAttribute("r",""+t.maxRadius),this.definition.setAttribute("fx",""+t.focalPoint.x),this.definition.setAttribute("fy",""+t.focalPoint.y),this}createDefinition(){return document.createElementNS(Vo,"radialGradient")}freeToPool(){e.pool.freeToPool(this)}constructor(e,t){super(e,t)}};ib.pool=new Se.A(ib),it.A.register("SVGRadialGradient",ib);let nb=class extends jr{createCanvasGradient(){return lo.createRadialGradient(this.start.x,this.start.y,this.startRadius,this.end.x,this.end.y,this.endRadius)}createSVGPaint(e){return ib.pool.create(e,this)}getSVGStops(){const e=this.startIsLarger,t=this.maxRadius,i=this.minRadius;const n=this.stops.map((function(n){let s=e?1-n.ratio:n.ratio;var r,o;return i>0&&(s=(o=i/t)+(s-(r=0))*(1-o)/(1-r)),{ratio:s,color:n.color}}));return e&&n.reverse(),n}toString(){let e=`new phet.scenery.RadialGradient( ${this.start.x}, ${this.start.y}, ${this.startRadius}, ${this.end.x}, ${this.end.y}, ${this.endRadius} )`;return _.each(this.stops,t=>{e+=`.addColorStop( ${t.ratio}, ${_f.scenerySerialize(t.color)} )`}),e}constructor(e,t,i,n,s,r){if(super(),this.start=new Te.A(e,t),this.end=new Te.A(n,s),Ye.A.safari){const i=(e+n)/2,r=(t+s)/2;this.start.x=i,this.start.y=r,this.end.x=i,this.end.y=r}this.startRadius=i,this.endRadius=r,this.focalPoint=this.start.plus(this.end.minus(this.start).times(this.startRadius/(this.startRadius-this.endRadius))),this.startIsLarger=this.startRadius>this.endRadius,this.largePoint=this.startIsLarger?this.start:this.end,this.maxRadius=Math.max(this.startRadius,this.endRadius),this.minRadius=Math.min(this.startRadius,this.endRadius),this.startRadius,this.endRadius}};function sb(e,i){const n=(0,t.Ay)()({resolution:1,sourceBounds:null,useTargetBounds:!0,wrap:!0,useCanvas:!1,nodeOptions:{},imageOptions:{}},i),s=n.resolution,r=n.sourceBounds;const o=new Cr({scale:s,children:[e]});let a=r||e.getSafeTransformedVisibleBounds().dilated(2).roundedOut();1!==s&&(a=new Ie(s*a.minX,s*a.minY,s*a.maxX,s*a.maxY),a.width%1!=0&&(a.maxX+=1-a.width%1),a.height%1!=0&&(a.maxY+=1-a.height%1));let l=null;o.toCanvas((function(e,i,r,o,a){const h=n.useCanvas?e:e.toDataURL();l=new _h(h,(0,t.sF)({},n.imageOptions,{x:-i,y:-r,initialWidth:o,initialHeight:a})),l.scale(1/s,1/s,!0)}),-a.minX,-a.minY,(0,Xe.q)(a.width),(0,Xe.q)(a.height));const h=l;o.dispose();let c,d=e.getVisibleBounds();if(r&&(d=r.intersection(d)),n.useTargetBounds&&(h.imageBounds=h.parentToLocalBounds(d)),n.wrap){const e=new Cr({children:[h]});n.useTargetBounds&&(e.localBounds=d),c=e}else n.useTargetBounds&&(h.localBounds=h.parentToLocalBounds(d)),c=h;return c.mutate(n.nodeOptions)}nb.prototype.isRadialGradient=!0,it.A.register("RadialGradient",nb);let rb=class{focusin(e){this.focusInGroupProperty.value=!0,this.focusTargetProperty.value=e.target,this._focusWasInGroup=!0}focusout(e){var t;const i=null==(t=Qn.value)?void 0:t.trail;i&&i.containsNode(this.groupParent)||(this.focusInGroupProperty.value=!1,this.focusTargetProperty.value=null,this._focusWasInGroup=!1)}get focusWasInGroup(){return this._focusWasInGroup}dispose(){this.focusInGroupProperty.dispose(),this.focusTargetProperty.dispose()}constructor(e){this._focusWasInGroup=!1,this.focusInGroupProperty=new o(!1),this.focusTargetProperty=new r.A(null),this.groupParent=e}};it.A.register("GroupFocusListener",rb);const ob="data:audio/mpeg;base64,//tQxAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAFAAAE5AAzMzMzMzMzMzMzMzMzMzMzMzMzZmZmZmZmZmZmZmZmZmZmZmZmZmaZmZmZmZmZmZmZmZmZmZmZmZmZmczMzMzMzMzMzMzMzMzMzMzMzMzM//////////////////////////8AAAA5TEFNRTMuOTlyAaUAAAAAAAAAABRAJAZmQgAAQAAABOTGvClKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/7UMQAAAjxrv+ggLoZGTXh9oJQAa222FG3ASABBG51MY/j4AAB4AYI3/H3//Pqd/zv0Jp/8//zn3n6Mmf/J7f//8jf+fOeeggHA4RXkGh8XEwHAMHD4udyCYuhAALhgJqWJAEDGMYxvHlyAHxc9P76dP//T/Rm//p+v9tvb0Tzr1XyfnelP/3b0//5vo86Mlm0dHQrscccRQg5oSYpziaiB52oQCkxnR6LQisRCEMhluyeqEhIiWMiSvQjhwDTCtCPyDkNrP+UsBTNwVsJGSD/+1LEFoAQMWtluYaQEWGP7H+wYAR9IvpDLBawV8OWbG5oShmbiVnh8GAU6ZIjnetMKuOcpmaSndX80HuS7puaIKq/6lvM36lIJf8+Zm6CFA0t3fV/91IOhPJ1GCH13q//5o6DJl9/F3ErtwAGRlJ26tx4H5gV4lzzrIqy8jTNBZl1Hep3doI2/x6AMOljV5/M4clzeagOVs4SmnmZk2fTyahylhxZ1R7/1HlnhEe4KgF3SISoKnviYs9T8sp4Ku5ICsAAg3RwNdct5GVqea2W4P/7UsQHgAuZRzrtmE8JO4qkaa4M4MXAzUcoyYPSsZe/D4w5DUicEmE/ziQka1VaLTh0y8+qp/UtRMpQoli5jYCz6St//RjTOrPXlI/KJaZ2RHX6mMrJqxfqVjPM/K/thi6pyAAPlyOxkEr9tPgR2ldNwBRI0383ZJR5NmIAG2zBZOw1tKaJR6jzjIxgTlVLjBgJmawwRo8JXAUYCz1gr/q+aVWur8tO+j4iUe////6ii3UCwZHQhxd93nYdy9H1MjPwThY/VGgQQLo200aOkCDF//tSxA+CCwg1HK3lIQHXlCPo97AIw8D44EBOcB8oGBIND4gcCBc+IFHC7wwUOA+oMiAaH1PDCw+mxbydxPV3/zjbCnci8p/9nIJTQYSH5vktZIAEdHIA5HkiS4k11MYsCUFS8QSbEVhJUnQlFpKIJNQhJJrBKEZ8kiKoJIkqToSj5KJJ6hiCTXCUJUZJEl45Ek9TCUfQkkyuSSbzS72V1mVruLnhMeBUsHREPDQiPA0VOiJwdKuBlR5Fqtbk3f///t8FdSogAuxJp2uAWhIWFmv/+1LEBgPGHADHoIhgIAAANIAAAATcLVLFRWKCwsLCyxUVFVf6xVmLCws1YqKior////2RVn/+LCwtTEFNRTMuOTkuM1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==",ab=Sl(Dl,ob),lb=El.A.createLock(ob),hb=new Il;let cb=!1;const db=()=>{cb||(lb(),cb=!0)},ub=Dl.decodeAudioData(ab.buffer,e=>{null===hb.audioBufferProperty.value&&(hb.audioBufferProperty.set(e),db())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),hb.audioBufferProperty.set(Dl.createBuffer(1,1,Dl.sampleRate)),db()});ub&&ub.then(e=>{null===hb.audioBufferProperty.value&&(hb.audioBufferProperty.set(e),db())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),db()});const pb=hb;let mb=class{play(){this.soundPlayer.setPlaybackRate(this.playbackRate),this.soundPlayer.play()}stop(){this.soundPlayer.stop()}constructor(e,t){this.soundPlayer=e,this.playbackRate=t}};const gb=new class{getSoundClipInstance(){return this._basisSoundClip||(this._basisSoundClip=new Bm(pb,{initialOutputLevel:.7,rateChangesAffectPlayingSounds:!1}),_l.addSoundGenerator(this._basisSoundClip,{categoryName:"user-interface"})),this._basisSoundClip}getSelectionSoundPlayer(e){if(!this.soundPlayers[e]){const t=Math.pow(2,-e/12);this.soundPlayers[e]=new mb(this.getSoundClipInstance(),t)}return this.soundPlayers[e]}constructor(){this._basisSoundClip=null,this.soundPlayers=[]}};Tl.register("multiSelectionSoundPlayerFactory",gb);const Ab=gb,yb=e=>{if(e instanceof Bc||e instanceof df)return e.stringProperty;if(e.children)for(const t of e.children){const e=yb(t);if(e)return e}return null},fb=new Ct.A("sun");let bb=class e extends(Wo(cA(Cr))){dispose(){this.disposeAquaRadioButton(),super.dispose()}constructor(i,n,s,r){const o=(0,t.Ay)()({centerColor:"black",radius:e.DEFAULT_RADIUS,selectedColor:"rgb( 143, 197, 250 )",deselectedColor:"white",xSpacing:8,stroke:"black",soundPlayer:Ab.getSelectionSoundPlayer(0),a11yNameAttribute:null,touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,cursor:"pointer",disabledOpacity:ff.DISABLED_OPACITY,tandem:A.A.REQUIRED,tandemNameSuffix:"RadioButton",visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!1,tagName:"input",inputType:"radio",containerTagName:"li",labelTagName:"label",appendLabel:!0,appendDescription:!0,accessibleNameBehavior:cA.BASIC_ACCESSIBLE_NAME_BEHAVIOR},r);super(),this.onInputEmitter=new b.A,this._isMouseAreaCustomized=!1,this._isTouchAreaCustomized=!1,this._isSettingAreas=!1,this.value=n;const a=new Cr,l=new Th(o.radius/3,{fill:o.centerColor}),h=new Th(o.radius,{fill:o.selectedColor,stroke:o.stroke}),c=new Cr({children:[h,l]});a.addChild(c);const d=new Cr,u=new Th(o.radius,{fill:o.deselectedColor,stroke:o.stroke});d.addChild(u);const p=new Cr({children:[a,d],pickable:!1}),m=()=>{s.left=u.right+o.xSpacing,s.centerY=u.centerY};s.boundsProperty.link(m);const g=new fa({});a.pickable=d.pickable=!1,s.pickable=!1,this.children=[p,s,g],this.constraint=new Pb(this,p,s,g,o),this.constraint.updateLayout();const y=e=>{a.visible=e===n,d.visible=!a.visible};i.link(y);const f=()=>{const e=i.value;i.set(n),e!==i.value&&this.onInputEmitter.emit()},P=new Mr({fire:f,tandem:o.tandem});this.addInputListener(P),this.onInputEmitter.addListener(()=>{o.soundPlayer.play(),this.voicingSpeakNameResponse()});const V={change:f};this.addInputListener(V),i.value===n&&this.setPDOMAttribute("checked","checked");const v=e=>{this.pdomChecked=e===n};i.link(v),o.accessibleName||(o.accessibleName=yb(s)),null!==o.a11yNameAttribute&&this.setPDOMAttribute("name",o.a11yNameAttribute),this.mutate(o),this.disposeAquaRadioButton=()=>{this.constraint.dispose(),this.onInputEmitter.dispose(),this.removeInputListener(P),this.removeInputListener(V),i.unlink(v),i.unlink(y),s.boundsProperty.hasListener(m)&&s.boundsProperty.unlink(m),P.dispose()}}};bb.DEFAULT_RADIUS=7;let Pb=class extends fy{layout(){super.layout();const e=this.createLayoutProxy(this.labelNode),t=e.minimumWidth,i=this.radioNode.width+this.options.xSpacing+t,n=Math.max(i,this.radioButton.localPreferredWidth||0);ir(this.labelNode)&&(e.preferredWidth=n-this.radioNode.width-this.options.xSpacing),e.left=this.radioNode.right+this.options.xSpacing,e.centerY=this.radioNode.centerY,this.rectangle.rectBounds=this.radioNode.bounds.union(e.bounds).withMaxX(Math.max(this.radioNode.left+n,e.right)),this.radioButton._isSettingAreas=!0,this.radioButton._isTouchAreaCustomized||(this.radioButton.touchArea=this.radioButton.localBounds.dilatedXY(this.options.touchAreaXDilation,this.options.touchAreaYDilation)),this.radioButton._isMouseAreaCustomized||(this.radioButton.mouseArea=this.radioButton.localBounds.dilatedXY(this.options.mouseAreaXDilation,this.options.mouseAreaYDilation)),this.radioButton._isSettingAreas=!1,e.dispose(),this.radioButton.localMinimumWidth=i}dispose(){this.radioButton.localPreferredWidthProperty.unlink(this._updateLayoutListener),super.dispose()}constructor(e,t,i,n,s){super(e),this.radioButton=e,this.radioNode=t,this.labelNode=i,this.rectangle=n,this.options=s,this.radioButton.localPreferredWidthProperty.lazyLink(this._updateLayoutListener),this.addNode(i)}};function Vb(e,t){return e.map(e=>e.createNode(t&&e.tandemName?t.createTandem(e.tandemName):A.A.OPTIONAL))}fb.register("AquaRadioButton",bb);let vb=class{static validateLinkedElementInstrumentation(e,t){0}};fb.register("SunUtil",vb);let wb=0;let Eb=class extends Vf{onRadioButtonInput(){this.onInputEmitter.emit()}dispose(){this.disposeAquaRadioButtonGroup(),super.dispose()}getButton(e){const t=_.find(this.radioButtons,t=>t.value===e);return t}constructor(e,i,n){wb++;const s=(0,t.Ay)()({touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,orientation:"vertical",spacing:3,stretch:!0,disabledOpacity:ff.DISABLED_OPACITY,tandem:A.A.REQUIRED,tandemNameSuffix:"RadioButtonGroup",visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,phetioFeatured:!0,tagName:"ul",labelTagName:"h3",ariaRole:"radiogroup",accessibleHelpTextBehavior:_s.HELP_TEXT_BEFORE_CONTENT,groupFocusHighlight:!0},n),r=Vb(i,s.tandem);"vertical"===s.orientation&&(s.align=s.align||"left");const o=i.map((i,n)=>{const o=r[n];return new bb(e,i.value,o,(0,t.sF)({a11yNameAttribute:"AquaRadioButtonGroup"+wb,soundPlayer:Ab.getSelectionSoundPlayer(n),tandem:i.tandemName?s.tandem.createTandem(i.tandemName):s.tandem===A.A.OPT_OUT?A.A.OPT_OUT:A.A.REQUIRED,touchAreaXDilation:"horizontal"===s.orientation?s.spacing/2:s.touchAreaXDilation,touchAreaYDilation:"vertical"===s.orientation?s.spacing/2:s.touchAreaYDilation,mouseAreaXDilation:"horizontal"===s.orientation?s.spacing/2:s.mouseAreaXDilation,mouseAreaYDilation:"vertical"===s.orientation?s.spacing/2:s.mouseAreaYDilation},s.radioButtonOptions,i.options))});s.children=o,super(s),this.onInputEmitter=new b.A;const a=new rb(this);a.focusTargetProperty.link(e=>{if(e){const t=e;a.focusWasInGroup?t.voicingSpeakNameResponse():t.voicingSpeakFullResponse({contextResponse:null,hintResponse:this.accessibleHelpText})}}),this.addInputListener(a),this.addAriaLabelledbyAssociation({thisElementName:Ls.PRIMARY_SIBLING,otherNode:this,otherElementName:Ls.LABEL_SIBLING});const l={keydown:e=>{Fn.A.isArrowKey(e.domEvent)&&e.pointer.reserveForKeyboardDrag()}};this.addInputListener(l);const h=this.onRadioButtonInput.bind(this);for(let t=0;t{this.removeInputListener(l),o.forEach(e=>e.dispose()),this.onInputEmitter.dispose(),a.dispose(),r.forEach(e=>e.dispose())},this.radioButtons=o}};fb.register("AquaRadioButtonGroup",Eb);let Sb=class extends Ve.A{};Sb.IDLE=new Sb,Sb.OVER=new Sb,Sb.PRESSED=new Sb,Sb.enumeration=new Pe.A(Sb),fb.register("ButtonInteractionState",Sb);let Tb=class extends ge{constructor(e){super([e.focusedProperty,e.overProperty,e.looksOverProperty,e.looksPressedProperty],(e,t,i,n)=>i&&!n?Sb.OVER:(t||e)&&n?Sb.PRESSED:Sb.IDLE,{valueType:Sb})}};fb.register("PushButtonInteractionStateProperty",Tb);let Cb=class extends je{dispose(){this.disposeButtonModel(),super.dispose()}createPressListener(e){var i=this;e=(0,t.sF)({canStartPress:()=>this.enabledProperty.value},e);const n=new kr(e);this.listeners.push(n),n.isPressedProperty.lazyLink(e=>{this.interrupted=n.interrupted,this.downProperty.set(e)}),n.isOverProperty.lazyLink(this.overProperty.set.bind(this.overProperty)),n.isFocusedProperty.lazyLink(this.focusedProperty.set.bind(this.focusedProperty)),n.pdomClickingProperty.lazyLink(this.pdomClickingProperty.set.bind(this.pdomClickingProperty)),this.looksPressedMultilink&&this.looksPressedMultilink.dispose(),this.looksOverMultilink&&this.looksOverMultilink.dispose();const s=this.listeners.map(e=>e.looksPressedProperty);s.push(this.downProperty),this.looksPressedMultilink=ye.multilinkAny(s,(function(){for(var e=arguments.length,t=new Array(e),n=0;ne||t,!1)}));const r=this.listeners.map(e=>e.looksOverProperty);return this.looksOverMultilink=ye.multilinkAny(r,(function(){for(var e=arguments.length,t=new Array(e),n=0;ne||t,!1)})),n}constructor(e){const i=(0,t.Ay)()({startCallback:_.noop,endCallback:_.noop,tandem:A.A.REQUIRED,phetioState:g.A.DEFAULT_OPTIONS.phetioState,phetioReadOnly:g.A.DEFAULT_OPTIONS.phetioReadOnly,phetioFeatured:g.A.DEFAULT_OPTIONS.phetioFeatured},e);i.enabledPropertyOptions=(0,t.sF)({phetioState:i.phetioState,phetioReadOnly:i.phetioReadOnly,phetioDocumentation:"When disabled, the button is grayed out and cannot be pressed",phetioFeatured:!0},i.enabledPropertyOptions),super(i),this.overProperty=new o(!1),this.downProperty=new o(!1,{reentrant:!0}),this.pdomClickingProperty=new o(!1),this.focusedProperty=new o(!1),this.looksPressedProperty=new o(!1),this.looksOverProperty=new o(!1),this.produceSoundEmitter=new b.A,this.interrupted=!1,this.listeners=[],this.looksPressedMultilink=null,this.looksOverMultilink=null,this.downProperty.lazyLink(e=>{e?i.startCallback():i.endCallback(this.looksOverProperty.get())}),this.enabledProperty.link(e=>{if(!e)for(let t=0;t{this.overProperty.dispose(),this.downProperty.dispose(),this.pdomClickingProperty.dispose(),this.produceSoundEmitter.dispose(),this.looksPressedMultilink&&this.looksPressedMultilink.dispose(),this.looksOverMultilink&&this.looksOverMultilink.dispose(),this.listeners=[]}}};fb.register("ButtonModel",Cb);let Ib=class extends Cb{dispose(){this.disposePushButtonModel(),super.dispose()}addListener(e){this.firedEmitter.addListener(e)}removeListener(e){this.firedEmitter.removeListener(e)}fire(){this.isFiringProperty.value=!0,this.firedEmitter.emit(),this.isFiringProperty.value=!1}constructor(e){const i=(0,t.Ay)()({fireOnDown:!1,listener:null,interruptListener:null,fireOnHold:!1,fireOnHoldDelay:400,fireOnHoldInterval:100,tandem:A.A.REQUIRED,phetioReadOnly:g.A.DEFAULT_OPTIONS.phetioReadOnly},e);super(i),this.startEvent=null,this.isFiringProperty=new o(!1),this.firedEmitter=new b.A({tandem:i.tandem.createTandem("firedEmitter"),phetioDocumentation:"Emits when the button is fired",phetioReadOnly:i.phetioReadOnly,phetioEventType:ze.A.USER,hasListenerOrderDependencies:!0}),i.interruptListener&&this.firedEmitter.addListener(()=>{i.interruptListener(this.startEvent)}),null!==i.listener&&this.firedEmitter.addListener(i.listener),i.fireOnHold&&(this.timer=new Ue({callback:this.fire.bind(this),delay:i.fireOnHoldDelay,interval:i.fireOnHoldInterval}));const n=e=>{if(e){var t,n,s,r;if(this.enabledProperty.get())this.startEvent=(null==(r=window.phet)||null==(s=r.joist)||null==(n=s.display)||null==(t=n._input)?void 0:t.currentSceneryEvent)||null,i.fireOnDown&&this.fire(),this.timer&&this.timer.start(),(i.fireOnDown||this.timer)&&this.produceSoundEmitter.emit()}else{const e=!i.fireOnDown&&(this.overProperty.get()||this.focusedProperty.get())&&this.enabledProperty.get()&&!this.interrupted;this.timer?this.timer.stop(e):e&&(this.produceSoundEmitter.emit(),this.fire())}};this.downProperty.link(n);const s=e=>{!e&&this.timer&&this.timer.stop(!1)};this.enabledProperty.link(s),this.disposePushButtonModel=()=>{this.isFiringProperty.value=!1,this.isFiringProperty.dispose(),this.firedEmitter.dispose(),this.downProperty.unlink(n),this.enabledProperty.unlink(s),this.timer&&(this.timer.dispose(),this.timer=null)}}};fb.register("PushButtonModel",Ib);let xb=class extends r.A{setPaint(e){this._paint=e,this._paintObserver.setPrimary(e)}set paint(e){this.setPaint(e)}get paint(){return this.getPaint()}getPaint(){return this._paint}setLuminanceFactor(e){this.luminanceFactor!==e&&(this._luminanceFactor=e,this.invalidatePaint())}set luminanceFactor(e){this.setLuminanceFactor(e)}get luminanceFactor(){return this.getLuminanceFactor()}getLuminanceFactor(){return this._luminanceFactor}invalidatePaint(){this.value=ra.toColor(this._paint).colorUtilsBrightness(this._luminanceFactor)}dispose(){this.paint=null,super.dispose()}constructor(e,i){const n=ra.toColor(e),s=(0,t.Ay)()({luminanceFactor:0,valueComparisonStrategy:"equalsFunction"},i);super(n,s),this._paint=null,this._luminanceFactor=s.luminanceFactor,this._changeListener=this.invalidatePaint.bind(this),this._paintObserver=new Zr(this._changeListener),this.setPaint(e)}};it.A.register("PaintColorProperty",xb);let Db=1,kb=class{isDOMCompatible(){return!1}isSVGCompatible(){return!1}isCanvasCompatible(){return!!ds.canvasFilter&&this.isDOMCompatible()}isWebGLCompatible(){return!1}toString(){return this.id}static applyColorMatrix(e,t,i,n){const s=document.createElementNS(Vo,"feColorMatrix");s.setAttribute("type","matrix"),s.setAttribute("values",e),s.setAttribute("in",i),s.setAttribute("color-interpolation-filters","sRGB"),n&&s.setAttribute("result",n),t.appendChild(s)}constructor(){this.id="filter"+Db++,this.filterRegionPercentageIncrease=0}};it.A.register("Filter",kb);const Mb=Ao.supportsImageDataCanvasFilter();let Bb=class extends kb{applySVGFilter(e,t,i){kb.applyColorMatrix(`${ft(this.m00)} ${ft(this.m01)} ${ft(this.m02)} ${ft(this.m03)} ${ft(this.m04)} ${ft(this.m10)} ${ft(this.m11)} ${ft(this.m12)} ${ft(this.m13)} ${ft(this.m14)} ${ft(this.m20)} ${ft(this.m21)} ${ft(this.m22)} ${ft(this.m23)} ${ft(this.m24)} ${ft(this.m30)} ${ft(this.m31)} ${ft(this.m32)} ${ft(this.m33)} ${ft(this.m34)}`,e,t,i)}applyCanvasFilter(e){const t=e.canvas.width,i=e.canvas.height,n=e.context.getImageData(0,0,t,i),s=t*i;for(let r=0;r0&&void 0!==arguments[0]?arguments[0]:1;const t=1-e;super(.2126+.7874*t,.7152-.7152*t,.0722-.0722*t,0,0,.2126-.2126*t,.7152+.2848*t,.0722-.0722*t,0,0,.2126-.2126*t,.7152-.7152*t,.0722+.9278*t,0,0,0,0,0,1,0),this.amount=e}};Rb.FULL=new Rb(1),it.A.register("Grayscale",Rb);const Nb=_o(Cr);let qb=class extends Nb{invalidateAlignment(){this._group&&this._group.onAlignBoxResized(this),this.constraint.updateLayout()}setAlignBounds(e){return this._xSet=!0,this._ySet=!0,this._alignBounds===e||e&&this._alignBounds&&e.equals(this._alignBounds)||(this._alignBounds=e,this.constraint.updateLayout()),this}set alignBounds(e){this.setAlignBounds(e)}get alignBounds(){return this.getAlignBounds()}getAlignBounds(){return this._alignBounds}setGroup(e){return this._group!==e&&(this._group&&this._group.removeAlignBox(this),this._group=e,this._group&&this._group.addAlignBox(this)),this}set group(e){this.setGroup(e)}get group(){return this.getGroup()}getGroup(){return this._group}setXAlign(e){return this._xAlign!==e&&(this._xAlign=e,this.invalidateAlignment()),this}set xAlign(e){this.setXAlign(e)}get xAlign(){return this.getXAlign()}getXAlign(){return this._xAlign}setYAlign(e){return this._yAlign!==e&&(this._yAlign=e,this.invalidateAlignment()),this}set yAlign(e){this.setYAlign(e)}get yAlign(){return this.getYAlign()}getYAlign(){return this._yAlign}getAlign(){return this._xAlign}setAlign(e){return this.setXAlign(e),this.setYAlign(e),this}get align(){return this.getAlign()}set align(e){this.setAlign(e)}setMargin(e){return this._leftMargin===e&&this._rightMargin===e&&this._topMargin===e&&this._bottomMargin===e||(this._leftMargin=this._rightMargin=this._topMargin=this._bottomMargin=e,this.invalidateAlignment()),this}set margin(e){this.setMargin(e)}get margin(){return this.getMargin()}getMargin(){return this._leftMargin}setXMargin(e){return this._leftMargin===e&&this._rightMargin===e||(this._leftMargin=this._rightMargin=e,this.invalidateAlignment()),this}set xMargin(e){this.setXMargin(e)}get xMargin(){return this.getXMargin()}getXMargin(){return this._leftMargin}setYMargin(e){return this._topMargin===e&&this._bottomMargin===e||(this._topMargin=this._bottomMargin=e,this.invalidateAlignment()),this}set yMargin(e){this.setYMargin(e)}get yMargin(){return this.getYMargin()}getYMargin(){return this._topMargin}setLeftMargin(e){return this._leftMargin!==e&&(this._leftMargin=e,this.invalidateAlignment()),this}set leftMargin(e){this.setLeftMargin(e)}get leftMargin(){return this.getLeftMargin()}getLeftMargin(){return this._leftMargin}setRightMargin(e){return this._rightMargin!==e&&(this._rightMargin=e,this.invalidateAlignment()),this}set rightMargin(e){this.setRightMargin(e)}get rightMargin(){return this.getRightMargin()}getRightMargin(){return this._rightMargin}setTopMargin(e){return this._topMargin!==e&&(this._topMargin=e,this.invalidateAlignment()),this}set topMargin(e){this.setTopMargin(e)}get topMargin(){return this.getTopMargin()}getTopMargin(){return this._topMargin}setBottomMargin(e){return this._bottomMargin!==e&&(this._bottomMargin=e,this.invalidateAlignment()),this}set bottomMargin(e){this.setBottomMargin(e)}get bottomMargin(){return this.getBottomMargin()}getBottomMargin(){return this._bottomMargin}getContent(){return this._content}get content(){return this.getContent()}getContentBounds(){const e=this._content.bounds;return new Ie(e.left-this._leftMargin,e.top-this._topMargin,e.right+this._rightMargin,e.bottom+this._bottomMargin)}getMinimumWidth(){var e;return("stretch"===this._xAlign&&ir(this._content)?null!=(e=this._content.minimumWidth)?e:0:this._content.width)+this._leftMargin+this._rightMargin}getMinimumHeight(){var e;return("stretch"===this._yAlign&&nr(this._content)?null!=(e=this._content.minimumHeight)?e:0:this._content.height)+this._topMargin+this._bottomMargin}setAdjustedLocalBounds(e){if(this._xSet&&this._ySet)this.localBounds=e;else if(this._xSet){const t=this.getContentBounds();this.localBounds=new Ie(e.minX,t.minY,e.maxX,t.maxY)}else if(this._ySet){const t=this.getContentBounds();this.localBounds=new Ie(t.minX,e.minY,t.maxX,e.maxY)}else this.localBounds=this.getContentBounds()}dispose(){this._alignBoundsProperty&&this._alignBoundsProperty.unlink(this._alignBoundsPropertyListener),this._content.boundsProperty.unlink(this._contentBoundsListener),sr(this._content)&&this._content.minimumWidthProperty.unlink(this._contentBoundsListener),rr(this._content)&&this._content.minimumHeightProperty.unlink(this._contentBoundsListener),this._content=new Cr,this.group=null,this.constraint.dispose(),super.dispose()}mutate(e){return super.mutate(e)}constructor(e,i){const n=(0,t.Ay)()({children:[e]},i);super({sizable:!1}),this._xSet=!1,this._ySet=!1,this._contentBoundsListener=_.noop,this._content=e,this._alignBounds=null,this._xAlign="center",this._yAlign="center",this._leftMargin=0,this._rightMargin=0,this._topMargin=0,this._bottomMargin=0,this._group=null,this._contentBoundsListener=this.invalidateAlignment.bind(this),this._alignBoundsProperty=null,this._alignBoundsPropertyListener=_.noop,(0,l.A)(n,["alignBounds"],["alignBoundsProperty"]),(null==i?void 0:i.alignBoundsProperty)&&(this._alignBoundsProperty=i.alignBoundsProperty,n.alignBounds=this._alignBoundsProperty.value,this._alignBoundsPropertyListener=e=>{this.alignBounds=e},this._alignBoundsProperty.lazyLink(this._alignBoundsPropertyListener)),this.localBounds=new Ie(0,0,0,0),this.constraint=new Fb(this,e),this._content.boundsProperty.link(this._contentBoundsListener),sr(this._content)&&this._content.minimumWidthProperty.link(this._contentBoundsListener),rr(this._content)&&this._content.minimumHeightProperty.link(this._contentBoundsListener),this.mutate(n),ye.multilink([this.localPreferredWidthProperty,this.localPreferredHeightProperty],(e,t)=>{if(null!==e||null!==t){const i=this._alignBounds||new Ie(0,0,0,0);e&&(i.minX=0,i.maxX=e,this._xSet=!0),t&&(i.minY=0,i.maxY=t,this._ySet=!0),this._alignBounds=i,this.constraint.updateLayout()}})}},Fb=class extends fy{updateProperty(e,t){const i=this.content[e],n=this.alignBox.localBounds[e]+t;Math.abs(i-n)>1e-5&&(this.content[e]=n)}layout(){super.layout();const e=this.alignBox,t=this.content;if(!t.bounds.isValid())return;const i=e.leftMargin+e.rightMargin,n=e.topMargin+e.bottomMargin;if(null!==e.alignBounds)e.setAdjustedLocalBounds(e.alignBounds);else{const s=t.width+i,r=t.height+n;e.setAdjustedLocalBounds(new Ie(0,0,s,r))}const s=isFinite(t.width)?(ir(t)?t.minimumWidth||0:t.width)+i:null,r=isFinite(t.height)?(nr(t)?t.minimumHeight||0:t.height)+n:null;t.localBounds.isEmpty()||("center"===e.xAlign?this.updateProperty("centerX",(e.leftMargin-e.rightMargin)/2):"left"===e.xAlign?this.updateProperty("left",e.leftMargin):"right"===e.xAlign?this.updateProperty("right",-e.rightMargin):"stretch"===e.xAlign&&(t.preferredWidth=e.localWidth-e.leftMargin-e.rightMargin,this.updateProperty("left",e.leftMargin)),"center"===e.yAlign?this.updateProperty("centerY",(e.topMargin-e.bottomMargin)/2):"top"===e.yAlign?this.updateProperty("top",e.topMargin):"bottom"===e.yAlign?this.updateProperty("bottom",-e.bottomMargin):"stretch"===e.yAlign&&(t.preferredHeight=e.localHeight-e.topMargin-e.bottomMargin,this.updateProperty("top",e.topMargin))),e.localMinimumWidth=e.widthSizable?s:e.localWidth,e.localMinimumHeight=e.heightSizable?r:e.localHeight}constructor(e,t){super(e),this.alignBox=e,this.content=t,this.addNode(t),e.isWidthResizableProperty.lazyLink(this._updateLayoutListener),e.isHeightResizableProperty.lazyLink(this._updateLayoutListener)}};qb.prototype._mutatorKeys=["alignBounds","align","xAlign","yAlign","margin","xMargin","yMargin","leftMargin","rightMargin","topMargin","bottomMargin","group"].concat(Nb.prototype._mutatorKeys),it.A.register("AlignBox",qb);const Hb={LIGHT_BLUE:new Wr(153,206,255),LIGHT_GRAY:new Wr(220,220,220)},Yb=new Lb(.7),Gb=new Ob(1.2);let Ub=class e extends(_o(cA(Cr))){dispose(){this.disposeButtonNode(),super.dispose()}setBaseColor(e){this._settableBaseColorProperty.paint=e}set baseColor(e){this.setBaseColor(e)}get baseColor(){return this.getBaseColor()}getBaseColor(){return this._settableBaseColorProperty.paint}pdomClick(){this._pressListener.click(null)}constructor(i,n,s,r){var o;const a=(0,t.Ay)()({content:null,xMargin:10,yMargin:5,xAlign:"center",yAlign:"center",xContentOffset:0,yContentOffset:0,baseColor:Hb.LIGHT_BLUE,cursor:"pointer",buttonAppearanceStrategy:e.FlatAppearanceStrategy,buttonAppearanceStrategyOptions:{},contentAppearanceStrategy:null,contentAppearanceStrategyOptions:{},enabledAppearanceStrategy:(e,t,i,n)=>{i.filters=e?[]:[Yb,Gb],n&&(n.filters=e?[]:[Rb.FULL],n.opacity=e?1:ff.DISABLED_OPACITY)},disabledColor:Hb.LIGHT_GRAY,tagName:"button",tandemNameSuffix:"Button",visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0},r);a.listenerOptions=(0,t.sF)({tandem:null==(o=a.tandem)?void 0:o.createTandem("pressListener")},a.listenerOptions),a.enabledProperty=i.enabledProperty,super(),this.contentContainer=null,this.layoutSizeProperty=new d.A(new Be(0,0)),this.content=a.content,this.buttonModel=i,this._settableBaseColorProperty=new xb(a.baseColor),this._disabledColorProperty=new xb(a.disabledColor),this.baseColorProperty=new oe([this._settableBaseColorProperty,this.enabledProperty,this._disabledColorProperty],(e,t,i)=>t?e:i),this._pressListener=i.createPressListener(a.listenerOptions),this.addInputListener(this._pressListener),n.fill=this.baseColorProperty,this.addChild(n);const l=new a.buttonAppearanceStrategy(n,s,this.baseColorProperty,a.buttonAppearanceStrategyOptions);let h;a.contentAppearanceStrategy&&a.content&&(h=new a.contentAppearanceStrategy(a.content,s,a.contentAppearanceStrategyOptions)),this.maxLineWidth=l.maxLineWidth;let c=null,u=null;a.content&&(this.contentContainer=new Cr({children:[a.content],pickable:!1}),c=new qb(this.contentContainer,{xAlign:a.xAlign,yAlign:a.yAlign,leftMargin:a.xMargin+a.xContentOffset,rightMargin:a.xMargin-a.xContentOffset,topMargin:a.yMargin+a.yContentOffset,bottomMargin:a.yMargin-a.yContentOffset}),u=ye.multilink([n.boundsProperty,this.layoutSizeProperty],(e,t)=>{t.width>0&&t.height>0&&(c.alignBounds=Ie.point(e.center).dilatedXY(t.width/2,t.height/2))}),this.addChild(c)),this.mutate(a),this.enabledProperty.link(e=>a.enabledAppearanceStrategy(e,this,n,c)),this.disposeButtonNode=()=>{c&&c.dispose(),u&&u.dispose(),l.dispose&&l.dispose(),h&&h.dispose&&h.dispose(),this._pressListener.dispose(),this.baseColorProperty.dispose(),this._settableBaseColorProperty.dispose(),this._disabledColorProperty.dispose()}}};Ub.FlatAppearanceStrategy=class{dispose(){this.disposeFlatAppearanceStrategy()}constructor(e,i,n,s){const r=new xb(n,{luminanceFactor:.4}),o=new xb(n,{luminanceFactor:-.4}),a=n,l=r,h=o,c=(0,t.sF)({stroke:o},s),d="number"==typeof c.lineWidth?c.lineWidth:1;function u(t){switch(t){case Sb.IDLE:e.fill=a;break;case Sb.OVER:e.fill=l;break;case Sb.PRESSED:e.fill=h;break;default:throw new Error("unsupported interactionState: "+t)}}e.stroke=c.stroke||o,e.lineWidth=d,this.maxLineWidth=e.hasStroke()?d:0,e.cachedPaints=[a,l,h],i.link(u),this.disposeFlatAppearanceStrategy=()=>{i.hasListener(u)&&i.unlink(u),r.dispose(),o.dispose()}}},fb.register("ButtonNode",Ub);let zb=class e extends Ub{constructor(i,n,s){let r=(0,t.Ay)()({size:null,minWidth:10,minHeight:10,xMargin:8,yMargin:5,touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,touchAreaXShift:0,touchAreaYShift:0,mouseAreaXShift:0,mouseAreaYShift:0,stroke:null,lineWidth:.5,cornerRadius:4,leftTopCornerRadius:null,rightTopCornerRadius:null,leftBottomCornerRadius:null,rightBottomCornerRadius:null,buttonAppearanceStrategy:e.ThreeDAppearanceStrategy},s);r.content,r.size,r.buttonAppearanceStrategyOptions||(r.buttonAppearanceStrategyOptions={stroke:r.stroke,lineWidth:r.lineWidth});const o=new ua(null),a=_.pick(r,Cr.REQUIRES_BOUNDS_OPTION_KEYS);var l;r=_.omit(r,Cr.REQUIRES_BOUNDS_OPTION_KEYS),super(i,o,n,r),this.buttonNodeConstraint=new Wb(this,this.layoutSizeProperty,{content:null!=(l=r.content)?l:null,size:r.size,buttonBackground:o,buttonBackgroundOptions:r,minWidth:r.minWidth,minHeight:r.minHeight,xMargin:r.xMargin,yMargin:r.yMargin,maxLineWidth:this.maxLineWidth,touchAreaXDilation:r.touchAreaXDilation,touchAreaYDilation:r.touchAreaYDilation,touchAreaXShift:r.touchAreaXShift,touchAreaYShift:r.touchAreaYShift,mouseAreaXDilation:r.mouseAreaXDilation,mouseAreaYDilation:r.mouseAreaYDilation,mouseAreaXShift:r.mouseAreaXShift,mouseAreaYShift:r.mouseAreaYShift}),this.addDisposable(this.buttonNodeConstraint),this.mutate(a)}};zb.ThreeDAppearanceStrategy=class{dispose(){this.disposeThreeDAppearanceStrategy()}constructor(e,i,n,s){const r=s&&s.stroke?s.stroke:new xb(n,{luminanceFactor:-.4}),o=s&&void 0!==s.lineWidth?s.lineWidth:.5,a=(0,t.Ay)()({stroke:r,lineWidth:o,overStroke:r,overLineWidth:o,overFill:n,overButtonOpacity:1,selectedStroke:r,selectedLineWidth:o,selectedButtonOpacity:1,deselectedStroke:r,deselectedFill:null,deselectedLineWidth:o,deselectedButtonOpacity:1},s),l=new xb(n,{luminanceFactor:.7}),h=new xb(n,{luminanceFactor:.5}),c=new xb(n,{luminanceFactor:.2}),d=new xb(n,{luminanceFactor:-.3}),u=new xb(n,{luminanceFactor:-.4}),p=new xb(n,{luminanceFactor:-.5}),m=new oe([n],e=>e.withAlpha(0)),g=new Wr(255,255,255,.7),A=new ua(null,{stroke:a.stroke,lineWidth:a.lineWidth,pickable:!1});let y;e.addChild(A),this.maxLineWidth="number"==typeof a.lineWidth?a.lineWidth:0;const f=()=>{if(!e.shape)return;const t=e.shape.bounds.width,s=e.shape.bounds.height;A.shape=e.shape;const r=Math.min(7/s,1),o=Math.max(1-3/s,0),u=Math.min(7/t,1),f=Math.max(1-3/t,0),b=new tb(0,0,0,s).addColorStop(0,l).addColorStop(r,n).addColorStop(o,n).addColorStop(1,p),P=new tb(0,0,t,0).addColorStop(0,g).addColorStop(u,m).addColorStop(f,m).addColorStop(1,p),V=new tb(0,0,0,s).addColorStop(0,l).addColorStop(r,h).addColorStop(o,h).addColorStop(1,p),v=new tb(0,0,t,0).addColorStop(0,g).addColorStop(u/2,new Wr(255,255,255,0)).addColorStop(f,m).addColorStop(1,d),w=new tb(0,0,0,s).addColorStop(0,l).addColorStop(.67*r,d).addColorStop(o,c).addColorStop(1,p);e.cachedPaints=[b,V,w],A.cachedPaints=[P,v],y&&i.unlink(y),y=t=>{switch(t){case Sb.IDLE:e.fill=a.deselectedFill||b,e.stroke=a.deselectedStroke,e.lineWidth=a.deselectedLineWidth,e.opacity=a.deselectedButtonOpacity,A.fill=P,A.opacity=a.deselectedButtonOpacity;break;case Sb.OVER:e.fill=V,e.stroke=a.overStroke,e.lineWidth=a.overLineWidth,e.opacity=a.overButtonOpacity,A.fill=v,A.opacity=a.overButtonOpacity;break;case Sb.PRESSED:e.fill=w,e.stroke=a.selectedStroke,e.lineWidth=a.selectedLineWidth,e.opacity=a.selectedButtonOpacity,A.fill=v,A.opacity=a.selectedButtonOpacity;break;default:throw new Error("unsupported interactionState: "+t)}},i.link(y)};e.selfBoundsProperty.link(f),this.disposeThreeDAppearanceStrategy=()=>{e.selfBoundsProperty.unlink(f),i.hasListener(y)&&i.unlink(y),l.dispose(),h.dispose(),c.dispose(),d.dispose(),u.dispose(),p.dispose(),m.dispose()}}};let Wb=class extends fy{layout(){super.layout();const e=this.buttonNode,t=this.options.content,i=t?this.createLayoutProxy(t):null;if(!!t!=!!i)return;const n=e.widthSizable,s=e.heightSizable;let r=i?i.minimumWidth+2*this.options.xMargin:0,o=i?i.minimumHeight+2*this.options.yMargin:0;this.options.size&&(r=this.options.size.width,o=this.options.size.height),this.options.minWidth&&(r=Math.max(this.options.minWidth+this.options.maxLineWidth,r)),this.options.minHeight&&(o=Math.max(this.options.minHeight+this.options.maxLineWidth,o));const a=this.isFirstLayout||n?r:e.localMinimumWidth,l=this.isFirstLayout||s?o:e.localMinimumHeight;var h,c;if(this.lastLocalWidth=this.isFirstLayout||n?Math.max(a,n&&null!=(h=e.localPreferredWidth)?h:0):this.lastLocalWidth,this.lastLocalHeight=this.isFirstLayout||s?Math.max(l,s&&null!=(c=e.localPreferredHeight)?c:0):this.lastLocalHeight,(this.isFirstLayout||n||s)&&(this.options.buttonBackground.shape=function(e,t,i){const n=Math.min(e/2,t/2);return Hi.roundedRectangleWithRadii(0,0,e,t,{topLeft:Math.min(n,null!==i.leftTopCornerRadius?i.leftTopCornerRadius:i.cornerRadius),topRight:Math.min(n,null!==i.rightTopCornerRadius?i.rightTopCornerRadius:i.cornerRadius),bottomLeft:Math.min(n,null!==i.leftBottomCornerRadius?i.leftBottomCornerRadius:i.cornerRadius),bottomRight:Math.min(n,null!==i.rightBottomCornerRadius?i.rightBottomCornerRadius:i.cornerRadius)})}((n?this.lastLocalWidth:a)-this.options.maxLineWidth,(s?this.lastLocalHeight:l)-this.options.maxLineWidth,this.options.buttonBackgroundOptions),this.buttonNode.touchArea=this.options.buttonBackground.localBounds.dilatedXY(this.options.touchAreaXDilation,this.options.touchAreaYDilation).shiftedXY(this.options.touchAreaXShift,this.options.touchAreaYShift),this.buttonNode.mouseArea=this.options.buttonBackground.localBounds.dilatedXY(this.options.mouseAreaXDilation,this.options.mouseAreaYDilation).shiftedXY(this.options.mouseAreaXShift,this.options.mouseAreaYShift)),i){const e=this.lastLocalWidth-2*this.options.xMargin,t=this.lastLocalHeight-2*this.options.yMargin;if(i.preferredWidth=e,i.preferredHeight=t,this.options.size){const i=this.buttonNode.contentContainer;i.maxWidth=e,i.maxHeight=t}}this.isFirstLayout=!1,this.layoutSizeProperty.value=new Be(this.lastLocalWidth,this.lastLocalHeight),e.localMinimumWidth=a,e.localMinimumHeight=l,i&&i.dispose()}dispose(){this.buttonNode.localPreferredWidthProperty.unlink(this._updateLayoutListener),this.buttonNode.localPreferredHeightProperty.unlink(this._updateLayoutListener),super.dispose()}constructor(e,t,i){super(e),this.buttonNode=e,this.layoutSizeProperty=t,this.isFirstLayout=!0,this.lastLocalWidth=0,this.lastLocalHeight=0,this.options=i,this.buttonNode.localPreferredWidthProperty.lazyLink(this._updateLayoutListener),this.buttonNode.localPreferredHeightProperty.lazyLink(this._updateLayoutListener),this.options.content&&this.addNode(this.options.content),this.layout()}};fb.register("RectangularButton",zb);let Qb=class extends zb{dispose(){super.dispose(),this.disposeRectangularPushButton()}addListener(e){this.pushButtonModel.addListener(e)}removeListener(e){this.pushButtonModel.removeListener(e)}constructor(e){const i=(0,t.Ay)()({soundPlayer:Gm.get("pushButton"),tandem:A.A.REQUIRED,listenerOptions:{tandem:A.A.OPT_OUT}},e),n=i.listener,s=_.omit(i,["listener"]),r=new Ib(s);super(r,new Tb(r),s),this.pushButtonModel=r,n&&this.addListener(n);const o=()=>{i.soundPlayer.play()};r.produceSoundEmitter.addListener(o),this.disposeRectangularPushButton=function(){r.produceSoundEmitter.removeListener(o),r.dispose()}}};fb.register("RectangularPushButton",Qb);const Kb=Hi.roundRectangle(1,1,25,25,4.99,4.99).getStrokedShape(new ci({lineWidth:2})),jb=new Hi("M26,14.68v6.33c0,2.76-2.23,4.99-4.99,4.99H5.99c-2.76,0-4.99-2.23-4.99-4.99V5.99C1,3.23,3.23,1,5.99,1h15.02").getStrokedShape(new ci({lineWidth:2,lineCap:"round"})),_b=new Hi("M13.42,21.27l-7.42-7.42c-.68-.68-.68-1.78,0-2.46l1.71-1.71c.68-.68,1.78-.68,2.46,0l4.48,4.48L28.29.51c.68-.68,1.78-.68,2.46,0l1.71,1.71c.68.68.68,1.78,0,2.46L15.88,21.27c-.68.68-1.78.68-2.46,0Z"),Zb=new Hi([...jb.subpaths,..._b.subpaths]),Xb={valueType:"boolean"},Jb=vt(1.3,0,0,0,1.3,0,0,0,1),$b=Kb.transformed(Jb),eP=Zb.transformed(Jb);let tP=class extends(Wo(cA(Cr))){setInputEnabledProperty(e){return this}dispose(){this.constraint.dispose(),this.disposeCheckbox(),super.dispose()}setCheckboxColorBackground(e){this.backgroundNode.fill=e}set checkboxColorBackground(e){this.setCheckboxColorBackground(e)}get checkboxColorBackground(){return this.getCheckboxColorBackground()}getCheckboxColorBackground(){return this.backgroundNode.fill}setCheckboxColor(e){this.checkedNode.fill=this.uncheckedNode.fill=e}set checkboxColor(e){this.setCheckboxColor(e)}get checkboxColor(){return this.getCheckboxColor()}getCheckboxColor(){return this.checkedNode.fill}setMouseArea(e){return this._isSettingAreas||(this._isMouseAreaCustomized=!0),super.setMouseArea(e)}setTouchArea(e){return this._isSettingAreas||(this._isTouchAreaCustomized=!0),super.setTouchArea(e)}constructor(e,i,n){const s=(0,t.Ay)()({spacing:5,boxWidth:21,checkboxColor:"black",checkboxColorBackground:"white",touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,checkedSoundPlayer:Gm.get("checkboxChecked"),uncheckedSoundPlayer:Gm.get("checkboxUnchecked"),phetioDisplayOnlyPropertyInstrumented:!1,cursor:"pointer",disabledOpacity:ff.DISABLED_OPACITY,tandem:A.A.REQUIRED,tandemNameSuffix:"Checkbox",phetioEventType:ze.A.USER,visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,phetioReadOnly:g.A.DEFAULT_OPTIONS.phetioReadOnly,phetioFeatured:!0,tagName:"input",inputType:"checkbox",appendDescription:!0,voicingCheckedObjectResponse:null,voicingUncheckedObjectResponse:null,accessibleNameBehavior:cA.BASIC_ACCESSIBLE_NAME_BEHAVIOR,accessibleHelpTextBehavior:cA.BASIC_HELP_TEXT_BEHAVIOR,checkedContextResponse:null,uncheckedContextResponse:null,voiceNameResponseOnSelection:!0},n);super(),this._isMouseAreaCustomized=!1,this._isTouchAreaCustomized=!1,this._isSettingAreas=!1,this.backgroundNode=new fa(0,-s.boxWidth,.95*s.boxWidth,.95*s.boxWidth,.2*s.boxWidth,.2*s.boxWidth,{fill:s.checkboxColorBackground}),this.uncheckedNode=new ua($b,{fill:s.checkboxColor});const r=s.boxWidth/this.uncheckedNode.width;this.uncheckedNode.scale(r),this.uncheckedNode.center=this.backgroundNode.center,this.checkedNode=new ua(eP,{scale:r,fill:s.checkboxColor}),this.checkedNode.translation=this.uncheckedNode.translation;const a=new Cr({children:[this.backgroundNode,this.checkedNode,this.uncheckedNode]}),l=new fa({});this.children=[a,i,l],this.constraint=new iP(this,a,this.checkedNode,i,l,s),this.constraint.updateLayout(),i.pickable=!1,i.pdomVisible=!1;const h=new Mr({fire:()=>{e.value=!e.value,(0,k.A)(e.value,Xb),e.value?(s.checkedSoundPlayer.play(),s.checkedContextResponse&&this.alertDescriptionUtterance(s.checkedContextResponse),this.voicingSpeakResponse({nameResponse:s.voiceNameResponseOnSelection?this.voicingNameResponse:null,objectResponse:wn.alertableToText(s.voicingCheckedObjectResponse),contextResponse:wn.alertableToText(s.checkedContextResponse)})):(s.uncheckedSoundPlayer.play(),s.uncheckedContextResponse&&this.alertDescriptionUtterance(s.uncheckedContextResponse),this.voicingSpeakResponse({nameResponse:s.voiceNameResponseOnSelection?this.voicingNameResponse:null,objectResponse:wn.alertableToText(s.voicingUncheckedObjectResponse),contextResponse:wn.alertableToText(s.uncheckedContextResponse)}))},tandem:s.tandem});this.addInputListener(h);const c=new o(!1,{tandem:s.phetioDisplayOnlyPropertyInstrumented?s.tandem.createTandem("displayOnlyProperty"):A.A.OPT_OUT,phetioFeatured:!0,phetioDocumentation:"disables interaction for use as a legend"}),d=new oe([this.enabledProperty,c],(e,t)=>e&&!t);super.setInputEnabledProperty(d);const u=new ye([e,c],(e,t)=>{this.checkedNode.visible=e,this.uncheckedNode.visible=!e,a.visible=!t,this.tagName=t?"p":"input",t||(this.pdomChecked=e)});this.mutate(s),this.setExcludeLabelSiblingFromInput(),s.accessibleName||(this.accessibleName=yb(i)),this.addLinkedElement(e,{tandemName:"property"}),this.disposeCheckbox=()=>{l.dispose(),this.backgroundNode.dispose(),this.uncheckedNode.dispose(),this.checkedNode.dispose(),a.dispose(),h.dispose(),u.dispose(),d.dispose(),c.dispose()}}},iP=class extends fy{layout(){super.layout();const e=this.createLayoutProxy(this.content);if(!e)return;const t=e.minimumWidth,i=this.checkedNode.right-this.checkboxNode.left,n=i+this.options.spacing+t,s=Math.max(n,this.checkbox.localPreferredWidth||0);e.preferredWidth=s-i-this.options.spacing,e.left=this.checkedNode.right+this.options.spacing,e.centerY=this.checkedNode.centerY,this.rectangle.rectBounds=this.checkboxNode.bounds.union(e.bounds).withMaxX(Math.max(this.checkboxNode.left+s,e.right)),this.checkbox._isSettingAreas=!0,this.checkbox._isTouchAreaCustomized||(this.checkbox.touchArea=this.checkbox.localBounds.dilatedXY(this.options.touchAreaXDilation,this.options.touchAreaYDilation)),this.checkbox._isMouseAreaCustomized||(this.checkbox.mouseArea=this.checkbox.localBounds.dilatedXY(this.options.mouseAreaXDilation,this.options.mouseAreaYDilation)),this.checkbox._isSettingAreas=!1,e.dispose(),this.checkbox.localMinimumWidth=n}dispose(){this.checkbox.localPreferredWidthProperty.unlink(this._updateLayoutListener),super.dispose()}constructor(e,t,i,n,s,r){super(e),this.checkbox=e,this.checkboxNode=t,this.checkedNode=i,this.content=n,this.rectangle=s,this.options=r,this.checkbox.localPreferredWidthProperty.lazyLink(this._updateLayoutListener),this.addNode(n)}};fb.register("Checkbox",tP);let nP=class e extends fy{layout(){if(super.layout(),!_.some(this.cells,e=>!e.isConnected())){const e=this.cells.map(e=>e.proxy);this.layoutCallback.apply(null,e),this.finishedLayoutEmitter.emit()}}dispose(){this.cells.forEach(e=>e.dispose()),super.dispose()}static create(t,i,n){return new e(t,i,n)}constructor(e,t,i){super(e),this.lock(),this.nodes=t,this.cells=t.map(e=>new Iy(this,e,null)),this.layoutCallback=i,this.nodes.forEach(e=>this.addNode(e,!1)),this.unlock(),this.updateLayout()}};it.A.register("ManualConstraint",nP);let sP=class e extends Cr{dispose(){this.disposeToggleNode(),super.dispose()}static CENTER(e){for(let t=1;t{const t=[];for(let i=0;ie.dispose())}}};fb.register("ToggleNode",sP);let rP=class extends sP{constructor(e,t,i,n){super(e,[{value:!0,createNode:()=>t},{value:!1,createNode:()=>i}],n)}};fb.register("BooleanToggleNode",rP);let oP=class extends me{constructor(e){super([e.looksOverProperty,e.looksPressedProperty],(e,t)=>e&&!t?Sb.OVER:t?Sb.PRESSED:Sb.IDLE,{valueType:Sb})}};fb.register("ToggleButtonInteractionStateProperty",oP);let aP=class extends Cb{dispose(){this.disposeToggleButtonModel(),super.dispose()}toggle(){this.toggledEmitter.emit(),this.produceSoundEmitter.emit()}constructor(e,i,n,s){const r=(0,t.Ay)()({tandem:A.A.REQUIRED},s);super(r),this.valueOff=e,this.valueOn=i,this.valueProperty=n;const o=e=>{(this.overProperty.get()||this.focusedProperty.get())&&this.enabledProperty.get()&&!this.interrupted&&(e||this.toggle())};this.downProperty.link(o),this.toggledEmitter=new b.A({tandem:r.tandem.createTandem("toggledEmitter"),phetioDocumentation:"Emits when the button is toggled",phetioEventType:ze.A.USER});this.toggledEmitter.addListener(()=>{this.valueProperty.value=this.valueProperty.value===this.valueOff?this.valueOn:this.valueOff}),this.disposeToggleButtonModel=()=>{this.downProperty.unlink(o),this.toggledEmitter.dispose()}}};fb.register("ToggleButtonModel",aP);let lP=class extends zb{dispose(){this.disposeRectangularToggleButton(),super.dispose()}constructor(e,i,n,s){const r=(0,t.Ay)()({valueOffSoundPlayer:Gm.get("toggleOff"),valueOnSoundPlayer:Gm.get("toggleOn"),tandem:A.A.REQUIRED,phetioFeatured:!0,listenerOptions:{tandem:A.A.OPT_OUT}},s),o=new aP(i,n,e,r),a=new oP(o);super(o,a,r),this.addLinkedElement(e,{tandemName:"property"});const l=()=>{e.value===i?r.valueOffSoundPlayer.play():e.value===n&&r.valueOnSoundPlayer.play()};this.buttonModel.produceSoundEmitter.addListener(l),this.disposeRectangularToggleButton=()=>{this.buttonModel.produceSoundEmitter.removeListener(l),o.dispose()}}};fb.register("RectangularToggleButton",lP);let hP=class extends lP{dispose(){this.disposeBooleanRectangularToggleButton(),super.dispose()}constructor(e,i,n,s){const r=new rP(e,i,n);super(e,!1,!0,(0,t.Ay)()({content:r,tandem:A.A.REQUIRED},s)),this.disposeBooleanRectangularToggleButton=()=>{r.dispose()}}};fb.register("BooleanRectangularToggleButton",hP);let cP=class extends hP{dispose(){this.disposeExpandCollapseButton(),super.dispose()}constructor(e,i){const n=(0,t.Ay)()({sideLength:25,stroke:"black",touchAreaXDilation:5,touchAreaYDilation:5,tandem:A.A.REQUIRED,tandemNameSuffix:"Button"},i);n.cornerRadius=.1*n.sideLength,n.xMargin=.2*n.sideLength,n.yMargin=n.xMargin,n.buttonAppearanceStrategy=Ub.FlatAppearanceStrategy;const s=.6*n.sideLength,r={lineWidth:.15*n.sideLength,stroke:"white",centerX:n.sideLength/2,centerY:n.sideLength/2,pickable:!1},o=(new Hi).moveTo(s/2,0).lineTo(s/2,s).moveTo(0,s/2).lineTo(s,s/2),a=new ua(o,r),l=(new Hi).moveTo(-s/2,0).lineTo(s/2,0),h=new ua(l,r);super(e,h,a,n);const c=e=>{this.baseColor=e?"rgb( 255, 85, 0 )":"rgb( 0, 179, 0 )",this.setPDOMAttribute("aria-expanded",e)};e.link(c),this.disposeExpandCollapseButton=()=>{e.unlink(c)}}};fb.register("ExpandCollapseButton",cP);const dP={fill:"white",stroke:"black",lineWidth:1,lineDash:[],xMargin:5,yMargin:5,cornerRadius:10,resize:!0,backgroundPickable:!0,excludeInvisibleChildrenFromBounds:!0,align:"left",minWidth:0,minHeight:0,labelTagName:"span",accessibleHelpTextBehavior:_s.HELP_TEXT_BEFORE_CONTENT};let uP=class extends(_o(Cr)){getStroke(){return this._background.stroke}get stroke(){return this.getStroke()}set stroke(e){this.setStroke(e)}setStroke(e){this._background.stroke=e,this.constraint&&this.constraint.updateLayoutAutomatically()}getFill(){return this._background.fill}get fill(){return this.getFill()}set fill(e){this.setFill(e)}setFill(e){this._background.fill=e}setExcludeInvisibleChildrenFromBounds(e){super.setExcludeInvisibleChildrenFromBounds(e),this.constraint.updateLayoutAutomatically()}constructor(e,i){const n=(0,t.hz)()({},dP,i);super(),this._content=e,this._backgroundContainer=new Cr,this._background=new fa(0,0,1,1,{lineWidth:n.lineWidth,pickable:n.backgroundPickable,lineDash:n.lineDash,cornerRadius:n.cornerRadius}),this.setStroke(n.stroke),this.setFill(n.fill),this.addChild(this._backgroundContainer),this.addChild(e),this.constraint=new pP(this,n),this.constraint.updateLayout(),this.constraint.enabled=n.resize,this.mutate(n)}};uP.DEFAULT_PANEL_OPTIONS=dP;let pP=class extends fy{layout(){super.layout();const e=this.panel,t=e._content,i=e._background,n=e.isChildIncludedInLayout(t);if(e._backgroundContainer.children=n?[i]:[],!n)return e.localMinimumWidth=null,void(e.localMinimumHeight=null);const s=this.createLayoutProxy(t);if(!s)return;const r=null===e.stroke?0:this.lineWidth,o=s.minimumWidth,a=s.minimumHeight,l=Math.max(this.minWidth,o+2*this.xMargin)+r,h=Math.max(this.minHeight,a+2*this.yMargin)+r,c=Math.max(l,e.localPreferredWidth||0),d=Math.max(h,e.localPreferredHeight||0);s.preferredWidth=c-r-2*this.xMargin,s.preferredHeight=d-r-2*this.yMargin,i.setRect(0,0,c-r,d-r),"center"===this.align?s.center=i.center:"left"===this.align?(s.left=i.centerX-i.rectWidth/2+this.xMargin,s.centerY=i.centerY):(s.right=i.centerX+i.rectWidth/2-this.xMargin,s.centerY=i.centerY),e.localMinimumWidth=l,e.localMinimumHeight=h,s.dispose()}dispose(){this.panel.localPreferredWidthProperty.unlink(this._updateLayoutListener),this.panel.localPreferredHeightProperty.unlink(this._updateLayoutListener),super.dispose()}constructor(e,t){super(e),this.panel=e,this.minWidth=t.minWidth,this.minHeight=t.minHeight,this.xMargin=t.xMargin,this.yMargin=t.yMargin,this.lineWidth=t.lineWidth,this.align=t.align,this.panel.localPreferredWidthProperty.lazyLink(this._updateLayoutListener),this.panel.localPreferredHeightProperty.lazyLink(this._updateLayoutListener),this.addNode(e._content)}};function mP(e,t,i,n,s,r,o){try{var a=e[r](o),l=a.value}catch(h){return void i(h)}a.done?t(l):Promise.resolve(l).then(n,s)}function gP(e){return function(){var t=this,i=arguments;return new Promise((function(n,s){var r=e.apply(t,i);function o(e){mP(r,n,s,o,a,"next",e)}function a(e){mP(r,n,s,o,a,"throw",e)}o(void 0)}))}}fb.register("Panel",uP);const AP=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return ee(e,t)};let yP=class extends Ve.A{};yP.MOUSE=new yP,yP.TOUCH=new yP,yP.NONE=new yP,yP.enumeration=new Pe.A(yP);let fP=class t{static initialize(e,i){document.addEventListener("keydown",n=>{n.ctrlKey&&"H"===n.key&&(t.helper||(t.helper=new t(e,i)),t.helper.activeProperty.value=!t.helper.activeProperty.value)})}constructor(t,i){this.sim=t,this.simDisplay=i,this.activeProperty=new d.A(!1),this.visualTreeVisibleProperty=new o(!1,{tandem:A.A.OPT_OUT}),this.pdomTreeVisibleProperty=new o(!1,{tandem:A.A.OPT_OUT}),this.underPointerVisibleProperty=new o(!0,{tandem:A.A.OPT_OUT}),this.optionsVisibleProperty=new o(!0,{tandem:A.A.OPT_OUT}),this.previewVisibleProperty=new o(!1,{tandem:A.A.OPT_OUT}),this.selectedNodeContentVisibleProperty=new o(!0,{tandem:A.A.OPT_OUT}),this.selectedTrailContentVisibleProperty=new o(!0,{tandem:A.A.OPT_OUT}),this.highlightVisibleProperty=new o(!0,{tandem:A.A.OPT_OUT}),this.boundsVisibleProperty=new o(!0,{tandem:A.A.OPT_OUT}),this.selfBoundsVisibleProperty=new o(!1,{tandem:A.A.OPT_OUT}),this.getHelperNodeVisibleProperty=new o(!0,{tandem:A.A.OPT_OUT}),this.helperVisibleProperty=new o(!0,{tandem:A.A.OPT_OUT}),this.inputBasedPickingProperty=new o(!0,{tandem:A.A.OPT_OUT}),this.useLeafNodeProperty=new o(!1,{tandem:A.A.OPT_OUT}),this.pointerAreaTypeProperty=new rh(yP.MOUSE,{tandem:A.A.OPT_OUT}),this.pointerPositionProperty=new d.A(Te.A.ZERO),this.overInterfaceProperty=new o(!1,{tandem:A.A.OPT_OUT}),this.selectedTrailProperty=new d.A(null),this.treeHoverTrailProperty=new d.A(null),this.pointerTrailProperty=new oe([this.pointerPositionProperty,this.overInterfaceProperty,this.pointerAreaTypeProperty,this.inputBasedPickingProperty],(e,t,n,s)=>{if(t)return null;if(!s)return MP(i.rootNode,e);let r=i.rootNode.hitTest(e,n===yP.MOUSE,n===yP.TOUCH);if(r&&!this.useLeafNodeProperty.value){for(;r.length>0&&0===r.lastNode().inputListeners.length;)r.removeDescendant();if(0===r.length)r=null;else{const e=r.lastNode().inputListeners[0];e instanceof kr&&e.targetNode&&e.targetNode!==r.lastNode()&&r.containsNode(e.targetNode)&&(r=r.subtrailTo(e.targetNode))}}return r},{tandem:A.A.OPT_OUT,valueComparisonStrategy:"equalsFunction"}),this.previewTrailProperty=new oe([this.selectedTrailProperty,this.treeHoverTrailProperty,this.pointerTrailProperty],(e,t,i)=>e||(t||i)),this.previewShapeProperty=new oe([this.previewTrailProperty,this.inputBasedPickingProperty,this.pointerAreaTypeProperty],(e,t,i)=>e?t?LP(e,i===yP.MOUSE,i===yP.TOUCH):LP(e,!1,!1):null),this.helperNodeProperty=new oe([this.selectedTrailProperty],e=>{if(e){const t=e.lastNode();return(e=>!!e.getHelperNode)(t)?t.getHelperNode():null}return null}),this.screenViewProperty=new d.A(null),this.imageDataProperty=new d.A(null),this.colorProperty=new oe([this.pointerPositionProperty,this.imageDataProperty],(e,t)=>{if(!t)return Wr.TRANSPARENT;const i=Math.floor(e.x/this.simDisplay.width*t.width),n=Math.floor(e.y/this.simDisplay.height*t.height),s=4*(i+t.width*n);return i<0||n<0||i>t.width||n>t.height?Wr.TRANSPARENT:new Wr(t.data[s],t.data[s+1],t.data[s+2],t.data[s+3]/255)},{tandem:A.A.OPT_OUT});const n=new o(phet.chipper.queryParameters.fuzz,{tandem:A.A.OPT_OUT});n.lazyLink(e=>{phet.chipper.queryParameters.fuzz=e});const s=new o(!1,{tandem:A.A.OPT_OUT}),r=new d.A({name:"view units",multiplier:0}),a=new d.A(Ie.NOTHING),l=new Cr({renderer:"svg"}),h=new oh(this.pointerPositionProperty,{tandem:A.A.OPT_OUT,bidirectional:!0,map:e=>{const t=this.screenViewProperty.value;if(t){const i=t.globalToLocalPoint(e);return`global: x: ${AP(e.x)}, y: ${AP(e.y)}
view: x: ${AP(i.x)}, y: ${AP(i.y)}`}return"-"}}),c=new df(h,{font:new Gc(12)}),u=new oh(this.colorProperty,{tandem:A.A.OPT_OUT,bidirectional:!0,map:e=>`${e.toHexString()} ${e.toCSS()}`}),p=new df(u,{font:new Gc(12)});this.colorProperty.link(e=>{p.fill=Wr.getLuminance(e)>128?Wr.BLACK:Wr.WHITE});const m=new Wr("#804000"),g=new Wr("#208020"),y=new Wr(255,100,0),f=new Wr(0,0,255),b=new Wr(255,0,0),P=new Wr(200,0,200),V=new oe([this.inputBasedPickingProperty,this.pointerAreaTypeProperty],(e,t)=>e?t===yP.MOUSE?f:t===yP.TOUCH?b:P:y,{tandem:A.A.OPT_OUT}),v=new uP(p,{cornerRadius:0,stroke:null,fill:this.colorProperty}),w=new Cr({visibleProperty:this.previewVisibleProperty}),E=new fa(0,0,200,200,{fill:new uf(new Cr({children:[new fa(0,0,10,10,{fill:"#ddd"}),new fa(10,10,10,10,{fill:"#ddd"}),new fa(0,10,10,10,{fill:"#fafafa"}),new fa(10,0,10,10,{fill:"#fafafa"})]}),2,0,0,20,20),stroke:"black",visibleProperty:this.previewVisibleProperty});this.previewTrailProperty.link(e=>{if(w.removeAllChildren(),e){w.addChild(E);const t=e.lastNode();if(t.bounds.isValid()){const e=.9*window.devicePixelRatio*Math.min(E.selfBounds.width/t.width,E.selfBounds.height/t.height);w.addChild(new Cr({scale:e/window.devicePixelRatio,center:E.center,children:[sb(t,{resolution:e,sourceBounds:t.bounds.dilated(.01*t.bounds.width).roundedOut()})]}))}}});const S=new Rf({spacing:3,align:"left",visibleProperty:this.selectedNodeContentVisibleProperty});this.previewTrailProperty.link(e=>{S.children=e?xP(e):[]});const T=new bP(n,"Fuzz"),C=new bP(s,"Measuring Tape"),I=new bP(this.visualTreeVisibleProperty,"Visual Tree"),x=new bP(this.pdomTreeVisibleProperty,"PDOM Tree"),D=new bP(this.inputBasedPickingProperty,"Input-based"),k=new bP(this.useLeafNodeProperty,"Use Leaf",{enabledProperty:this.inputBasedPickingProperty}),M=new bP(this.highlightVisibleProperty,"Highlight",{labelOptions:{fill:V}}),B=new bP(this.boundsVisibleProperty,"Bounds",{labelOptions:{fill:m}}),O=new bP(this.selfBoundsVisibleProperty,"Self Bounds",{labelOptions:{fill:g}}),L=new bP(this.getHelperNodeVisibleProperty,"getHelperNode()"),R=new Eb(this.pointerAreaTypeProperty,[{value:yP.MOUSE,createNode:e=>new Bc("Mouse",{fontSize:12})},{value:yP.TOUCH,createNode:e=>new Bc("Touch",{fontSize:12})},{value:yP.NONE,createNode:e=>new Bc("None",{fontSize:12})}],{orientation:"horizontal",enabledProperty:this.inputBasedPickingProperty,radioButtonOptions:{xSpacing:3},spacing:10,tandem:A.A.OPT_OUT}),N=new Rf({align:"left",visibleProperty:this.selectedTrailContentVisibleProperty});this.previewTrailProperty.link(e=>{if(N.children=[],e){e.nodes.slice().forEach((t,i)=>{N.addChild(new df(`${i>0?e.nodes[i-1].children.indexOf(t):"-"} ${t.constructor.name}`,{font:new Gc(12),fill:i===e.nodes.length-1?"black":"#bbb",layoutOptions:{leftMargin:10*i},cursor:"pointer",inputListeners:[new Mr({fire:()=>{this.selectedTrailProperty.value=e.subtrailTo(t),H()},tandem:A.A.OPT_OUT})]}))}),e.lastNode().children.forEach((t,i)=>{N.addChild(new df(`${e.lastNode().children.indexOf(t)} ${t.constructor.name}`,{font:new Gc(12),fill:"#88f",layoutOptions:{leftMargin:10*e.nodes.length},cursor:"pointer",inputListeners:[new Mr({fire:()=>{this.selectedTrailProperty.value=e.copy().addDescendant(t,i),H()},tandem:A.A.OPT_OUT})]}))}),e.isVisible()||N.addChild(new Bc("invisible",{fill:"#60a",fontSize:12})),1!==e.getOpacity()&&N.addChild(new Bc("opacity: "+e.getOpacity(),{fill:"#888",fontSize:12}));const t=_.some(e.nodes,e=>!1===e.pickable||!e.visible),i=_.some(e.nodes,e=>e.inputListeners.length>0||!0===e.pickable);!t&&i&&N.addChild(new Bc("Hit Tested",{fill:"#f00",fontSize:12})),e.getMatrix().isIdentity()||N.addChild(new Cr({children:[new TP(e.getMatrix())]}))}});const q=new wP(this.visualTreeVisibleProperty,this,()=>new VP(new ji(i.rootNode),this)),F=new wP(this.pdomTreeVisibleProperty,this,()=>new vP(i._rootPDOMInstance,this)),H=()=>{q.focusSelected(),F.focusSelected()},Y=new ua(null,{visibleProperty:this.boundsVisibleProperty,stroke:m,fill:m.withAlpha(.1),lineDash:[2,2],lineDashOffset:2});this.previewTrailProperty.link(e=>{e&&e.lastNode().localBounds.isValid()?Y.shape=Hi.bounds(e.lastNode().localBounds).transformed(e.getMatrix()):Y.shape=null});const G=new ua(null,{visibleProperty:this.selfBoundsVisibleProperty,stroke:g,fill:g.withAlpha(.1),lineDash:[2,2],lineDashOffset:1});this.previewTrailProperty.link(e=>{e&&e.lastNode().selfBounds.isValid()?G.shape=Hi.bounds(e.lastNode().selfBounds).transformed(e.getMatrix()):G.shape=null});const U=new oe([V],e=>e.withAlpha(.2),{tandem:A.A.OPT_OUT}),z=new ua(null,{stroke:V,lineDash:[2,2],fill:U,visibleProperty:this.highlightVisibleProperty});this.previewShapeProperty.link(e=>{z.shape=e});const W=new Cr({visibleProperty:this.getHelperNodeVisibleProperty});this.selectedTrailProperty.link(e=>{e&&(W.matrix=e.getMatrix())}),this.helperNodeProperty.link(e=>{W.removeAllChildren(),e&&W.addChild(e)}),l.addChild(Y),l.addChild(G),l.addChild(z);const Q=new Cr;Q.addInputListener(new kr({press:()=>{this.selectedTrailProperty.value=this.pointerTrailProperty.value,H()},tandem:A.A.OPT_OUT})),l.addChild(Q),l.addChild(W);const K=new Vf({orientation:"vertical",spacing:5,align:"left",children:[c,v],visibleProperty:this.underPointerVisibleProperty}),j=new Rf({spacing:3,align:"left",children:[EP("Tools"),new Rf({spacing:3,align:"left",children:[new Of({spacing:10,children:[T,C]}),new Of({spacing:10,children:[I,...i._accessible?[x]:[]]})]}),EP("Picking",void 0,{layoutOptions:{topMargin:3}}),new Rf({spacing:3,align:"left",children:[new Of({spacing:10,children:[D,k]}),R]}),EP("Show",void 0,{layoutOptions:{topMargin:3}}),new Rf({spacing:3,align:"left",children:[new Of({spacing:10,children:[M,L]}),new Of({spacing:10,children:[B,O]})]})],visibleProperty:this.optionsVisibleProperty}),Z=new Rf({spacing:5,align:"left",children:[SP("Under Pointer",this.underPointerVisibleProperty,K,{layoutOptions:{topMargin:0}}),K,SP("Options",this.optionsVisibleProperty,j),j,SP("Preview",this.previewVisibleProperty,w),w,SP("Selected Trail",this.selectedTrailContentVisibleProperty,N),N,SP("Selected Node",this.selectedNodeContentVisibleProperty,S),S],visibleProperty:this.helperVisibleProperty}),X=new Rf({spacing:5,align:"left",children:[SP("Helper",this.helperVisibleProperty,Z),new Bf,Z]}),J=new uP(X,{fill:"rgba(255,255,255,0.85)",stroke:"rgba(0,0,0,0.85)",cornerRadius:0});J.addInputListener(new Kc({translateNode:!0,targetNode:J,tandem:A.A.OPT_OUT})),J.addInputListener({wheel:e=>{const t=e.domEvent.deltaY;J.y-=1*t}}),l.addChild(J),l.addChild(q),l.addChild(F);const $=new _m(r,{tandem:A.A.OPT_OUT,visibleProperty:s,textBackgroundColor:"rgba(0,0,0,0.5)"});$.basePositionProperty.value=new Te.A(100,300),$.tipPositionProperty.value=new Te.A(200,300),l.addChild($);const ee=e=>{this.helperDisplay.width=e.width,this.helperDisplay.height=e.height,a.value=a.value.withMaxX(e.width).withMaxY(e.height),Q.mouseArea=new Ie(0,0,e.width,e.height),Q.touchArea=new Ie(0,0,e.width,e.height),q.resize(e),F.resize(e)},te=e=>{var t;this.overInterfaceProperty.value=J.bounds.containsPoint(this.pointerPositionProperty.value)||this.visualTreeVisibleProperty.value&&q.bounds.containsPoint(this.pointerPositionProperty.value)||this.pdomTreeVisibleProperty.value&&F.bounds.containsPoint(this.pointerPositionProperty.value)||W.containsPoint(this.pointerPositionProperty.value),null==(t=this.helperDisplay)||t.updateDisplay()};document.addEventListener("keyup",e=>{"Escape"===e.key&&(this.selectedTrailProperty.value=null)}),this.activeProperty.lazyLink(i=>{if(i){t.activeProperty.value=!1;const i=t.selectedScreenProperty.value;i.hasView()?this.screenViewProperty.value=i.view:this.screenViewProperty.value=null,this.helperDisplay=new jA(l,{assumeFullWindow:!0}),this.helperDisplay.initializeEvents(),t.dimensionProperty.link(ee),e.A.addListener(te),document.body.appendChild(this.helperDisplay.domElement),this.helperDisplay.domElement.style.zIndex="10000";const n=e=>{this.pointerPositionProperty.value=e.pointer.point};this.helperDisplay.addInputListener({move:n,down:n,up:n}),this.screenViewProperty.value&&(r.value={name:"view units",multiplier:this.screenViewProperty.value.getGlobalToLocalMatrix().getScaleVector().x}),this.simDisplay.foreignObjectRasterization(e=>{if(e){const t=document.createElement("img");t.addEventListener("load",()=>{const e=t.width,i=t.height,n=document.createElement("canvas"),s=n.getContext("2d");n.width=e,n.height=i,s.drawImage(t,0,0),this.activeProperty.value&&(this.imageDataProperty.value=s.getImageData(0,0,e,i))}),t.src=e}else console.log("Could not load foreign object rasterization")})}else t.dimensionProperty.unlink(ee),e.A.removeListener(te),document.body.removeChild(this.helperDisplay.domElement),this.helperDisplay.dispose(),t.activeProperty.value=!0,this.imageDataProperty.value=null,this.visualTreeVisibleProperty.value=!1})}};Xl.A.register("Helper",fP);let bP=class extends tP{constructor(e,i,n){const s=(0,t.Ay)()({tandem:A.A.OPT_OUT,boxWidth:14,labelOptions:{font:new Gc(12)}},n);super(e,new df(i,s.labelOptions),s)}},PP=class extends Cr{expand(){this.expandedProperty.value=!0}collapse(){this.expandedProperty.value=!1}expandRecusively(){this.expandedProperty.value=!0,this.childTreeNodes.forEach(e=>{e.expandRecusively()})}collapseRecursively(){this.expandedProperty.value=!1,this.childTreeNodes.forEach(e=>{e.collapseRecursively()})}constructor(e,i){const n=(0,t.Ay)()({createChildren:()=>[],spacing:0,indent:5},i);super({excludeInvisibleChildrenFromBounds:!0}),this.selfNode=e,this.selfNode.centerY=0,this.expandedProperty=new d.A(!0),this.childTreeNodes=U({elements:n.createChildren()});const s=(new Hi).moveToPoint(Te.A.createPolar(4.8,3/4*Math.PI).plusXY(1.5,0)).lineTo(1.5,0).lineToPoint(Te.A.createPolar(4.8,5/4*Math.PI).plusXY(1.5,0));this.expandCollapseButton=new fa(-6,-6,12,12,{children:[new ua(s,{stroke:"#888",lineCap:"round",lineWidth:1.5})],visible:!1,cursor:"pointer",right:0}),this.expandedProperty.link(e=>{this.expandCollapseButton.rotation=e?Math.PI/2:0}),this.expandCollapseButton.addInputListener(new Mr({fire:()=>{this.expandedProperty.value=!this.expandedProperty.value},tandem:A.A.OPT_OUT})),this.addChild(this.expandCollapseButton),this.childContainer=new Vf({orientation:"vertical",align:"left",spacing:n.spacing,children:this.childTreeNodes,x:n.indent,y:this.selfNode.bottom+n.spacing,visibleProperty:this.expandedProperty}),this.addChild(this.childContainer),this.addChild(e);const r=()=>{this.childContainer.children=this.childTreeNodes,this.expandCollapseButton.visible=this.childTreeNodes.length>0};this.childTreeNodes.addItemAddedListener(()=>{r()}),this.childTreeNodes.addItemRemovedListener(()=>{r()}),r(),this.mutate(n)}},VP=class e extends PP{find(e){if(e.equals(this.trail))return this;{const t=_.find(this.childTreeNodes,t=>e.isExtensionOf(t.trail,!0));return t?t.find(e):null}}constructor(t,i){const n=t.lastNode(),s=t.isVisible(),r=new mc({size:12}),o=new Of({spacing:5}),a=n.constructor.name;a&&o.addChild(new Bc(a,{font:r,pickable:!1,fill:s?"#000":"#60a"})),n instanceof Bc&&o.addChild(new Bc('"'+n.string+'"',{font:r,pickable:!1,fill:"#666"}));const l=fa.bounds(o.bounds,{children:[o],cursor:"pointer",fill:new oe([i.selectedTrailProperty,i.pointerTrailProperty],(e,i)=>e&&t.equals(e)?"rgba(0,128,255,0.4)":i&&t.equals(i)?"rgba(0,128,255,0.2)":"transparent",{tandem:A.A.OPT_OUT})});l.addInputListener({enter:()=>{i.treeHoverTrailProperty.value=t},exit:()=>{i.treeHoverTrailProperty.value=null}}),l.addInputListener(new Mr({fire:()=>{i.selectedTrailProperty.value=t},tandem:A.A.OPT_OUT})),super(l,{createChildren:()=>t.lastNode().children.map(n=>new e(t.copy().addDescendant(n),i))}),n.visible||(this.expandedProperty.value=!1),this.trail=t}},vP=class e extends PP{find(e){if(e.equals(this.instance.trail))return this;{const t=_.find(this.childTreeNodes,t=>e.isExtensionOf(t.instance.trail,!0));return t?t.find(e):null}}constructor(t,i){const n=t.trail,s=n.isPDOMVisible(),r=new mc({size:12}),o=new Of({spacing:5});if(n.nodes.length){const e=s?"#000":"#60a",i=n.lastNode();i.tagName&&o.addChild(new Bc(i.tagName,{font:new mc({size:12,weight:"bold"}),fill:e})),i.labelContent&&o.addChild(new Bc(i.labelContent,{font:r,fill:"#800"})),i.innerContent&&o.addChild(new Bc(i.innerContent,{font:r,fill:"#080"})),i.descriptionContent&&o.addChild(new Bc(i.descriptionContent,{font:r,fill:"#444"}));const a=t.parent?t.parent.trail:new ji,l=n.nodes.slice(a.nodes.length).map(e=>e.constructor.name).filter(e=>"Node"!==e).join(",");l&&o.addChild(new Bc(`(${l})`,{font:r,fill:"#008"}))}else o.addChild(new Bc("(root)",{font:r}));const a=fa.bounds(o.bounds,{children:[o],cursor:"pointer",fill:new oe([i.selectedTrailProperty,i.pointerTrailProperty],(e,t)=>e&&n.equals(e)?"rgba(0,128,255,0.4)":t&&n.equals(t)?"rgba(0,128,255,0.2)":"transparent",{tandem:A.A.OPT_OUT})});n.length&&(a.addInputListener({enter:()=>{i.treeHoverTrailProperty.value=n},exit:()=>{i.treeHoverTrailProperty.value=null}}),a.addInputListener(new Mr({fire:()=>{i.selectedTrailProperty.value=n},tandem:A.A.OPT_OUT}))),super(a,{createChildren:()=>t.children.map(t=>new e(t,i))}),this.instance=t,this.trail=n}},wP=class extends fa{resize(e){this.rectHeight=e.height,this.right=e.width,this.treeContainer.clipArea=Hi.bounds(this.localBounds.dilated(10))}constrainTree(){this.treeNode&&(this.treeNode.bottomthis.selfBounds.top+5&&(this.treeNode.top=this.selfBounds.top+5),this.treeNode.rightthis.selfBounds.left+8&&(this.treeNode.left=this.selfBounds.left+8))}focusTrail(e){if(this.treeNode){const t=this.treeNode.find(e);if(t){const e=t.localToGlobalPoint(t.selfNode.center).y-this.centerY;this.treeNode.y-=e,this.constrainTree()}}}focusPointer(){this.helper.pointerTrailProperty.value&&this.focusTrail(this.helper.pointerTrailProperty.value)}focusSelected(){null!==this.helper.selectedTrailProperty.value&&this.focusTrail(this.helper.selectedTrailProperty.value)}constructor(e,t,i){super({fill:"rgba(255,255,255,0.85)",stroke:"black",rectWidth:400,visibleProperty:e,pickable:!0}),this.helper=t,this.treeContainer=new Cr,this.addChild(this.treeContainer),this.addInputListener(new Kc({targetNode:this,drag:(e,t)=>{this.x=this.x+t.modelDelta.x},tandem:A.A.OPT_OUT})),this.addInputListener({wheel:e=>{const t=e.domEvent.deltaX,i=e.domEvent.deltaY;this.treeNode&&(this.treeNode.x-=1*t,this.treeNode.y-=1*i),this.constrainTree()}}),t.pointerTrailProperty.lazyLink(()=>{t.selectedTrailProperty.value||this.focusPointer()}),ye.multilink([t.activeProperty,e],(e,t)=>{e&&t?(this.treeNode=i(),this.treeNode.x=500,this.treeNode.y=500,this.treeContainer.children=[this.treeNode],this.focusSelected(),this.constrainTree()):this.treeContainer.children=[]})}};const EP=(e,t,i)=>new Bc(e,(0,h.A)({fontSize:14,fontWeight:"bold",visibleProperty:t?new oe([t.boundsProperty],e=>!e.isEmpty()):new d.A(!0)},i)),SP=(e,t,i,n)=>{const s=EP(e,i,n);return s.addInputListener(new Mr({fire:()=>{t.value=!t.value},tandem:A.A.OPT_OUT})),s.cursor="pointer",new Of({spacing:7,children:[new cP(t,{tandem:A.A.OPT_OUT,sideLength:14}),s],visibleProperty:s.visibleProperty})};let TP=class extends Df{constructor(e){super({xSpacing:5,ySpacing:0,children:[new Bc(e.m00(),{layoutOptions:{column:0,row:0}}),new Bc(e.m01(),{layoutOptions:{column:1,row:0}}),new Bc(e.m02(),{layoutOptions:{column:2,row:0}}),new Bc(e.m10(),{layoutOptions:{column:0,row:1}}),new Bc(e.m11(),{layoutOptions:{column:1,row:1}}),new Bc(e.m12(),{layoutOptions:{column:2,row:1}}),new Bc(e.m20(),{layoutOptions:{column:0,row:2}}),new Bc(e.m21(),{layoutOptions:{column:1,row:2}}),new Bc(e.m22(),{layoutOptions:{column:2,row:2}})]})}},CP=class extends ua{constructor(e){super(e,{maxWidth:15,maxHeight:15,stroke:"black",cursor:"pointer",strokePickable:!0}),this.addInputListener(new Mr({fire:()=>BP(e.getSVGPath()),tandem:A.A.OPT_OUT}))}},IP=class extends _h{constructor(e){super(e.getImage(),{maxWidth:15,maxHeight:15})}};const xP=e=>{const t=[],i=e.lastNode(),n=(0,Hr.A)(i.constructor).map(e=>e.name).filter(e=>e&&"Object"!==e),s=n.includes("Node")?n.slice(0,n.indexOf("Node")):n;s.length>0&&t.push(new df(s.map((e,t)=>0===t?`${e}`:`
 ${_.repeat(" ",t)}extends ${e}`).join(""),{font:new Gc(12)}));const r=(e,i)=>{t.push(new Of({spacing:0,align:"top",children:[new Bc(e+": ",{fontSize:12}),i]}))},o=(e,t)=>{void 0!==t&&r(e,new df(""+t,{lineWrap:400,font:new Gc(12),cursor:"pointer",inputListeners:[new Mr({fire:()=>BP(""+t),tandem:A.A.OPT_OUT})]}))},a=e=>new Of({spacing:4,children:[new fa(0,0,10,10,{fill:e,stroke:"black",lineWidth:.5}),new Bc(e.toHexString(),{fontSize:12}),new Bc(e.toCSS(),{fontSize:12})],cursor:"pointer",inputListeners:[new Mr({fire:()=>BP(e.toHexString()),tandem:A.A.OPT_OUT})]}),l=(e,t)=>{const i=e=>new Of({spacing:3,children:[new Bc(e.ratio,{fontSize:12}),a(DP(e.color)||Wr.TRANSPARENT)]});t instanceof Kr?t instanceof tb?r(e,new Rf({align:"left",spacing:3,children:[new Bc(`LinearGradient (${t.start.x},${t.start.y}) => (${t.end.x},${t.end.y})`,{fontSize:12}),...t.stops.map(i)]})):t instanceof nb?r(e,new Rf({align:"left",spacing:3,children:[new Bc(`RadialGradient (${t.start.x},${t.start.y}) ${t.startRadius} => (${t.end.x},${t.end.y}) ${t.endRadius}`,{fontSize:12}),...t.stops.map(i)]})):t instanceof Aa&&r(e,new Rf({align:"left",spacing:3,children:[new Bc("Pattern",{fontSize:12}),new _h(t.image,{maxWidth:10,maxHeight:10})]})):((e,t)=>{const i=DP(t);null!==i&&r(e,a(i))})(e,t)},h=(e,t)=>{t.equals(Ie.NOTHING)||(t.equals(Ie.EVERYTHING)?o(e,"everything"):r(e,new df(`x: [${t.minX}, ${t.maxX}]
y: [${t.minY}, ${t.maxY}]`,{font:new Gc(12)})))},c=(e,t)=>r(e,new CP(t));return i.tandem.supplied&&o("tandem",i.tandem.phetioID.split(".").join(" ")),i instanceof Nf&&o("element",i.element.constructor.name),sr(i)&&(!i.widthSizable&&o("widthSizable",i.widthSizable),null!==i.preferredWidth&&o("preferredWidth",i.preferredWidth),i.preferredWidth!==i.localPreferredWidth&&o("localPreferredWidth",i.localPreferredWidth),null!==i.minimumWidth&&o("minimumWidth",i.minimumWidth),i.minimumWidth!==i.localMinimumWidth&&o("localMinimumWidth",i.localMinimumWidth)),rr(i)&&(!i.heightSizable&&o("heightSizable",i.heightSizable),null!==i.preferredHeight&&o("preferredHeight",i.preferredHeight),i.preferredHeight!==i.localPreferredHeight&&o("localPreferredHeight",i.localPreferredHeight),null!==i.minimumHeight&&o("minimumHeight",i.minimumHeight),i.minimumHeight!==i.localMinimumHeight&&o("localMinimumHeight",i.localMinimumHeight)),i.layoutOptions&&o("layoutOptions",JSON.stringify(i.layoutOptions,null,2)),i instanceof Af&&(!i.resize&&o("resize",i.resize),!i.layoutOrigin.equals(Te.A.ZERO)&&o("layoutOrigin",i.layoutOrigin)),i instanceof Vf&&(o("orientation",i.orientation),o("align",i.align),i.spacing&&o("spacing",i.spacing),i.lineSpacing&&o("lineSpacing",i.lineSpacing),o("justify",i.justify),i.justifyLines&&o("justifyLines",i.justifyLines),i.wrap&&o("wrap",i.wrap),i.stretch&&o("stretch",i.stretch),i.grow&&o("grow",i.grow),i.leftMargin&&o("leftMargin",i.leftMargin),i.rightMargin&&o("rightMargin",i.rightMargin),i.topMargin&&o("topMargin",i.topMargin),i.bottomMargin&&o("bottomMargin",i.bottomMargin),null!==i.minContentWidth&&o("minContentWidth",i.minContentWidth),null!==i.minContentHeight&&o("minContentHeight",i.minContentHeight),null!==i.maxContentWidth&&o("maxContentWidth",i.maxContentWidth),null!==i.maxContentHeight&&o("maxContentHeight",i.maxContentHeight)),i instanceof Df&&(o("xAlign",i.xAlign),o("yAlign",i.yAlign),i.xSpacing&&o("xSpacing",i.xSpacing),i.ySpacing&&o("ySpacing",i.ySpacing),i.xStretch&&o("xStretch",i.xStretch),i.yStretch&&o("yStretch",i.yStretch),i.xGrow&&o("xGrow",i.xGrow),i.yGrow&&o("yGrow",i.yGrow),i.leftMargin&&o("leftMargin",i.leftMargin),i.rightMargin&&o("rightMargin",i.rightMargin),i.topMargin&&o("topMargin",i.topMargin),i.bottomMargin&&o("bottomMargin",i.bottomMargin),null!==i.minContentWidth&&o("minContentWidth",i.minContentWidth),null!==i.minContentHeight&&o("minContentHeight",i.minContentHeight),null!==i.maxContentWidth&&o("maxContentWidth",i.maxContentWidth),null!==i.maxContentHeight&&o("maxContentHeight",i.maxContentHeight)),i instanceof fa&&(h("rectBounds",i.rectBounds),(i.cornerXRadius||i.cornerYRadius)&&(i.cornerXRadius===i.cornerYRadius?o("cornerRadius",i.cornerRadius):(o("cornerXRadius",i.cornerXRadius),o("cornerYRadius",i.cornerYRadius)))),i instanceof sc&&(o("x1",i.x1),o("y1",i.y1),o("x2",i.x2),o("y2",i.y2)),i instanceof Th&&o("radius",i.radius),i instanceof Bc&&(o("text",i.string),o("font",i.font),"hybrid"!==i.boundsMethod&&o("boundsMethod",i.boundsMethod)),i instanceof df&&(o("text",i.string),o("font",i.font instanceof mc?i.font.getFont():i.font),l("fill",i.fill),l("stroke",i.stroke),"hybrid"!==i.boundsMethod&&o("boundsMethod",i.boundsMethod),null!==i.lineWrap&&o("lineWrap",i.lineWrap)),i instanceof _h&&(r("image",new IP(i)),o("imageWidth",i.imageWidth),o("imageHeight",i.imageHeight),1!==i.imageOpacity&&o("imageOpacity",i.imageOpacity),i.imageBounds&&h("imageBounds",i.imageBounds),i.initialWidth&&o("initialWidth",i.initialWidth),i.initialHeight&&o("initialHeight",i.initialHeight),i.hitTestPixels&&o("hitTestPixels",i.hitTestPixels)),(i instanceof Hg||i instanceof Uf)&&h("canvasBounds",i.canvasBounds),i instanceof ua&&(i.shape&&c("shape",i.shape),"accurate"!==i.boundsMethod&&o("boundsMethod",i.boundsMethod)),(i instanceof ua||i instanceof Bc)&&(l("fill",i.fill),l("stroke",i.stroke),i.lineDash.length&&o("lineDash",i.lineDash),i.fillPickable||o("fillPickable",i.fillPickable),i.strokePickable&&o("strokePickable",i.strokePickable),1!==i.lineWidth&&o("lineWidth",i.lineWidth),"butt"!==i.lineCap&&o("lineCap",i.lineCap),"miter"!==i.lineJoin&&o("lineJoin",i.lineJoin),0!==i.lineDashOffset&&o("lineDashOffset",i.lineDashOffset),10!==i.miterLimit&&o("miterLimit",i.miterLimit)),i.tagName&&o("tagName",i.tagName),i.accessibleName&&o("accessibleName",i.accessibleName),i.accessibleHelpText&&o("accessibleHelpText",i.accessibleHelpText),i.pdomHeading&&o("pdomHeading",i.pdomHeading),i.containerTagName&&o("containerTagName",i.containerTagName),i.containerAriaRole&&o("containerAriaRole",i.containerAriaRole),i.innerContent&&o("innerContent",i.innerContent),i.inputType&&o("inputType",i.inputType),i.inputValue&&o("inputValue",i.inputValue),i.pdomNamespace&&o("pdomNamespace",i.pdomNamespace),i.ariaLabel&&o("ariaLabel",i.ariaLabel),i.ariaRole&&o("ariaRole",i.ariaRole),i.ariaValueText&&o("ariaValueText",i.ariaValueText),i.labelTagName&&o("labelTagName",i.labelTagName),i.labelContent&&o("labelContent",i.labelContent),i.appendLabel&&o("appendLabel",i.appendLabel),i.descriptionTagName&&o("descriptionTagName",i.descriptionTagName),i.descriptionContent&&o("descriptionContent",i.descriptionContent),i.appendDescription&&o("appendDescription",i.appendDescription),i.pdomVisible||o("pdomVisible",i.pdomVisible),i.pdomOrder&&o("pdomOrder",i.pdomOrder.map(e=>null===e?"null":e.constructor.name)),i.visible||o("visible",i.visible),1!==i.opacity&&((e,t)=>{o(e,t)})("opacity",i.opacity),null!==i.pickable&&o("pickable",i.pickable),i.enabled||o("enabled",i.enabled),i.inputEnabled||o("inputEnabled",i.inputEnabled),null!==i.cursor&&o("cursor",i.cursor),i.transformBounds&&o("transformBounds",i.transformBounds),i.renderer&&o("renderer",i.renderer),i.usesOpacity&&o("usesOpacity",i.usesOpacity),i.layerSplit&&o("layerSplit",i.layerSplit),i.cssTransform&&o("cssTransform",i.cssTransform),i.excludeInvisible&&o("excludeInvisible",i.excludeInvisible),i.preventFit&&o("preventFit",i.preventFit),null!==i.webglScale&&o("webglScale",i.webglScale),i.matrix.isIdentity()||((e,t)=>{r(e,new TP(t))})("matrix",i.matrix),null!==i.maxWidth&&o("maxWidth",i.maxWidth),null!==i.maxHeight&&o("maxHeight",i.maxHeight),null!==i.clipArea&&c("clipArea",i.clipArea),null!==i.mouseArea&&(i.mouseArea instanceof Ie?h("mouseArea",i.mouseArea):c("mouseArea",i.mouseArea)),null!==i.touchArea&&(i.touchArea instanceof Ie?h("touchArea",i.touchArea):c("touchArea",i.touchArea)),i.inputListeners.length&&o("inputListeners",i.inputListeners.map(e=>e.constructor.name).join(", ")),t.push(new Hf(5,5)),h("localBounds",i.localBounds),i.localBoundsOverridden&&o("localBoundsOverridden",i.localBoundsOverridden),h("bounds",i.bounds),isFinite(i.width)&&o("width",i.width),isFinite(i.height)&&o("height",i.height),t.push(new Qb({content:new Bc("Copy Path",{fontSize:12}),listener:()=>BP("phet.joist.display.rootNode"+e.indices.map(e=>`.children[ ${e} ]`).join("")),tandem:A.A.OPT_OUT})),t},DP=e=>{const t=(0,se.w)(e)?e.value:e;return null===t?null:Wr.toColor(t)},kP=e=>{if(e instanceof Kr)return!0;{const t=DP(e);return!!t&&t.alpha>0}},MP=(e,t)=>{if(!e.visible)return null;const i=e._transform.getInverse().timesVector2(t),n=e.clipArea;if(null!==n&&!n.containsPoint(i))return null;for(let s=e._children.length-1;s>=0;s--){const t=e._children[s],n=MP(t,i);if(n)return n.addAncestor(e,s)}if(e.selfBounds.containsPoint(i))if(e instanceof ua&&e.hasShape()){if(kP(e.fill)&&e.getShape().containsPoint(i))return new ji(e);if(kP(e.stroke)&&e.getStrokedShape().containsPoint(i))return new ji(e)}else if(e.containsPointSelf(i))return new ji(e);return null},BP=gP((function*(e){var t;yield null==(t=navigator.clipboard)?void 0:t.writeText(e)})),OP=(e,t,i)=>{let n=Hi.union([...t&&e.mouseArea?[e.mouseArea instanceof Hi?e.mouseArea:Hi.bounds(e.mouseArea)]:[],...i&&e.touchArea?[e.touchArea instanceof Hi?e.touchArea:Hi.bounds(e.touchArea)]:[],e.getSelfShape(),...e.children.filter(e=>e.visible&&!1!==e.pickable).map(e=>OP(e,t,i).transformed(e.matrix))].filter(e=>e.bounds.isValid()));return e.hasClipArea()&&(n=n.shapeIntersection(e.clipArea)),n},LP=(e,t,i)=>{let n=OP(e.lastNode(),t,i);for(let s=e.nodes.length-1;s>=0;s--){const t=e.nodes[s];t.hasClipArea()&&(n=n.shapeIntersection(t.clipArea)),n=n.transformed(t.matrix)}return n};let RP=class extends wn{constructor(e){const i=(0,t.Ay)()({alertStableDelay:500},e);super(i)}};dn.register("ActivationUtterance",RP);let NP=class extends Cr{constructor(e,i){const n=(0,t.Ay)()({keyFill:"white",keyShadowFill:"black",lineWidth:1.3,cornerRadius:2,xShadowOffset:1.7,yShadowOffset:1.7,xMargin:0,yMargin:0,xAlign:"center",yAlign:"center",xPadding:4,yPadding:4,keyHeight:23,minKeyWidth:23,forceSquareKey:!1},i),s=new Cr({children:[e]}),r=new Cr({children:[s]}),o=new qb(r,{xAlign:n.xAlign,yAlign:n.yAlign,xMargin:n.xMargin,yMargin:n.yMargin}),a=new fa(0,0,1,1,n.cornerRadius,n.cornerRadius,{fill:n.keyShadowFill}),l=new fa(0,0,1,1,n.cornerRadius,n.cornerRadius,{fill:n.keyFill,stroke:"black",lineWidth:n.lineWidth}),h=()=>{let t=1;const i=n.keyHeight-n.yPadding;e.height>i&&(t=i/e.height),s.setScaleMagnitude(t);let h=Math.max(n.minKeyWidth,s.width+n.xPadding);if(n.forceSquareKey){const t=n.minKeyWidth-n.xPadding;let i=1;e.width>t&&(i=t/e.width),h=n.keyHeight,r.setScaleMagnitude(i)}o.setAlignBounds(new Ie(0,0,h,n.keyHeight)),a.setRectBounds(o.bounds.shiftedXY(n.xShadowOffset,n.yShadowOffset)),l.setRectBounds(o.bounds)};e.boundsProperty.link(h),n.children=[a,l,o],super(n),this.disposeEmitter.addListener(()=>e.boundsProperty.unlink(h))}};Pa.register("KeyNode",NP);let qP=class e extends NP{static getAltKeyString(){return Ye.A.mac?Wc.key.optionStringProperty:Wc.key.altStringProperty}static altOrOption(t){return new e(e.getAltKeyString(),t)}static capsLock(t){return new e(Wc.key.capsLockStringProperty,t)}static esc(t){return new e(Wc.key.escStringProperty,t)}static end(t){return new e(Wc.key.endStringProperty,t)}static enter(t){return new e(Wc.key.enterStringProperty,t)}static fn(t){return new e(Wc.key.fnStringProperty,t)}static home(t){return new e(Wc.key.homeStringProperty,t)}static pageDown(t){return new e(Wc.key.pageDownStringProperty,t)}static pageUp(t){return new e(Wc.key.pageUpStringProperty,t)}static space(t){return new e(Wc.key.spaceStringProperty,t)}static shift(t){return new e(Wc.key.shiftStringProperty,t)}static tab(t){return new e(Wc.key.tabStringProperty,t)}constructor(e,i){const n=(0,t.Ay)()({font:new Gc({size:16}),fill:"black",textMaxWidth:55,xPadding:11},i),s=new df(e,{font:n.font,fill:n.fill,maxWidth:n.textMaxWidth});super(s,n),this.addDisposable(s)}};Pa.register("TextKeyNode",qP);const FP=new Wr(0,200,0),HP=new Wr(255,85,0),YP=new Wr(0,135,0),GP=new Wr(106,206,245),UP=new Wr(254,225,5),zP={ACCELERATION:new Wr(255,255,50),APPLIED_FORCE:new Wr(236,153,55),BUTTON_YELLOW:UP,ELASTIC_POTENTIAL_ENERGY:new Wr(0,204,255),FRICTION_FORCE:HP,GRAVITATIONAL_FORCE:new Wr(50,130,215),GRAVITATIONAL_POTENTIAL_ENERGY:new Wr(55,130,215),HEAT_THERMAL_ENERGY:HP,IMAGINARY_PART:new Wr(153,51,102),KINETIC_ENERGY:new Wr(30,200,45),MOMENTUM:new Wr(50,50,255),NET_WORK:FP,NORMAL_FORCE:new Wr(255,235,0),PHET_LOGO_BLUE:GP,PHET_LOGO_YELLOW:UP,POSITION:Wr.BLUE,REAL_PART:new Wr(255,153,0),RED_COLORBLIND:HP,RESET_ALL_BUTTON_BASE_COLOR:new Wr(247,151,34),GREEN_COLORBLIND:YP,TOTAL_ENERGY:new Wr(180,180,0),TOTAL_FORCE:FP,VELOCITY:new Wr(50,255,50),WALL_FORCE:new Wr(153,51,0),SCREEN_ICON_FRAME:"#dddddd"};Pa.register("PhetColorScheme",zP);const WP=zP,QP={DEFAULT_BUTTON_RADIUS:20.8,PLAY_CONTROL_BUTTON_RADIUS:28};Pa.register("SceneryPhetConstants",QP);const KP=QP;let jP=class e extends Ub{constructor(i,n,s){let r=(0,t.Ay)()({sizable:!1,radius:s&&s.content?null:30,lineWidth:.5,stroke:null,touchAreaDilation:0,mouseAreaDilation:0,touchAreaXShift:0,touchAreaYShift:0,mouseAreaXShift:0,mouseAreaYShift:0,cursor:"pointer",xMargin:5,yMargin:5,buttonAppearanceStrategy:e.ThreeDAppearanceStrategy},s);r.content,r.radius,r.buttonAppearanceStrategyOptions||(r.buttonAppearanceStrategyOptions={stroke:r.stroke,lineWidth:r.lineWidth});const o=new Th(1),a=_.pick(r,Cr.REQUIRES_BOUNDS_OPTION_KEYS);var l;r=_.omit(r,Cr.REQUIRES_BOUNDS_OPTION_KEYS),super(i,o,n,r),this.buttonNodeConstraint=new _P(this,this.layoutSizeProperty,{content:null!=(l=r.content)?l:null,radius:r.radius,buttonBackground:o,xMargin:r.xMargin,yMargin:r.yMargin,maxLineWidth:this.maxLineWidth,touchAreaDilation:r.touchAreaDilation,touchAreaXShift:r.touchAreaXShift,touchAreaYShift:r.touchAreaYShift,mouseAreaDilation:r.mouseAreaDilation,mouseAreaXShift:r.mouseAreaXShift,mouseAreaYShift:r.mouseAreaYShift}),this.addDisposable(this.buttonNodeConstraint),this.mutate(a)}};jP.ThreeDAppearanceStrategy=class{dispose(){this.disposeThreeDAppearanceStrategy()}constructor(e,i,n,s){const r=s&&s.stroke?s.stroke:new xb(n,{luminanceFactor:-.4}),o=s&&void 0!==s.lineWidth?s.lineWidth:.3,a=(0,t.Ay)()({stroke:r,lineWidth:o,overStroke:r,overLineWidth:o,overButtonOpacity:1,selectedStroke:r,selectedLineWidth:o,selectedButtonOpacity:1,deselectedFill:null,deselectedStroke:r,deselectedLineWidth:o,deselectedButtonOpacity:1,overFill:n},s),l=new xb(n,{luminanceFactor:.8}),h=new xb(n,{luminanceFactor:.7}),c=new xb(n,{luminanceFactor:.3}),d=new xb(n,{luminanceFactor:-.1}),u=new xb(n,{luminanceFactor:-.2}),p=new xb(n,{luminanceFactor:-.4}),m=new xb(n,{luminanceFactor:-.5}),g=new oe([n],e=>e.withAlpha(0)),A=new Th(1,{stroke:a.stroke?a.stroke:p,lineWidth:a.lineWidth,pickable:!1});let y;e.addChild(A),this.maxLineWidth=A.hasStroke()&&a&&"number"==typeof a.lineWidth?a.lineWidth:0;const f=()=>{const t=e.radius,s=t-2.5,r=t+2.5;if(t<2.5)return;const o=new nb(2.5,2.5,s,2.5,2.5,r).addColorStop(0,n).addColorStop(1,h),p=new nb(-2.5,-2.5,s,-2.5,-2.5,r).addColorStop(0,g).addColorStop(1,m),f=new nb(2.5,2.5,s,2.5,2.5,r).addColorStop(0,c).addColorStop(1,l),b=new nb(-2.5,-2.5,s,-2.5,-2.5,r).addColorStop(0,g).addColorStop(1,m),P=new nb(-2.5,-2.5,0,0,0,r).addColorStop(0,d).addColorStop(.6,u).addColorStop(.8,n).addColorStop(1,l);A.radius=t,e.cachedPaints=[o,f,P],A.cachedPaints=[p,b],y&&i.unlink(y),y=t=>{switch(t){case Sb.IDLE:e.fill=a.deselectedFill||o,e.stroke=a.deselectedStroke,e.lineWidth=a.deselectedLineWidth,e.opacity=a.deselectedButtonOpacity,A.fill=p,A.opacity=a.deselectedButtonOpacity;break;case Sb.OVER:e.fill=f,e.stroke=a.overStroke,e.lineWidth=a.overLineWidth,e.opacity=a.overButtonOpacity,A.fill=b,A.opacity=a.overButtonOpacity;break;case Sb.PRESSED:e.fill=P,e.stroke=a.selectedStroke,e.lineWidth=a.selectedLineWidth,e.opacity=a.selectedButtonOpacity,A.fill=b,A.opacity=a.selectedButtonOpacity;break;default:throw new Error("unsupported interactionState: "+t)}},i.link(y)};e.selfBoundsProperty.link(f),this.disposeThreeDAppearanceStrategy=()=>{e.selfBoundsProperty.unlink(f),i.hasListener(y)&&i.unlink(y),l.dispose(),h.dispose(),c.dispose(),d.dispose(),u.dispose(),p.dispose(),m.dispose(),g.dispose()}}};let _P=class extends fy{layout(){super.layout();const e=this.buttonNode,t=this.options.content,i=t?this.createLayoutProxy(t):null;if(!!t!=!!i)return;const n=e.widthSizable,s=e.heightSizable,r=i?i.minimumWidth+2*this.options.xMargin:0,o=i?i.minimumHeight+2*this.options.yMargin:0;let a=Math.max(r,o)/2;null!==this.options.radius&&(a=this.options.radius);let l=this.isFirstLayout||n?2*a:e.localMinimumWidth,h=this.isFirstLayout||s?2*a:e.localMinimumHeight;var c,d;this.lastLocalWidth=this.isFirstLayout||n?Math.max(l,n&&null!=(c=e.localPreferredWidth)?c:0):this.lastLocalWidth,this.lastLocalHeight=this.isFirstLayout||s?Math.max(h,s&&null!=(d=e.localPreferredHeight)?d:0):this.lastLocalHeight;const u=Math.max(this.lastLocalWidth,this.lastLocalHeight);if(!n&&s&&(l=u),!s&&n&&(h=u),this.isFirstLayout||n||s){const e=(u-this.options.maxLineWidth)/2;this.options.buttonBackground.radius=e}if(this.isFirstLayout||n||s){const e=this.options.buttonBackground.localBounds.width/2;this.buttonNode.touchArea=Hi.circle(this.options.touchAreaXShift,this.options.touchAreaYShift,e+this.options.touchAreaDilation),this.buttonNode.mouseArea=Hi.circle(this.options.mouseAreaXShift,this.options.mouseAreaYShift,e+this.options.mouseAreaDilation),this.buttonNode.focusHighlight=Hi.circle(0,0,e+5)}if(i){const e=u-2*this.options.xMargin,t=u-2*this.options.yMargin;if(i.preferredWidth=e,i.preferredHeight=t,null!==this.options.radius){const i=this.buttonNode.contentContainer;i.maxWidth=e,i.maxHeight=t}}this.isFirstLayout=!1,this.layoutSizeProperty.value=new Be(this.lastLocalWidth,this.lastLocalHeight),e.localMinimumWidth=l,e.localMinimumHeight=h}dispose(){this.buttonNode.localPreferredWidthProperty.unlink(this._updateLayoutListener),this.buttonNode.localPreferredHeightProperty.unlink(this._updateLayoutListener),super.dispose()}constructor(e,t,i){super(e),this.buttonNode=e,this.layoutSizeProperty=t,this.isFirstLayout=!0,this.lastLocalWidth=0,this.lastLocalHeight=0,this.options=i,this.buttonNode.localPreferredWidthProperty.lazyLink(this._updateLayoutListener),this.buttonNode.localPreferredHeightProperty.lazyLink(this._updateLayoutListener),this.options.content&&this.addNode(this.options.content),this.layout()}};fb.register("RoundButton",jP);let ZP=class extends jP{dispose(){super.dispose(),this.disposeRoundPushButton()}addListener(e){this.pushButtonModel.addListener(e)}removeListener(e){this.pushButtonModel.removeListener(e)}constructor(e){const i=(0,t.Ay)()({soundPlayer:Gm.get("pushButton"),tandem:A.A.REQUIRED,listenerOptions:{tandem:A.A.OPT_OUT}},e),n=i.listener,s=_.omit(i,["listener"]),r=new Ib(s);super(r,new Tb(r),s),this.pushButtonModel=r,n&&this.addListener(n);const o=()=>{i.soundPlayer.play()};r.produceSoundEmitter.addListener(o),this.disposeRoundPushButton=()=>{r.produceSoundEmitter.removeListener(o),r.dispose()}}};fb.register("RoundPushButton",ZP);let XP=class extends Hi{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super();const i=t?.8:0,n=.4*e-i,s=.625*e+i,r=(t?2:2.25)*(s-n),o=.35*-Math.PI,a=-2*Math.PI*.85,l=.18*-Math.PI;this.moveTo(n*Math.cos(o),n*Math.sin(o)),this.lineTo(s*Math.cos(o),s*Math.sin(o));const h=o+a;this.arc(0,0,s,o,h,!0);const c=(r-(s-n))/2;this.lineTo((s+c)*Math.cos(h),(s+c)*Math.sin(h));const d=.55*(s+n);this.lineTo(d*Math.cos(h+l),d*Math.sin(h+l)),this.lineTo((n-c)*Math.cos(h),(n-c)*Math.sin(h)),this.lineTo(n*Math.cos(h),n*Math.sin(h)),this.arc(0,0,n,h,o),this.close()}};Pa.register("ResetShape",XP);let JP=class extends ZP{constructor(e){const i=e&&e.radius?e.radius:24,n=(0,t.Ay)()({radius:i,arrowColor:"black",baseColor:"white",xMargin:6,yMargin:6,xContentOffset:(null==e?void 0:e.adjustShapeForStroke)?0:-.03*i,yContentOffset:-.0125*i,tandem:A.A.REQUIRED,tandemNameSuffix:"ResetButton",adjustShapeForStroke:!1},e),s=new XP(n.radius,n.adjustShapeForStroke),r=new ua(s,n.adjustShapeForStroke?{fill:n.arrowColor,stroke:"rgb(80,80,80)",lineWidth:.7}:{fill:n.arrowColor}),o=new ua(s.transformed(Pt.scaling(-1,-1)));r.localBounds=r.localBounds.union(o.localBounds),n.content=r,super(n)}};Pa.register("ResetButton",JP);const $P=3/KP.DEFAULT_BUTTON_RADIUS;let eV=class e extends JP{interruptScreenViewInput(){const e=this.getParentScreenViews();for(let t=0;t=0;t--){const n=e[t];if(n instanceof i){s.push(n);break}}}return _.uniq(s)}dispose(){this.disposeResetAllButton(),super.dispose()}constructor(i){const n=(0,t.Ay)()({radius:KP.DEFAULT_BUTTON_RADIUS,phetioRestoreScreenStateOnReset:!0,interruptScreenViewInput:!0,touchAreaDilation:5.2,baseColor:WP.RESET_ALL_BUTTON_BASE_COLOR,arrowColor:"white",tandem:A.A.REQUIRED,tandemNameSuffix:"ResetAllButton",phetioDocumentation:"The orange, round button that can be used to restore the initial state",soundPlayer:Gm.get("resetAll"),accessibleName:Wc.a11y.resetAll.labelStringProperty,voicingNameResponse:Wc.a11y.resetAll.labelStringProperty,voicingContextResponse:Wc.a11y.voicing.resetAll.contextResponseStringProperty,adjustShapeForStroke:!0},i);n.xMargin=n.yMargin=n.radius*$P,super(n);const s=new RP({alert:Wc.a11y.resetAll.alertStringProperty});let r=wl.enabled;const o=new Map;this.pushButtonModel.isFiringProperty.lazyLink(e=>{Sm.value=e,e?(n.interruptScreenViewInput&&this.interruptScreenViewInput(),r=wl.enabled,wl.enabled=!1,wl.clear()):(A.A.PHET_IO_ENABLED&&n.phetioRestoreScreenStateOnReset&&this.isPhetioInstrumented()&&phet.phetio.phetioEngine.phetioStateEngine.restoreStateForScreen(n.tandem),wl.enabled=r,this.voicingSpeakFullResponse()),this.forEachUtteranceQueue(t=>{e?(o.set(t,t.enabled),t.enabled=!1,t.clear()):(t.enabled=o.get(t)||t.enabled,t.addToBack(s))})});const a=Jc.createGlobal(this,{keyStringProperties:e.RESET_ALL_HOTKEY_DATA.keyStringProperties,fire:()=>this.pdomClick(),fireOnDown:!1});this.disposeResetAllButton=()=>{a.dispose(),o.clear()}}};eV.RESET_ALL_HOTKEY_DATA=new Sa({keyStringProperties:[new r.A("alt+r")],keyboardHelpDialogLabelStringProperty:Wc.keyboardHelpDialog.resetAllStringProperty,keyboardHelpDialogPDOMLabelStringProperty:Ge.A.fillIn(Wc.a11y.keyboardHelpDialog.general.resetAllDescriptionPatternStringProperty,{altOrOption:qP.getAltKeyString()}),repoName:Pa.name,global:!0}),Pa.register("ResetAllButton",eV);let tV=class e extends qP{static a(t){return new e(Wc.key.aStringProperty,t)}static c(t){return new e(Wc.key.cStringProperty,t)}static d(t){return new e(Wc.key.dStringProperty,t)}static l(t){return new e(Wc.key.lStringProperty,t)}static r(t){return new e(Wc.key.rStringProperty,t)}static s(t){return new e(Wc.key.sStringProperty,t)}static w(t){return new e(Wc.key.wStringProperty,t)}static one(t){return new e(Wc.key.oneStringProperty,t)}static two(t){return new e(Wc.key.twoStringProperty,t)}static three(t){return new e(Wc.key.threeStringProperty,t)}constructor(e,i){super(e,(0,t.Ay)()({xPadding:5,forceSquareKey:!0},i))}};Pa.register("LetterKeyNode",tV);let iV=class extends tV{constructor(e,t){super(e.toString(),t)}};Pa.register("NumberKeyNode",iV);let nV=class extends Hi{constructor(e){super();const t=e.width/2-e.height/2,i=e.width/2+e.height/2;this.moveTo(t,0).lineTo(i,0).lineTo(i,t).lineTo(e.width,t).lineTo(e.width,i).lineTo(i,i).lineTo(i,e.width).lineTo(t,e.width).lineTo(t,i).lineTo(0,i).lineTo(0,t).lineTo(t,t).close()}};Pa.register("PlusShape",nV);const sV=new Be(20,5);let rV=class extends ua{constructor(e){const i=(0,t.Ay)()({size:sV,fill:"black"},e);super(new nV(i.size),i)}};Pa.register("PlusNode",rV);const oV=.6*Math.sqrt(3)*10,aV={up:0,down:Math.PI,left:-Math.PI/2,right:Math.PI/2};let lV=class extends NP{constructor(e,i){const n=(0,t.Ay)()({arrowFill:"black",arrowStroke:"black",arrowLineJoin:"round",arrowLineWidth:3,arrowHeight:10,arrowWidth:oV,yPadding:13,forceSquareKey:!0},i),s=n.arrowHeight,r=n.arrowWidth,o=n.arrowLineJoin,a=n.arrowLineWidth,l=n.arrowFill,h=n.arrowStroke,c=new Hi;c.moveTo(s/2,0).lineTo(s,r+0).lineTo(0,r+0).close(),super(new ua(c,{fill:l,stroke:h,lineJoin:o,lineWidth:a,rotation:aV[e]}),n)}};Pa.register("ArrowKeyNode",lV);const hV=new Gc(16);let cV=class e{static iconRow(e,i){const n=(0,t.Ay)()({spacing:1.3,children:e},i);return new Of(n)}static iconOrIcon(i,n,s){const r=(0,t.sF)({spacing:e.DEFAULT_ICON_SPACING},s),o=new Bc(Wc.keyboardHelpDialog.orStringProperty,{font:hV,maxWidth:16});return e.iconRow([new Cr({children:[i]}),o,new Cr({children:[n]})],r)}static iconToIcon(i,n,s){const r=(0,t.sF)({spacing:e.DEFAULT_ICON_SPACING/2},s),o=new Bc(Wc.keyboardHelpDialog.hyphenStringProperty,{font:hV,maxWidth:16});return e.iconRow([new Cr({children:[i]}),o,new Cr({children:[n]})],r)}static iconPlusIcon(t,i,n){return e.iconPlusIconRow([t,i],n)}static iconPlusIconRow(i,n){const s=(0,t.sF)({plusIconSize:new Be(8,1.2),spacing:e.DEFAULT_ICON_SPACING},n),r=[];for(let e=0;e{const i=e.ENGLISH_KEY_TO_KEY_NODE.get(t);return i}),n=e.ENGLISH_KEY_TO_KEY_NODE.get(t.keyDescriptorsProperty.value[0].key);return e.iconPlusIconRow([...i,n])}constructor(){}};cV.DEFAULT_ICON_SPACING=6.5,cV.ENGLISH_KEY_TO_KEY_NODE=new Map([["a",new tV("A")],["j",new tV("J")],["shift",qP.shift()],["alt",qP.altOrOption()],["escape",qP.esc()],["arrowLeft",new lV("left")],["arrowRight",new lV("right")],["arrowUp",new lV("up")],["arrowDown",new lV("down")],["pageUp",qP.pageUp()],["pageDown",qP.pageDown()],["home",qP.home()],["end",qP.end()],["r",new tV("R")],["s",new tV("S")],["l",new tV("L")],["c",new tV("C")],["h",new tV("H")],["w",new tV("W")],["j",new tV("J")],["k",new tV("K")],["n",new tV("N")],["0",new tV("0")],["1",new tV("1")],["2",new tV("2")],["3",new tV("3")]]),Pa.register("KeyboardHelpIconFactory",cV);const dV=new Gc({size:19,weight:"bold"});let uV=class extends(AA(Rf)){createReadingBlockResponseProperty(){const e=[this.headingStringProperty];for(let t=0;t{let e="";return e+=this.headingStringProperty.value+", ",this.keyboardHelpSectionRows.forEach(t=>{t.readingBlockContent&&(e+=yn.getResponseText(t.readingBlockContent)+" ")}),e})}static alignHelpSectionIcons(e){const t=_.maxBy(e,e=>e.iconVBox.left),i=t.iconVBox.left;e.forEach(e=>{e.contentHBox.spacing=e.contentHBox.spacing+i-e.iconVBox.left})}constructor(e,i,n){const s=(0,t.Ay)()({headingOptions:{font:dV,maxWidth:335,tagName:"h2",innerContent:e},textMaxWidth:235,vBoxOptions:{align:"left",spacing:13},a11yContentTagName:"ul",spacing:13,align:"left"},n),r=new df(e,s.headingOptions),o=[],a=[];for(let t=0;t0&&(e=Math.max(e,s)),isFinite(r)&&r>0&&(t=Math.max(t,r))}if(this._maxWidthProperty.value=e,this._maxHeightProperty.value=t,e>0&&t>0)for(let i=0;i=0;e--)this._alignBoxes[e].dispose();super.dispose()}constructor(e){const i=(0,t.hz)()({},mV,e);super(i),this._alignBoxes=[],this._matchHorizontal=i.matchHorizontal,this._matchVertical=i.matchVertical,this._resizeLock=!1,this._maxWidthProperty=new R(0),this._maxHeightProperty=new R(0),this.id=pV++}};it.A.register("AlignGroup",gV);const AV=new Gc(16);let yV=class e{setContentsVisible(e){this.text.visible=e,this.label.visible=e,this.icon.visible=e}static labelWithIcon(i,n,s){const r=(0,t.Ay)()({labelInnerContent:null,readingBlockContent:null,labelOptions:{font:AV},iconOptions:{tagName:"li"}},s),o=new df(i,r.labelOptions),a=new gV({matchHorizontal:!1}),l=a.createBox(o),h=a.createBox(new Cr({children:[n]}),r.iconOptions);return h.innerContent=r.labelInnerContent,new e(o,l,h,{readingBlockContent:r.readingBlockContent||r.labelInnerContent})}static labelWithIconList(i,n,s){const r=(0,t.Ay)()({labelInnerContent:null,readingBlockContent:null,iconsVBoxOptions:{},labelOptions:{font:AV}},s);r.iconsVBoxOptions=(0,t.sF)({spacing:.75*uV.DEFAULT_VERTICAL_ICON_SPACING,align:"left",tagName:"li",innerContent:r.labelInnerContent},r.iconsVBoxOptions);const o=new df(i,r.labelOptions),a=new gV({matchHorizontal:!1});a.createBox(new Cr({children:[n[0]]}));const l=a.createBox(o),h=[];for(let e=0;e""+e;let wV=class extends ah{constructor(e,i,n){const s=(0,t.Ay)()({formatNames:[],decimalPlaces:null,phetioFeatured:!0,tandemNameSuffix:"StringProperty"},n),r=[e],o={},a=Object.keys(i);a.forEach(e=>{const t=i[e];(0,se.w)(t)&&r.push(t);let n=vV;if(null!==s.decimalPlaces&&("number"==typeof s.decimalPlaces||null!==s.decimalPlaces[e])){const t="number"==typeof s.decimalPlaces||null===s.decimalPlaces?s.decimalPlaces:s.decimalPlaces[e];n=e=>vV("number"==typeof e?ee(e,t):e)}s.maps&&s.maps.hasOwnProperty(e)?o[e]=t=>n(s.maps[e](t)):o[e]=n}),super(r,(function(){for(var t=arguments.length,n=new Array(t),l=0;l{const t=r.indexOf(e);return t>=0?n[t]:e};let c=""+h(e);s.formatNames.forEach((e,t)=>{c=c.replace(new RegExp(`\\{${t}\\}`,"g"),`{{${e}}}`)});const d=c.match(/\{\{[^{}]+\}\}/g)||[];for(let e=0;e{e.setScaleMagnitude(1),e.setScaleMagnitude(Math.min(n.maxIconWidthProportion*s.width/e.width,n.maxIconHeightProportion*s.height/e.height)),e.center=s.center};e.localBoundsProperty.link(r),n.children=[s,e],super(n),this.disposeScreenIcon=()=>{e.localBoundsProperty.hasListener(r)&&e.localBoundsProperty.unlink(r)}}};Xl.A.register("ScreenIcon",TV);const CV=EV.A.a11y.screenNamePatternStringProperty,IV=EV.A.a11y.goToScreenPatternStringProperty,xV=EV.A.a11y.screenSimPatternStringProperty,DV=EV.A.a11y.simScreenStringProperty,kV=new Be(147,100),MV=kV.width/kV.height,BV=SV.width/SV.height;let OV=class e extends g.A{get model(){return this._model}get view(){return this._view}hasModel(){return!!this._model}hasView(){return!!this._view}reset(){}initializeModel(){this._model=this.createModel()}initializeView(e,t,i,n){var s;this._view=this.createView(this.model),this._view.setVisible(!1),phet.chipper.queryParameters.dev&&this._view.addChild((s=this._view.layoutBounds,new ua(Hi.bounds(s),{stroke:"red",lineWidth:3,pickable:!1}))),phet.chipper.queryParameters.showVisibleBounds&&this._view.addChild(function(e){const t=new ua(Hi.bounds(e.visibleBoundsProperty.value),{stroke:"blue",lineWidth:6,pickable:!1});return e.visibleBoundsProperty.link(e=>{t.shape=Hi.bounds(e)}),t}(this._view)),ye.multilink([t,e,this.pdomDisplayNameProperty],(e,t,s)=>{let r;r=1===i?e:n?t:Ge.A.fillIn(xV,{screenName:s,simName:t}),this._view.setScreenSummaryIntroAndTitle(t,s,r,i>1)})}constructor(i,n,s){const a=(0,t.Ay)()({name:null,instrumentNameProperty:!0,backgroundColorProperty:new r.A("white"),homeScreenIcon:null,showUnselectedHomeScreenIconFrame:!1,navigationBarIcon:null,showScreenIconFrameForNavigationBarFill:null,maxDT:.5,createKeyboardHelpNode:null,screenButtonsHelpText:null,tandem:A.A.REQUIRED,tandemNameSuffix:A.A.SCREEN_TANDEM_NAME_SUFFIX,phetioType:e.ScreenIO,phetioState:!1,phetioFeatured:!0},s);if(super(a),!a.homeScreenIcon){const e=new fa(0,0,SV.width,SV.height);a.homeScreenIcon=new TV(e,{fill:a.backgroundColorProperty.value,maxIconWidthProportion:1,maxIconHeightProportion:1})}a.navigationBarIcon||(a.navigationBarIcon=a.homeScreenIcon),LV(a.homeScreenIcon,SV,BV,"homeScreenIcon"),LV(a.navigationBarIcon,kV,MV,"navigationBarIcon"),this.backgroundColorProperty=a.backgroundColorProperty,a.name?(this.nameProperty=a.name,a.instrumentNameProperty&&this.addLinkedElement(a.name,{tandemName:"nameProperty"})):this.nameProperty=new r.A(""),this.homeScreenIcon=a.homeScreenIcon,this.navigationBarIcon=a.navigationBarIcon,this.showUnselectedHomeScreenIconFrame=a.showUnselectedHomeScreenIconFrame,this.showScreenIconFrameForNavigationBarFill=a.showScreenIconFrameForNavigationBarFill,this.createKeyboardHelpNode=a.createKeyboardHelpNode,this.pdomDisplayNameProperty=new oe([this.nameProperty,CV],e=>null===e?"":Ge.A.fillIn(CV,{name:e})),this.maxDT=a.maxDT,this.createModel=i,this.createView=n,this._model=null,this._view=null,this.activeProperty=new o(!0,{tandem:a.tandem.createTandem("activeProperty"),phetioReadOnly:!0,phetioDocumentation:"Indicates whether the screen is currently displayed in the simulation. For single-screen simulations, there is only one screen and it is always active."}),this.screenButtonsHelpText="",a.screenButtonsHelpText?this.screenButtonsHelpText=a.screenButtonsHelpText:this.nameProperty.value?this.screenButtonsHelpText=new wV(IV,{name:this.nameProperty},{tandem:A.A.OPT_OUT}):this.screenButtonsHelpText=DV}};function LV(e,t,i,n){e.width,e.height}OV.HOME_SCREEN_ICON_ASPECT_RATIO=BV,OV.MINIMUM_HOME_SCREEN_ICON_SIZE=SV,OV.MINIMUM_NAVBAR_ICON_SIZE=kV,OV.ScreenIO=new f.A("ScreenIO",{valueType:OV,supertype:Kf(f.A.ObjectIO),documentation:"Section of a simulation which has its own model and view."}),Xl.A.register("Screen",OV);const RV=OV;let NV=class{reset(){}constructor(e,t,i,n){this.simScreens=t,this.screenProperty=e,this.activeSimScreensProperty=i,this.selectedScreenProperty=new r.A(t[0],{validValues:t,phetioValueType:RV.ScreenIO,tandem:n.createTandem("selectedScreenProperty"),phetioFeatured:!0}),this.screenProperty.link(e=>{_.includes(t,e)&&(this.selectedScreenProperty.value=e)})}};Xl.A.register("HomeScreenModel",NV);const qV=NV;let FV=class extends Cr{setHighlighted(e){this.highlightRectangle.stroke=e?this.gradient:"transparent"}constructor(e,i){const n=(0,t.Ay)()({xMargin1:6,yMargin1:6,cornerRadius:0},i);super();const s=e.width+2*n.xMargin1,r=e.height+2*n.yMargin1;this.gradient=new tb(0,0,s,0).addColorStop(0,"#fbff41").addColorStop(.1475,"#fef98b").addColorStop(.465,"#feff40").addColorStop(.77,"#fffccd").addColorStop(1,"#fbff41");const o=new fa(0,0,s,r,n.cornerRadius,n.cornerRadius,{stroke:this.gradient,lineWidth:3,x:e.x-n.xMargin1,y:e.y-n.yMargin1});this.addChild(o),this.mutate(n);const a=Ie.rect(o.x,o.y,s,r);this.highlightRectangle=fa.bounds(a.dilated(.75),{stroke:"transparent",lineWidth:4.5}),this.addChild(this.highlightRectangle)}};Xl.A.register("Frame",FV);const HV=FV;let YV=class extends(cA(Rf)){constructor(e,i,n){const s=(0,t.Ay)()({cursor:"pointer",showUnselectedHomeScreenIconFrame:!1,tagName:"button",appendDescription:!0,containerTagName:"li",phetioEventType:ze.A.USER,phetioDocumentation:"A button on the home screen for choosing a simulation screen"},n),r=new oe([i.selectedScreenProperty],t=>t===e),a=new o(!1);let l=Fe(2,4,.875,.5,i.simScreens.length);i.simScreens.length>=5&&(l=.4);const c=140*l,d=e.homeScreenIcon,u=new Cr({children:[d],scale:c/d.height}),p=new Cr({children:[d],scale:140/d.height}),m=new fa(0,0,u.width,u.height,{stroke:s.showUnselectedHomeScreenIconFrame?WP.SCREEN_ICON_FRAME:null,lineWidth:.7}),g=new HV(p),A=new Cr({children:[m,u]}),y=new Cr({children:[g,p]}),f=new Cr({pdomVisible:!1}),b=new Bc(e.nameProperty);super((0,h.A)({children:[f,b]},s)),this.screen=e,this.addAriaDescribedbyAssociation({otherNode:this,otherElementName:Ls.DESCRIPTION_SIBLING,thisElementName:Ls.PRIMARY_SIBLING});const P={small:{node:[A],font:new Gc(18),spacing:3},large:{node:[y],font:new Gc(42),spacing:0}},V=()=>{const e=r.value||a.value?1:.5;p.opacity=e,u.opacity=e,b.fill=r.value||a.value?"white":"gray"};r.link(e=>{const t=e?P.large:P.small;f.children=t.node,b.font=t.font,b.maxWidth=f.width,V(),this.setSpacing(t.spacing)}),a.link(e=>{g.setHighlighted(e),V()});const v=new wn;let w=!1;const E=new Mr({fire:()=>{const t=E.pointer&&E.pointer.isTouchLike();!r.value||t&&!w?(i.selectedScreenProperty.value=e,this.voicingSpeakFullResponse({objectResponse:null,contextResponse:null})):(i.screenProperty.value=e,this.voicingSpeakFullResponse({objectResponse:null,hintResponse:null,utterance:v}))},tandem:s.tandem.createTandem("fireListener")});this.addInputListener(E),this.addInputListener({focus:e=>{!r.value&&E.fire(e)}}),this.addInputListener({click:()=>!r.value&&this.focus()}),this.addInputListener({focus:()=>a.set(!0),blur:()=>a.set(!1),over:()=>a.set(!0),out:()=>a.set(!1)});const S=()=>{w=i.selectedScreenProperty.value===e,i.selectedScreenProperty.value=e};this.addInputListener({touchover:S,penover:S}),this.boundsProperty.link(()=>{this.mouseArea=this.touchArea=Hi.bounds(this.localBounds)})}};Xl.A.register("HomeScreenButton",YV);const GV=YV;let UV=class extends Dm{playAssociatedSound(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const i=this.valueToWrappedAudioBufferMap.get(e);if("running"===this.audioContext.state){if(this.fullyEnabled&&i.audioBufferProperty.value){const e=this.audioContext.currentTime;this.localGainNode.gain.cancelScheduledValues(e),this.localGainNode.gain.setValueAtTime(1,e);const n=this.audioContext.createBufferSource();n.buffer=i.audioBufferProperty.value,n.playbackRate.setValueAtTime(this.playbackRate,this.audioContext.currentTime),n.connect(this.localGainNode),this.activeBufferSources.push(n),n.onended=()=>{const e=this.activeBufferSources.indexOf(n);e>-1&&this.activeBufferSources.splice(e,1)},n.start(e+t)}}else this.audioContextStateChangeListener&&Gl.removeStateChangeListener(this.audioContext,this.audioContextStateChangeListener),this.timeOfDeferredPlayRequest=Date.now(),this.audioContextStateChangeListener=()=>{(Date.now()-this.timeOfDeferredPlayRequest)/1e3<.2&&this.playAssociatedSound(e,.1),Gl.removeStateChangeListener(this.audioContext,this.audioContextStateChangeListener),this.audioContextStateChangeListener=null},Gl.addStateChangeListener(this.audioContext,this.audioContextStateChangeListener)}setPlaybackRate(e){this.playbackRate=e}stopAll(){const e=this.audioContext.currentTime+.1;this.localGainNode.gain.linearRampToValueAtTime(0,e),this.activeBufferSources.forEach(t=>{t.stop(e)}),this.activeBufferSources.length=0}constructor(e,i){const n=(0,t.Ay)()({initialPlaybackRate:1},i);super(n),this.activeBufferSources=[],this.valueToWrappedAudioBufferMap=e,this.localGainNode=this.audioContext.createGain(),this.localGainNode.connect(this.soundSourceDestination),this.fullyEnabledProperty.lazyLink(e=>{e||this.stopAll()}),this.playbackRate=void 0===n.initialPlaybackRate?1:n.initialPlaybackRate,this.audioContextStateChangeListener=null,this.timeOfDeferredPlayRequest=Number.NEGATIVE_INFINITY}};Tl.register("MultiClip",UV);const zV=UV,WV="data:audio/mpeg;base64,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",QV=Sl(Dl,WV),KV=El.A.createLock(WV),jV=new Il;let _V=!1;const ZV=()=>{_V||(KV(),_V=!0)},XV=Dl.decodeAudioData(QV.buffer,e=>{null===jV.audioBufferProperty.value&&(jV.audioBufferProperty.set(e),ZV())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),jV.audioBufferProperty.set(Dl.createBuffer(1,1,Dl.sampleRate)),ZV()});XV&&XV.then(e=>{null===jV.audioBufferProperty.value&&(jV.audioBufferProperty.set(e),ZV())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),ZV()});const JV=jV,$V="data:audio/mpeg;base64,//swxAACBbQfAa1vAjjzBGF2uiAGAAAAVtwAAAB7yZwNh6oRieZxJ6ZAiC/ATEjWf4paPzHKWsS3vMPHu8R6o/M8eAnZcHGwD9C4jQ2xTmNgzZHbzxk5zD0HTBEWTHspzBMqDK8KxIF37fd35ff/MUdUL/Ebxn9X8v1v6Fr/qUoAAAAEOAWfACgXUDbgA1LRszBjFcN1Q5A37hmD//syxA4ACgAhKbngkhD9BGDHvgAGGWHvMr8isweRLzBiAgMNQMkxCAAAEEEBgeVczyMNGKtsf6F4Giv/rT/odb3f/NeUfP4tFRANCwGGTlYyyEw/cJjMePwAT7SyQczJUPyKoQwYKqCgmCeiMBgE4FSYDIBVgYCxMAaABwCAANnj7qmgbL//++oAAACT1PNJAHxGinXcyGFGEMY9Mv/7MsQKAAcgGyWu+0Bw1gNkqey8jtZp4mrGBaEuYskFTJir6hjU38h9pGJE1e6j2dP16PZ0+3/r0e0AEfK5YkoDQMIPEstTDOAsMYyMs59DMBoM08VQseAdGGgKwaNoyxP16PIbk+2fs9nT7f//tpoAAAJ72ShtQGa8BoaQQT5hFA5GMcVKdoQoJiOAPgkrOATlQcDhXSQ2qmoydr3/+zLEFoJHJBsnr2GEcMsDZPXfYEaeS3N//s7fTvR/p/SFN8xoeGOEfTDSZ6D6YHbMbFxFJgYAxBqwaRl6p2KP3OOIqcUqvattP9yPq0/6PZv//9MAAAKTiC1xwHUiuHc40mB8CKYCqQx3mymHxcm6GBZP17maxazTein9P+j6m0+3o9llP/9lIOZgrByCHtnZWY4ZiqUpj4uvGhXg//swxCSCBowbJa77gDDRg2Il7+xGuBg9YF4Jpo0hixIXkQQs+iqhVNf1f0r//9v/sd/b/k0AAAAKcFJBzzB8nPiVAZdJYBiuEJnyGdkYSIe5+JIBOnyxgEWjVUbPleFtdPVo//7aPTRZ9bP//pCu9FwMmga40MyCTMMhDE7Fz7dKMIDElBibcARSRyHt9Bnbq/s3pQAAAANVnW6Q//syxDOCRxAfD49rBDCZA2N17vAGCA4OIM4qpYxYOwwIzM5oCgxiAktuxQi1OBF1E6XJqSZp0fRZ+j+zp////SAA0iQCsAHUo9Ia9HYZvsF6GoXAqf9il5jeBrH0jZkRcd+mtIOAlu7GetVcvLMd3/p//9lH/YoAAAXgGg7h7VkfY5r0nAFGMhRQdmDlw/OW+eialAABX+GAANouzf/7MsRIAgZsGxXuvMYw2AReve3ghCHw7VaMOCTf7AkcLBW2GGCSRH8ABzEFogX0VXiamZeIAAAANmlTC4o1mzOAYj1V86QwPjSTpkY95TRZARC/grAwJq4SVhZMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+zLEVwBDmBsIjeeAOI2FXrW9GE5VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//swxHqDxWAq183lZngAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",ev=Sl(Dl,$V),tv=El.A.createLock($V),iv=new Il;let nv=!1;const sv=()=>{nv||(tv(),nv=!0)},rv=Dl.decodeAudioData(ev.buffer,e=>{null===iv.audioBufferProperty.value&&(iv.audioBufferProperty.set(e),sv())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),iv.audioBufferProperty.set(Dl.createBuffer(1,1,Dl.sampleRate)),sv()});rv&&rv.then(e=>{null===iv.audioBufferProperty.value&&(iv.audioBufferProperty.set(e),sv())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),sv()});const ov=iv;let av=class extends Ve.A{};av.HOME_SCREEN_SELECTED=new av,av.DIFFERENT_ICON_SELECTED=new av,av.enumeration=new Pe.A(av);let lv=class extends zV{constructor(e,t){super(new Map([[av.HOME_SCREEN_SELECTED,JV],[av.DIFFERENT_ICON_SELECTED,ov]]),t),e.screenProperty.lazyLink(t=>{t.model===e&&this.playAssociatedSound(av.HOME_SCREEN_SELECTED)}),e.selectedScreenProperty.lazyLink(()=>{e.screenProperty.value.model===e&&this.playAssociatedSound(av.DIFFERENT_ICON_SELECTED)})}};Xl.A.register("HomeScreenSoundGenerator",lv);const hv=lv;let cv=class extends Cr{constructor(e,i){super((0,t.Ay)()({containerTagName:"section",tagName:"div",labelContent:e,labelTagName:"h2"},i))}};Pa.register("PDOMSectionNode",cv);let dv=class extends cv{constructor(e){super(Wc.a11y.simSection.controlAreaStringProperty,e)}};Pa.register("ControlAreaNode",dv);let uv=class extends cv{constructor(e){super(Wc.a11y.simSection.playAreaStringProperty,e)}};Pa.register("PlayAreaNode",uv);let pv=class extends Cr{setIntroString(e,t,i){this.openingSummaryNode.innerContent=i&&t?Ge.A.fillIn(Wc.a11y.simSection.screenSummary.multiScreenIntroStringProperty,{screen:t}):Ge.A.fillIn(Wc.a11y.simSection.screenSummary.singleScreenIntroPatternStringProperty,{sim:e})}constructor(){super(),this.openingSummaryNode=new Cr({tagName:"p"});const e=new Cr({tagName:"p",innerContent:Wc.a11y.simSection.screenSummary.keyboardShortcutsHintStringProperty});this.addChild(this.openingSummaryNode),this.addChild(e),this.pdomOrder=[this.openingSummaryNode,null,e]}};Pa.register("ScreenSummaryNode",pv);const mv=new Ie(0,0,1024,618);let gv=class e extends Cr{setPDOMOrder(e){throw new Error("Do not set the pdomOrder on ScreenView directly. Order Nodes under the `pdomScreenSummaryNode, pdomPlayAreaNode, and pdomControlAreaNode instead. This ensures that sims have a consistent heading structure and content is under those sections which is important for screen reader accessibility.")}setChildren(e){return Cr.prototype.setChildren.call(this,e),this.pdomParentNode&&!this.hasChild(this.pdomParentNode)&&(this.addChild(this.pdomParentNode),this.pdomParentNode.moveToBack()),this}getLayoutScale(t){return e.getLayoutScale(this.layoutBounds,t)}layout(t,i){this.matrix=e.getLayoutMatrix(this.layoutBounds,t,i),this.visibleBoundsProperty.value=this.parentToLocalBounds(t)}get screenSummaryContent(){return this._screenSummaryContent}set screenSummaryContent(e){this.setScreenSummaryContent(e)}setScreenSummaryContent(e){this._screenSummaryContent&&this.pdomScreenSummaryNode.removeChild(this._screenSummaryContent),this._screenSummaryContent=e,e&&this.pdomScreenSummaryNode.addChild(e)}setScreenSummaryIntroAndTitle(e,t,i,n){this.pdomScreenSummaryNode.setIntroString(e,t,n),this.pdomTitleNode.accessibleName=i}getVoicingOverviewContent(){return this._screenSummaryContent?this._screenSummaryContent.getVoicingOverviewString():null}getVoicingDetailsContent(){return this._screenSummaryContent?this._screenSummaryContent.getVoicingDetailsString():null}getVoicingHintContent(){return this._screenSummaryContent?this._screenSummaryContent.getVoicingInteractionHintString():null}interruptSubtreeInput(){var e,t,i;return null==(i=window.phet)||null==(t=i.joist)||null==(e=t.display)||e.interruptOtherPointers(),super.interruptSubtreeInput()}static getLayoutScale(e,t){return Math.min(t.width/e.width,t.height/e.height)}static getLayoutMatrix(i,n,s){const r=(0,t.Ay)()({verticalAlign:"center"},s),o=n.width,a=n.height,l=e.getLayoutScale(i,n);let h=0,c=0;return l===o/i.width?(c=a/l-i.height,"center"===r.verticalAlign&&(c/=2)):l===a/i.height&&(h=(o/l-i.width)/2),Pt.rowMajor(l,0,h*l+n.left,0,l,c*l+n.top,0,0,1)}step(e){}constructor(e){const i=(0,t.Ay)()({layoutBounds:mv.copy(),layerSplit:!0,excludeInvisible:!0,tandem:A.A.REQUIRED,visiblePropertyOptions:{phetioState:!1,phetioReadOnly:!0},containerTagName:"article",tagName:"div",screenSummaryContent:null,includePDOMNodes:!0},e);super(i),this._screenSummaryContent=null,this.layoutBounds=i.layoutBounds,this.visibleBoundsProperty=new r.A(i.layoutBounds),this.pdomTitleNode=new Cr({tagName:"h1",focusHighlight:"invisible"}),this.pdomPlayAreaNode=new uv,this.pdomControlAreaNode=new dv,this.pdomScreenSummaryNode=new pv,i.screenSummaryContent&&this.setScreenSummaryContent(i.screenSummaryContent),this.visibleProperty.lazyLink(e=>{e?(this.pdomTitleNode.focusable=!0,this.pdomTitleNode.focus()):this.pdomTitleNode.focusable=!1}),this.pdomTitleNode.addInputListener({blur:()=>{this.pdomTitleNode.focusable=!1}}),this.pdomParentNode=new Cr({children:i.includePDOMNodes?[this.pdomTitleNode,this.pdomScreenSummaryNode,this.pdomControlAreaNode,this.pdomPlayAreaNode]:[this.pdomTitleNode]}),this.addChild(this.pdomParentNode),this.pdomParentNode.pdomOrder=i.includePDOMNodes?[this.pdomTitleNode,this.pdomScreenSummaryNode,this.pdomPlayAreaNode,this.pdomControlAreaNode]:[this.pdomTitleNode]}};gv.DEFAULT_LAYOUT_BOUNDS=mv,Xl.A.register("ScreenView",gv);const Av=gv;let yv=class e extends Av{focusHighlightedScreenButton(){for(let e=0;e{""!==e&&(e+=" "),e+=Ge.A.fillIn(EV.A.a11y.homeScreenButtonDetailsPatternStringProperty,{name:t.screen.pdomDisplayNameProperty.value,screenHint:t.screen.screenButtonsHelpText})}),e}getVoicingHintContent(){return EV.A.a11y.homeScreenHintStringProperty}constructor(i,n,s){const r=(0,t.Ay)()({layoutBounds:e.LAYOUT_BOUNDS,warningNode:null,includePDOMNodes:!1},s);super(r);const o=new Cr({tagName:"p"});this.addChild(o),this.selectedScreenProperty=n.selectedScreenProperty;const a=new Bc(i,{font:new Gc({size:52,family:e.TITLE_FONT_FAMILY}),fill:"white",y:130,maxWidth:this.layoutBounds.width-10});a.localBoundsProperty.link(()=>{a.centerX=this.layoutBounds.centerX}),this.addChild(a);const l=r.tandem.createTandem("buttonGroup");this.screenButtons=_.map(n.simScreens,e=>{const t=new GV(e,n,{showUnselectedHomeScreenIconFrame:e.showUnselectedHomeScreenIconFrame,accessibleHelpText:e.screenButtonsHelpText,voicingHintResponse:e.screenButtonsHelpText,tandem:e.tandem.supplied?l.createTandem(e.tandem.name+"Button"):A.A.REQUIRED});return t.voicingNameResponse=e.pdomDisplayNameProperty,t.accessibleName=e.pdomDisplayNameProperty,t});let h=60;4===n.simScreens.length&&(h=33),n.simScreens.length>=5&&(h=20),this.homeScreenScreenSummaryIntroProperty=new wV(EV.A.a11y.homeScreenDescriptionPatternStringProperty,{name:i,screens:n.simScreens.length},{tandem:A.A.OPT_OUT}),o.accessibleName=new wV(EV.A.a11y.homeScreenIntroPatternStringProperty,{description:this.homeScreenScreenSummaryIntroProperty,hint:EV.A.a11y.homeScreenHintStringProperty},{tandem:A.A.OPT_OUT}),this.screenButtons.forEach(e=>{e.voicingContextResponse=i});const c=new Of({spacing:h,align:"top",maxWidth:this.layoutBounds.width-118,tagName:"ol"});if(n.activeSimScreensProperty.link(e=>{c.children=e.map(e=>_.find(this.screenButtons,t=>t.screen===e))}),this.addChild(new qb(c,{alignBounds:this.layoutBounds,yAlign:"top",topMargin:this.layoutBounds.height/3+20})),_l.addSoundGenerator(new hv(n,{initialOutputLevel:.5}),{categoryName:"user-interface"}),r.warningNode){const e=r.warningNode;this.addChild(e),e.centerX=this.layoutBounds.centerX,e.bottom=this.layoutBounds.maxY-2}}};yv.LAYOUT_BOUNDS=new Ie(0,0,768,504),yv.TITLE_FONT_FAMILY="Century Gothic, Futura",Xl.A.register("HomeScreenView",yv);const fv=yv,bv=EV.A.a11y.homeStringProperty,Pv=Wr.BLACK;let Vv=class extends RV{constructor(e,i,n,s,o){const a=(0,t.Ay)()({backgroundColorProperty:new r.A(Pv),name:bv,createKeyboardHelpNode:()=>new VV,instrumentNameProperty:!1},o);super(()=>new qV(i(),n,s,a.tandem.createTandem("model")),t=>new fv(e,t,{warningNode:a.warningNode,tandem:a.tandem.createTandem("view")}),a)}};Vv.BACKGROUND_COLOR=Pv,Xl.A.register("HomeScreen",Vv);const vv=Vv;let wv=class{reset(){this.backgroundColorProperty.reset()}constructor(){this.backgroundColorProperty=new r.A(Wr.BLACK),this.navigationBarDarkProperty=new oe([this.backgroundColorProperty],e=>e.equals(Wr.BLACK)),this.navigationBarFillProperty=new oe([this.navigationBarDarkProperty],e=>e?Wr.WHITE:Wr.BLACK),this.navigationBarTextFillProperty=new oe([this.navigationBarFillProperty],e=>e.equals(Wr.BLACK)?Wr.WHITE:Wr.BLACK)}};Xl.A.register("LookAndFeel",wv);const Ev=wv;let Sv=class{clear(){this.total=0,this.numSamples=0;for(let e=0;e=this.windowSize}updateRunningAverage(e){return this.numSamples=Math.min(this.windowSize,this.numSamples+1),this.total-=this.samples[this.sampleIndex],this.total+=e,this.samples[this.sampleIndex]=e,this.sampleIndex=(this.sampleIndex+1)%this.windowSize,this.getRunningAverage()}constructor(e){this.windowSize=e,this.samples=new Array(e),this.sampleIndex=0,this.total=0,this.numSamples=0,this.clear()}};w.A.register("RunningAverage",Sv);const Tv=Sv;let Cv=!1,Iv=class e{measure(){if(!window.performance||!window.performance.memory||!window.performance.memory.usedJSHeapSize)return;const t=window.performance.memory.usedJSHeapSize;this.lastMemory=t;const i=this.runningAverage.updateRunningAverage(t);if(this.memoryLimit&&this.runningAverage.isSaturated()&&!Cv&&i>this.memoryLimit&&t>.5*this.memoryLimit)throw Cv=!0,new Error(`Average memory used (${e.memoryString(i)}) is above our memoryLimit (${e.memoryString(this.memoryLimit)}). Current memory: ${e.memoryString(t)}.`)}static memoryString(e){return Math.ceil(e/1048576)+"MB"}constructor(e){const i=(0,t.Ay)()({windowSize:2e3,memoryLimit:phet.chipper.queryParameters.memoryLimit},e);this.memoryLimit=1048576*i.memoryLimit,this.runningAverage=new Tv(i.windowSize),this.lastMemory=0}};Xl.A.register("MemoryMonitor",Iv);const xv=Iv;let Dv=class e extends fy{layout(){super.layout();const e=this.cells.map(e=>e.isConnected()?e.proxy:null);this.layoutCallback.apply(null,e),this.finishedLayoutEmitter.emit()}dispose(){this.cells.forEach(e=>e.dispose()),super.dispose()}static create(t,i,n){return new e(t,i,n)}constructor(e,t,i){super(e),this.lock(),this.nodes=t,this.cells=t.map(e=>new Iy(this,e,null)),this.layoutCallback=i,this.nodes.forEach(e=>this.addNode(e,!1)),this.unlock(),this.updateLayout()}};it.A.register("RelaxedManualConstraint",Dv);const kv=e=>{(0,He.Ay)(e.trim()===e,"path must be trimmed");const t=zi.A.get(window,e);return void 0!==t?t:null};ve.A.register("getGlobal",kv);const Mv=kv;let Bv=class extends Qb{constructor(e){const i=(0,t.Ay)()({iconLength:16,pathOptions:{stroke:"white",lineWidth:2.5,lineCap:"round"},baseColor:WP.RED_COLORBLIND,xMargin:4,yMargin:4,soundPlayer:Gm.get("generalClose"),accessibleName:Wc.a11y.closeStringProperty,voicingNameResponse:Wc.a11y.closeStringProperty},e),n=(new Hi).moveTo(-i.iconLength/2,-i.iconLength/2).lineTo(i.iconLength/2,i.iconLength/2).moveTo(i.iconLength/2,-i.iconLength/2).lineTo(-i.iconLength/2,i.iconLength/2);i.content=new ua(n,i.pathOptions),super(i)}};Pa.register("CloseButton",Bv);const Ov=new class{play(){}stop(){}};Tl.register("nullSoundPlayer",Ov);const Lv=Ov,Rv=new f.A("DynamicMarkerIO",{supertype:f.A.ObjectIO,applyState:_.noop,toStateObject:()=>({}),isValidValue:_.stubTrue,documentation:"PhET-iO Type used as a place holder for dynamic elements to be created when set for state."});u.A.register("DynamicMarkerIO",Rv);const Nv=Rv,qv=e=>{(0,He.Ay)(e.split(".").length>1,"path must have multiple parts"),(0,He.Ay)(e.trim()===e,"path must be trimmed");const t=e.split("."),i=t.pop(),n=zi.A.get(window,t);return n?n[i].bind(n):null};ve.A.register("gracefulBind",qv);const Fv=qv,Hv=(e,i)=>class extends e{layout(e){this.layoutBounds&&(this.popupParent.matrix=Av.getLayoutMatrix(this.layoutBounds,e))}shouldShowPopup(){return!(this.isModal&&this.disableModals)}show(){this.shouldShowPopup()&&(this._nodeToFocusOnHide=this._focusOnHideNode||Kn(),this.isShowingProperty.value=!0,this._focusOnShowNode&&this._focusOnShowNode.focusable&&this._focusOnShowNode.focus())}hide(){this.interruptSubtreeInput(),this.isShowingProperty.value=!1,this._nodeToFocusOnHide&&this._nodeToFocusOnHide.focusable&&this._nodeToFocusOnHide.focus()}get focusOnHideNode(){return this._focusOnHideNode}dispose(){this.hide(),this.isShowingProperty.dispose(),super.dispose()}constructor(){for(var e,n=arguments.length,s=new Array(n),r=0;r{e?c.showPopup(this.popupParent,c.isModal):c.hidePopup(this.popupParent,c.isModal)})}};let Yv=class extends Cr{constructor(e,i){const n=(0,t.Ay)()({children:[e]},i);super(n),this.show=n.show,this.hide=n.hide,this.layout=n.layout}};fb.register("Popupable",Hv);const Gv=Hv,Uv=(0,Uc.A)("SUN");fb.register("SunStrings",Uv);const zv=Uv;let Wv=class e extends(Gv(uP,1)){dispose(){this.disposeDialog(),super.dispose()}constructor(i,n){var s;const r=(0,t.Ay)()({xSpacing:10,ySpacing:10,topMargin:15,bottomMargin:15,leftMargin:null,maxWidthMargin:12,maxHeightMargin:12,closeButtonLength:18.2,closeButtonTopMargin:10,closeButtonRightMargin:10,title:null,titleAlign:"center",layoutStrategy:Qv,closeButtonListener:()=>this.hide(),closeButtonColor:"black",closeButtonTouchAreaXDilation:0,closeButtonTouchAreaYDilation:0,closeButtonMouseAreaXDilation:0,closeButtonMouseAreaYDilation:0,closeButtonVoicingDialogTitle:null,closeButtonLastInPDOM:!1,openedSoundPlayer:Gm.get("generalOpen"),closedSoundPlayer:Gm.get("generalClose"),sim:Mv("phet.joist.sim"),showCallback:null,hideCallback:null,layoutBounds:Av.DEFAULT_LAYOUT_BOUNDS,focusOnShowNode:null,cornerRadius:10,resize:!0,fill:"white",stroke:"black",backgroundPickable:!0,maxHeight:null,maxWidth:null,tandemNameSuffix:["Dialog",A.k],phetioType:e.DialogIO,phetioState:!0,phetioVisiblePropertyInstrumented:!1,tagName:"div",ariaRole:"dialog",positionInPDOM:!0},n);r.xMargin=0,r.yMargin=0,null===r.leftMargin&&(r.leftMargin=r.xSpacing+r.closeButtonLength+r.closeButtonRightMargin),!r.maxWidth&&r.layoutBounds&&(r.maxWidth=Kv(r.layoutBounds.width,r.maxWidthMargin)),!r.maxHeight&&r.layoutBounds&&(r.maxHeight=Kv(r.layoutBounds.height,r.maxHeightMargin));const o=new wn({priority:wn.MEDIUM_PRIORITY,voicingCanAnnounceProperties:[Yn.voicingFullyEnabledProperty]}),a=new Bv({iconLength:r.closeButtonLength,baseColor:"transparent",buttonAppearanceStrategy:Ub.FlatAppearanceStrategy,xMargin:0,yMargin:0,listener:()=>{a.voicingSpeakContextResponse({utterance:o}),r.closeButtonListener()},pathOptions:{stroke:r.closeButtonColor},tandem:null==(s=r.tandem)?void 0:s.createTandem("closeButton"),phetioState:!1,phetioVisiblePropertyInstrumented:!1,phetioEnabledPropertyInstrumented:!1,soundPlayer:Lv,voicingContextResponse:zv.a11y.closedStringProperty});let l;if(r.closeButtonVoicingDialogTitle){const e="string"==typeof r.closeButtonVoicingDialogTitle?new d.A(r.closeButtonVoicingDialogTitle):r.closeButtonVoicingDialogTitle;l=a.voicingNameResponse=new wV(zv.a11y.titleClosePatternStringProperty,{title:e},{tandem:A.A.OPT_OUT})}a.touchArea=a.bounds.dilatedXY(r.closeButtonTouchAreaXDilation,r.closeButtonTouchAreaYDilation),a.mouseArea=a.bounds.dilatedXY(r.closeButtonMouseAreaXDilation,r.closeButtonMouseAreaYDilation);const h=new Cr({tagName:"h1"}),c=new Cr({tagName:"p"});let u=[h,c,r.title,i];r.closeButtonLastInPDOM?u.push(a):u.unshift(a),u=u.filter(e=>null!=e),r.focusOnShowNode=r.focusOnShowNode?r.focusOnShowNode:u[0].focusable?u[0]:a;const p=new Rf({children:r.title?[r.title,i]:[i],spacing:r.ySpacing,align:r.titleAlign}),m=new qb(p,{topMargin:r.topMargin,bottomMargin:r.bottomMargin,leftMargin:r.leftMargin}),g=new qb(a,{topMargin:r.closeButtonTopMargin,rightMargin:r.closeButtonRightMargin}),y=new Of({children:[h,c,m,g],spacing:r.xSpacing,align:"top"});super(y,r),this.isShowingProperty.lazyLink(e=>{e?(r.openedSoundPlayer.play(),r.showCallback&&r.showCallback()):(r.closedSoundPlayer.play(),r.hideCallback&&r.hideCallback())}),this.sim=r.sim,this.closeButton=a;const f=ye.multilink([this.sim.boundsProperty,this.sim.screenBoundsProperty,this.sim.scaleProperty,this.sim.selectedScreenProperty,this.isShowingProperty,this.localBoundsProperty],(e,t,i)=>{e&&t&&i&&r.layoutStrategy(this,e,t,i)});this.pdomOrder=u,_s.forwardAccessibleName(this,h),this.accessibleHelpTextBehavior=(e,t,i,n)=>(n.push(()=>{c.innerContent=i}),t),!r.accessibleName&&r.title&&(this.accessibleName=yb(r.title)),this.addAriaLabelledbyAssociation({thisElementName:Ls.PRIMARY_SIBLING,otherNode:h,otherElementName:Ls.LABEL_SIBLING});const b=new Jc({keys:["escape","tab","shift+tab"],fire:(e,t)=>{const i=e;if("escape"===t)i.preventDefault(),this.hide();else if(("tab"===t||"shift+tab"===t)&&eA.isFullScreen()){const e=_n.pdomFocus.trail.getUniqueId(),t=on.A.getNextFocusable().id===e,n=on.A.getPreviousFocusable().id===e;t&&n&&i.preventDefault()}}});this.addInputListener(b),this.disposeDialog=()=>{f.dispose(),g.dispose(),this.removeInputListener(b),b.dispose(),l&&l.dispose(),a.dispose(),o.dispose(),p.dispose(),y.removeAllChildren(),y.detach()}}};function Qv(e,t,i,n){e.layoutBounds&&(e.center=e.layoutBounds.center)}function Kv(e,t){return e>2*t?e-2*t:e}Wv.DialogIO=new f.A("DialogIO",{valueType:Wv,supertype:Nv}),fb.register("Dialog",Wv);var jv=i(222);let _v=class extends A.A{constructor(e,i,n){super(e,i,(0,t.Ay)()({isValidTandemName:e=>A.A.getRegexFromCharacterClass(jv.A.BASE_DYNAMIC_TANDEM_CHARACTER_CLASS).test(e)},n))}};u.A.register("DynamicTandem",_v);const Zv=_v;i(8981);let Xv=class extends g.A{stateSetOnAllChildrenOfDynamicElement(e,t){for(let i=0;i0&&void 0!==arguments[0]?arguments[0]:this.tandem.createTandem(A.k),t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.defaultArguments;if(_.hasIn(window,"phet.joist.sim")&&phet.joist.sim.isConstructionCompleteProperty.value)return null;if(A.A.PHET_IO_ENABLED&&phet.preloads.phetio.createArchetypes){const i=Array.isArray(t)?t:t(),n=this.createElement(e,...i);return this.isPhetioInstrumented()&&n.markDynamicElementArchetype(),n}return null}createDynamicElement(e,t,i){let n;n=this.tandem.hasChild(e)?this.tandem.createTandem(e,this.tandem.getExtendedOptions()):new Zv(this.tandem,e,this.tandem.getExtendedOptions());const s=this.createElement(n,...t);return A.A.PHET_IO_ENABLED&&this.isPhetioInstrumented()&&(0,k.A)(s,i.validator),s}assertDynamicPhetioObject(e){A.A.PHET_IO_ENABLED&&A.A.VALIDATION}emitDataStreamEvent(e,t,i){this.phetioStartEvent(t,{data:(0,h.A)({phetioID:e.tandem.phetioID},i)}),this.phetioEndEvent()}createdEventListener(e){const t=e.phetioState?{state:this.phetioType.parameterTypes[0].toStateObject(e)}:null;this.emitDataStreamEvent(e,"created",t)}disposedEventListener(e){this.emitDataStreamEvent(e,"disposed")}dispose(){}disposeElement(e){e.dispose(),this.notificationsDeferred?this.deferredDisposals.push(e):this.elementDisposedEmitter.emit(e,e.tandem.phetioID)}notifyElementDisposedWhileDeferred(e){this.elementDisposedEmitter.emit(e,e.tandem.phetioID),(0,a.A)(this.deferredDisposals,e)}notifyElementCreated(e){this.notificationsDeferred?this.deferredCreations.push(e):this.elementCreatedEmitter.emit(e,e.tandem.phetioID)}notifyElementCreatedWhileDeferred(e){this.elementCreatedEmitter.emit(e,e.tandem.phetioID),(0,a.A)(this.deferredCreations,e)}setNotificationsDeferred(e){if(!e){for(;this.deferredCreations.length>0;)this.notifyElementCreatedWhileDeferred(this.deferredCreations[0]);for(;this.deferredDisposals.length>0;)this.notifyElementDisposedWhileDeferred(this.deferredDisposals[0])}this.notificationsDeferred=e}get archetype(){return function(e){if(null===e)throw new Error("archetype should exist");return e}(this._archetype)}getMetadata(e){const t=super.getMetadata(e);return(0,h.A)({phetioDynamicElementName:this.phetioDynamicElementName},t)}constructor(e,i,n){const s=(0,t.Ay)()({phetioState:!1,supportsDynamicState:!0,containerSuffix:"Container",phetioDynamicElementName:void 0},n);if(Array.isArray(i),s.tandem&&!s.phetioDynamicElementName&&(s.phetioDynamicElementName=s.tandem.name.slice(0,s.tandem.name.length-s.containerSuffix.length)),super(s),this.supportsDynamicState=s.supportsDynamicState,this.phetioDynamicElementName=s.phetioDynamicElementName,this.createElement=e,this.defaultArguments=i,this._archetype=this.createArchetype(),this.elementCreatedEmitter=new b.A({parameters:[{valueType:g.A,phetioType:s.phetioType.parameterTypes[0],name:"element"},{name:"phetioID",phetioType:x.A}],tandem:s.tandem.createTandem("elementCreatedEmitter"),phetioDocumentation:"Emitter that fires whenever a new dynamic element is added to the container."}),this.elementDisposedEmitter=new b.A({parameters:[{valueType:g.A,phetioType:s.phetioType.parameterTypes[0],name:"element"},{name:"phetioID",phetioType:x.A}],tandem:s.tandem.createTandem("elementDisposedEmitter"),phetioDocumentation:"Emitter that fires whenever a dynamic element is removed from the container."}),A.A.PHET_IO_ENABLED&&this.isPhetioInstrumented()&&(this.elementCreatedEmitter.addListener(e=>this.createdEventListener(e)),this.elementDisposedEmitter.addListener(e=>this.disposedEventListener(e))),this.notificationsDeferred=!1,this.deferredCreations=[],this.deferredDisposals=[],A.A.PHET_IO_ENABLED&&this.supportsDynamicState&&!this.phetioIsArchetype&&this.isPhetioInstrumented()){const e=phet.phetio.phetioEngine.phetioStateEngine;e.clearDynamicElementsEmitter.addListener((e,t)=>{this.tandem.hasAncestor(t)&&(this.clear({phetioState:e}),this.setNotificationsDeferred(!0))}),e.undeferEmitter.addListener(()=>{this.notificationsDeferred&&this.setNotificationsDeferred(!1)}),e.addSetStateHelper((e,t)=>{let i=!1,n=0;for(;this.deferredCreations.length>0;){if(n>200)throw new Error("Too many iterations in deferred creations, stillToSetIDs = "+t.join(", "));const e=this.deferredCreations[0];this.stateSetOnAllChildrenOfDynamicElement(e.tandem.phetioID,t)&&(this.notifyElementCreatedWhileDeferred(e),i=!0),n++}return i})}}};u.A.register("PhetioDynamicElementContainer",Xv);const Jv=Xv,$v=Zl.A.CAPSULE_SUFFIX,ew=new c.A;let tw=class extends Jv{disposeElement(){super.disposeElement(this.element),this.element=null}hasElement(){return null!==this.element}getElement(){if(!this.element){for(var e=arguments.length,t=new Array(e),i=0;i1&&void 0!==arguments[1]&&arguments[1];return this.element=this.createDynamicElement(this.phetioDynamicElementName,e,A.A.PHET_IO_ENABLED?this.phetioType.parameterTypes[0]:null),this.notifyElementCreated(this.element),this.element}constructor(e,i,n){const s=(0,t.Ay)()({containerSuffix:$v,disposeOnClear:!0,disposeCreatedOnStateSet:!1},n);super(e,i,s),this.element=null,this.disposeOnClear=s.disposeOnClear,this.disposeCreatedOnStateSet=s.disposeCreatedOnStateSet}};tw.PhetioCapsuleIO=e=>(ew.has(e)||ew.set(e,new f.A(`PhetioCapsuleIO<${e.typeName}>`,{valueType:tw,documentation:"An array that sends notifications when its values have changed.",parameterTypes:[e],metadataDefaults:{phetioDynamicElementName:null},addChildElement(t,i,n){const s=e.stateObjectToCreateElementArguments(n);return t.create(s,!0)}})),ew.get(e)),u.A.register("PhetioCapsule",tw);const iw=tw,nw=new Image,sw=El.A.createLock(nw);nw.onload=sw,nw.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAA+CAYAAABuv5bfAAAACXBIWXMAABhMAAAYTAGIN/zbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAttJREFUeNrsW91RwzAMdnu8txsQJqiZoGECyhtvlAmaDSgbZIRuQEYIG4QJCBukb7yFiHPvgisV+fJTJ5XudL24MpI/9Ge7mZRlqUZG24pfas93FadtKpiq8dG8awVjBE0LaM09LW9bwWRkOS2o+NNeo3jaaQ9LrLGPLhRdjSB/hYbvke/TLpQOKTyDGkjwuWTMuekip/nuaQDQ2nxeO8zbVxx1AZjvoMUVbxznQA7bGS66MszX8MSqIOVRqeGkK88aiqdtT3z3bgACoLJzGOerp0Fozayw2yItxVnIR09bWYAdxnJfDPSxuQ2t5y+fAMM8LUSM7pserefvf3JcH5TU8+chp2lTphdK6FQBgjRRAGiBQXEmuLD6wHBqXF8A4xFEYgSeVgoWbt4moLXYcsBlxERYvQ6lTxuspwkJaOfbe87V8fVYytwKZQo/37LlcmLLpNXfW6aCOOEIDP9nI7YWysZjKnEKoahanCFyESIXI3IJIhchcgUipwkbNSJbMG1MmDZuMcUu4bkg/mOYV3DksLEZU67p/LmDHslpUggGABp28Zq1PIbpgMKwt8b2RMHg2thb9QytfEVVsEgdH0unxBnVrZVLMgI0bVVFqspybewNtELxb6y5ctwFUSA1sVFymhQCAe2yQdvBBoLBK2TuCpGLiW1QYcllJ/JhXa5AtlDK6LF1L/sC7YkppxuMBUhXv2DuUGYEaFrCU3La+EHbjxwL9k+zXJpbTeQMTsMaI01nTjTFd8zF3CInE1hju25gd2PQuF35UHcTktOkEAhowyeXnBYjjWKE5Ja1YV+Ia+POcKugbYjtEWbQ0iPQXGzcSXhKThPQLqYQPCCFICYS78qjNXJtTLoALWH+4Uyd6aUIB2pko4SngCagDa4QQPMXCjw4BvJDZXf6gvD8EBycKAVPg37lTbBgERz566npvZ4FDxZgv+/F11+SDRX/PP3SKDM7ixwefgQYAIqW2LtFfuBbAAAAAElFTkSuQmCC";const rw=nw,ow=new Image,aw=El.A.createLock(ow);ow.onload=aw,ow.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAA+CAYAAABuv5bfAAAACXBIWXMAABhMAAAYTAGIN/zbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAxlJREFUeNrsW8tx2zAQBWPfpWNupiswc8oxcgVhbr6ZJbADswSWoBJQAtwBVUHoDqhbcmIWnuVEhpfSYkhKILU7s8MR/CgsnoH9AFDUtq1akkRRVMDj5aDpEcZoxuzji1qerKfuYImkJULa8JlWj+4CluTTwJ/F8Ph92Abji2Sm9RNmZ5h2mndT9HU7c6Ks/9qg/iQgZpJ+57I8cel1JNnnD8Zr9zC++qpmGhBlCcqQqDuPV/eg+RSEdY4ySAUprXmeWlmybASd0rYglycVBY/MKIOqJ5tZM1mexZG/vWKUNEBSdZF/aqAzrYHHykkdCrBVh2DfbYCEpQ5hVtJzLb25Jrcb5/NbSIR9mmkY4jcXtunJ+fwHt3suKfqD/0SflmC4bkV71XSpjBUb3hshhZ0Hrm8wifyuRDjyFfRvhAyK8GUnpI2Yp41+GDHTrScbtV/mkKcFL0KakBZY7Yl78ImzF2d6sG5VUQG2YeBqqmTCbe3DU6aG2uHALaX4lI3UWPps7BMqidsQm4JUxZAzNw81gcsJXEPgkh4bEwLbMG3UTBsLqm+f5flAtFGn2QkTR7WtmLih7689+hGfJoFgBqRRB6/VyG1UHzYw7J22vaKvG3BtPE/0VP/PG49GMGjLITrpUxHMbl0D7pvjS6jvqzF6xqeiLNfGs5GG4dgwsVxcxcTVinGRxcdG8WkSCIS06yYNnPEWtGVoSrybEriSKoPsmaeDq3rsqRxcg2WUiyvdvhXv8swoM+2ZiUsGtMVEVv/ArFBWbt15pB9ZnuLTFkbafuFcsLeFfCqCpMdncMqWkkg6ayopBkf9yByMW030JdXZALsHVwSsrHyu1YT4NAkEQtoixOdgpSQSxdz1LYDL0PmGIlwbt4Dbsv204h2sULiCwBkV1k0fro1mioMVEfFpQlqYgQDkFxEISsrxgqYBjZFrox6dNLzDrxm4Sk1wAjSmDLVRlqeQJqTNLhBkxDWoaxSSA7mo7C9vdnnuhAcvsSXYe74iv0bhqd1MjbvCNBNCWIRlH36OffAj+1hW4CexiXDZ3VT6J8AAo7gFqk0pOnsAAAAASUVORK5CYII=";const lw=ow;let hw=class extends Of{constructor(e,i,n){const s=(0,t.Ay)()({fill:"white",highlightWidth:1,pickable:!1},n);s.spacing=e;const r=s.fill,o=Wr.toColor(r).withAlpha(0),a={fill:new tb(0,0,0,i).addColorStop(0,o).addColorStop(.5,r).addColorStop(1,o)},l=new fa(0,0,s.highlightWidth,i,a),h=new fa(0,0,s.highlightWidth,i,a);s.children=[l,h],super(s)}};Xl.A.register("HighlightNode",hw);const cw=hw;let dw=class extends(cA(Cr)){isPDOMClicking(){return this._pressListener.pdomClickingProperty.get()}constructor(e,i,n){const s=(0,t.Ay)()({cursor:"pointer",listener:null,highlightExtensionWidth:0,highlightExtensionHeight:0,highlightCenterOffsetX:0,highlightCenterOffsetY:0,pointerAreaDilationX:0,pointerAreaDilationY:0,enabledPropertyOptions:{phetioFeatured:!1},disabledOpacity:ff.DISABLED_OPACITY,tagName:"button"},n),r=function(t){return new cw(e.width+s.highlightExtensionWidth,e.height+s.highlightExtensionHeight,{centerX:e.centerX+s.highlightCenterOffsetX,centerY:e.centerY+s.highlightCenterOffsetY,fill:t,pickable:!1})},o=r("white"),a=r("black");s.children=[e,o,a],super(s),this.buttonModel=new Ib(s);const l=new Tb(this.buttonModel);this.interactionStateProperty=l,ye.multilink([l,i,this.buttonModel.enabledProperty],(e,t,i)=>{const n=!t.equals(Wr.BLACK);o.visible=!n&&i&&(e===Sb.OVER||e===Sb.PRESSED),a.visible=n&&i&&(e===Sb.OVER||e===Sb.PRESSED)}),this.buttonModel.enabledProperty.link(e=>{this.cursor=e?s.cursor:null}),this._pressListener=this.buttonModel.createPressListener({tandem:A.A.OPT_OUT}),this.addInputListener(this._pressListener),this.mouseArea=this.touchArea=Hi.bounds(this.bounds.dilatedXY(s.pointerAreaDilationX,s.pointerAreaDilationY)),this.focusHighlight=Hi.bounds(this.bounds.shiftedY(-3))}};Xl.A.register("JoistButton",dw);let uw=class extends(AA(Bc)){constructor(e,i){const n=(0,t.Ay)()({readingBlockNameResponse:e},i);n.readingBlockDisabledTagName?n.accessibleName=void 0===n.accessibleName?e:n.accessibleName:n.accessibleParagraph=void 0===n.accessibleParagraph?e:n.accessibleParagraph,super(e),this.focusHighlight=new oA(this),this.mutate(n)}};it.A.register("VoicingText",uw);const pw=uw,mw=EV.A.a11y.keyboardHelp.tabToGetStartedStringProperty;let gw=class extends Wv{constructor(e,i,n){const s=(0,t.Ay)()({titleAlign:"center",fill:"rgb( 214, 237, 249 )",ySpacing:15,phetioReadOnly:!0,phetioDynamicElement:!0,closeButtonVoicingDialogTitle:EV.A.keyboardShortcuts.titleStringProperty,isDisposable:!1},n),r=new Cr({tagName:"div"}),o=s.tandem.createTandem("content"),a=[];e.forEach(e=>{const t=e.tandem.supplied?o.createTandem(e.tandem.name):A.A.REQUIRED,i=e.createKeyboardHelpNode(t);a.push(i)});const l=new pw(EV.A.keyboardShortcuts.titleStringProperty,{font:new Gc({weight:"bold",size:24}),maxWidth:670,accessibleParagraph:null}),h=new Aw,c=new Rf({children:[l,h],spacing:5});s.title=c,super(r,s),ye.multilink([i,this.isShowingProperty],(t,i)=>{const n=a[e.indexOf(t)];i&&(r.children=[n])})}},Aw=class extends(AA(Cr)){constructor(e){const i=(0,t.Ay)()({readingBlockNameResponse:mw},e);super();const n=qP.tab(),s=fV.labelWithIcon(EV.A.keyboardShortcuts.toGetStartedStringProperty,n,{labelInnerContent:mw,iconOptions:{tagName:"p"}}),r=new Of({children:[s.icon,s.label],spacing:4});this.addChild(r),this.mutate(i)}};Xl.A.register("KeyboardHelpDialog",gw);const yw=EV.A.a11y.keyboardHelp.keyboardShortcutsStringProperty;let fw=class extends dw{constructor(e,i,n,s){const r=(0,t.Ay)()({highlightExtensionWidth:8.6,highlightExtensionHeight:10,highlightCenterOffsetY:2,visiblePropertyOptions:{phetioFeatured:!0},accessibleName:yw,voicingNameResponse:yw},s);let o=null;r.listener=()=>{o.getElement().show()};const a=new _h(rw,{scale:17.085/rw.height,pickable:!1});super(a,n,r),o=new iw(t=>new gw(e,i,{tandem:t,focusOnHideNode:this}),[],{tandem:r.tandem.createTandem("keyboardHelpDialogCapsule"),phetioType:iw.PhetioCapsuleIO(Wv.DialogIO),disposeOnClear:!1}),n.link(e=>{a.image=e.equals(Wr.BLACK)?rw:lw})}};Xl.A.register("KeyboardHelpButton",fw);const bw=fw,Pw=Math.PI/2.7,Vw=-1*Pw;let vw=class extends dw{constructor(e,i,n){const s=(0,t.Ay)()({highlightExtensionWidth:8.6,highlightExtensionHeight:10,highlightCenterOffsetY:0,enabled:!(phet.chipper.isFuzzEnabled()&&phet.chipper.supportsAnyVoicing()),visiblePropertyOptions:{phetioFeatured:!0},phetioFeatured:!0,accessibleName:EV.A.a11y.soundToggle.labelStringProperty,voicingNameResponse:EV.A.a11y.soundToggle.labelStringProperty},n);s.listener=()=>e.set(!e.get());const r=new Cr,o=new Cr,a=new fa(0,0,24.86,22,{fill:"transparent"});r.addChild(a),o.addChild(a);const l=new ua((new Hi).moveTo(9.8252,0).lineTo(4.519592,(16.94-5.929)/2).lineTo(1,(16.94-5.929)/2).arc(1,(16.94-5.929)/2+1,1,1.5*Math.PI,Math.PI,!0).lineToRelative(0,5.929-2).arc(1,10.4345,1,Math.PI,.5*Math.PI,!0).lineToRelative(4.519592-1,0).lineTo(9.8252,16.94).lineTo(9.8252,0).close(),{stroke:"black",lineWidth:1.5,lineJoin:"round",centerY:o.centerY,left:0});r.addChild(l),o.addChild(l);const h=new ua((new Hi).moveTo(0,0).lineTo(16.94*.52,16.94*.52).moveTo(0,16.94*.52).lineTo(16.94*.52,0),{stroke:"black",lineWidth:1.7,lineCap:"round",right:o.width,centerY:o.centerY});o.addChild(h);const c=new ua((new Hi).arc(0,0,10.6722,Pw,Vw,!0).moveToPoint(new Te.A(6.776,0).rotated(Pw)).arc(0,0,6.776,Pw,Vw,!0).moveToPoint(new Te.A(6.776-16.94*.23,0).rotated(Pw)).arc(0,0,6.776-16.94*.23,Pw,Vw,!0),{stroke:"black",lineWidth:1.7,lineCap:"round",right:r.width,centerY:r.centerY});r.addChild(c),super(new sP(eh.anyOutputEnabledProperty,[{value:!0,createNode:()=>r},{value:!1,createNode:()=>o}],{maxHeight:18.7}),i,s),this.addLinkedElement(e,{tandemName:"property"});const d=new RP;e.lazyLink(e=>{s.supportsAudioPreferences&&(this.setPDOMAttribute("aria-pressed",e),d.alert=e?EV.A.a11y.soundToggle.alert.simSoundOnStringProperty:EV.A.a11y.soundToggle.alert.simSoundOffStringProperty,this.alertDescriptionUtterance(d),Yn.voicingFullyEnabledProperty.value&&Yn.speakIgnoringEnabled(d))}),this.setPDOMAttribute("aria-pressed",e.get()),eh.anySubcomponentEnabledProperty.link(e=>{this.enabled=e}),i.link(e=>{const t=e.equals(Wr.BLACK)?"white":"black";l.stroke=t,h.stroke=t,c.stroke=t})}};Xl.A.register("NavigationBarAudioToggleButton",vw);const ww=vw,Ew=new Image,Sw=El.A.createLock(Ew);Ew.onload=Sw,Ew.src="data:image/png;base64,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";const Tw=Ew,Cw=new Image,Iw=El.A.createLock(Cw);Cw.onload=Iw,Cw.src="data:image/png;base64,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";const xw=Cw,Dw=new Gc({weight:"bold",size:16}),kw=new Gc(16),Mw=new Gc({size:24,weight:"bold"}),Bw=new Gc(20),Ow={font:Bw,maxWidth:120},Lw=new Gc(16),Rw={font:Lw,maxWidth:500},Nw=new Gc({weight:"bold",size:16}),qw={font:Nw,maxWidth:360},Fw={TOGGLE_SWITCH_OPTIONS:{size:new Be(36,18),trackFillRight:"#64bd5a",enabled:!(phet.chipper.isFuzzEnabled()&&phet.chipper.supportsAnyVoicing()),voicingIgnoreVoicingManagerProperties:!0,tandem:A.A.OPT_OUT},CONTROL_LABEL_OPTIONS:{font:Dw,maxWidth:360},CONTROL_DESCRIPTION_OPTIONS:{font:kw,lineWrap:"stretch"},TOGGLE_SWITCH_LABEL_OPTIONS:{font:kw},TAB_FONT:Bw,TAB_OPTIONS:Ow,TITLE_FONT:Mw,CONTENT_FONT:Lw,CONTENT_MAX_WIDTH:500,PANEL_SECTION_CONTENT_OPTIONS:Rw,PANEL_SECTION_LABEL_FONT:Nw,PANEL_SECTION_LABEL_MAX_WIDTH:360,PANEL_SECTION_LABEL_OPTIONS:qw,CONTENT_SPACING:20,VERTICAL_CONTENT_SPACING:5,CONTENT_INDENTATION_SPACING:15,LABEL_CONTENT_SPACING:10},Hw=new Be(60,30);let Yw=class extends(cA(Cr)){dispose(){this.disposeToggleSwitch(),super.dispose()}constructor(e,i,n,s){const r=(0,t.Ay)()({size:Hw,toggleWhileDragging:null,dragThreshold:3,toggleThreshold:1,thumbFill:null,thumbStroke:"black",thumbTouchAreaXDilation:8,thumbTouchAreaYDilation:8,thumbMouseAreaXDilation:0,thumbMouseAreaYDilation:0,trackFillLeft:null,trackFillRight:null,trackStroke:"black",cursor:"pointer",disabledOpacity:ff.DISABLED_OPACITY,switchToLeftSoundPlayer:Gm.get("switchToLeft"),switchToRightSoundPlayer:Gm.get("switchToRight"),tandem:A.A.REQUIRED,tandemNameSuffix:"Switch",phetioEventType:ze.A.USER,phetioReadOnly:g.A.DEFAULT_OPTIONS.phetioReadOnly,visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,phetioFeatured:!0,tagName:"button",accessibleSwitch:!0,leftValueContextResponse:null,rightValueContextResponse:null},s);let o=null;r.trackFillLeft&&r.trackFillRight||(o=new tb(0,0,0,r.size.height).addColorStop(0,"rgb( 40, 40, 40 )").addColorStop(1,"rgb( 200, 200, 200 )")),r.trackFillLeft=r.trackFillLeft||o,r.trackFillRight=r.trackFillRight||o,r.thumbFill=r.thumbFill||new tb(0,0,0,r.size.height).addColorStop(0,"white").addColorStop(1,"rgb( 200, 200, 200 )"),r.accessibleName&&(r.voicingNameResponse=r.accessibleName),super(),this.onInputEmitter=new b.A;const a=r.size.height/2,l=new fa(0,0,r.size.width,r.size.height,a,a,{stroke:r.trackStroke,fill:r.trackFillLeft});this.addChild(l);const h=new fa(0,0,r.size.width,r.size.height,a,a,{stroke:r.trackStroke,fill:r.trackFillRight});this.addChild(h);const c=new fa(0,0,.5*r.size.width,r.size.height,a,a,{fill:r.thumbFill,stroke:r.thumbStroke});this.addChild(c),(r.thumbTouchAreaXDilation||r.thumbTouchAreaYDilation)&&(c.touchArea=Hi.roundRect(-r.thumbTouchAreaXDilation,-r.thumbTouchAreaYDilation,.5*r.size.width+2*r.thumbTouchAreaXDilation,r.size.height+2*r.thumbTouchAreaYDilation,a,a)),(r.thumbMouseAreaXDilation||r.thumbMouseAreaYDilation)&&(c.mouseArea=Hi.roundRect(-r.thumbMouseAreaXDilation,-r.thumbMouseAreaYDilation,.5*r.size.width+2*r.thumbMouseAreaXDilation,r.size.height+2*r.thumbMouseAreaYDilation,a,a));const d=e=>{const t=l.lineWidth/2;e===i?c.left=-t:c.right=r.size.width+t,h.rectWidth=c.right-t,r.accessibleSwitch&&(this.setPDOMAttribute("aria-pressed",e!==i),this.setPDOMAttribute("aria-checked",e!==i))};r.accessibleSwitch&&(this.ariaRole="switch"),e.link(d);const u=r.dragThreshold*r.dragThreshold,p=new Te.A(0,0);let m=!1;const y=new _e.A(t=>{e.value=t,this.onInputEmitter.emit()},{parameters:[{validValues:[i,n],phetioPrivate:!0}],tandem:r.tandem.createTandem("toggleAction"),phetioDocumentation:"Occurs when the switch is toggled via user interaction",phetioReadOnly:r.phetioReadOnly,phetioEventType:ze.A.USER});this.onInputEmitter.addListener(()=>{e.value===i?r.switchToLeftSoundPlayer.play():r.switchToRightSoundPlayer.play();const t=e.value===n?r.rightValueContextResponse:r.leftValueContextResponse;t&&(this.alertDescriptionUtterance(t),this.voicingSpeakResponse({contextResponse:wn.alertableToText(t)}))});const f=()=>c.centerX!e||"move"!==e.type&&"enter"!==e.type||_.includes(e.trail.nodes,c),start:()=>{p.setXY(0,0),m=!1},drag:(t,i)=>{p.add(i.modelDelta),m=m||p.magnitudeSquared>u;const n=i.getCurrentTarget().globalToLocalPoint(t.pointer.point),s=c.width/2,o=l.lineWidth/2;c.centerX=(0,Ze.q)(n.x,s-o,r.size.width-s+o),h.rectWidth=c.right-o;const a=n.x<(1-2*r.toggleThreshold)*s||n.x>(2*r.toggleThreshold-1)*s+r.size.width,d=f();(!0===r.toggleWhileDragging||a&&null===r.toggleWhileDragging)&&e.value!==d&&y.execute(d)},end:()=>{const t=e.value===i?n:i,s=m?f():t;e.value!==s&&y.execute(s),d(s)},canClick:!0});this.addInputListener(P),this.mutate(r),this.addLinkedElement(e,{tandemName:"property"}),this.switchToLeftSoundPlayer=r.switchToLeftSoundPlayer,this.switchToRightSoundPlayer=r.switchToRightSoundPlayer,this.disposeToggleSwitch=()=>{l.dispose(),h.dispose(),e.unlink(d),y.dispose(),P.dispose(),this.onInputEmitter.dispose()}}};fb.register("ToggleSwitch",Yw);let Gw=class extends Df{constructor(e){const i=(0,t.Ay)()({headingControl:!1,labelSpacing:10,allowDescriptionStretch:!0,valueLabelXSpacing:8,ySpacing:5,nestedContent:[],grow:1,layoutOptions:{stretch:!(null==e?void 0:e.headingControl)}},e);if(super(i),i.controlNode&&(this.enabledProperty.link(e=>{i.controlNode.enabled=e}),i.controlNode.layoutOptions={row:0,column:1,xAlign:"right"},this.addChild(i.controlNode)),i.labelNode&&(i.labelNode.layoutOptions={row:0,column:0,xAlign:"left",rightMargin:i.labelSpacing},this.addChild(i.labelNode)),i.descriptionNode&&i.labelNode){const e={row:1,column:0,horizontalSpan:2,xAlign:"left"};i.allowDescriptionStretch&&(e.minContentWidth=480,e.stretch=!0),i.descriptionNode.layoutOptions=e,this.addChild(i.descriptionNode)}else i.descriptionNode&&(i.descriptionNode.layoutOptions={row:0,column:0,xAlign:"left"},this.addChild(i.descriptionNode));this.disabledOpacity=ff.DISABLED_OPACITY}};Xl.A.register("PreferencesControl",Gw);const Uw=Gw;let zw=class extends Cr{constructor(e,i,n,s){const r=(0,t.Ay)()({tagName:"div",labelTagName:"h2"},s);r.tandem=A.A.OPT_OUT,super(r),ye.multilink([i,n],(t,i)=>{this.visible=t===e&&i})}};Xl.A.register("PreferencesPanel",zw);const Ww=zw;let Qw=class extends Rf{constructor(e){const i=(0,t.Ay)()({spacing:Fw.CONTENT_SPACING,titleNode:null,contentNode:null,contentNodeOptions:{},contentLeftMargin:30},e),n=new gV({matchVertical:!1}),s=[];if(i.titleNode&&s.push(n.createBox(i.titleNode,{xAlign:"left"})),i.contentNode){const e=(0,t.sF)({children:[i.contentNode]},i.contentNodeOptions);s.push(n.createBox(new Cr(e),{leftMargin:i.contentLeftMargin,xAlign:"left"}))}i.children=s,super(i)}};Xl.A.register("PreferencesPanelSection",Qw);const Kw=Qw;let jw=class extends Ve.A{};jw.OVERVIEW=new jw,jw.SIMULATION=new jw,jw.VISUAL=new jw,jw.AUDIO=new jw,jw.INPUT=new jw,jw.LOCALIZATION=new jw,jw.enumeration=new Pe.A(jw),Xl.A.register("PreferencesType",jw);let _w=class extends(AA(df)){constructor(e,i){const n=(0,t.Ay)()({readingBlockNameResponse:e,readingBlockTagName:"button"},i);n.readingBlockDisabledTagName?n.accessibleName=void 0===n.accessibleName?e:n.accessibleName:n.accessibleParagraph=void 0===n.accessibleParagraph?e:n.accessibleParagraph,super(e,n),this.focusHighlight=new oA(this)}};it.A.register("VoicingRichText",_w);const Zw=_w,Xw=EV.A.preferences.tabs.audio.sounds.titleStringProperty,Jw=EV.A.preferences.tabs.audio.sounds.extraSounds.titleStringProperty,$w=EV.A.preferences.tabs.audio.sounds.descriptionStringProperty,eE=EV.A.preferences.tabs.audio.sounds.extraSounds.descriptionStringProperty,tE=EV.A.a11y.preferences.tabs.audio.sounds.soundsOnStringProperty,iE=EV.A.a11y.preferences.tabs.audio.sounds.soundsOffStringProperty,nE=EV.A.a11y.preferences.tabs.audio.sounds.extraSounds.extraSoundsOnStringProperty,sE=EV.A.a11y.preferences.tabs.audio.sounds.extraSounds.extraSoundsOffStringProperty,rE=EV.A.a11y.preferences.tabs.labelledDescriptionPatternStringProperty;let oE=class extends Kw{constructor(e,i){const n=(0,t.Ay)()({includeTitleToggleSwitch:!0},i),s=new Bc(Xw,Fw.PANEL_SECTION_LABEL_OPTIONS),r=new wV(rE,{label:Xw,description:$w},{tandem:A.A.OPT_OUT}),o=new pw($w,(0,h.A)({},Fw.PANEL_SECTION_CONTENT_OPTIONS,{readingBlockNameResponse:r})),a=new Yw(e.soundEnabledProperty,!1,!0,(0,t.sF)({visible:n.includeTitleToggleSwitch,accessibleName:Xw,leftValueContextResponse:iE,rightValueContextResponse:tE},Fw.TOGGLE_SWITCH_OPTIONS)),l=new Uw({labelNode:s,descriptionNode:o,allowDescriptionStretch:!1,controlNode:a});let c=null;if(e.supportsExtraSound){const t=new Bc(Jw,Fw.PANEL_SECTION_CONTENT_OPTIONS),i=new tP(e.extraSoundEnabledProperty,t,{labelTagName:"label",labelContent:Jw,voicingNameResponse:Jw,voicingIgnoreVoicingManagerProperties:!0,voiceNameResponseOnSelection:!1,checkedContextResponse:nE,uncheckedContextResponse:sE,tandem:A.A.OPT_OUT}),n=new wV(rE,{label:Jw,description:eE},{tandem:A.A.OPT_OUT}),s=new Zw(eE,(0,h.A)({},Fw.PANEL_SECTION_CONTENT_OPTIONS,{lineWrap:300,maxHeight:100,readingBlockNameResponse:n,disabledOpacity:ff.DISABLED_OPACITY}));c=new Rf({children:[i,s],align:"left",spacing:5,tagName:"div"});const r=e=>{c.children.forEach(t=>t.setEnabled(e))};e.soundEnabledProperty.link(r)}super({titleNode:l,contentNode:c})}};Xl.A.register("SoundPanelSection",oE);const aE=oE;function lE(e,t){return parseFloat(ee(e,t))}function hE(e){if(Math.floor(e)===e)return 0;{const t=e.toString();if(t.includes("e")){const e=t.split("e"),i=e[0],n=Number(e[1]),s=i.includes(".")?i.split(".")[1].length:0;return Math.max(s-n,0)}return t.split(".")[1].length}}function cE(e,t){return lE((0,Xe.q)(e/t)*t,hE(t))}w.A.register("toFixedNumber",lE),w.A.register("numberOfDecimalPlaces",hE),w.A.register("roundToInterval",cE);let dE=class extends Qb{constructor(e,i,n){const s=(0,t.Ay)()({cursor:"pointer",baseColor:"white",stroke:"black",lineWidth:1,cornerRadius:4,xMargin:7,yMargin:5,touchAreaXDilation:7,touchAreaYDilation:7,arrowHeight:20,arrowWidth:20*Math.sqrt(3)/2,arrowFill:"black",arrowStroke:null,arrowLineWidth:1,numberOfArrows:1,arrowSpacing:-10,fireOnHold:!0,fireOnHoldDelay:400,fireOnHoldInterval:100,startCallback:_.noop,endCallback:_.noop},n);s.listener=i;const r=new Hi;for(let t=0;te.x).concat(t.points.map(e=>e.x)))}getIntersectedXValues(t){const i=this.getCombinedXValues(t),n=[];for(let e=0;es)&&(e===i.length-2||o.xnew Te.A(e,i(this.evaluate(e),t.evaluate(e)))))}binaryPointwiseOperation(e,t){return this.binaryXOperation(e,t,this.getCombinedXValues(e))}binaryIntersectingOperation(e,t){return this.binaryXOperation(e,t,this.getIntersectedXValues(e))}plus(e){return this.binaryPointwiseOperation(e,(e,t)=>e+t)}minus(e){return this.binaryPointwiseOperation(e,(e,t)=>e-t)}min(e){return this.binaryIntersectingOperation(e,Math.min)}max(e){return this.binaryIntersectingOperation(e,Math.max)}withXValues(t){return new e(t.map(e=>new Te.A(e,this.evaluate(e))))}inverted(){const t=this.points.map(e=>new Te.A(e.y,e.x));return t.length>1&&t[0].x>t[1].x&&t.reverse(),new e(t)}static sum(){for(var e=arguments.length,t=new Array(e),i=0;ie.plus(t))}static min(){for(var e=arguments.length,t=new Array(e),i=0;ie.min(t))}static max(){for(var e=arguments.length,t=new Array(e),i=0;ie.max(t))}static constant(t){return new e([new Te.A(0,t)])}static linear(t,i){return new e([new Te.A(0,i),new Te.A(1,t+i)])}static sortedUniqueEpsilon(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e-10;e=_.sortBy(e);for(let i=0;icE(e,1e-9),PE=()=>1,VE=()=>{};let vE=class e extends We.A{playSoundIfThresholdReached(e,t){if(e!==t){const i=this.constrainValue(e),n=this.constrainValue(t),s=this.getSurroundingThresholds(n),r=this.getSurroundingThresholds(i),o=1===s.length&&1===r.length&&Math.abs(s[0]-r[0])>this.interThresholdDistance||1===s.length&&2===r.length&&s[0]!==r[0]&&s[0]!==r[1]||2===s.length&&1===r.length&&r[0]!==s[0]&&r[0]!==s[1]||2===s.length&&2===r.length&&r[0]!==s[0],a=1===r.length&&(2===s.length||s[0]!==r[0]);(o||a||i===this.valueRangeProperty.value.min||i===this.valueRangeProperty.value.max)&&this.playSoundForValueChange(e,t)}}playSoundForValueChange(t,i){const n=this.constrainValue(t),s=this.constrainValue(i);if(n!==s||i!==t&&(t===this.valueRangeProperty.value.min||t===this.valueRangeProperty.value.max))if(t===this.valueRangeProperty.value.min&&this.minSoundPlayer!==e.USE_MIDDLE_SOUND)this.minSoundPlayer.play();else if(t===this.valueRangeProperty.value.max&&this.maxSoundPlayer!==e.USE_MIDDLE_SOUND)this.maxSoundPlayer.play();else{const e=Dl.currentTime;if(e-this.timeOfMostRecentMiddleSound>this.minimumInterMiddleSoundTime){let i,r;n>s?(i=this.middleMovingUpPlaybackRateMapper,r=this.middleMovingUpSoundPlayer):(i=this.middleMovingDownPlaybackRateMapper,r=this.middleMovingDownSoundPlayer),i!==PE&&r.setPlaybackRate(i(t)),r.play(),this.timeOfMostRecentMiddleSound=e}}}getSurroundingThresholds(e){const t=Math.floor(cE((e-this.valueRangeProperty.value.min)/this.interThresholdDistance,1e-7)),i=cE(t*this.interThresholdDistance+this.valueRangeProperty.value.min,1e-7),n=[i];if(i!==e){const e=Math.min(cE(i+this.interThresholdDistance,1e-7),this.valueRangeProperty.value.max);e>i&&n.push(e)}return n}constructor(e,i){const n=(0,t.Ay)()({middleMovingUpSoundPlayer:Gm.get("generalSoftClick"),middleMovingDownSoundPlayer:fE,middleMovingUpPlaybackRateMapper:PE,middleMovingDownPlaybackRateMapper:PE,numberOfMiddleThresholds:null,interThresholdDelta:null,constrainValue:bE,minSoundPlayer:yE,maxSoundPlayer:Gm.get("generalBoundaryBoop"),minimumInterMiddleSoundTime:.035},i);null===n.numberOfMiddleThresholds&&null===n.interThresholdDelta&&(n.numberOfMiddleThresholds=5),super(n),this.interThresholdDistance=5,this.valueRangeProperty=e instanceof T?new d.A(e):e,this.middleMovingUpSoundPlayer=n.middleMovingUpSoundPlayer,this.middleMovingDownSoundPlayer=n.middleMovingDownSoundPlayer,this.middleMovingUpPlaybackRateMapper=n.middleMovingUpPlaybackRateMapper,this.middleMovingDownPlaybackRateMapper=n.middleMovingDownPlaybackRateMapper,this.minSoundPlayer=n.minSoundPlayer,this.maxSoundPlayer=n.maxSoundPlayer,this.minimumInterMiddleSoundTime=n.minimumInterMiddleSoundTime,this.timeOfMostRecentMiddleSound=0,this.constrainValue=n.constrainValue;const s=e=>{null!==n.numberOfMiddleThresholds?this.interThresholdDistance=e.getLength()/(n.numberOfMiddleThresholds+1):null!==n.interThresholdDelta?this.interThresholdDistance=n.interThresholdDelta:this.interThresholdDistance=e.getLength()/2};this.valueRangeProperty.link(s),this.disposeEmitter.addListener(()=>{this.valueRangeProperty.unlink(s)})}};vE.NO_SOUND=new vE(new T(0,1),{middleMovingUpSoundPlayer:Lv,minSoundPlayer:Lv,maxSoundPlayer:Lv}),vE.USE_MIDDLE_SOUND={play:VE,stop:VE},Tl.register("ValueChangeSoundPlayer",vE);const wE=vE,EE={HOME_HOTKEY_DATA:new Sa({keyStringProperties:[new r.A("home")],binderName:"Set value to minimum",repoName:fb.name}),END_HOTKEY_DATA:new Sa({keyStringProperties:[new r.A("end")],binderName:"Set value to maximum",repoName:fb.name}),PAGE_UP_HOTKEY_DATA:new Sa({keyStringProperties:[new r.A("pageUp")],binderName:"Increment value by page",repoName:fb.name}),PAGE_DOWN_HOTKEY_DATA:new Sa({keyStringProperties:[new r.A("pageDown")],binderName:"Decrement value by page",repoName:fb.name}),UP_ARROW_HOTKEY_DATA:new Sa({keyStringProperties:[new r.A("arrowUp")],binderName:"Increment value by up arrow",repoName:fb.name}),DOWN_ARROW_HOTKEY_DATA:new Sa({keyStringProperties:[new r.A("arrowDown")],binderName:"Decrement value by down arrow",repoName:fb.name}),RIGHT_ARROW_HOTKEY_DATA:new Sa({keyStringProperties:[new r.A("arrowRight")],binderName:"Increment value by right arrow",repoName:fb.name}),LEFT_ARROW_HOTKEY_DATA:new Sa({keyStringProperties:[new r.A("arrowLeft")],binderName:"Decrement value by left arrow",repoName:fb.name}),SHIFT_HOTKEY_DATA:new Sa({keyStringProperties:[new r.A("shift")],binderName:"Increment/decrement in smaller steps",repoName:fb.name}),isRangeKey:e=>Sa.anyHaveKeyStroke([EE.HOME_HOTKEY_DATA,EE.END_HOTKEY_DATA,EE.PAGE_UP_HOTKEY_DATA,EE.PAGE_DOWN_HOTKEY_DATA,EE.UP_ARROW_HOTKEY_DATA,EE.DOWN_ARROW_HOTKEY_DATA,EE.RIGHT_ARROW_HOTKEY_DATA,EE.LEFT_ARROW_HOTKEY_DATA],e)},SE=EE,TE=e=>""+e,CE={withNameResponse:!1,withObjectResponse:!0,onlyOnValueChange:!0},IE=["startInput","endInput","onInput","constrainValue","keyboardStep","shiftKeyboardStep","pageKeyboardStep","ariaOrientation","panTargetNode","roundToStepSize","pdomMapPDOMValue","pdomMapValue","pdomRepeatEqualValueText","pdomCreateAriaValueText","pdomCreateContextResponseAlert","contextResponsePerValueChangeDelay","contextResponseMaxDelay","pdomDependencies","voicingOnEndResponseOptions"],xE=(e,i)=>{const n=Fo("AccessibleValueHandler",IE,class extends(cA(e)){set startInput(e){this._startInput=e}get startInput(){return this._startInput}set onInput(e){this._onInput=e}get onInput(){return this._onInput}set endInput(e){this._endInput=e}get endInput(){return this._endInput}set constrainValue(e){this._constrainValue=e}get constrainValue(){return this._constrainValue}set panTargetNode(e){this._panTargetNode=e}get panTargetNode(){return this._panTargetNode}set roundToStepSize(e){this._roundToStepSize=e}get roundToStepSize(){return this._roundToStepSize}set pdomMapPDOMValue(e){this._pdomMapPDOMValue=e,this.invalidateEnabledRange(this._enabledRangeProperty.value),this.invalidateValueProperty(),this.invalidateAriaValueText()}get pdomMapPDOMValue(){return this._pdomMapPDOMValue}set pdomMapValue(e){this._pdomMapValue=e}get pdomMapValue(){return this._pdomMapValue}set pdomRepeatEqualValueText(e){this._pdomRepeatEqualValueText=e,this.invalidateAriaValueText()}get pdomRepeatEqualValueText(){return this._pdomRepeatEqualValueText}set pdomCreateAriaValueText(e){this._pdomCreateAriaValueText=e,this.invalidateAriaValueText()}get pdomCreateAriaValueText(){return this._pdomCreateAriaValueText}set pdomCreateContextResponseAlert(e){this._pdomCreateContextResponseAlert=e}get pdomCreateContextResponseAlert(){return this._pdomCreateContextResponseAlert}set contextResponsePerValueChangeDelay(e){this._contextResponsePerValueChangeDelay=e}get contextResponsePerValueChangeDelay(){return this._contextResponsePerValueChangeDelay}set contextResponseMaxDelay(e){this._contextResponseMaxDelay=e}get contextResponseMaxDelay(){return this._contextResponseMaxDelay}set voicingOnEndResponseOptions(e){this._voicingOnEndResponseOptions=e}get voicingOnEndResponseOptions(){return this._voicingOnEndResponseOptions}invalidateAriaValueText(){this._updateAriaValueText(this._oldValue),this._oldValue=this._valueProperty.value}invalidateEnabledRange(e){const t=this._getMappedValue(e.min),i=this._getMappedValue(e.max);this.setPDOMAttribute("min",t),this.setPDOMAttribute("max",i),this._updateSiblingStepAttribute()}invalidateValueProperty(){const e=this._getMappedValue();this.setPDOMAttribute("aria-valuenow",e),this.inputValue=e}invalidatePDOMDependencies(){this._dependenciesMultilink&&this._dependenciesMultilink.dispose(),this._dependenciesMultilink=ye.multilinkAny(this._pdomDependencies.concat([this._valueProperty]),this._pdomValueTextUpdateListener)}setPDOMDependencies(e){this._pdomDependencies=e,this.invalidatePDOMDependencies()}getPDOMDependencies(){return this._pdomDependencies}set pdomDependencies(e){this.setPDOMDependencies(e)}get pdomDependencies(){return this.getPDOMDependencies()}_updateAriaValueText(e){const t=this._getMappedValue(),i=this._pdomCreateAriaValueText(t,this._valueProperty.value,e);let n=on.A.unwrapStringProperty(i);this._pdomRepeatEqualValueText&&this.ariaValueText&&n===this.ariaValueText.replace(new RegExp(" ","g"),"")&&(n=this.ariaValueText+" "),this.ariaValueText=n}alertContextResponse(){let e=!1;if(this._pdomCreateContextResponseAlert){const t=this._getMappedValue(),i=this._pdomCreateContextResponseAlert(t,this._valueProperty.value,this._valueOnStart);i&&(this._contextResponseUtterance.alert=i,this.forEachUtteranceQueue(t=>{e||(t.hasUtterance(this._contextResponseUtterance)?(e=!0,this._timesChangedBeforeAlerting++):this._timesChangedBeforeAlerting=1),this._contextResponseUtterance.alertStableDelay=Math.min(this._contextResponseMaxDelay,this._timesChangedBeforeAlerting*this._contextResponsePerValueChangeDelay),t.addToBack(this._contextResponseUtterance)}))}}reset(){this._pdomCreateAriaValueText.reset&&this._pdomCreateAriaValueText.reset(),this._pdomCreateContextResponseAlert&&this._pdomCreateContextResponseAlert.reset&&this._pdomCreateContextResponseAlert.reset(),this._timesChangedBeforeAlerting=0,this._updateAriaValueText(null)}_getMappedValue(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._valueProperty.value;return this._pdomMapPDOMValue(e)}getAccessibleValueHandlerInputListener(){return{keydown:this.handleKeyDown.bind(this),keyup:this.handleKeyUp.bind(this),input:this.handleInput.bind(this),change:this.handleChange.bind(this),blur:this.handleBlur.bind(this),interrupt:this.handleInterrupt.bind(this)}}handleKeyDown(e){const t=e.domEvent,i=Fn.A.getEventCode(t);if(i&&(this._shiftKey=t.shiftKey,Fn.A.isKeyEvent(t,Fn.A.KEY_TAB)&&(this._blockInput=!0),this.enabledProperty.get())){const n=(0,Zs.qU)(i);if(SE.isRangeKey(n)&&(t.preventDefault(),!t.metaKey)){e.pointer.reserveForKeyboardDrag();let s=!0;this._anyKeysDown()||this._onInteractionStart(e),this._rangeKeysDown[i]=!0;let r=this._valueProperty.get();if(Sa.anyHaveKeyStroke([SE.HOME_HOTKEY_DATA,SE.END_HOTKEY_DATA],n))SE.END_HOTKEY_DATA.hasKeyStroke(n)?r=this._enabledRangeProperty.get().max:SE.HOME_HOTKEY_DATA.hasKeyStroke(n)&&(r=this._enabledRangeProperty.get().min);else{let e;Sa.anyHaveKeyStroke([SE.PAGE_DOWN_HOTKEY_DATA,SE.PAGE_UP_HOTKEY_DATA],n)?(e=this.pageKeyboardStep,SE.PAGE_UP_HOTKEY_DATA.hasKeyStroke(n)?r=this._valueProperty.get()+e:SE.PAGE_DOWN_HOTKEY_DATA.hasKeyStroke(n)&&(r=this._valueProperty.get()-e)):Sa.anyHaveKeyStroke([SE.LEFT_ARROW_HOTKEY_DATA,SE.RIGHT_ARROW_HOTKEY_DATA,SE.UP_ARROW_HOTKEY_DATA,SE.DOWN_ARROW_HOTKEY_DATA],n)&&(e=t.shiftKey?this.shiftKeyboardStep:this.keyboardStep,s=!t.shiftKey,Sa.anyHaveKeyStroke([SE.UP_ARROW_HOTKEY_DATA,SE.RIGHT_ARROW_HOTKEY_DATA],n)?r=this._valueProperty.get()+e:Sa.anyHaveKeyStroke([SE.DOWN_ARROW_HOTKEY_DATA,SE.LEFT_ARROW_HOTKEY_DATA],n)&&(r=this._valueProperty.get()-e),this._roundToStepSize&&(r=DE(r,this._valueProperty.get(),e)))}const o=this._pdomMapValue(r,this._valueProperty.get());let a=o;s&&(a=this._constrainValue(o)),this._valueProperty.set((0,Ze.q)(a,this._enabledRangeProperty.get().min,this._enabledRangeProperty.get().max)),this._onInput(e,this._valueOnStart);const l=this._panTargetNode||this;sl.initialized&&sl.listener.panToNode(l,!0,l.limitPanDirection)}}}handleKeyUp(e){const t=Fn.A.getEventCode(e.domEvent),i=(0,Zs.qU)(t);this._allKeysUp()||(SE.SHIFT_HOTKEY_DATA.hasKeyStroke(i)&&(this._shiftKey=!1),this.enabledProperty.get()&&SE.isRangeKey(i)&&(this._rangeKeysDown[t]=!1,this._allKeysUp()&&this._onInteractionEnd(e)))}handleChange(e){this._pdomInputHandled||this.handleInput(e),this._pdomInputHandled=!1}handleInput(e){if(this.enabledProperty.get()&&!this._blockInput){this._pdomInputHandled=!0;let t=this._valueProperty.get();const i=parseFloat(e.domEvent.target.value),n=this._shiftKey?this.shiftKeyboardStep:this.keyboardStep,s=this._getMappedValue();this._onInteractionStart(e),i>s?t=this._valueProperty.get()+n:i!e)}_anyKeysDown(){return!!_.find(this._rangeKeysDown,e=>e)}_updateSiblingStepAttribute(){let e="any";if(Ye.A.mobileSafari){const t=Math.min(this.keyboardStep,this.shiftKeyboardStep,this.pageKeyboardStep);e=Math.pow(10,-hE(t));const i=this._getMappedValue(this._enabledRangeProperty.get().min),n=this._getMappedValue(this._enabledRangeProperty.get().max);e/(n-i)<1e-5&&(e=n/100,e=Number(e.toPrecision(8)))}this.setPDOMAttribute("step",e)}voicingOnEndResponse(e,i){const n=(0,t.sF)({},this._voicingOnEndResponseOptions,i),s=e!==this._valueProperty.value,r=this._valueProperty.value===this._enabledRangeProperty.value.min||this._valueProperty.value===this._enabledRangeProperty.value.max,o=!(!n.withNameResponse||!this.voicingNameResponse)||!(!n.withObjectResponse||!this.voicingObjectResponse);(!n.onlyOnValueChange||r||s)&&o&&this.voicingSpeakFullResponse({nameResponse:n.withNameResponse?this.voicingNameResponse:null,objectResponse:n.withObjectResponse?this.voicingObjectResponse:null,hintResponse:null})}dispose(){this._disposeAccessibleValueHandler(),super.dispose()}constructor(){for(var e=arguments.length,n=new Array(e),s=0;sl.value.max-e,inverseMap:e=>l.value.max-e}):this._valueProperty=a,this._enabledRangeProperty=l,this._pdomValueTextUpdateListener=this.invalidateAriaValueText.bind(this),this.keyboardStep=(l.get().max-l.get().min)/20,this.shiftKeyboardStep=(l.get().max-l.get().min)/100,this.pageKeyboardStep=(l.get().max-l.get().min)/10,this._valueOnStart=a.value,this.invalidatePDOMDependencies();const h=this.invalidateEnabledRange.bind(this);this._enabledRangeProperty.link(h);const c=this.invalidateValueProperty.bind(this);this._valueProperty.link(c),this._pdomPointerListener={interrupt:()=>{this._interruptAccessibleValueHandler(null)},cancel:()=>{this._interruptAccessibleValueHandler(null)}},this._disposeAccessibleValueHandler=()=>{this._enabledRangeProperty.unlink(h),this._valueProperty.unlink(c),o.reverseAlternativeInput&&this._valueProperty.dispose(),this._dependenciesMultilink&&this._dependenciesMultilink.dispose(),this._panTargetNode=null,this._pdomDependencies=[]}}});return n.prototype._mutatorKeys=IE.concat(n.prototype._mutatorKeys),n};fb.register("AccessibleValueHandler",xE);const DE=function(e,t,i){let n=e;return 0!==i&&(n=(0,Xe.q)(n/i)*i,n=kE(n,t,i)),n},kE=function(e,t,i){let n=e;const s=Math.abs(e-t),r=s>i,o=Wa(s,i,1e-14);return r&&!o&&(n+=e>t?-i:i),n};xE.DEFAULT_TAG_NAME="input";const ME=xE,BE=["startDrag","drag","endDrag"],OE=(e,t)=>{const i=Fo("AccessibleSlider",BE,class extends(ME(e,t)){set startDrag(e){this._startDrag=e,this.startInput=e}get startDrag(){return this._startDrag}set drag(e){this._drag=e,this.onInput=e}get drag(){return this._drag}set endDrag(e){this._endDrag=e,this.endInput=e}get endDrag(){return this._endDrag}dispose(){this._disposeAccessibleSlider(),super.dispose()}constructor(){for(var e=arguments.length,i=new Array(e),n=0;n{this.removeInputListener(s)}}});return i.prototype._mutatorKeys=BE.concat(i.prototype._mutatorKeys),i};fb.register("AccessibleSlider",OE);const LE=OE;let RE=class{evaluate(e){return NE(this.a1,this.a2,this.b1,this.b2,e,this.clamp)}inverse(e){return NE(this.b1,this.b2,this.a1,this.a2,e,this.clamp)}constructor(e,t,i,n){let s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];this.a1=e,this.a2=t,this.b1=i,this.b2=n,this.clamp=s}};const NE=(e,t,i,n,s,r)=>{let o=Fe(e,t,i,n,s);if(r){const e=Math.max(i,n),t=Math.min(i,n);o=(0,Ze.q)(o,t,e)}return o};w.A.register("LinearFunction",RE);const qE=new wE(new T(0,1));let FE=class extends(Wo(Cr)){dispose(){this.disposeSliderTrack(),super.dispose()}constructor(e,i,n,s){super(),this.rangeProperty=n instanceof T?new d.A(n):n;const r=(0,t.Ay)()({size:new Be(100,5),startDrag:_.noop,drag:_.noop,endDrag:_.noop,constrainValue:_.identity,enabledRangeProperty:this.rangeProperty,soundGenerator:qE,valueChangeSoundGeneratorOptions:{},voicingOnEndResponse:_.noop,leftVisualOverflow:0,rightVisualOverflow:0,tandem:A.A.REQUIRED,tandemNameSuffix:"TrackNode"},s);r.soundGenerator===qE?r.soundGenerator=new wE(this.rangeProperty.value,r.valueChangeSoundGeneratorOptions||{}):null===r.soundGenerator&&(r.soundGenerator=wE.NO_SOUND),this.leftVisualOverflow=r.leftVisualOverflow,this.rightVisualOverflow=r.rightVisualOverflow,this.minimumSize=r.size,this.minimumWidth=this.minimumSize.width,this.internalWidthProperty=new oe([this.localPreferredWidthProperty],e=>(null===e?this.minimumSize.width:Math.max(this.minimumSize.width,e))-r.leftVisualOverflow-r.rightVisualOverflow),this.sizeProperty=new oe([this.internalWidthProperty],e=>new Be(e,this.minimumSize.height)),this.valueToPositionProperty=new oe([this.rangeProperty,this.internalWidthProperty],(e,t)=>new RE(e.min,e.max,0,t,!0));const o=(t,i)=>{const n=e.value,s=i.subtrailTo(this).getTransform().inversePosition2(t.pointer.point).x,o=this.valueToPositionProperty.value.inverse(s),a=r.enabledRangeProperty.value.constrainValue(o),l=r.constrainValue(a);e.set(l),"down"===t.type&&r.soundGenerator.playSoundIfThresholdReached(l,n)};this.addChild(i);let a=e.value;this.dragListener=new Kc({tandem:r.tandem.createTandem("dragListener"),start:(t,i)=>{r.startDrag(t),a=e.value,o(t,i.pressedTrail)},drag:(e,t)=>{r.drag(e),o(e,t.pressedTrail)},end:e=>{r.endDrag(e),r.voicingOnEndResponse(a)}}),i.addInputListener(this.dragListener),this.mutate(r),this.disposeSliderTrack=()=>{i.removeInputListener(this.dragListener),this.dragListener.dispose()}}};fb.register("SliderTrack",FE);let HE=class extends FE{dispose(){this.disposeDefaultSliderTrack(),super.dispose()}constructor(e,i,n){const s=(0,t.Ay)()({fillEnabled:"white",fillDisabled:"gray",stroke:"black",lineWidth:1,cornerRadius:0},n),r=new fa({fill:s.fillDisabled,stroke:s.stroke,lineWidth:s.lineWidth,cornerRadius:s.cornerRadius,cursor:"default",pickable:!1}),o=new fa({fill:s.fillEnabled,stroke:s.stroke,lineWidth:s.lineWidth,cornerRadius:s.cornerRadius});super(e,new Cr({children:[r,o]}),i,(0,t.sF)({leftVisualOverflow:null!==s.stroke?s.lineWidth/2:0,rightVisualOverflow:null!==s.stroke?s.lineWidth/2:0},s));const a=ye.multilink([s.enabledRangeProperty,this.valueToPositionProperty,this.sizeProperty],(e,t,i)=>{const n=t.evaluate(e.min),s=t.evaluate(e.max);r.setRect(0,0,i.width,i.height),o.setRect(n,0,s-n,i.height)});this.disposeDefaultSliderTrack=()=>{a.dispose()}}};fb.register("DefaultSliderTrack",HE);let YE=class extends fa{constructor(e){const i=(0,t.Ay)()({size:new Be(22,45),fillHighlighted:"rgb( 71, 207, 255 )",centerLineStroke:"white",fill:"rgb( 50, 145, 184 )",stroke:"black",lineWidth:1,tandem:A.A.REQUIRED,tandemNameSuffix:"ThumbNode"},e);void 0===i.cornerRadius&&(i.cornerRadius=.25*i.size.width),i.cachedPaints=[i.fill,i.fillHighlighted],super(0,0,i.size.width,i.size.height,i);const n=fa.bounds(this.bounds.dilated(5),{fill:"transparent",localBounds:this.bounds,pickable:!1});this.addChild(n);this.addChild(new ua(Hi.lineSegment(i.size.width/2,3,i.size.width/2,i.size.height-3),{stroke:i.centerLineStroke}));const s=new kr({attach:!1,tandem:A.A.OPT_OUT});s.isHighlightedProperty.link(e=>{this.fill=e?i.fillHighlighted:i.fill}),this.addInputListener(s)}};fb.register("SliderThumb",YE);const GE={VALUE_NAMED_PLACEHOLDER:"{{value}}",VALUE_NUMBERED_PLACEHOLDER:"{0}",SLIDER_VERTICAL_ROTATION:-Math.PI/2};fb.register("SunConstants",GE);const UE=GE;let zE=class{dispose(){this.parent.removeChild(this.tickNode),this.labelContainer&&this.labelContainer.dispose(),this.labelXProperty.dispose(),this.labelManualConstraint&&this.labelManualConstraint.dispose()}constructor(e,t,i,n,s,r,o,a,l){this.parent=e,this.value=t,this.label=i,this.labelXProperty=new oe([l.valueToPositionProperty],e=>e.evaluate(t)),this.tickNode=new Cr,e.addChild(this.tickNode);const h=o.setTickInitialPoint(l.bounds,n),c=new ua((new Hi).moveTo(h.x,h.y).lineTo(0,h.y-n),{stroke:s,lineWidth:r});this.labelXProperty.link(e=>{c.x=e}),this.tickNode.addChild(c),i&&(this.labelContainer=new Cr({pickable:!1}),this.tickNode.addChild(this.labelContainer),this.labelContainer.addChild(i),a===Ee.VERTICAL&&(this.labelContainer.rotation=-UE.SLIDER_VERTICAL_ROTATION),this.labelManualConstraint=nP.create(this.tickNode,[c,this.labelContainer],(e,t)=>{o.positionLabel(t,e.bounds)}))}};fb.register("SliderTick",zE);const WE=new Be(100,5),QE=new Be(17,34);let KE=class e extends(_o(LE(Cr,0))){get majorTicksVisible(){return this.getMajorTicksVisible()}set majorTicksVisible(e){this.setMajorTicksVisible(e)}get minorTicksVisible(){return this.getMinorTicksVisible()}set minorTicksVisible(e){this.setMinorTicksVisible(e)}dispose(){this.disposeSlider(),this.ticks.forEach(e=>{e.dispose()}),super.dispose()}addMajorTick(e,t){this.addTick(this.majorTicksParent,e,t,this.tickOptions.majorTickLength,this.tickOptions.majorTickStroke,this.tickOptions.majorTickLineWidth)}addMinorTick(e,t){this.addTick(this.minorTicksParent,e,t,this.tickOptions.minorTickLength,this.tickOptions.minorTickStroke,this.tickOptions.minorTickLineWidth)}addTick(e,t,i,n,s,r){this.ticks.push(new zE(e,t,i,n,s,r,this.tickOptions,this.orientation,this.track))}setMajorTicksVisible(e){this.majorTicksParent.visible=e}getMajorTicksVisible(){return this.majorTicksParent.visible}setMinorTicksVisible(e){this.minorTicksParent.visible=e}getMinorTicksVisible(){return this.minorTicksParent.visible}constructor(i,n,s){const o=(0,t.Ay)()({orientation:Ee.HORIZONTAL,trackNode:null,trackSize:null,trackFillEnabled:"white",trackFillDisabled:"gray",trackStroke:"black",trackLineWidth:1,trackCornerRadius:0,trackPickable:!0,thumbNode:null,thumbSize:null,thumbFill:"rgb(50,145,184)",thumbFillHighlighted:"rgb(71,207,255)",thumbStroke:"black",thumbLineWidth:1,thumbCenterLineStroke:"white",thumbTouchAreaXDilation:11,thumbTouchAreaYDilation:11,thumbMouseAreaXDilation:0,thumbMouseAreaYDilation:0,thumbYOffset:0,tickLabelSpacing:6,positionLabel:(e,t)=>{e.centerX=t.centerX,e.bottom=t.top-o.tickLabelSpacing},majorTickLength:25,majorTickStroke:"black",majorTickLineWidth:1,minorTickLength:10,minorTickStroke:"black",minorTickLineWidth:1,setTickInitialPoint:(e,t)=>new Te.A(0,e.top),cursor:"pointer",startDrag:_.noop,drag:_.noop,endDrag:_.noop,constrainValue:_.identity,disabledOpacity:ff.DISABLED_OPACITY,soundGenerator:qE,valueChangeSoundGeneratorOptions:{},phetioLinkedProperty:null,tandem:A.A.REQUIRED,tandemNameSuffix:"Slider",phetioType:e.SliderIO,phetioFeatured:!0,visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0},s),a=n instanceof T?new d.A(n):n;if(o.soundGenerator===qE?o.soundGenerator=new wE(a.value,o.valueChangeSoundGeneratorOptions||{}):null===o.soundGenerator&&(o.soundGenerator=wE.NO_SOUND),o.soundGenerator!==wE.NO_SOUND){let e=i.value;const t=o.drag;o.drag=n=>{n.isFromPDOM()?o.soundGenerator.playSoundForValueChange(i.value,e):o.soundGenerator.playSoundIfThresholdReached(i.value,e),t(n),e=i.value}}o.orientation===Ee.VERTICAL&&(o.trackSize&&(o.trackSize=o.trackSize.swapped()),o.thumbSize&&(o.thumbSize=o.thumbSize.swapped()),AE(o,"thumbTouchAreaXDilation","thumbTouchAreaYDilation"),AE(o,"thumbMouseAreaXDilation","thumbMouseAreaYDilation")),o.trackSize=o.trackSize||WE,o.thumbSize=o.thumbSize||QE;const l=o.tandem.createTandem(e.THUMB_NODE_TANDEM_NAME);A.A.VALIDATION&&o.thumbNode;const h=o.thumbNode||new YE({size:o.thumbSize,fill:o.thumbFill,fillHighlighted:o.thumbFillHighlighted,stroke:o.thumbStroke,lineWidth:o.thumbLineWidth,centerLineStroke:o.thumbCenterLineStroke,tandem:l}),c=!o.enabledRangeProperty,u=_.pick(o,Cr.REQUIRES_BOUNDS_OPTION_KEYS),p=(0,t.sF)({ariaOrientation:o.orientation,valueProperty:i,panTargetNode:h,enabledRangeProperty:o.enabledRangeProperty||(n instanceof T?new r.A(n,{valueType:T,isValidValue:e=>e.min>=n.min&&e.max<=n.max,tandem:o.tandem.createTandem("enabledRangeProperty"),valueComparisonStrategy:"equalsFunction",phetioValueType:T.RangeIO,phetioDocumentation:"Sliders support two ranges: the outer range which specifies the min and max of the track and the enabledRangeProperty, which determines how low and high the thumb can be dragged within the track."}):n)},o);super(p),this.ticks=U(),this.proposedValue=null,this.orientation=p.orientation,this.enabledRangeProperty=p.enabledRangeProperty,this.tickOptions=_.pick(o,"tickLabelSpacing","majorTickLength","majorTickStroke","majorTickLineWidth","minorTickLength","minorTickStroke","minorTickLineWidth","setTickInitialPoint","positionLabel");const g=[];this.majorTicksParent=new Cr,this.minorTicksParent=new Cr,g.push(this.majorTicksParent),g.push(this.minorTicksParent);const y=o.tandem.createTandem(e.TRACK_NODE_TANDEM_NAME);A.A.VALIDATION&&o.trackNode;const f=new Cr;g.push(f),this.track=o.trackNode||new HE(i,n,{size:p.trackSize,fillEnabled:p.trackFillEnabled,fillDisabled:p.trackFillDisabled,stroke:p.trackStroke,lineWidth:p.trackLineWidth,cornerRadius:p.trackCornerRadius,startDrag:p.startDrag,drag:p.drag,endDrag:p.endDrag,constrainValue:p.constrainValue,enabledRangeProperty:this.enabledRangeProperty,soundGenerator:o.soundGenerator,pickable:p.trackPickable,voicingOnEndResponse:this.voicingOnEndResponse.bind(this),tandem:y}),g.push(this.track),h.setCenterY(this.track.centerY+o.thumbYOffset),g.push(h);const b=new Cr({children:g});o.orientation===Ee.VERTICAL&&(b.rotation=UE.SLIDER_VERTICAL_ROTATION),this.addChild(b),o.thumbNode||!o.thumbTouchAreaXDilation&&!o.thumbTouchAreaYDilation||(h.touchArea=h.localBounds.dilatedXY(o.thumbTouchAreaXDilation,o.thumbTouchAreaYDilation)),o.thumbNode||!o.thumbMouseAreaXDilation&&!o.thumbMouseAreaYDilation||(h.mouseArea=h.localBounds.dilatedXY(o.thumbMouseAreaXDilation,o.thumbMouseAreaYDilation));let P=0,V=i.value;const v=new Kc({tandem:h.tandem.createTandem("dragListener"),start:(e,t)=>{if(this.enabledProperty.get()){V=i.value,o.startDrag(e);const n=t.pressedTrail.subtrailTo(b).getTransform();P=n.inversePosition2(e.pointer.point).x-h.centerX}},drag:(e,t)=>{if(this.enabledProperty.get()){const n=t.pressedTrail.subtrailTo(b).getTransform().inversePosition2(e.pointer.point).x-P;this.proposedValue=this.track.valueToPositionProperty.value.inverse(n);const s=this.enabledRangeProperty.get().constrainValue(this.proposedValue);i.set(o.constrainValue(s)),o.drag(e)}},end:e=>{this.enabledProperty.get()&&(o.endDrag(e),this.voicingOnEndResponse(V)),this.proposedValue=null}});h.addInputListener(v),this.thumbDragListener=v,this.trackDragListener=this.track.dragListener;const w=ye.multilink([i,this.track.valueToPositionProperty],(e,t)=>{h.centerX=t.evaluate(e)}),E=e=>{if(!i.isPhetioInstrumented()||!m.value)if(null===this.proposedValue)i.set((0,Ze.q)(i.value,e.min,e.max));else{const t=(0,Ze.q)(this.proposedValue,e.min,e.max),n=o.constrainValue(t);i.set(n)}};this.enabledRangeProperty.link(E);const S=new jE(this,this.track,h,b,o.orientation,f,this.ticks);this.disposeSlider=()=>{S.dispose(),h.dispose&&h.dispose(),this.track.dispose&&this.track.dispose(),c?this.enabledRangeProperty.dispose():this.enabledRangeProperty.unlink(E),w.dispose(),v.dispose()},this.focusHighlight=new iA(h);const C=o.phetioLinkedProperty||(i instanceof D.A?i:null);C&&this.addLinkedElement(C,{tandemName:"valueProperty"}),!c&&this.enabledRangeProperty instanceof D.A&&this.addLinkedElement(this.enabledRangeProperty,{tandemName:"enabledRangeProperty"}),this.mutate(u)}};KE.THUMB_NODE_TANDEM_NAME="thumbNode",KE.TRACK_NODE_TANDEM_NAME="trackNode",KE.SliderIO=new f.A("SliderIO",{valueType:KE,documentation:"A traditional slider component, with a knob and possibly tick marks",supertype:Cr.NodeIO});let jE=class extends fy{layout(){super.layout();const e=this.slider,t=this.track,i=this.thumb;this.trackSpacer.localBounds=t.localBounds.dilatedX(i.width/2);const n=t.leftVisualOverflow+t.rightVisualOverflow,s=t.minimumWidth,r=s-n,o=e=>Fe(t.rangeProperty.value.min,t.rangeProperty.value.max,0,1,e),a=-i.width/2-t.leftVisualOverflow,l=i.width/2-t.leftVisualOverflow,h=new T(a,s+l);if(this.ticks.forEach(e=>{const t=r*o(e.value),i=e.tickNode.width/2;h.includeRange(new T(-i,i).shifted(t))}),e.widthSizable&&null!==this.preferredProperty.value){const e=pE.max(pE.linear(1,l),...this.ticks.map(e=>{const t=o(e.value);return pE.linear(t,e.tickNode.width/2-n*t)})).minus(pE.min(pE.constant(a),...this.ticks.map(e=>{const t=o(e.value);return pE.linear(t,-e.tickNode.width/2-n*t)}))),i=e.withXValues([s-1,s,...e.points.map(e=>e.x).filter(e=>e>s+1e-10)]).inverted();t.preferredWidth=Math.max(s,i.evaluate(this.preferredProperty.value))}else t.preferredWidth=t.minimumWidth;const c=h.getLength();this.orientation===Ee.HORIZONTAL?e.localMinimumWidth=c:e.localMinimumHeight=c}dispose(){this.disposeSliderConstraint(),super.dispose()}constructor(e,t,i,n,s,r,o){super(e),this.slider=e,this.track=t,this.thumb=i,this.sliderPartsNode=n,this.orientation=s,this.trackSpacer=r,this.ticks=o,s===Ee.HORIZONTAL?(e.heightSizable=!1,this.preferredProperty=this.slider.localPreferredWidthProperty):(e.widthSizable=!1,this.preferredProperty=this.slider.localPreferredHeightProperty),this.preferredProperty.lazyLink(this._updateLayoutListener),this.track.rangeProperty.lazyLink(this._updateLayoutListener),this.thumb.localBoundsProperty.lazyLink(this._updateLayoutListener);const a=e=>{e.tickNode.localBoundsProperty.lazyLink(this._updateLayoutListener),o.addItemRemovedListener(t=>{t===e&&t.tickNode.localBoundsProperty.hasListener(this._updateLayoutListener)&&e.tickNode.localBoundsProperty.unlink(this._updateLayoutListener)})};o.addItemAddedListener(a),this.addNode(t),this.layout(),this.disposeSliderConstraint=()=>{o.removeItemAddedListener(a),this.preferredProperty.unlink(this._updateLayoutListener),this.track.rangeProperty.unlink(this._updateLayoutListener),this.thumb.localBoundsProperty.unlink(this._updateLayoutListener)}}};fb.register("Slider",KE);const _E={PLUS:"+",MINUS:"−",TIMES:"×",DIVIDE:"÷",DOT:"⋅",UNARY_PLUS:"+",UNARY_MINUS:"-",EQUAL_TO:"=",NOT_EQUAL_TO:"≠",GREATER_THAN:">",LESS_THAN:"<",LESS_THAN_OR_EQUAL:"≤",GREATER_THAN_OR_EQUAL:"≥",PERCENT:"%",INFINITY:"∞",PLUS_MINUS:"±",ALPHA:"α",BETA:"β",THETA:"θ",PHI:"φ",PI:"π",PSI:"ψ",NO_VALUE:"—",DEGREES:"°"};Pa.register("MathSymbols",_E);const ZE=_E,XE=new Gc(20);let JE=class e extends Cr{dispose(){this.disposeNumberDisplay(),super.dispose()}setNumberFont(e){this.valueText.font=e}set numberFont(e){this.setNumberFont(e)}setNumberFill(e){this.valueText.fill=e}set numberFill(e){this.setNumberFill(e)}setBackgroundFill(e){this.backgroundNode.fill=e}set backgroundFill(e){this.setBackgroundFill(e)}get backgroundFill(){return this.getBackgroundFill()}getBackgroundFill(){return this.backgroundNode.fill}setBackgroundStroke(e){this.backgroundNode.stroke=e}set backgroundStroke(e){this.setBackgroundStroke(e)}getBackgroundWidth(){return this.backgroundNode.getRectWidth()}setBackgroundWidth(e){this.backgroundNode.setRectWidth(e)}get backgroundWidth(){return this.getBackgroundWidth()}set backgroundWidth(e){this.setBackgroundWidth(e)}constructor(i,n,s){const r=(0,t.Ay)()({align:"right",valuePattern:UE.VALUE_NAMED_PLACEHOLDER,decimalPlaces:0,numberFormatter:null,numberFormatterDependencies:[],useRichText:!1,useFullHeight:!1,textOptions:{font:XE,fill:"black",maxWidth:null,phetioReadOnly:!0},xMargin:8,yMargin:2,cornerRadius:0,backgroundFill:"white",backgroundStroke:"lightGray",backgroundLineWidth:1,backgroundLineDash:[],minBackgroundWidth:0,noValueString:ZE.NO_VALUE,noValueAlign:null,noValuePattern:null,tandem:A.A.OPT_OUT,phetioType:e.NumberDisplayIO},s);const o=new d.A(r.numberFormatter?r.numberFormatter:e=>null===r.decimalPlaces?""+e:ee(e,r.decimalPlaces));r.noValueAlign||(r.noValueAlign=r.align);const a=e=>e.includes(UE.VALUE_NUMBERED_PLACEHOLDER)?Ge.A.format(e,UE.VALUE_NAMED_PLACEHOLDER):e,l="string"==typeof r.valuePattern?new d.A(a(r.valuePattern)):new oe([r.valuePattern],a);r.noValuePattern||(r.noValuePattern=new oe([l],e=>e));const h="string"==typeof r.noValuePattern?new d.A(r.noValuePattern):r.noValuePattern,c=oe.deriveAny([o,...r.numberFormatterDependencies],()=>$E(n.min,r.noValueString,o.value)),u=oe.deriveAny([o,...r.numberFormatterDependencies],()=>$E(n.max,r.noValueString,o.value)),p=new oe([l,c,u],(e,t,i)=>Ge.A.fillIn(e,{value:t.length>i.length?t:i})),m=r.useRichText?df:Bc,g=r.textOptions.tandem||r.tandem.createTandem("valueText"),y=oe.deriveAny([i,h,l,o,...r.numberFormatterDependencies],()=>{const e=i.value,t=h.value,n=l.value,s=o.value,a=null===e&&t?t:n,c=$E(e,r.noValueString,s);return Ge.A.fillIn(a,{value:c})},{phetioFeatured:!0,phetioValueType:x.A,tandemNameSuffix:"StringProperty",tandem:g.createTandem(Bc.STRING_PROPERTY_TANDEM_NAME)}),f=(0,t.sF)({tandem:g},r.textOptions,{maxWidth:null}),b=new m(y,f),P=b.height,V=new fa({cornerRadius:r.cornerRadius,fill:r.backgroundFill,stroke:r.backgroundStroke,lineWidth:r.backgroundLineWidth,lineDash:r.backgroundLineDash});p.link(e=>{const t=new m(e,_.omit(f,"tandem"));b.maxWidth=null!==r.textOptions.maxWidth?r.textOptions.maxWidth:0!==t.width?t.width:null,t.maxWidth=b.maxWidth,V.rectWidth=Math.max(r.minBackgroundWidth,t.width+2*r.xMargin),V.rectHeight=(r.useFullHeight?P:t.height)+2*r.yMargin});const v=new Cr({children:[b]});r.children=[V,v],super(),this.numberFormatterProperty=o,this.valueText=b,this.backgroundNode=V,this.valueStringProperty=y,nP.create(this,[v,V],(e,t)=>{const n=null===i.value?r.noValueAlign:r.align,s=t.centerY;"center"===n?e.center=new Te.A(t.centerX,s):"left"===n?e.leftCenter=new Te.A(t.left+r.xMargin,s):e.rightCenter=new Te.A(t.right-r.xMargin,s)}),this.mutate(r),this.disposeNumberDisplay=()=>{y.dispose(),l.dispose()}}};JE.NumberDisplayIO=new f.A("NumberDisplayIO",{valueType:JE,supertype:Cr.NodeIO,documentation:"A numeric readout with a background"}),Pa.register("NumberDisplay",JE);const $E=(e,t,i)=>{let n=t;return null!==e&&(n=i(e)),n},eS=["startDrag","endDrag","leftStart","leftEnd","rightStart","rightEnd"],tS=new wE(new T(0,1)),iS=new Be(180,3),nS=new Be(17,34);let sS=class e extends(Wo(Cr)){dispose(){this.disposeNumberControl(),super.dispose()}static withMinMaxTicks(i,n,s,r){const o=(0,t.Ay)()({tickLabelFont:new Gc(12)},r);return o.sliderOptions=(0,t.sF)({majorTicks:[{value:s.min,label:new Bc(s.min,{font:o.tickLabelFont})},{value:s.max,label:new Bc(s.max,{font:o.tickLabelFont})}]},o.sliderOptions),new e(i,n,s,o)}static createLayoutFunction1(e){const i=(0,t.Ay)()({align:"center",titleXSpacing:5,arrowButtonsXSpacing:15,ySpacing:5},e);return(e,t,n,s,r)=>(n.mutateLayoutOptions({grow:1}),new Rf({align:i.align,spacing:i.ySpacing,children:[new Of({spacing:i.titleXSpacing,children:[e,t]}),new Of({layoutOptions:{stretch:!0},spacing:i.arrowButtonsXSpacing,children:[s,n,r]})]}))}static createLayoutFunction2(e){const i=(0,t.Ay)()({align:"center",xSpacing:5,ySpacing:5},e);return(e,t,n,s,r)=>(n.mutateLayoutOptions({stretch:!0}),new Rf({align:i.align,spacing:i.ySpacing,children:[new Of({spacing:i.xSpacing,children:[e,s,t,r]}),n]}))}static createLayoutFunction3(e){const i=(0,t.Ay)()({alignTitle:"center",alignNumber:"center",titleLeftIndent:0,xSpacing:5,ySpacing:5},e);return(e,t,n,s,r)=>{n.mutateLayoutOptions({stretch:!0});const o=new Rf({spacing:i.ySpacing,align:i.alignTitle,children:[new qb(e,{leftMargin:i.titleLeftIndent}),new Rf({layoutOptions:{stretch:!0},spacing:i.ySpacing,align:i.alignNumber,children:[new Of({spacing:i.xSpacing,children:[s,t,r]}),n]})]});return e.boundsProperty.lazyLink(()=>{o.updateLayout()}),o}}static createLayoutFunction4(e){const i=(0,t.Ay)()({sliderPadding:0,verticalSpacing:5,arrowButtonSpacing:5,numberDisplayParentNodeOptions:{excludeInvisibleChildrenFromBounds:!0},layoutInvisibleButtons:!1,createBottomContent:null},e);return(e,n,s,r,o)=>{s.mutateLayoutOptions({grow:1});const a=!!r,l=new Of({spacing:i.arrowButtonSpacing,children:a?[r,s,o]:[s],excludeInvisibleChildrenFromBounds:!i.layoutInvisibleButtons}),h=i.createBottomContent?i.createBottomContent(l):l;return h.mutateLayoutOptions({stretch:!0,xMargin:i.sliderPadding}),new Rf({spacing:i.verticalSpacing,children:[new Of({spacing:i.sliderPadding,children:[e,new Cr((0,t.sF)({children:[n]},i.numberDisplayParentNodeOptions))],layoutOptions:{stretch:!0}}),h]})}}constructor(i,n,s,r){!function(e){!e.startCallback&&e.endCallback;let t=!1,i=!1;e.arrowButtonOptions&&(t=rS(e.arrowButtonOptions));e.sliderOptions&&(i=rS(e.sliderOptions))}(r||{});const o=(0,t.Ay)()({numberDisplayOptions:{},sliderOptions:{},arrowButtonOptions:{},titleNodeOptions:{},useRichText:!1,startCallback:_.noop,endCallback:_.noop,delta:1,disabledOpacity:.5,layoutFunction:e.createLayoutFunction1(),includeArrowButtons:!0,soundGenerator:tS,valueChangeSoundGeneratorOptions:{},tandem:A.A.REQUIRED,tandemNameSuffix:"Control",phetioType:e.NumberControlIO,phetioEnabledPropertyInstrumented:!0,visiblePropertyOptions:{phetioFeatured:!0}},r);super();const a=o.arrowButtonOptions&&o.arrowButtonOptions.hasOwnProperty("scale"),l=()=>c.enabledRangeProperty?c.enabledRangeProperty.value:s,h=e=>{const t=cE(e,c.delta);return l().constrainValue(t)};if(o.soundGenerator===tS){let e=o.valueChangeSoundGeneratorOptions;_.isEmpty(o.valueChangeSoundGeneratorOptions)&&(e={interThresholdDelta:o.delta,constrainValue:h}),o.soundGenerator=new wE(s,e)}else null===o.soundGenerator&&(o.soundGenerator=wE.NO_SOUND);const c=(0,t.sF)({arrowButtonOptions:{touchAreaXDilation:3.5,touchAreaYDilation:7,mouseAreaXDilation:0,mouseAreaYDilation:0,enabledEpsilon:0,leftStart:o.startCallback,leftEnd:o.endCallback,rightStart:o.startCallback,rightEnd:o.endCallback,enabledPropertyOptions:{phetioReadOnly:!0,phetioFeatured:!1}},sliderOptions:{orientation:Ee.HORIZONTAL,startDrag:o.startCallback,endDrag:o.endCallback,majorTickLength:20,minorTickStroke:"rgba( 0, 0, 0, 0.3 )",majorTicks:[],minorTickSpacing:0,constrainValue:h,soundGenerator:o.soundGenerator,tandem:o.tandem.createTandem(e.SLIDER_TANDEM_NAME)},numberDisplayOptions:{textOptions:{font:new Gc(12),stringPropertyOptions:{phetioFeatured:!0}},tandem:o.tandem.createTandem("numberDisplay"),visiblePropertyOptions:{phetioFeatured:!0}},titleNodeOptions:{font:new Gc(12),maxWidth:null,fill:"black",tandem:o.tandem.createTandem("titleText")}},o);c.enabledRangeProperty&&(c.sliderOptions.enabledRangeProperty=c.enabledRangeProperty),c.arrowButtonOptions.tagName=null,this.groupFocusHighlight=c.includeArrowButtons;const d=c.useRichText?new df(i,c.titleNodeOptions):new Bc(i,c.titleNodeOptions),u=new JE(n,s,c.numberDisplayOptions);c.sliderOptions.trackNode||(c.sliderOptions=(0,t.sF)({trackSize:c.sliderOptions.orientation===Ee.HORIZONTAL?iS:iS.swapped()},c.sliderOptions)),c.sliderOptions.thumbNode||(c.sliderOptions=(0,t.sF)({thumbSize:c.sliderOptions.orientation===Ee.HORIZONTAL?nS:nS.swapped(),thumbTouchAreaXDilation:6},c.sliderOptions)),c.sliderOptions=(0,t.sF)({shiftKeyboardStep:c.delta,pdomCreateAriaValueText:()=>u.valueStringProperty.value,phetioType:KE.SliderIO},c.sliderOptions),c.sliderOptions.thumbFill&&!c.sliderOptions.thumbFillHighlighted&&(this.thumbFillProperty=new xb(c.sliderOptions.thumbFill),c.sliderOptions.thumbFillHighlighted=new oe([this.thumbFillProperty],e=>e.brighterColor())),this.slider=new KE(n,s,c.sliderOptions),_s.forwardAccessibleName(this,this.slider),_s.forwardHelpText(this,this.slider);let p=null,m=null,g=null;if(c.includeArrowButtons){const e=c.arrowButtonOptions.touchAreaXDilation,i=c.arrowButtonOptions.mouseAreaXDilation;if(p=new dE("left",()=>{const e=n.get();let t=n.get()-c.delta;t=cE(t,c.delta),t=Math.max(t,l().min),n.set(t),c.soundGenerator.playSoundForValueChange(t,e),this.slider.voicingOnEndResponse(e)},(0,t.sF)({soundPlayer:Lv,startCallback:c.arrowButtonOptions.leftStart,endCallback:c.arrowButtonOptions.leftEnd,tandem:c.tandem.createTandem("decrementButton"),touchAreaXShift:-e,mouseAreaXShift:-i},c.arrowButtonOptions)),m=new dE("right",()=>{const e=n.get();let t=n.get()+c.delta;t=cE(t,c.delta),t=Math.min(t,l().max),n.set(t),c.soundGenerator.playSoundForValueChange(t,e),this.slider.voicingOnEndResponse(e)},(0,t.sF)({soundPlayer:Lv,startCallback:c.arrowButtonOptions.rightStart,endCallback:c.arrowButtonOptions.rightEnd,tandem:c.tandem.createTandem("incrementButton"),touchAreaXShift:e,mouseAreaXShift:i},c.arrowButtonOptions)),!a){p.setScaleMagnitude(1);const e=u.localBounds.height/p.height;p.setScaleMagnitude(e),m.setScaleMagnitude(e)}g=()=>{const e=n.value;p.enabled=e-c.arrowButtonOptions.enabledEpsilon>l().min&&!this.slider.isFocused(),m.enabled=e+c.arrowButtonOptions.enabledEpsilon{p.enabled=!1,m.enabled=!1},blur:()=>g()})}const y=c.sliderOptions.majorTicks;for(let e=0;e0)for(let e=s.min;e<=s.max;)_.find(y,t=>t.value===e)||this.slider.addMinorTick(e),e+=c.sliderOptions.minorTickSpacing;const f=c.layoutFunction(d,u,this.slider,p,m);if(this.widthSizable=ir(f),sr(f)){const e=e=>{this.localMinimumWidth=e};f.minimumWidthProperty.link(e);const t=e=>{f.preferredWidth=e};this.localPreferredWidthProperty.link(t),this.disposeEmitter.addListener(()=>{f.minimumWidthProperty.unlink(e),this.localPreferredWidthProperty.unlink(t)})}c.children=[f],this.mutate(c),this.numberDisplay=u,this.disposeNumberControl=()=>{d.dispose(),u.dispose(),this.slider.dispose(),this.thumbFillProperty&&this.thumbFillProperty.dispose(),p&&p.dispose(),m&&m.dispose(),g&&n.unlink(g),g&&c.enabledRangeProperty&&c.enabledRangeProperty.unlink(g)}}};function rS(e){const t=Object.keys(e);return eS.filter(e=>_.includes(t,e)).length>0}sS.NumberControlIO=new f.A("NumberControlIO",{valueType:sS,documentation:"A number control with a title, slider and +/- buttons",supertype:Cr.NodeIO}),sS.SLIDER_TANDEM_NAME="slider",Pa.register("NumberControl",sS);let oS=class e extends(_o(Cr)){getCollapsedBoxHeight(){const e=this.constraint.lastCollapsedBoxHeight;return e}getExpandedBoxHeight(){const e=this.constraint.lastExpandedBoxHeight;return e}reset(){this.resetAccordionBox()}constructor(i,n){const s=(0,t.Ay)()({titleNode:null,expandedProperty:null,expandedDefaultValue:!0,resize:!0,overrideTitleNodePickable:!0,allowContentToOverlapTitle:!1,cursor:"pointer",lineWidth:1,cornerRadius:10,stroke:"black",fill:"rgb( 238, 238, 238 )",minWidth:0,titleAlignX:"center",titleAlignY:"center",titleXMargin:10,titleYMargin:2,titleXSpacing:5,showTitleWhenExpanded:!0,useExpandedBoundsWhenCollapsed:!0,useContentWidthWhenCollapsed:!0,titleBarExpandCollapse:!0,buttonAlign:"left",buttonXMargin:4,buttonYMargin:2,contentAlign:"center",contentVerticalAlign:"center",contentXMargin:15,contentYMargin:8,contentXSpacing:5,contentYSpacing:8,expandedSoundPlayer:Gm.get("accordionBoxOpened"),collapsedSoundPlayer:Gm.get("accordionBoxClosed"),tagName:"div",headingTagName:"h3",helpTextExpanded:null,helpTextCollapsed:null,contextResponseExpanded:null,contextResponseCollapsed:null,voicingHintResponseExpanded:null,voicingHintResponseCollapsed:null,tandem:A.A.REQUIRED,tandemNameSuffix:"AccordionBox",phetioType:e.AccordionBoxIO,phetioEventType:ze.A.USER,visiblePropertyOptions:{phetioFeatured:!0},titleBarOptions:{fill:null,stroke:null}},n);s.expandCollapseButtonOptions=(0,t.sF)({sideLength:16,cursor:s.cursor,valueOnSoundPlayer:s.expandedSoundPlayer,valueOffSoundPlayer:s.collapsedSoundPlayer,accessibleNameBehavior:cA.BASIC_ACCESSIBLE_NAME_BEHAVIOR,tandem:s.tandem.createTandem("expandCollapseButton")},s.expandCollapseButtonOptions),super(),this.expandedBoxOutline=null,this.collapsedBoxOutline=null;let r=s.titleNode;r||(r=new Bc("",{tandem:s.tandem.createTandem("titleText")}),this.addDisposable(r)),s.overrideTitleNodePickable&&(r.pickable=!1),this.expandedProperty=s.expandedProperty,this.expandedProperty||(this.expandedProperty=new o(s.expandedDefaultValue,{tandem:s.tandem.createTandem("expandedProperty"),phetioFeatured:!0}),this.addDisposable(this.expandedProperty)),this.expandCollapseButton=new cP(this.expandedProperty,s.expandCollapseButtonOptions),this.addDisposable(this.expandCollapseButton);const a={fill:s.fill,cornerRadius:s.cornerRadius};this.expandedBox=new fa(a),this.collapsedBox=new fa(a),this.expandedTitleBar=new aS(null,(0,t.sF)({lineWidth:s.lineWidth,cursor:s.cursor},s.titleBarOptions)),this.expandedBox.addChild(this.expandedTitleBar),this.collapsedTitleBar=new lS((0,t.sF)({cornerRadius:s.cornerRadius,cursor:s.cursor},s.titleBarOptions)),this.collapsedBox.addChild(this.collapsedTitleBar);const l=new iA(s.showTitleWhenExpanded?this.expandedTitleBar:this.expandCollapseButton),h=new iA(this.collapsedTitleBar);this.addDisposable(this.collapsedTitleBar,this.expandedTitleBar),s.titleBarExpandCollapse?this.collapsedTitleBar.addInputListener({down:()=>{this.expandCollapseButton.isEnabled()&&(this.phetioStartEvent("expanded"),this.expandedProperty.value=!0,s.expandedSoundPlayer.play(),this.phetioEndEvent())}}):(this.expandedTitleBar.interactiveHighlight="invisible",this.collapsedTitleBar.interactiveHighlight="invisible"),s.showTitleWhenExpanded&&s.titleBarExpandCollapse&&this.expandedTitleBar.addInputListener({down:()=>{this.expandCollapseButton.isEnabled()&&(this.phetioStartEvent("collapsed"),s.collapsedSoundPlayer.play(),this.expandedProperty.value=!1,this.phetioEndEvent())}});const c=()=>{const e=this.expandCollapseButton.visible&&this.expandCollapseButton.pickable;this.collapsedTitleBar.pickable=e,this.expandedTitleBar.pickable=e};if(this.expandCollapseButton.visibleProperty.lazyLink(c),this.expandCollapseButton.pickableProperty.lazyLink(c),this.expandCollapseButton.enabledProperty.link(e=>{const t=s.titleBarExpandCollapse&&e;this.collapsedTitleBar.cursor=t&&s.cursor||null,this.expandedTitleBar.cursor=t&&s.cursor||null}),this.expandedBox.addChild(i),s.stroke){const e={stroke:s.stroke,lineWidth:s.lineWidth,cornerRadius:s.cornerRadius,pickable:!1};this.expandedBoxOutline=new fa(e),this.expandedBox.addChild(this.expandedBoxOutline),this.collapsedBoxOutline=new fa(e),this.collapsedBox.addChild(this.collapsedBoxOutline)}const d=new Cr({excludeInvisibleChildrenFromBounds:!s.useExpandedBoundsWhenCollapsed});this.addChild(d);const u=new Cr({tagName:"div",ariaRole:"region",pdomOrder:[i],ariaLabelledbyAssociations:[{otherNode:this.expandCollapseButton,otherElementName:Ls.PRIMARY_SIBLING,thisElementName:Ls.PRIMARY_SIBLING}]}),p=new Cr({tagName:s.headingTagName,pdomOrder:[this.expandCollapseButton]}),m=new Cr({tagName:"p"}),g=new Cr({children:[p,m,u],pdomOrder:[p,m,r,u]});this.addChild(g),_s.forwardAccessibleName(this,this.expandCollapseButton),this.accessibleHelpTextBehavior=(e,t,i,n)=>(n.push(()=>{m.innerContent=i}),t),!s.accessibleName&&s.titleNode&&(this.accessibleName=yb(s.titleNode)),this.constraint=new hS(this,i,d,this.expandedBox,this.collapsedBox,this.expandedTitleBar,this.collapsedTitleBar,this.expandedBoxOutline,this.collapsedBoxOutline,r,this.expandCollapseButton,s),this.constraint.updateLayout(),this.constraint.enabled=s.resize;this.expandedProperty.link(()=>{const e=this.expandedProperty.value;this.expandedBox.visible=e,this.collapsedBox.visible=!e,u.visible=e,this.expandCollapseButton.setFocusHighlight(e?l:h),this.expandedTitleBar.interactiveHighlightEnabled=e&&s.showTitleWhenExpanded,r.visible=e&&s.showTitleWhenExpanded||!e,g.setPDOMAttribute("aria-hidden",!e),this.accessibleHelpText=e?s.helpTextExpanded:s.helpTextCollapsed,this.expandCollapseButton.voicingHintResponse=e?s.voicingHintResponseExpanded:s.voicingHintResponseCollapsed;const t=e?s.contextResponseExpanded:s.contextResponseCollapsed;this.expandCollapseButton.voicingSpeakFullResponse({contextResponse:wn.alertableToText(t),hintResponse:null}),this.alertDescriptionUtterance(t)},{disposer:this}),this.mutate(_.omit(s,"cursor")),this.resetAccordionBox=()=>{s.expandedProperty||this.expandedProperty.reset()}}};oS.AccordionBoxIO=new f.A("AccordionBoxIO",{valueType:oS,supertype:Cr.NodeIO,events:["expanded","collapsed"]});let aS=class extends(ph(ua)){},lS=class extends(ph(fa)){},hS=class extends fy{layout(){super.layout();const e=this.options;if(!this.accordionBox.isChildIncludedInLayout(this.contentNode))return void(this.containerNode.children=[]);this.containerNode.children=[this.expandedBox,this.collapsedBox,this.titleNode,this.expandCollapseButton];const t=this.accordionBox.expandedProperty.value,i=t||e.useExpandedBoundsWhenCollapsed,n=null===e.stroke?0:e.lineWidth,s=this.createLayoutProxy(this.contentNode),r=this.createLayoutProxy(this.titleNode),o=s.minimumWidth,a=s.minimumHeight,l=r.minimumWidth,h=Math.max(this.expandCollapseButton.height+2*e.buttonYMargin,this.titleNode.height+2*e.titleYMargin),c=e.showTitleWhenExpanded?Math.max((e.allowContentToOverlapTitle?e.contentYMargin:h+e.contentYSpacing)+a+e.contentYMargin,h):Math.max(this.expandCollapseButton.height+2*e.buttonYMargin,a+2*e.contentYMargin);let d=Math.max(e.minWidth,e.buttonXMargin+this.expandCollapseButton.width+e.titleXSpacing+l+e.titleXMargin);"center"===e.titleAlignX&&(d=Math.max(d,2*(e.buttonXMargin+this.expandCollapseButton.width+e.titleXSpacing)+l),d=Math.max(d,2*e.titleXMargin+l));const u=!t&&!e.useContentWidthWhenCollapsed;d=u?Math.max(d,this.expandCollapseButton.width+e.titleXSpacing+l+e.titleXMargin):e.showTitleWhenExpanded?Math.max(d,o+2*e.contentXMargin):Math.max(d,this.expandCollapseButton.width+o+e.buttonXMargin+e.contentXMargin+e.contentXSpacing);const p=d+n,m=(i?c:h)+n,g=Math.max(p,this.accordionBox.localPreferredWidth||0)-n,A=Math.max(m,this.accordionBox.localPreferredHeight||0)-n;this.lastCollapsedBoxHeight=h,i&&(this.lastExpandedBoxHeight=A),this.collapsedBox.rectWidth=g,this.collapsedBox.rectHeight=h;const y=this.collapsedBox.selfBounds;if(this.collapsedTitleBar.rectWidth=g,this.collapsedTitleBar.rectHeight=h,this.collapsedBoxOutline&&(this.collapsedBoxOutline.rectWidth=g,this.collapsedBoxOutline.rectHeight=h),i){this.expandedBox.rectWidth=g,this.expandedBox.rectHeight=A;const t=this.expandedBox.selfBounds;this.expandedBoxOutline&&(this.expandedBoxOutline.rectWidth=g,this.expandedBoxOutline.rectHeight=A),this.expandedTitleBar.shape=Hi.roundedRectangleWithRadii(0,0,g,h,{topLeft:e.cornerRadius,topRight:e.cornerRadius});let i=t.left+e.contentXMargin,n=t.right-e.contentXMargin;e.showTitleWhenExpanded||("left"===e.buttonAlign?i+=this.expandCollapseButton.width+e.contentXSpacing:n-=this.expandCollapseButton.width+e.contentXSpacing);const s=n-i,r=A-(e.showTitleWhenExpanded&&!e.allowContentToOverlapTitle?h+e.contentYMargin+e.contentYSpacing:2*e.contentYMargin);ir(this.contentNode)&&null!==this.accordionBox.localPreferredWidth&&(this.contentNode.preferredWidth=s),nr(this.contentNode)&&null!==this.accordionBox.localPreferredHeight&&(this.contentNode.preferredHeight=r),"top"===e.contentVerticalAlign?this.contentNode.top=t.bottom-e.contentYMargin-r:"bottom"===e.contentVerticalAlign?this.contentNode.bottom=t.bottom-e.contentYMargin:this.contentNode.centerY=t.bottom-e.contentYMargin-r/2,"left"===e.contentAlign?this.contentNode.left=i:"right"===e.contentAlign?this.contentNode.right=n:this.contentNode.centerX=(i+n)/2}let f=y.left+e.titleXMargin,b=y.right-e.titleXMargin;"left"===e.buttonAlign?(this.expandCollapseButton.left=y.left+e.buttonXMargin,f=this.expandCollapseButton.right+e.titleXSpacing):(this.expandCollapseButton.right=y.right-e.buttonXMargin,b=this.expandCollapseButton.left-e.titleXSpacing),ir(this.titleNode)&&(this.titleNode.preferredWidth=b-f),"left"===e.titleAlignX?this.titleNode.left=f:"right"===e.titleAlignX?this.titleNode.right=b:u?this.titleNode.left=f:this.titleNode.centerX=y.centerX,"top"===e.titleAlignY?(this.expandCollapseButton.top=this.collapsedBox.top+Math.max(e.buttonYMargin,e.titleYMargin),this.titleNode.top=this.expandCollapseButton.top):(this.expandCollapseButton.centerY=this.collapsedBox.centerY,this.titleNode.centerY=this.expandCollapseButton.centerY),s.dispose(),r.dispose(),this.accordionBox.localMinimumWidth=p,this.accordionBox.localMinimumHeight=m}dispose(){this.accordionBox.localPreferredWidthProperty.unlink(this._updateLayoutListener),this.accordionBox.localPreferredHeightProperty.unlink(this._updateLayoutListener),this.accordionBox.expandedProperty.unlink(this._updateLayoutListener),super.dispose()}constructor(e,t,i,n,s,r,o,a,l,h,c,d){super(e),this.accordionBox=e,this.contentNode=t,this.containerNode=i,this.expandedBox=n,this.collapsedBox=s,this.expandedTitleBar=r,this.collapsedTitleBar=o,this.expandedBoxOutline=a,this.collapsedBoxOutline=l,this.titleNode=h,this.expandCollapseButton=c,this.options=d,this.lastCollapsedBoxHeight=null,this.lastExpandedBoxHeight=null,this.accordionBox.localPreferredWidthProperty.lazyLink(this._updateLayoutListener),this.accordionBox.localPreferredHeightProperty.lazyLink(this._updateLayoutListener),this.accordionBox.expandedProperty.lazyLink(this._updateLayoutListener),this.addNode(t),this.addNode(h)}};fb.register("AccordionBox",oS);const cS=(e,t)=>e.size===t.size&&_.every([...e],e=>t.has(e));let dS=class extends d.A{update(){const e=new Set;!function t(i){i.parents.forEach(i=>{e.add(i),t(i)})}(this.node),e.forEach(e=>{this.listenedNodeSet.has(e)||this.addNodeListener(e)}),this.listenedNodeSet.forEach(t=>{e.has(t)||t===this.node||this.removeNodeListener(t)}),this.value=e,this.updateEmitter.emit()}addNodeListener(e){this.listenedNodeSet.add(e),e.parentAddedEmitter.addListener(this._nodeUpdateListener),e.parentRemovedEmitter.addListener(this._nodeUpdateListener)}removeNodeListener(e){this.listenedNodeSet.delete(e),e.parentAddedEmitter.removeListener(this._nodeUpdateListener),e.parentRemovedEmitter.removeListener(this._nodeUpdateListener)}dispose(){this.listenedNodeSet.forEach(e=>this.removeNodeListener(e)),this.updateEmitter.dispose(),super.dispose()}constructor(e){super(new Set),this.node=e,this.listenedNodeSet=new Set,this.updateEmitter=new ot.A,this.valueComparisonStrategy=cS,this._nodeUpdateListener=this.update.bind(this),this.addNodeListener(e),this.update()}};it.A.register("AncestorNodesProperty",dS);let uS=class extends d.A{update(){const e=[...this.fromAncestorsProperty.value,this.from],t=[...this.toAncestorsProperty.value,this.to],i=e.filter(e=>t.includes(e));let n=!1;const s=i.filter(i=>{const s=e.filter(e=>i.hasChild(e)),r=t.filter(e=>i.hasChild(e)),o=[],a=[];Qi(s,r,o,a,[]),(s.length>1||r.length>1)&&(o.length||a.length)&&(n=!0);const l=o.length>0||this.from===i,h=a.length>0||this.to===i;return l&&h});n||1!==s.length?(this.rootNode=null,this.fromTrail=null,this.toTrail=null):(this.rootNode=s[0],this.fromTrail=this.from.getUniqueTrailTo(this.rootNode),this.toTrail=this.to.getUniqueTrailTo(this.rootNode));const r=new Set;this.fromTrail&&this.fromTrail.nodes.forEach(e=>r.add(e)),this.toTrail&&this.toTrail.nodes.forEach(e=>r.add(e)),r.forEach(e=>{this.listenedNodeSet.has(e)||this.addNodeListener(e)}),this.listenedNodeSet.forEach(e=>{r.has(e)||e===this.from||e===this.to||this.removeNodeListener(e)}),this.updateMatrix()}updateMatrix(){if(this.rootNode&&this.fromTrail&&this.toTrail){const e=1===this.fromTrail.nodes.length,t=1===this.toTrail.nodes.length,i=e&&"parent"===this.fromCoordinateFrame||t&&"parent"===this.toCoordinateFrame,n=this.fromTrail.getMatrixConcatenation(i?0:1,this.fromTrail.nodes.length-("parent"===this.fromCoordinateFrame?1:0)),s=this.toTrail.getMatrixConcatenation(i?0:1,this.toTrail.nodes.length-("parent"===this.toCoordinateFrame?1:0));this.value=s.inverted().timesMatrix(n)}else this.value=null}addNodeListener(e){this.listenedNodeSet.add(e),e.transformEmitter.addListener(this._nodeTransformListener)}removeNodeListener(e){this.listenedNodeSet.delete(e),e.transformEmitter.removeListener(this._nodeTransformListener)}dispose(){this.fromAncestorsProperty.dispose(),this.toAncestorsProperty.dispose(),this.listenedNodeSet.forEach(e=>{e.transformEmitter.hasListener(this._nodeTransformListener)&&e.transformEmitter.removeListener(this._nodeTransformListener)}),super.dispose()}constructor(e,i,n){const s=(0,t.Ay)()({fromCoordinateFrame:"local",toCoordinateFrame:"local"},n);super(Pt.IDENTITY),this.from=e,this.to=i,this.rootNode=null,this.fromTrail=null,this.toTrail=null,this.listenedNodeSet=new Set,this.fromCoordinateFrame=s.fromCoordinateFrame,this.toCoordinateFrame=s.toCoordinateFrame,this.valueComparisonStrategy="equalsFunction",this.fromAncestorsProperty=new dS(e),this.toAncestorsProperty=new dS(i);const r=this.update.bind(this);this._nodeTransformListener=this.updateMatrix.bind(this),this.fromAncestorsProperty.updateEmitter.addListener(r),this.toAncestorsProperty.updateEmitter.addListener(r),this.update()}};it.A.register("MatrixBetweenProperty",uS);const pS={mutateNode(e,t){t?e.setPDOMAttribute("aria-haspopup",t):e.removePDOMAttribute("aria-haspopup"),e.positionInPDOM=!!t}};it.A.register("AriaHasPopUpMutator",pS);const mS=pS;var gS=i(8434);const AS={};let yS=0;function fS(e){const t=AS[e];this.parents[0].childrenChangedEmitter.removeListener(t),delete AS[e]}function bS(e,t,i){let n=e.indexOfChild(t)+i;for(;n>0&&n=0&&n{const t={index:null};return e.parents[0]&&(t.index=e.parents[0].indexOfChild(e)),t},applyState:(e,t)=>{const i=e.parents[0];if(i&&t.index){const n=i.children;n[i.indexOfChild(e)]=n[t.index],n[t.index]=e,i.setChildren(n)}},stateSchema:{index:(0,C.A)(I.A)},methods:{linkIndex:{returnType:I.A,parameterTypes:[(0,gS.A)(te.A,[I.A])],documentation:"Following the PropertyIO.link pattern, subscribe for notifications when the index in the parent changes, and receive a callback with the current value. The return value is a numeric ID for use with clearLinkIndex.",implementation:function(e){const t=()=>{const t=this.parents[0].indexOfChild(this);e(t)};this.parents[0].childrenChangedEmitter.addListener(t),t();const i=yS;return AS[i]=t,yS++,i}},unlinkIndex:{returnType:te.A,parameterTypes:[I.A],documentation:"Unlink a listener that has been added using linkIndex, by its numerical ID (like setTimeout/clearTimeout)",implementation:fS},clearLinkIndex:{returnType:te.A,parameterTypes:[I.A],documentation:'Deprecated, see "unlinkIndex".',implementation:function(e){fS.call(this,e)}},moveForward:{returnType:te.A,parameterTypes:[],implementation:function(){var e;(e=this)._parents.forEach(t=>bS(t,e,1))},documentation:"Move this Node one index forward in each of its parents, skipping invisible Nodes. If the Node is already at the front, this is a no-op."},moveBackward:{returnType:te.A,parameterTypes:[],implementation:function(){var e;(e=this)._parents.forEach(t=>bS(t,e,-1))},documentation:"Move this Node one index backward in each of its parents, skipping invisible Nodes. If the Node is already at the back, this is a no-op."}}});it.A.register("IndexedNodeIO",PS);const VS=PS;let vS=class extends(cA(Cr)){supplyOpenResponseOnNextFocus(){this._supplyOpenResponseOnNextFocus=!0}dispose(){this.disposeComboBoxListItemNode(),super.dispose()}comboBoxListItemNodeVoicingFocusListener(){this.voicingSpeakFullResponse({nameResponse:this._supplyOpenResponseOnNextFocus?this.voicingNameResponse:null,objectResponse:this._supplyOpenResponseOnNextFocus?null:this.voicingObjectResponse,contextResponse:null,hintResponse:this._supplyOpenResponseOnNextFocus?this.voicingHintResponse:null}),this._supplyOpenResponseOnNextFocus=!1}constructor(e,i,n,s,o){const a=(0,t.Ay)()({cursor:"pointer",align:"left",xMargin:6,highlightFill:"rgb( 245, 245, 245 )",highlightCornerRadius:4,tagName:"li",focusable:!0,ariaRole:"option",positionInPDOM:!0,voicingFocusListener:()=>this.comboBoxListItemNodeVoicingFocusListener(),comboBoxVoicingNameResponsePattern:UE.VALUE_NAMED_PLACEHOLDER,tandem:A.A.REQUIRED,tandemNameSuffix:"Item",phetioType:VS,phetioState:!0,visiblePropertyOptions:{phetioFeatured:!0}},o);a.comboBoxVoicingNameResponsePattern=a.comboBoxVoicingNameResponsePattern.get?a.comboBoxVoicingNameResponsePattern.get():a.comboBoxVoicingNameResponsePattern,a.innerContent=e.accessibleName||null,a.voicingObjectResponse=e.accessibleName||null;const l="string"==typeof a.comboBoxVoicingNameResponsePattern?new r.A(a.comboBoxVoicingNameResponsePattern):a.comboBoxVoicingNameResponsePattern,h=new wV(l,{value:e.accessibleName},{tandem:A.A.OPT_OUT});a.voicingNameResponse=h;const c=new fa({cornerRadius:a.highlightCornerRadius}),d=new Cr({children:[i]}),u=e=>{c.rectWidth=e,d.maxWidth=e};n.link(u);const p=e=>{c.rectHeight=e,d.maxHeight=e};s.link(p),a.children=[c,d],super(a),this._supplyOpenResponseOnNextFocus=!1,nP.create(this,[c,d],(e,t)=>{"left"===a.align?t.left=e.left+a.xMargin:"right"===a.align?t.right=e.right-a.xMargin:t.centerX=e.centerX,t.centerY=e.centerY}),this.item=e,this.localBoundsProperty.link(e=>{this.focusHighlight=Hi.bounds(e)});const m=new kr({attach:!1,tandem:A.A.OPT_OUT});this.addInputListener(m),m.looksOverProperty.link(e=>{c.fill=e?a.highlightFill:null}),this.disposeComboBoxListItemNode=()=>{m.dispose(),h.dispose(),n.unlink(u),s.unlink(p)}}};fb.register("ComboBoxListItemNode",vS);let wS=class e extends uP{dispose(){this.disposeComboBoxListBox(),super.dispose()}setItemVisible(e,t){this.getListItemNode(e).visible=t}isItemVisible(e){return this.getListItemNode(e).visible}getAllListItemNodes(){return this.content.children}getVisibleListItemNodes(){return this.getAllListItemNodes().filter(e=>e.visible)}getListItemNode(e){const t=_.find(this.getAllListItemNodes(),t=>t.item.value===e);return t}getFocusedItemNode(){const e=_.find(this.getAllListItemNodes(),e=>e.focused);return e}focusListItemNode(e){let t=this.getListItemNode(e);t.visible||(t=_.find(this.getAllListItemNodes(),e=>e.visible)),t&&(t.supplyOpenResponseOnNextFocus(),t.focus())}voiceOnNewSelection(e,t,i){const n={nameResponse:i.voicingNameResponse,objectResponse:null,contextResponse:i.voicingContextResponse,hintResponse:null};t===e&&(n.contextResponse=null),this.voiceOnSelectionNode.voicingSpeakResponse(n)}static getMaxItemWidthProperty(e){const t=_.flatten(e.map(e=>{const t=[e.boundsProperty];return sr(e)&&(t.push(e.isWidthResizableProperty),t.push(e.minimumWidthProperty)),t}));return oe.deriveAny(t,()=>Math.max(...e.map(e=>ir(e)?e.minimumWidth||0:e.width)))}static getMaxItemHeightProperty(e){const t=e.map(e=>e.boundsProperty);return oe.deriveAny(t,()=>Math.max(...e.map(e=>e.height)))}constructor(i,n,s,r,o,a,l,h){const c=(0,t.Ay)()({highlightFill:"rgb( 245, 245, 245 )",comboBoxListItemNodeOptions:{},xMargin:12,yMargin:8,backgroundPickable:!0,tagName:"ul",ariaRole:"listbox",groupFocusHighlight:!0,openedSoundPlayer:Gm.get("generalOpen"),closedNoChangeSoundPlayer:Gm.get("generalClose"),visiblePropertyOptions:{phetioReadOnly:!0}},h),d=new _e.A(e=>{const t=e.currentTarget;this.selectionOnFireAction=t;const n=i.value;o(),i.value=this.selectionOnFireAction.item.value,r(),this.voiceOnNewSelection(i.value,n,t),e.abort()},{parameters:[{phetioPrivate:!0,valueType:Ir}],tandem:l.createTandem("fireAction"),phetioEventType:ze.A.USER}),u={up(e){d.execute(e)},keyup:e=>{e.domEvent&&Fn.A.isAnyKeyEvent(e.domEvent,[Fn.A.KEY_ENTER,Fn.A.KEY_SPACE])&&d.execute(e)},click:e=>{d.execute(e)}},p=e.getMaxItemWidthProperty(s),m=e.getMaxItemHeightProperty(s),g=new oe([p],e=>e+c.xMargin),y=new oe([m],e=>e+c.yMargin),f=[];n.forEach((e,i)=>{const n=new vS(e,s[i],g,y,(0,t.sF)({align:c.align,highlightFill:c.highlightFill,highlightCornerRadius:c.cornerRadius,xMargin:.5*c.xMargin,tandem:e.tandemName?l.createTandem(e.tandemName):A.A.OPTIONAL},c.comboBoxListItemNodeOptions,e.comboBoxListItemNodeOptions));f.push(n),n.addInputListener(u)});const b=new Rf({spacing:0,excludeInvisibleChildrenFromBounds:!0,children:f});super(b,(0,t.sF)({},c,{xMargin:c.xMargin/2,yMargin:c.yMargin/2})),this.content=b,this.voiceOnSelectionNode=a,this.selectionOnFireAction=this.getListItemNode(i.value);const P=n.map(e=>Ab.getSelectionSoundPlayer(n.indexOf(e)));let V;this.visibleProperty.lazyLink(e=>{if(e)c.openedSoundPlayer.play(),V=this.getListItemNode(i.value);else if(V===this.selectionOnFireAction)c.closedNoChangeSoundPlayer.play();else{const e=this.selectionOnFireAction.item;if(e.soundPlayer)e.soundPlayer.play();else{const e=this.getVisibleListItemNodes().indexOf(this.selectionOnFireAction);-1!==e&&P[e].play()}}});const v=new Jc({keys:["escape","tab","shift+tab","arrowUp","arrowDown","home","end"],fire:(e,t)=>{const i=this.getVisibleListItemNodes();if("escape"===t||"tab"===t||"shift+tab"===t)r(),o();else if("arrowUp"===t||"arrowDown"===t){const n=e;n.preventDefault();const s="arrowDown"===t?1:-1,r=i.indexOf(this.getFocusedItemNode()),o=r+s;i[o]&&i[o].focus()}else"home"===t?i[0].focus():"end"===t&&i[i.length-1].focus()}});this.addInputListener(v),this.disposeComboBoxListBox=()=>{for(let e=0;e(t.labelContent=i,t);let SS=class extends Qb{setAriaHasPopUp(e){mS.mutateNode(this,!!e&&"listbox")}setDisplayOnly(e){this.arrow.visible=!e,this.separatorLine.visible=!e,this.tagName=e?"p":"button",this.setAriaHasPopUp(!e)}blockNextVoicingFocusListener(){this._blockNextVoicingFocusListener=!0}dispose(){this.disposeComboBoxButton(),super.dispose()}constructor(e,i,n,s){const o=(0,t.Ay)()({align:"left",arrowDirection:"down",arrowFill:"black",comboBoxVoicingNameResponsePattern:UE.VALUE_NAMED_PLACEHOLDER,cursor:"pointer",baseColor:"white",buttonAppearanceStrategy:Ub.FlatAppearanceStrategy,xMargin:12,yMargin:8,stroke:"black",lineWidth:1,soundPlayer:Lv,phetioEnabledPropertyInstrumented:!1,phetioVisiblePropertyInstrumented:!1,localPreferredWidthProperty:new d.A(null),localMinimumWidthProperty:new d.A(null),containerTagName:"div",labelTagName:"p",accessibleNameBehavior:ES},s),a=o.xMargin,l=o.yMargin,h=wS.getMaxItemWidthProperty(n),c=wS.getMaxItemHeightProperty(n),u=new ua(null,{fill:o.arrowFill}),p=_.find(i,t=>t.value===e.value),m=i.indexOf(p),g=new Cr({layoutOptions:{yMargin:l,grow:1,xAlign:o.align},children:[n[m]]}),y=new sc(0,0,0,0,{stroke:"black",lineWidth:o.lineWidth});o.content=new Df({rows:[[g,y,u]]}),ye.multilink([h,c],(e,t)=>{const i=t+2*l,n=i,s=.35*n,r=2*s*Math.sqrt(3)/3,h=a,c=a-o.lineWidth/2,d=-o.lineWidth/2;var p,m,A;u.shape=(p=o.arrowDirection,m=r,A=s,"up"===p?(new Hi).moveTo(0,A).lineTo(m/2,0).lineTo(m,A).close():(new Hi).moveTo(0,0).lineTo(m,0).lineTo(m/2,A).close()),u.mutateLayoutOptions({minContentWidth:n,minContentHeight:n}),g.mutateLayoutOptions({minContentWidth:e,minContentHeight:t,leftMargin:h,rightMargin:c}),y.y2=i,y.mutateLayoutOptions({rightMargin:d})}),o.xMargin=0,o.yMargin=0,super(o),this.minimumWidthProperty.link(e=>{o.localMinimumWidthProperty.value=e});const f=e=>{this.preferredWidth=e};o.localPreferredWidthProperty.link(f),this._blockNextVoicingFocusListener=!1,this.voicingFocusListener=()=>{!this._blockNextVoicingFocusListener&&this.defaultFocusListener(),this._blockNextVoicingFocusListener=!1};let b=null;const P=new oe([e],e=>{const t=_.find(i,t=>t.value===e);return t});new oe([P],e=>n[i.indexOf(e)]).link(e=>{g.removeAllChildren(),g.addChild(e)}),P.link(e=>{this.innerContent=e.accessibleName||null;const t="string"==typeof o.comboBoxVoicingNameResponsePattern?new r.A(o.comboBoxVoicingNameResponsePattern):o.comboBoxVoicingNameResponsePattern;b&&b.dispose(),this.voicingNameResponse=b=new wV(t,{value:e.accessibleName||""},{tandem:A.A.OPT_OUT})}),this.ariaLabelledbyAssociations=[{otherNode:this,otherElementName:Ls.LABEL_SIBLING,thisElementName:Ls.PRIMARY_SIBLING},{otherNode:this,otherElementName:Ls.PRIMARY_SIBLING,thisElementName:Ls.PRIMARY_SIBLING}],this.setAriaHasPopUp(!0),this.disposeComboBoxButton=()=>{h.dispose(),c.dispose(),P.dispose(),o.localPreferredWidthProperty.unlink(f),b&&b.dispose()},this.arrow=u,this.separatorLine=y}};fb.register("ComboBoxButton",SS);const TS=(e,t,i,n)=>(n.push(()=>{e.button.accessibleName=i}),t),CS=(e,t,i,n)=>(n.push(()=>{e.button.accessibleHelpText=i}),t);let IS=class e extends(Wo(Cr)){dispose(){this.disposeComboBox(),super.dispose()}showListBox(){this.listBox.visibleProperty.value=!0}hideListBox(){this.listBox.visibleProperty.value=!1}scaleListBox(){if(!this.listBox.localBounds.isEmpty()){const e=this.button.localToGlobalBounds(this.button.localBounds).width/this.button.localBounds.width,t=this.listBox.localToGlobalBounds(this.listBox.localBounds).width/this.listBox.localBounds.width;this.listBox.scale(e/t)}}scaleAndPositionListBox(e){e&&(this.scaleListBox(),"above"===this.listPosition?this.listBox.leftBottom=e.timesVector2(this.button.leftTop):this.listBox.leftTop=e.timesVector2(this.button.leftBottom))}setItemVisible(e,t){this.listBox.setItemVisible(e,t)}isItemVisible(e){return this.listBox.isItemVisible(e)}setInputEnabledProperty(e){return this}constructor(i,n,s,r){const a=(0,t.Ay)()({align:"left",listPosition:"below",labelXSpacing:10,disabledOpacity:.5,cornerRadius:4,highlightFill:"rgb( 245, 245, 245 )",xMargin:12,yMargin:8,buttonFill:"white",buttonStroke:"black",buttonLineWidth:1,buttonTouchAreaXDilation:0,buttonTouchAreaYDilation:0,buttonMouseAreaXDilation:0,buttonMouseAreaYDilation:0,listFill:"white",listStroke:"black",listLineWidth:1,openedSoundPlayer:Gm.get("generalOpen"),closedNoChangeSoundPlayer:Gm.get("generalClose"),tagName:"div",buttonLabelTagName:"p",accessibleNameBehavior:TS,accessibleHelpTextBehavior:CS,comboBoxVoicingNameResponsePattern:UE.VALUE_NAMED_PLACEHOLDER,comboBoxVoicingContextResponse:null,comboBoxVoicingHintResponse:null,tandem:A.A.REQUIRED,tandemNameSuffix:"ComboBox",phetioType:e.ComboBoxIO,phetioFeatured:!0,phetioEventType:ze.A.USER,visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0},r),l=Vb(n,a.tandem.createTandem("items"));n.forEach((e,t)=>{e.accessibleName||(e.accessibleName=yb(l[t]))}),super(),this.nodes=l,this.listPosition=a.listPosition,this.button=new SS(i,n,l,{align:a.align,arrowDirection:"below"===a.listPosition?"down":"up",cornerRadius:a.cornerRadius,xMargin:a.xMargin,yMargin:a.yMargin,baseColor:a.buttonFill,stroke:a.buttonStroke,lineWidth:a.buttonLineWidth,touchAreaXDilation:a.buttonTouchAreaXDilation,touchAreaYDilation:a.buttonTouchAreaYDilation,mouseAreaXDilation:a.buttonMouseAreaXDilation,mouseAreaYDilation:a.buttonMouseAreaYDilation,localPreferredWidthProperty:this.localPreferredWidthProperty,localMinimumWidthProperty:this.localMinimumWidthProperty,comboBoxVoicingNameResponsePattern:a.comboBoxVoicingNameResponsePattern,labelTagName:a.buttonLabelTagName,tandem:a.tandem.createTandem("button")}),this.addChild(this.button),this.listBox=new wS(i,n,l,this.hideListBox.bind(this),()=>{this.button.isFocusable()&&(this.button.blockNextVoicingFocusListener(),this.button.focus())},this.button,a.tandem.createTandem("listBox"),{align:a.align,highlightFill:a.highlightFill,xMargin:a.xMargin,yMargin:a.yMargin,cornerRadius:a.cornerRadius,fill:a.listFill,stroke:a.listStroke,lineWidth:a.listLineWidth,visible:!1,comboBoxListItemNodeOptions:{comboBoxVoicingNameResponsePattern:a.comboBoxVoicingNameResponsePattern,voicingContextResponse:a.comboBoxVoicingContextResponse,voicingHintResponse:a.comboBoxVoicingHintResponse},openedSoundPlayer:a.openedSoundPlayer,closedNoChangeSoundPlayer:a.closedNoChangeSoundPlayer,ariaLabelledbyAssociations:[{otherNode:this.button,otherElementName:Ls.LABEL_SIBLING,thisElementName:Ls.PRIMARY_SIBLING}]}),s.addChild(this.listBox),this.listParent=s,this.pdomOrder=[null,this.listBox];const h=new uS(this.button,this.listParent,{fromCoordinateFrame:"parent",toCoordinateFrame:"local"});ye.multilink([h,this.button.localBoundsProperty,this.listBox.localBoundsProperty],e=>{this.scaleAndPositionListBox(e)}),this.opacityProperty.link(e=>{this.listBox.opacityProperty.value=e}),this.mutate(a),this.button.addListener(()=>{this.listBox.visibleProperty.value=!this.listBox.visibleProperty.value,this.listBox.visibleProperty.value&&this.listBox.focusListItemNode(i.value)}),this.display=null,this.clickToDismissListener={down:e=>{(!phet.chipper.isFuzzEnabled()||Oe.A.nextDouble()<.005)&&(e.trail.containsNode(this.button)||e.trail.containsNode(this.listBox)||this.hideListBox())}},this.dismissWithFocusListener=e=>{e&&!e.trail.containsNode(this.listBox)&&this.hideListBox()},Qn.link(this.dismissWithFocusListener),this.listBox.visibleProperty.link(e=>{e?(this.scaleListBox(),this.listBox.moveToFront(),this.display=this.getUniqueTrail().rootNode().getRootedDisplays()[0],this.display.addInputListener(this.clickToDismissListener)):this.display&&this.display.hasInputListener(this.clickToDismissListener)&&(this.display.removeInputListener(this.clickToDismissListener),this.display=null)}),this.displayOnlyProperty=new o(!1,{tandem:a.tandem.createTandem("displayOnlyProperty"),phetioFeatured:!0,phetioDocumentation:"disables interaction with the ComboBox and makes it appear like a display that shows the current selection"}),this.displayOnlyProperty.link(e=>{this.hideListBox(),this.button.setDisplayOnly(e)});const c=new oe([this.enabledProperty,this.displayOnlyProperty],(e,t)=>e&&!t);super.setInputEnabledProperty(c),this.addLinkedElement(i,{tandemName:"property"}),this.visibleProperty.link(e=>{e||this.hideListBox()}),this.disposeComboBox=()=>{h.dispose(),this.display&&this.display.hasInputListener(this.clickToDismissListener)&&this.display.removeInputListener(this.clickToDismissListener),Qn.unlink(this.dismissWithFocusListener),this.displayOnlyProperty.dispose(),this.listBox.dispose(),this.button.dispose(),l.forEach(e=>e.dispose())}}};IS.ComboBoxIO=new f.A("ComboBoxIO",{valueType:IS,documentation:"A combo box is composed of a push button and a listbox. The listbox contains items that represent choices. Pressing the button pops up the listbox. Selecting from an item in the listbox sets the value of an associated Property. The button shows the item that is currently selected.",supertype:Cr.NodeIO,events:["listBoxShown","listBoxHidden"]}),fb.register("ComboBox",IS);let xS=class extends KE{constructor(e,i,n){super(e,i,(0,t.Ay)()({orientation:Ee.HORIZONTAL},n))}};fb.register("HSlider",xS);var DS=i(2432);const kS=EV.A.a11y.preferences.tabs.audio.voicing.titleStringProperty,MS=EV.A.a11y.preferences.tabs.audio.voicing.toolbar.titleStringProperty,BS=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.rate.titleStringProperty,OS=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.rate.labelStringStringProperty,LS=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.pitch.titleStringProperty,RS=EV.A.a11y.preferences.tabs.audio.voicing.voicingOnStringProperty,NS=EV.A.a11y.preferences.tabs.audio.voicing.voicingOffStringProperty,qS=EV.A.a11y.preferences.tabs.audio.voicing.voicingOffOnlyAvailableInEnglishStringProperty,FS=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.variablesPatternStringProperty,HS=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.titleStringProperty,YS=EV.A.a11y.preferences.tabs.audio.voicing.toolbar.toolbarRemovedStringProperty,GS=EV.A.a11y.preferences.tabs.audio.voicing.toolbar.toolbarAddedStringProperty,US=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.titleStringProperty,zS=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.descriptionStringProperty,WS=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.objectDetails.labelStringProperty,QS=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.contextChanges.labelStringProperty,KS=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.helpfulHints.labelStringProperty,jS=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.objectDetails.enabledAlertStringProperty,_S=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.objectDetails.disabledAlertStringProperty,ZS=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.contextChanges.enabledAlertStringProperty,XS=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.contextChanges.disabledAlertStringProperty,JS=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.helpfulHints.enabledAlertStringProperty,$S=EV.A.a11y.preferences.tabs.audio.voicing.simVoicingOptions.helpfulHints.disabledAlertStringProperty,eT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.voice.titleStringProperty,tT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.voice.titlePatternStringProperty,iT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.voice.noVoicesAvailableStringProperty,nT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.expandedAlertStringProperty,sT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.collapsedAlertStringProperty,rT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.writtenVariablesPatternStringProperty,oT=EV.A.a11y.preferences.tabs.labelledDescriptionPatternStringProperty,aT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.rate.rangeDescriptions.voiceRateNormalStringProperty,lT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.rate.rangeDescriptions.lowStringProperty,hT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.rate.rangeDescriptions.normalStringProperty,cT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.rate.rangeDescriptions.aboveNormalStringProperty,dT=EV.A.a11y.preferences.tabs.audio.voicing.customizeVoice.rate.rangeDescriptions.highStringProperty,uT=EV.A.preferences.tabs.audio.voicing.titleEnglishOnlyStringProperty,pT=EV.A.preferences.tabs.audio.voicing.descriptionStringProperty,mT=new Map;mT.set(new T(.5,.75),lT),mT.set(new T(.75,1.25),hT),mT.set(new T(1.25,1.5),cT),mT.set(new T(1.5,2),dT);const gT=new Be(13,26),AT=new Be(100,5);let yT=class extends Kw{constructor(e,i){const n=DS.A.availableRuntimeLocales&&DS.A.supportsDynamicLocale?uT:kS,s=new Bc(n,Fw.PANEL_SECTION_LABEL_OPTIONS),r=new wV(oT,{label:n,description:pT},{tandem:A.A.OPT_OUT}),o=new pw(pT,(0,h.A)({},Fw.PANEL_SECTION_CONTENT_OPTIONS,{readingBlockNameResponse:r})),a=new Yw(e.voicingEnabledProperty,!1,!0,(0,t.sF)({accessibleName:n},Fw.TOGGLE_SWITCH_OPTIONS)),l=new Uw({labelNode:s,descriptionNode:o,allowDescriptionStretch:!1,controlNode:a}),c=new Bc(MS,Fw.PANEL_SECTION_LABEL_OPTIONS),d=new Yw(e.toolbarEnabledProperty,!1,!0,(0,t.sF)({accessibleName:MS,leftValueContextResponse:YS,rightValueContextResponse:GS},Fw.TOGGLE_SWITCH_OPTIONS)),u=new Uw({labelNode:c,controlNode:d}),p=new Bc(US,(0,h.A)({},Fw.PANEL_SECTION_LABEL_OPTIONS,{tagName:"h3",accessibleName:US})),m=new wV(oT,{label:US,description:zS},{tandem:A.A.OPT_OUT}),g=new pw(zS,(0,h.A)({},Fw.PANEL_SECTION_CONTENT_OPTIONS,{readingBlockNameResponse:m})),y=(e,t,i,n,s)=>{const r=new Bc(e,Fw.PANEL_SECTION_CONTENT_OPTIONS);return new tP(t,r,{labelTagName:"label",labelContent:e,voicingNameResponse:e,voicingIgnoreVoicingManagerProperties:!0,voiceNameResponseOnSelection:!1,checkedContextResponse:i,uncheckedContextResponse:n,tandem:A.A.OPT_OUT})},f=new Cr,b=[];e.supportsVoicing&&b.push(y(WS,e.voicingObjectResponsesEnabledProperty,jS,_S),y(QS,e.voicingContextResponsesEnabledProperty,ZS,XS)),b.push(y(KS,e.voicingHintResponsesEnabledProperty,JS,$S));const P=new Rf({align:"left",spacing:Fw.VERTICAL_CONTENT_SPACING,children:b});f.children=[p,g,P],g.leftTop=p.leftBottom.plusXY(0,Fw.VERTICAL_CONTENT_SPACING),P.leftTop=g.leftBottom.plusXY(Fw.CONTENT_INDENTATION_SPACING,Fw.VERTICAL_CONTENT_SPACING);const V=new fT(BS,OS,e.voiceRateProperty),v=new PT(LS,e.voicePitchProperty),w=new Rf({spacing:Fw.VERTICAL_CONTENT_SPACING,align:"left",children:[V,v]}),E=new Bc(HS,(0,h.A)({},Fw.PANEL_SECTION_LABEL_OPTIONS,{cursor:"pointer"})),S=new oS(w,{titleNode:E,titleAlignX:"left",titleXSpacing:8,contentXMargin:0,expandedDefaultValue:!1,expandCollapseButtonOptions:{sideLength:20,voicingIgnoreVoicingManagerProperties:!0},fill:null,stroke:null,contextResponseExpanded:nT,contextResponseCollapsed:sT,tandem:A.A.OPT_OUT}),T=new Cr({children:[f,u,S]});u.leftTop=f.leftBottom.plusXY(0,20),S.leftTop=u.leftBottom.plusXY(0,20),super({titleNode:l,contentNode:T});e.voicingEnabledProperty.link(e=>{T.visible=e});DS.A.link(e=>{l.enabledProperty.value=e.startsWith("en")});const C=new wn;e.voicingEnabledProperty.lazyLink(t=>{e.voicingMainWindowVoicingEnabledProperty.value&&(C.alert=t?RS:DS.A.value.startsWith("en")?NS:qS,this.isInsidePhetioArchetype()||Yn.speakIgnoringEnabled(C),this.alertDescriptionUtterance(C))});let I=null;Yn.voicesProperty.link(t=>{I&&(w.removeChild(I),I.dispose());let i=[];if(t.length>0){i=Yn.getEnglishPrioritizedVoices().slice(0,12)}const n=phet.joist.sim.topLayer||new Cr;I=new bT(e.voiceProperty,i,n),w.addChild(I)})}},fT=class extends sS{constructor(e,t,i){super(e,i,i.range,{includeArrowButtons:!1,layoutFunction:sS.createLayoutFunction4(),delta:.25,accessibleName:t,titleNodeOptions:(0,h.A)({},Fw.PANEL_SECTION_CONTENT_OPTIONS,{maxWidth:45}),numberDisplayOptions:{decimalPlaces:2,valuePattern:FS,textOptions:(0,h.A)({},Fw.PANEL_SECTION_CONTENT_OPTIONS,{maxWidth:45})},sliderOptions:{thumbSize:gT,trackSize:AT,keyboardStep:.25,minorTickSpacing:.25,voicingOnEndResponseOptions:{withNameResponse:!0}},tandem:A.A.OPT_OUT}),this.slider.voicingNameResponse=t,this.slider.voicingIgnoreVoicingManagerProperties=!0;const n=new wV(rT,{value:i},{tandem:A.A.OPT_OUT}),s=new oe([i,aT,n],(e,t,i)=>1===e?t:i);this.slider.voicingObjectResponse=s}},bT=class extends IS{dispose(){this.disposeVoiceComboBox(),super.dispose()}constructor(e,i,n,s){const r=(0,t.Ay)()({listPosition:"above",accessibleName:eT,comboBoxVoicingNameResponsePattern:tT.value,tandem:A.A.OPT_OUT},s),o=[];0===i.length&&o.push({value:null,createNode:e=>new Bc(iT,Fw.PANEL_SECTION_CONTENT_OPTIONS),accessibleName:iT}),i.forEach(e=>{o.push({value:e,createNode:t=>new Bc(e.name,Fw.PANEL_SECTION_CONTENT_OPTIONS),accessibleName:e.name})}),e.set(o[0].value),super(e,o,n,r),this.button.voicingIgnoreVoicingManagerProperties=!0,this.disposeVoiceComboBox=()=>{o.forEach(e=>{e.value=null})}}},PT=class extends Rf{getPitchDescriptionString(e){let t="";return mT.forEach((i,n)=>{n.contains(e)&&(t=i)}),t}constructor(e,t){const i=new Bc(e,Fw.PANEL_SECTION_CONTENT_OPTIONS),n=t.range,s=new xS(t,n,{majorTickLength:10,thumbSize:gT,trackSize:AT,keyboardStep:.25,shiftKeyboardStep:.1,constrainValue:e=>cE(e,.01),labelTagName:"label",labelContent:e,voicingNameResponse:e,voicingIgnoreVoicingManagerProperties:!0,tandem:A.A.OPT_OUT}),r=new Bc("Low",{font:new Gc(14)});s.addMajorTick(n.min,r);const o=new Bc("High",{font:new Gc(14)});s.addMajorTick(n.max,o),super();t.link((e,t)=>{s.voicingObjectResponse=this.getPitchDescriptionString(e)}),this.mutate({children:[i,s],spacing:5})}};Xl.A.register("VoicingPanelSection",yT);const VT=yT,vT=EV.A.preferences.tabs.audio.audioFeatures.titleStringProperty;let wT=class extends Ww{constructor(e,i,n,s){super(jw.AUDIO,i,n,{labelContent:vT});const r={align:"left",spacing:Fw.CONTENT_SPACING,excludeInvisibleChildrenFromBounds:!1},o=new Rf(r),a=new Rf(r);if(e.supportsAnyVoicing){const t=new VT(e);o.addChild(t)}if(e.supportsSound){const t=e.supportsAnyVoicing!==e.supportsSound&&0===e.customPreferences.length,i=new aE(e,{includeTitleToggleSwitch:!t});a.addChild(i)}const l=new Of({align:"top",spacing:10,children:[o,a],tagName:"div"});e.customPreferences.forEach((e,t)=>{const i=t%2==0?o:a,n=e.createContent(s.tandem),r=new Kw({contentNode:n,contentNodeOptions:{excludeInvisibleChildrenFromBounds:!0},contentLeftMargin:0});i.addChild(r)});const h=new Bc(vT,Fw.PANEL_SECTION_LABEL_OPTIONS),c=new Yw(e.audioEnabledProperty,!1,!0,(0,t.sF)({accessibleName:vT},Fw.TOGGLE_SWITCH_OPTIONS)),d=new Uw({labelNode:h,controlNode:c,headingControl:!0});e.audioEnabledProperty.link(e=>{l.enabled=e});const u=new Rf({align:"center",spacing:25,children:[d,l]});this.addChild(u)}};Xl.A.register("AudioPreferencesTabPanel",wT);const ET=wT,ST=EV.A.a11y.preferences.tabs.input.gestureControl.enabledAlertStringProperty,TT=EV.A.a11y.preferences.tabs.input.gestureControl.disabledAlertStringProperty,CT=EV.A.a11y.preferences.tabs.labelledDescriptionPatternStringProperty;let IT=class extends Ww{constructor(e,i,n,s){super(jw.INPUT,i,n,{labelContent:"Input"});const r=new Rf({spacing:Fw.CONTENT_SPACING,align:"left"});if(this.addChild(r),e.supportsGestureControl){const i=new Bc("Gesture Control",Fw.PANEL_SECTION_LABEL_OPTIONS),n=new Zw("Use touch with custom swipes and taps instead. No direct touch with gesture control enabled.",(0,h.A)({},Fw.PANEL_SECTION_CONTENT_OPTIONS,{lineWrap:350,maxHeight:100,readingBlockNameResponse:Ge.A.fillIn(CT,{label:"Gesture Control",description:"Use touch with custom swipes and taps instead. No direct touch with gesture control enabled."})})),s=new Yw(e.gestureControlsEnabledProperty,!1,!0,(0,t.sF)({accessibleName:"Gesture Control",leftValueContextResponse:TT,rightValueContextResponse:ST},Fw.TOGGLE_SWITCH_OPTIONS)),o=new Uw({labelNode:i,descriptionNode:n,allowDescriptionStretch:!1,controlNode:s}),a=new Kw({titleNode:o,contentLeftMargin:0});r.addChild(a)}const o=new Rf({spacing:Fw.CONTENT_SPACING,align:"left"});e.customPreferences.forEach(e=>{const t=e.createContent(s.tandem);o.addChild(new Cr({children:[t]}))});const a=new Kw({contentNode:o,contentLeftMargin:0});r.addChild(a)}};Xl.A.register("InputPreferencesPanel",IT);const xT=IT,DT=window.phet&&phet.chipper?phet.chipper.packageObject:{name:"placeholder"};Xl.A.register("packageJSON",DT);const kT=DT;var MT,BT;const OT=_.uniq(["usa",...(null==kT||null==(BT=kT.phet)||null==(MT=BT.simFeatures)?void 0:MT.supportedRegionsAndCultures)||[]]),LT=e=>!(!e||!OT.includes(e)),RT=window.phet.chipper.queryParameters.regionAndCulture,NT=LT(RT)?RT:"usa";let qT=class extends r.A{unguardedSet(e){LT(e)&&super.unguardedSet(e)}};const FT=OT.length>1,HT=new qT(NT,{validValues:OT.sort(),tandem:FT?A.A.GENERAL_MODEL.createTandem("regionAndCultureProperty"):A.A.OPT_OUT,phetioFeatured:FT,phetioValueType:x.A,phetioDocumentation:"Describes how a region and culture will be portrayed in the sim."});Xl.A.register("regionAndCultureProperty",HT);const YT=HT;let GT=class extends fa{constructor(e,t){const i=Ge.A.localeToLocalizedName(t),n=phet.chipper.queryParameters.dev?Ge.A.wrapLTR(`${i} (${t})`):i,s=phet.chipper.localeData[t],r=s.englishName,o=new Bc(n,{font:Fw.CONTENT_FONT});super(o.bounds.dilated(5),{cursor:"pointer",tagName:"button",accessibleName:r}),o.center=this.center,this.addChild(o),this.locale=t;const a=Gm.get("pushButton"),l=new Mr({fire:()=>{e.value=t,a.play(),this.alertDescriptionUtterance(Ge.A.fillIn(EV.A.a11y.preferences.tabs.localization.languageSelection.languageChangeResponsePatternStringProperty,{language:r}))},tandem:A.A.OPT_OUT});this.addInputListener(l),l.isOverProperty.link(e=>{this.stroke=e?VA.getInnerGroupHighlightColor():Wr.TRANSPARENT});e.link(e=>{this.fill=e===t?WP.PHET_LOGO_BLUE:null})}};Xl.A.register("LanguageSelectionNode",GT);let UT=class extends uP{constructor(e){super(new Df({xMargin:5,xAlign:"left",autoRows:15,maxWidth:1e3,resize:!1,children:e.availableRuntimeLocales.map(t=>new GT(e,t))}))}};Xl.A.register("LocalePanel",UT);const zT=UT,WT={africa:EV.A.preferences.tabs.localization.regionAndCulture.africaStringProperty,africaModest:EV.A.preferences.tabs.localization.regionAndCulture.africaModestStringProperty,asia:EV.A.preferences.tabs.localization.regionAndCulture.asiaStringProperty,latinAmerica:EV.A.preferences.tabs.localization.regionAndCulture.latinAmericaStringProperty,oceania:EV.A.preferences.tabs.localization.regionAndCulture.oceaniaStringProperty,random:EV.A.preferences.tabs.localization.regionAndCulture.randomStringProperty,usa:EV.A.preferences.tabs.localization.regionAndCulture.unitedStatesOfAmericaStringProperty};let QT=class extends IS{constructor(e){const i=(0,t.Ay)()({tandem:A.A.OPT_OUT},e),n=OT.slice().sort().map(e=>({value:e,createNode:()=>new Bc(WT[e],Fw.PANEL_SECTION_CONTENT_OPTIONS)}));super(YT,n,phet.joist.sim.topLayer,i)}};Xl.A.register("RegionAndCultureComboBox",QT);const KT=QT,jT=EV.A.preferences.tabs.localization.titleStringProperty,_T=EV.A.preferences.tabs.localization.regionAndCulture.titleStringProperty,ZT=EV.A.preferences.tabs.localization.regionAndCulture.descriptionStringProperty;let XT=class extends Ww{constructor(e,i,n,s){const r=(0,t.Ay)()({labelContent:jT,phetioVisiblePropertyInstrumented:!1},s);super(jw.LOCALIZATION,i,n,r);const o=new Rf({spacing:Fw.CONTENT_SPACING});if(OT.length>1){const e=new KT,t=new Bc(_T,Fw.CONTROL_LABEL_OPTIONS),i=new df(ZT,Fw.CONTROL_DESCRIPTION_OPTIONS);o.addChild(new Uw({labelNode:t,controlNode:e,descriptionNode:i}))}if(e.supportsDynamicLocale&&e.includeLocalePanel){const i=new pw(EV.A.preferences.tabs.localization.languageSelection.titleStringProperty,(0,t.sF)({},Fw.CONTROL_LABEL_OPTIONS,{readingBlockDisabledTagName:"h3"})),n=new Zw(EV.A.preferences.tabs.localization.languageSelection.descriptionStringProperty,Fw.CONTROL_DESCRIPTION_OPTIONS),s=new zT(e.localeProperty),r=new Rf({children:[i,n,s],align:"left",spacing:5,stretch:!0,layoutOptions:{stretch:!0}});o.addChild(r)}e.customPreferences.forEach(e=>{const t=e.createContent(s.tandem);o.addChild(new Cr({children:[t]}))}),o.align=o.children.length>1?"left":"center";const a=new Kw({contentNode:o,contentLeftMargin:0});this.addChild(a)}};Xl.A.register("LocalizationPreferencesPanel",XT);const JT=XT,$T=new oe([DS.A],e=>"ltr"===phet.chipper.localeData[e].direction);Xl.A.register("isLeftToRightProperty",$T);const eC=$T;let tC=class extends Ww{constructor(e,t){super(jw.OVERVIEW,e,t);const i=(0,h.A)({},Fw.PANEL_SECTION_CONTENT_OPTIONS,{maxWidth:null,lineWrap:600,maxHeight:600,tagName:"p"}),n=[new Zw(EV.A.preferences.tabs.general.accessibilityIntroStringProperty,i),new Zw(EV.A.preferences.tabs.general.moreAccessibilityStringProperty,i)],s=new Rf({spacing:10,children:n});this.addChild(s);eC.link(e=>{n.forEach(t=>{const i=e?"left":"right";t.align=i,s.align=i})})}};Xl.A.register("OverviewPreferencesPanel",tC);const iC=tC;let nC=class extends Ww{constructor(e,i,n,s){const r=(0,t.Ay)()({labelContent:"Simulation",phetioVisiblePropertyInstrumented:!1},s);super(jw.SIMULATION,i,n,r);const o=new Rf({align:"left",spacing:Fw.CONTENT_SPACING});this.addChild(o);const a=[];e.customPreferences.forEach(e=>{const t=e.createContent(r.tandem),i=new Kw({contentNode:t});a.push(i)}),o.children=a}};Xl.A.register("SimulationPreferencesPanel",nC);const sC=nC;let rC=class extends Uw{constructor(e,i){const n=new Bc(EV.A.projectorModeStringProperty,Fw.PANEL_SECTION_LABEL_OPTIONS),s=new pw(EV.A.preferences.tabs.visual.projectorModeDescriptionStringProperty,Fw.PANEL_SECTION_CONTENT_OPTIONS),r=phet.chipper.colorProfiles.find(e=>e!==ff.PROJECTOR_COLOR_PROFILE),o=new Yw(e,r,ff.PROJECTOR_COLOR_PROFILE,(0,t.sF)({accessibleName:EV.A.projectorModeStringProperty},Fw.TOGGLE_SWITCH_OPTIONS)),a=new wV(EV.A.a11y.preferences.tabs.labelledDescriptionPatternStringProperty,{label:EV.A.projectorModeStringProperty,description:EV.A.preferences.tabs.visual.projectorModeDescriptionStringProperty},{tandem:A.A.OPT_OUT});s.readingBlockNameResponse=a,super((0,t.Ay)()({labelNode:n,descriptionNode:s,controlNode:o},i))}};Xl.A.register("ProjectorModeToggleSwitch",rC);const oC=rC,aC=EV.A.preferences.tabs.visual.interactiveHighlightsStringProperty,lC=EV.A.preferences.tabs.visual.interactiveHighlightsDescriptionStringProperty,hC=EV.A.a11y.preferences.tabs.visual.interactiveHighlights.enabledAlertStringProperty,cC=EV.A.a11y.preferences.tabs.visual.interactiveHighlights.disabledAlertStringProperty,dC=EV.A.a11y.preferences.tabs.labelledDescriptionPatternStringProperty;let uC=class extends Ww{constructor(e,i,n,s){const r=(0,t.Ay)()({labelContent:"Visual"},s),o=r.tandem;r.tandem=A.A.OPT_OUT,super(jw.VISUAL,i,n,r);const a=new Rf({spacing:Fw.CONTENT_SPACING,align:"left"});if(e.supportsProjectorMode){const t=new oC(e.colorProfileProperty);a.addChild(t)}if(e.supportsInteractiveHighlights){const i=new Bc(aC,Fw.PANEL_SECTION_LABEL_OPTIONS),n=new wV(dC,{label:aC,description:lC},{tandem:A.A.OPT_OUT}),s=new pw(lC,(0,h.A)({},Fw.PANEL_SECTION_CONTENT_OPTIONS,{readingBlockNameResponse:n})),r=new Yw(e.interactiveHighlightsEnabledProperty,!1,!0,(0,t.sF)({accessibleName:aC,leftValueContextResponse:cC,rightValueContextResponse:hC},Fw.TOGGLE_SWITCH_OPTIONS)),o=new Uw({labelNode:i,descriptionNode:s,allowDescriptionStretch:!1,controlNode:r});a.addChild(o)}e.customPreferences.forEach(e=>{const t=e.createContent(o),i=new Cr({children:[t]});a.addChild(i)});const l=new Kw({contentNode:a,contentLeftMargin:0});this.addChild(l)}};Xl.A.register("VisualPreferencesPanel",uC);const pC=uC;let mC=class extends Cr{getSelectedContent(){for(let e=0;e{e.focusable=!1}})}};Xl.A.register("PreferencesPanels",mC);const AC=mC,yC=new Hi("M17.98,18.88c-.83,4.11-2.49,6.69-3.68,8.09-.26.02-.53.03-.8.03-.21,0-.42-.01-.63-.02-1.19-1.4-2.86-3.98-3.69-8.09h8.8ZM19.98,18.88c-.62,3.38-1.76,5.87-2.88,7.62,3.94-1.09,7.17-3.92,8.78-7.62h-5.89ZM7.18,18.88H1.12c1.64,3.76,4.94,6.62,8.97,7.67-1.13-1.75-2.29-4.26-2.92-7.67ZM8.67,13.5c0,1.23.08,2.36.21,3.41h9.41c.13-1.06.21-2.19.21-3.41s-.08-2.35-.2-3.4h-9.42c-.12,1.05-.2,2.18-.2,3.4ZM26.55,10.1h-6.28c.12,1.06.19,2.18.19,3.4s-.08,2.35-.2,3.41h6.28c.29-1.09.45-2.23.45-3.41s-.17-2.31-.45-3.4ZM6.7,13.5c0-1.22.08-2.34.19-3.4H.45c-.28,1.09-.45,2.22-.45,3.4s.17,2.32.45,3.41h6.44c-.12-1.07-.2-2.19-.2-3.41ZM19.99,8.13h5.9c-1.61-3.7-4.83-6.54-8.78-7.63,1.12,1.75,2.26,4.24,2.88,7.63ZM13.5,0c-.21,0-.42.01-.64.02-1.19,1.4-2.86,3.98-3.69,8.11h8.81C17.16,4.01,15.49,1.43,14.3.03c-.27-.02-.53-.03-.8-.03ZM10.09.44C6.05,1.5,2.75,4.36,1.12,8.13h6.06c.63-3.43,1.78-5.94,2.91-7.69Z");let fC=class extends(cA(Cr)){constructor(e,i,n,s){const r=(0,t.Ay)()({iconNode:null,pointerAreaXDilation:0,phetioFeatured:!0,visiblePropertyOptions:{phetioFeatured:!0},cursor:"pointer",tagName:"button",accessibleName:e,ariaRole:"tab",focusable:!0,containerTagName:"li",containerAriaRole:"presentation"},s),o=[new Bc(e,Fw.TAB_OPTIONS)];r.iconNode&&o.push(r.iconNode);const a=new Of({children:o,spacing:8}),l=new fa({children:[a]}),h=new sc(0,0,0,0,{stroke:ul.INNER_FOCUS_COLOR,lineWidth:5});super(r),this.children=[l,h],a.boundsProperty.link(e=>{l.rectBounds=e.dilatedXY(15,10),h.x2=e.width,h.centerTop=e.centerBottom.plusXY(0,5),this.mouseArea=this.localBounds.dilatedX(r.pointerAreaXDilation),this.touchArea=this.mouseArea}),this.value=n;const c=new wV(EV.A.a11y.preferences.tabs.tabResponsePatternStringProperty,{title:e},{tandem:A.A.OPT_OUT});this.voicingNameResponse=c;const d=new kr({press:()=>{i.set(n),this.focus(),this.voicingSpeakNameResponse()},tandem:A.A.OPT_OUT});this.addInputListener(d),ye.multilink([i,d.isOverProperty],(e,t)=>{l.opacity=e===n?1:t?.8:.6,this.focusable=e===n,h.visible=e===n})}};Xl.A.register("PreferencesTab",fC);const bC=fC;let PC=class extends Of{getTabVisibleProperty(e){const t=_.find(this.content,t=>t.value===e);return t.visibleProperty}focusSelectedTab(){this.content.forEach(e=>{e.value===this.selectedPanelProperty.value&&e.focus()})}constructor(e,i,n){const s=(0,t.Ay)()({isDisposable:!1,tagName:"ul",ariaRole:"tablist",groupFocusHighlight:!0,spacing:10,align:"bottom"},n);super(s),this.selectedButton=null,this.content=[],this.selectedPanelProperty=i;const r=t=>_.includes(e,t),o=s.spacing/2;r(jw.OVERVIEW)&&this.content.push(new bC(EV.A.preferences.tabs.overview.titleStringProperty,i,jw.OVERVIEW,{pointerAreaXDilation:o,tandem:s.tandem.createTandem("overviewTab")})),r(jw.SIMULATION)&&this.content.push(new bC(EV.A.preferences.tabs.simulation.titleStringProperty,i,jw.SIMULATION,{pointerAreaXDilation:o,tandem:s.tandem.createTandem("simulationTab")})),r(jw.VISUAL)&&this.content.push(new bC(EV.A.preferences.tabs.visual.titleStringProperty,i,jw.VISUAL,{pointerAreaXDilation:o,tandem:s.tandem.createTandem("visualTab")})),r(jw.AUDIO)&&this.content.push(new bC(EV.A.preferences.tabs.audio.titleStringProperty,i,jw.AUDIO,{pointerAreaXDilation:o,tandem:s.tandem.createTandem("audioTab")})),r(jw.INPUT)&&this.content.push(new bC(EV.A.preferences.tabs.input.titleStringProperty,i,jw.INPUT,{pointerAreaXDilation:o,tandem:s.tandem.createTandem("inputTab")})),r(jw.LOCALIZATION)&&this.content.push(new bC(EV.A.preferences.tabs.localization.titleStringProperty,i,jw.LOCALIZATION,{pointerAreaXDilation:o,iconNode:new ua(yC,{scale:.734,fill:"black"}),tandem:s.tandem.createTandem("localizationTab")})),this.children=this.content,ye.multilinkAny([i,...this.content.map(e=>e.visibleProperty)],()=>{if(!this.content.find(e=>e.value===i.value).visibleProperty.value){const e=this.content.find(e=>e.visibleProperty.value);e&&(i.value=e.value)}});const a=new Jc({keys:["arrowRight","arrowLeft"],fireOnDown:!1,fire:(e,t)=>{e&&e.preventDefault();const n="arrowRight"===t?1:-1;for(let s=0;s{this.content.forEach(e=>{e.value===this.selectedPanelProperty.value&&(this.selectedButton=e)})}),1===e.length&&(this.focusable=!1,this.inputEnabledProperty.value=!1)}};Xl.A.register("PreferencesTabs",PC);const VC=PC,vC="data:audio/mpeg;base64,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Ak9VmOWhIXESKVktJ2z4qoUibZXEhJVmo54y2pTCpKrkqInxtCMiURCZMUikUkts1JpZqUkLOLbHCI0RE1oSXNz+SbNkLMYykmzS0yFmTUlVCZ6udDBEKnkJlZCQhktiVP8kt2mGpHnoyCiA//u0xFQAFJGA2aSZNKMnNZKxzTAlCSoDGlYIaVGpygYYefKF0UpWkqkrtgp6HRRPZ5axHA+enRVOHHuXIak+k6KgHkM9YJwSlxO+7i7XWv7etVMjdXHJVJA/RPnrxiHQnFtT7Ubs7M81d1qM5hc9lw+EkhHZdLh2oMkqI6XmSVTa388cpVBk+crFS06YfpGtgvy6B6ubzT5iVVCpnL8ZJXz2BGeprtHKHFuQrC0SWDoeSoZnhGAiKi22w9p6SjtQfUMkPvmzPZvfXN6zV52lmQL/9EfSDeEzcSop1UxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//u0xAADwAAAAAAAACAAADSAAAAETEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",wC=Sl(Dl,vC),EC=El.A.createLock(vC),SC=new Il;let TC=!1;const CC=()=>{TC||(EC(),TC=!0)},IC=Dl.decodeAudioData(wC.buffer,e=>{null===SC.audioBufferProperty.value&&(SC.audioBufferProperty.set(e),CC())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),SC.audioBufferProperty.set(Dl.createBuffer(1,1,Dl.sampleRate)),CC()});IC&&IC.then(e=>{null===SC.audioBufferProperty.value&&(SC.audioBufferProperty.set(e),CC())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),CC()});const xC=SC;let DC=class extends Bm{dispose(){We.A.assertNotDisposable()}constructor(e,t){super(xC,t);e.lazyLink(()=>{this.play()})}};Xl.A.register("PreferencesTabSwitchSoundGenerator",DC);const kC=DC;let MC=class extends Wv{focusSelectedTab(){this.preferencesTabs.focusSelectedTab()}focusSelectedPanel(){this.preferencesPanels.focusSelectedPanel()}constructor(e,i){const n=new Bc(EV.A.preferences.titleStringProperty,{font:Fw.TITLE_FONT,maxWidth:Fw.CONTENT_MAX_WIDTH}),s=(0,t.Ay)()({titleAlign:"center",title:n,isDisposable:!1,phetioDynamicElement:!0,closeButtonVoicingDialogTitle:EV.A.preferences.titleStringProperty},i),r=[jw.OVERVIEW];e.supportsSimulationPreferences()&&r.push(jw.SIMULATION),e.supportsVisualPreferences()&&r.push(jw.VISUAL),e.supportsAudioPreferences()&&r.push(jw.AUDIO),e.supportsInputPreferences()&&r.push(jw.INPUT),e.supportsLocalizationPreferences()&&r.push(jw.LOCALIZATION);const o=new rh(jw.OVERVIEW,{validValues:r,tandem:s.tandem.createTandem("selectedTabProperty")}),a=new VC(r,o,{tandem:s.tandem.createTandem("preferencesTabs")}),l=new AC(e,r,o,a,{tandem:s.tandem.createTandem("preferencesPanels")}),h=new Rf({children:[a,new Bf({layoutOptions:{bottomMargin:20,stretch:!0}}),l]}),c=new kC(o,{initialOutputLevel:.2});_l.addSoundGenerator(c,{categoryName:"user-interface"}),super(h,s),this.preferencesTabs=a,this.preferencesPanels=l,a.addInputListener(new Jc({keys:["arrowDown"],fire:()=>{this.focusSelectedPanel()}})),h.addInputListener(new Jc({keys:["arrowUp"],fire:e=>{this.focusSelectedTab()},enabledProperty:new oe([Qn],()=>{const e=Kn();return!!e&&this.preferencesPanels.isFocusableSelectedContent(e)})}))}};Xl.A.register("PreferencesDialog",MC);const BC=MC;let OC=class extends dw{constructor(e,i,n){const s=(0,t.Ay)()({listener:()=>{const e=o.getElement();e.show(),e.focusSelectedTab()},highlightExtensionWidth:8.6,highlightExtensionHeight:10,accessibleName:EV.A.preferences.titleStringProperty,positionInPDOM:!0,voicingNameResponse:EV.A.preferences.titleStringProperty,visiblePropertyOptions:{phetioFeatured:!0}},n),r=new _h(Tw,{scale:18.85/Tw.height,pickable:!1});super(r,i,s);const o=new iw(t=>new BC(e,{tandem:t,focusOnHideNode:this}),[],{tandem:s.tandem.createTandem("preferencesDialogCapsule"),phetioType:iw.PhetioCapsuleIO(Wv.DialogIO),disposeOnClear:!1});i.link(e=>{r.image=e.equals(Wr.BLACK)?Tw:xw}),this.setPDOMAttribute("aria-haspopup",!0)}};Xl.A.register("NavigationBarPreferencesButton",OC);const LC=OC;let RC=class extends Of{constructor(e,i,n){const s=(0,t.Ay)()({align:"center",spacing:2,tandem:A.A.REQUIRED},n),r=[];if(e.preferencesModel.shouldShowDialog()){const t=new LC(e.preferencesModel,i,{tandem:s.tandem.createTandem("preferencesButton"),pointerAreaDilationX:1,pointerAreaDilationY:1});r.push(t)}const o=e.preferencesModel.supportsAudioPreferences();if(o&&r.push(new ww(eh.audioEnabledProperty,i,{tandem:s.tandem.createTandem("audioToggleButton"),pointerAreaDilationX:1,pointerAreaDilationY:.15,supportsAudioPreferences:o})),e.hasKeyboardHelpContent){const t=new bw(e.screens,e.selectedScreenProperty,i,{tandem:s.tandem.createTandem("keyboardHelpButton"),pointerAreaDilationX:1,pointerAreaDilationY:1});phet.chipper.queryParameters.supportsInteractiveDescription&&!Ye.A.mobileSafari&&r.push(t)}s.children=r,super(_.omit(s,"tandem"))}};Xl.A.register("A11yButtonsHBox",RC);const NC=RC,qC=new Hi("M44.34,17.66l-4.29-3.57V1.83c0-1.01-.82-1.82-1.82-1.82h-3.88c-1.01,0-1.82.82-1.82,1.82v5.98L23.67.43c-.68-.56-1.66-.56-2.34,0L.66,17.66c-.77.64-.88,1.8-.23,2.57l.77.93c.64.77,1.8.88,2.57.23L22.5,5.78l18.73,15.61c.77.64,1.92.54,2.57-.23l.77-.93c.64-.77.54-1.92-.23-2.57Z M22.55,9.13L5.05,23.57v14.6c0,1.01.82,1.82,1.82,1.82h11.77v-11.89h7.82v11.89h11.77c1.01,0,1.82-.82,1.82-1.82v-14.6l-17.5-14.44Z"),FC=EV.A.a11y.homeStringProperty,HC=EV.A.a11y.goToScreenPatternStringProperty;let YC=class extends dw{constructor(e,i,n,s){const r=new wV(HC,{name:FC}),o=(0,t.Ay)()({highlightExtensionWidth:4,containerTagName:"li",accessibleHelpText:r,appendDescription:!0,voicingHintResponse:r},s),a=new ua(qC);a.setScaleMagnitude(.48*e/a.height*.85);const l=new fa(0,0,a.width/.85+12,e);a.center=l.center;const h=new Cr({children:[l,a]}),c=new wn,d=o.listener;o.listener=()=>{d&&d(),this.voicingSpeakFullResponse({objectResponse:null,hintResponse:null,utterance:c})},super(h,i,o),this.focusHighlight=Hi.bounds(this.bounds.setMaxY(this.bounds.maxY-2)),ye.multilink([this.interactionStateProperty,i],(e,t)=>{t.equals(Wr.BLACK)?a.fill=e===Sb.PRESSED?"gray":"white":a.fill=e===Sb.PRESSED?"#444":"#222"}),this.addInputListener({focus:()=>{this.voicingSpeakFullResponse({objectResponse:null,contextResponse:null})}}),n.link(e=>{this.accessibleName=e,this.voicingNameResponse=e})}};Xl.A.register("HomeButton",YC);const GC=e=>e.width+8;let UC=class extends(cA(Cr)){constructor(e,i,n,s,r,o){const a=(0,t.Ay)()({cursor:"pointer",phetioDocumentation:`Button in the navigation bar that selects the '${n.tandem.name}' screen`,maxButtonWidth:null,tagName:"button",containerTagName:"li",accessibleHelpText:n.screenButtonsHelpText,appendDescription:!0,voicingHintResponse:n.screenButtonsHelpText},o);super(),this.screen=n,n.pdomDisplayNameProperty.link(e=>{this.accessibleName=e,this.voicingNameResponse=e});const l=new Cr({children:[n.navigationBarIcon],maxHeight:.625*r,pdomVisible:!1}),h=new fa(0,0,l.width,l.height),c=new Cr({children:[l,h]}),d=new Bc(n.nameProperty,{font:new Gc(10)}),u=new Rf({children:[c,d],pickable:!1,usesOpacity:!0,maxHeight:r}),p=new fa({rectBounds:u.bounds}),m=GC(p),g=new cw(m,p.height,{center:u.center,fill:"white"}),y=new cw(m,p.height,{center:u.center,fill:"black"}),f=new oe([i],e=>e===n);this.buttonModel=new Ib({listener:()=>{i.value!==n&&this.voicingSpeakFullResponse({objectResponse:null,hintResponse:null}),i.value=n},tandem:a.tandem,phetioEnabledPropertyInstrumented:!1});const b=this.buttonModel.createPressListener({tandem:A.A.OPT_OUT});this.addInputListener(b),this.addInputListener({focus:()=>{this.voicingSpeakFullResponse({objectResponse:null,contextResponse:null})}}),ye.multilink([f,this.buttonModel.looksPressedProperty,this.buttonModel.looksOverProperty,e,this.buttonModel.enabledProperty],(e,t,i,s,r)=>{const o=!s.equals(Wr.BLACK),a=o?"black":WP.BUTTON_YELLOW,l=o?"gray":"white";d.fill=e?a:l,u.opacity=e?1:t?.65:.5,g.visible=!o&&r&&(i||t),y.visible=o&&r&&(i||t),"black"===n.showScreenIconFrameForNavigationBarFill&&s.equals(Wr.BLACK)?h.stroke=WP.SCREEN_ICON_FRAME:"white"===n.showScreenIconFrameForNavigationBarFill&&s.equals(Wr.WHITE)?h.stroke="black":h.stroke="transparent"}),this.buttonModel.enabledProperty.link(e=>{this.cursor=e?a.cursor:null});const P=()=>{u.spacing=(0,Ze.q)(12-d.height,0,3),p.setRectBounds(u.bounds),g.spacing=y.spacing=GC(p),g.center=y.center=u.center};u.boundsProperty.lazyLink(P),d.boundsProperty.link(P),this.children=[u,p,g,y];const V=a.maxButtonWidth&&this.width>a.maxButtonWidth;d.maxWidth=V?l.maxWidth=a.maxButtonWidth-(this.width-u.width):this.width,this.localBoundsProperty.link(e=>{this.focusHighlight=Hi.bounds(e)}),this.mutate(a)}};Xl.A.register("NavigationBarScreenButton",UC);const zC=UC;let WC=class extends ua{constructor(e){const t=new Hi;for(let i=0;i<3;i++)t.circle(0,3.543*i*2.5,2.5);super(t,e)}};Xl.A.register("KebabMenuIcon",WC);const QC=WC,KC=new Hi("M9.65,20.8L.33,11.48c-.44-.44-.44-1.16,0-1.6l1.93-1.93c.44-.44,1.16-.44,1.6,0l6.59,6.59L24.65.33c.44-.44,1.16-.44,1.6,0l1.93,1.93c.44.44.44,1.16,0,1.6L11.26,20.8c-.44.44-1.16.44-1.6,0Z"),jC=new ua(KC,{fill:"rgba(0,0,0,0.7)",maxWidth:15.5}),_C=jC.width+2;let ZC=class extends(Wo(cA(Cr))){dispose(){this.disposeMenuItem(),super.dispose()}constructor(e,i,n,s,r,o){const a=(0,t.Ay)()({separatorBefore:!1,checkedProperty:null,textFill:"black",cursor:"pointer",phetioDocumentation:"Item buttons shown in a popup menu",phetioEventType:ze.A.USER,tagName:"button",containerTagName:"li",containerAriaRole:"none",ariaRole:"menuitem",positionInPDOM:!0},o);super(),r&&this.setVisibleProperty(Ny);const l=e=>{this.innerContent=e,this.voicingNameResponse=e};i.link(l),this.present=s;const h=new Bc(i,{font:new Gc(18),fill:a.textFill,maxWidth:400}),c=new fa({cornerRadius:5});h.boundsProperty.link(e=>{this.localMinimumWidth=e.width+2+5+_C,c.rectHeight=e.height+3+3}),this.localPreferredWidthProperty.link(e=>{(e=null===e?this.localMinimumWidth:Math.max(this.localMinimumWidth||0,e))&&(c.rectWidth=e)}),this.addChild(c),this.addChild(h),nP.create(this,[c,h],(e,t)=>{t.left=e.left+2+_C,t.centerY=e.centerY}),this.addInputListener({enter:()=>{c.fill="#a6d2f4"},exit:()=>{c.fill=null}}),this.addInputListener(new Mr({tandem:a.tandem,fire:t=>{e(t),n(t)}})),this.separatorBefore=a.separatorBefore;let d=null;if(a.checkedProperty){const e=new Cr({children:[jC],right:h.left-2,centerY:h.centerY});d=t=>{e.visible=t},a.checkedProperty.link(d),this.addChild(e)}this.mutate(a),this.disposeMenuItem=()=>{a.checkedProperty&&d&&a.checkedProperty.hasListener(d)&&a.checkedProperty.unlink(d),i.hasListener(l)&&i.unlink(l),h.dispose()}}};fb.register("MenuItem",ZC);let XC=class extends Hf{constructor(e,t){super(0,e,t)}};it.A.register("VStrut",XC);let JC=class extends Rf{dispose(){this.disposeCreditsNode(),super.dispose()}constructor(e,i){const n={font:(i=(0,t.Ay)()({titleFont:new Gc({size:18,weight:"bold"}),textFont:new Gc(16),align:"left",spacing:1,maxWidth:550},i)).textFont,align:"left",lineWrap:i.maxWidth,tagName:"p"},s=[];s.push(new pw(EV.A.credits.titleStringProperty,{font:i.titleFont,readingBlockDisabledTagName:"h2"}));const r=(e,t)=>new oe([e],e=>Ge.A.format(e,`‪${t}‬`));if(e.leadDesign){const t=r(EV.A.credits.leadDesignStringProperty,e.leadDesign);s.push(new Zw(t,n))}if(e.softwareDevelopment){const t=r(EV.A.credits.softwareDevelopmentStringProperty,e.softwareDevelopment);s.push(new Zw(t,n))}if(e.team){const t=r(EV.A.credits.teamStringProperty,e.team);s.push(new Zw(t,n))}if(e.contributors){const t=r(EV.A.credits.contributorsStringProperty,e.contributors);s.push(new Zw(t,n))}if(e.qualityAssurance){const t=r(EV.A.credits.qualityAssuranceStringProperty,e.qualityAssurance);s.push(new Zw(t,n))}if(e.graphicArts){const t=r(EV.A.credits.graphicArtsStringProperty,e.graphicArts);s.push(new Zw(t,n))}if(e.soundDesign){const t=r(EV.A.credits.soundDesignStringProperty,e.soundDesign);s.push(new Zw(t,n))}if(e.thanks){s.length>0&&s.push(new XC(13)),s.push(new pw(EV.A.credits.thanksStringProperty,{font:i.titleFont,readingBlockDisabledTagName:"h2"}));const t=new Zw(e.thanks,n);s.push(t)}i.children=s,super(i),this.disposeCreditsNode=()=>{s.forEach(e=>{e.dispose&&e.dispose()})}}};Xl.A.register("CreditsNode",JC);let $C=class e{serialize(){return{major:this.major,minor:this.minor,maintenance:this.maintenance,testType:this.testType,testNumber:this.testNumber,buildTimestamp:this.buildTimestamp}}get isSimNotPublished(){return!!(this.major<1||1===this.major&&0===this.minor&&0===this.maintenance&&this.testType)}get isSimPublished(){return!this.isSimNotPublished}get majorMinor(){return`${this.major}.${this.minor}`}static deserialize(t){let{major:i,minor:n,maintenance:s,testType:r,testNumber:o,buildTimestamp:a}=t;return new e(i,n,s,{testType:r,testNumber:o,buildTimestamp:a})}compareNumber(t){return e.comparator(this,t)}static comparator(e,t){return e.majort.major?1:e.minort.minor?1:e.maintenancet.maintenance?1:0}isAfter(e){return 1===this.compareNumber(e)}isBeforeOrEqualTo(e){return this.compareNumber(e)<=0}toString(){let e=`${this.major}.${this.minor}.${this.maintenance}`;return"string"==typeof this.testType&&(e+=`-${this.testType}.${this.testNumber}`),e}static parse(t,i){const n=t.match(/^(\d+)\.(\d+)\.(\d+)(-(([^.-]+)\.(\d+)))?(-([^.-]+))?$/);if(!n)throw new Error("could not parse version: "+t);const s=Number(n[1]),r=Number(n[2]),o=Number(n[3]),a=n[6],l=void 0===n[7]?n[7]:Number(n[7]);return new e(s,r,o,{testType:a,testNumber:l,buildTimestamp:i})}static fromBranch(t){const i=t.split(".");(0,He.Ay)(2===i.length,"Bad branch, should be {{MAJOR}}.{{MINOR}}, had: "+t);const n=Number(t.split(".")[0]),s=Number(t.split(".")[1]);return new e(n,s,0)}static ensureReleaseBranch(t){const i=e.fromBranch(t.split("-")[0]);(0,He.Ay)(i.major>0,"Major version for a branch should be greater than zero"),(0,He.Ay)(i.minor>=0,"Minor version for a branch should be greater than (or equal) to zero")}constructor(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};"string"==typeof e&&(e=Number(e)),"string"==typeof t&&(t=Number(t)),"string"==typeof i&&(i=Number(i)),"string"==typeof n.testNumber&&(n.testNumber=Number(n.testNumber));const{buildTimestamp:s=null,testType:r=null,testNumber:o=null}=n;(0,He.Ay)("number"==typeof e&&e>=0&&e%1==0,"major version should be a non-negative integer: "+e),(0,He.Ay)("number"==typeof t&&t>=0&&t%1==0,"minor version should be a non-negative integer: "+t),(0,He.Ay)("number"==typeof i&&i>=0&&i%1==0,"maintenance version should be a non-negative integer: "+i),(0,He.Ay)("string"!=typeof r||"number"==typeof o,"if testType is provided, testNumber should be a number"),this.major=e,this.minor=t,this.maintenance=i,this.testType=r,this.testNumber=o,this.buildTimestamp=s}},eI=class extends Ve.A{};eI.UP_TO_DATE=new eI,eI.OUT_OF_DATE=new eI,eI.CHECKING=new eI,eI.OFFLINE=new eI,eI.UNCHECKED=new eI,eI.enumeration=new Pe.A(eI,{phetioDocumentation:"Describes the states that can occur during an Update check"}),Xl.A.register("UpdateState",eI);const tI=kT.name,iI=$C.parse(kT.version,phet.chipper.buildTimestamp),nI="https:"===document.location.protocol?"https:":"http:";const sI=new class{clearTimeout(){window.clearTimeout(this.timeoutId)}setTimeout(){this.timeoutId=window.setTimeout(this.timeoutCallback,15e3)}resetTimeout(){this.stateProperty.value===eI.CHECKING&&(this.clearTimeout(),this.setTimeout())}timeout(){this.stateProperty.value=eI.OFFLINE}check(){if(!this.areUpdatesChecked||this.stateProperty.value!==eI.UNCHECKED&&this.stateProperty.value!==eI.OFFLINE)return;if(this.ourVersion.isSimNotPublished)return void(this.stateProperty.value=eI.UP_TO_DATE);const e=new XMLHttpRequest;"withCredentials"in e&&(this.stateProperty.value=eI.CHECKING,this.setTimeout(),e.onload=()=>{this.clearTimeout();try{const t=JSON.parse(e.responseText);t.error?(console.log("Update check failure: "+t.error),this.stateProperty.value=eI.OFFLINE):(this.updateURL&&(this.updateURL=t.updateURL),this.latestVersion=$C.parse(t.latestVersion,t.buildTimestamp),"out-of-date"===t.state?this.stateProperty.value=eI.OUT_OF_DATE:"up-to-date"===t.state?this.stateProperty.value=eI.UP_TO_DATE:(console.log("Failed to get proper state: "+t.state),this.stateProperty.value=eI.OFFLINE))}catch(t){this.stateProperty.value=eI.OFFLINE}},e.onerror=()=>{this.clearTimeout(),this.stateProperty.value=eI.OFFLINE},e.open("post",nI+"//phet.colorado.edu/services/check-html-updates",!0),e.send(JSON.stringify({api:"1.0",simulation:tI,locale:phet.joist.sim.locale,currentVersion:this.ourVersion.toString(),buildTimestamp:phet.chipper.buildTimestamp})))}constructor(){this.stateProperty=new rh(eI.UNCHECKED),this.latestVersion=null,this.ourVersion=iI,this.timeoutCallback=this.timeout.bind(this),this.areUpdatesChecked="phet"===phet.chipper.brand&&!phet.chipper.isApp&&phet.chipper.queryParameters.yotta,this.updateURL=`https://phet.colorado.edu/html-sim-update?simulation=${encodeURIComponent(tI)}&version=${encodeURIComponent(iI.toString())}&buildTimestamp=${encodeURIComponent(""+phet.chipper.buildTimestamp)}`,this.timeoutId=-1}};Xl.A.register("updateCheck",sI);const rI=sI;let oI=class e extends Cr{step(e){this.indicatorRotation+=10*e*this.speed;let t=this.indicatorRotation;for(let i=0;i{s.dispose()}}};fb.register("TextPushButton",aI);const lI=new Hi("M44.96,35.84L25.07,1.39c-1.07-1.85-3.73-1.85-4.8,0L.38,35.84c-1.07,1.85.27,4.16,2.4,4.16h39.79c2.13,0,3.47-2.31,2.4-4.16ZM25.22,34.07c0,.9-.73,1.62-1.62,1.62h-1.85c-.9,0-1.62-.73-1.62-1.62v-1.85c0-.9.73-1.62,1.62-1.62h1.85c.9,0,1.62.73,1.62,1.62v1.85ZM25.22,15.52l-.55,11.16c-.04.87-.76,1.55-1.62,1.55h-.74c-.86,0-1.58-.68-1.62-1.54l-.57-11.16v-3.14c0-.9.73-1.62,1.62-1.62h1.85c.9,0,1.62.73,1.62,1.62v3.14Z"),hI=new Gc(14),cI={createCheckingNode:function(e){const t=new oI({diameter:e.big?24:18}),i=new Of((0,h.A)({spacing:e.big?10:8,maxWidth:550,children:[t,new pw(EV.A.updates.checkingStringProperty,{font:new Gc(e.big?16:14),fontWeight:e.big?"bold":"normal"})]},e));return i.step=function(e){rI.stateProperty.value===eI.CHECKING&&t.step(e)},i.stepListener=i.step.bind(i),i},createUpToDateNode:function(e){return new Of((0,h.A)({spacing:8,maxWidth:550,children:[new fa(0,0,20,20,5,5,{fill:"#5c3",scale:e.big?1.2:1,children:[new ua(KC,{fill:"#fff",scale:.48,centerX:10,centerY:10})]}),new pw(EV.A.updates.upToDateStringProperty,{font:new Gc(e.big?16:14),fontWeight:e.big?"bold":"normal"})]},e))},createOutOfDateAboutNode:function(e){const t=new oe([EV.A.updates.outOfDateStringProperty,Ny],(e,t)=>t?`${e}`:e),i={url:rI.updateURL},n=new df(t,{links:i,font:hI});return new Of((0,h.A)({spacing:8,maxWidth:550,children:[new ua(lI,{fill:"#E87600",scale:.381}),n],tagName:"div"},e))},createOutOfDateDialogNode:function(e,t,i,n){const s=new oe([EV.A.updates.newVersionAvailableStringProperty],e=>Ge.A.format(e,i)),r=new oe([EV.A.updates.yourCurrentVersionStringProperty],e=>Ge.A.format(e,t));return new Rf((0,h.A)({spacing:15,maxWidth:550,children:[new Rf({spacing:5,align:"left",children:[new pw(s,{font:new Gc(16),fontWeight:"bold"}),new pw(r,{font:hI})]}),new Of({spacing:25,children:[new aI(EV.A.updates.getUpdateStringProperty,{visibleProperty:Ny,baseColor:"#6f6",font:hI,listener:function(){Zy(rI.updateURL)}}),new aI(EV.A.updates.noThanksStringProperty,{baseColor:"#ddd",font:hI,listener:function(){e.hide()}})]})]},n))},createOfflineNode:function(e){return new Of((0,h.A)({spacing:0,maxWidth:550,children:[new XC(20),new pw(EV.A.updates.offlineStringProperty,{font:new Gc(e.big?16:14),fontWeight:e.big?"bold":"normal"})]},e))}};Xl.A.register("UpdateNodes",cI);const dI=cI;let uI=class extends Wv{show(){this.shouldShowPopup()&&(rI.areUpdatesChecked&&!this.isShowingProperty.value&&(rI.resetTimeout(),rI.stateProperty.value!==eI.OFFLINE&&rI.stateProperty.value!==eI.UNCHECKED||rI.check(),this.updateStepListener&&fe.A.addListener(this.updateStepListener),this.updateVisibilityListener&&rI.stateProperty.link(this.updateVisibilityListener)),super.show())}hide(){this.isShowingProperty.value&&(super.hide(),rI.areUpdatesChecked&&(this.updateVisibilityListener&&rI.stateProperty.unlink(this.updateVisibilityListener),this.updateStepListener&&fe.A.removeListener(this.updateStepListener)))}constructor(e,i,n,s){const r=(0,t.Ay)()({xSpacing:26,topMargin:26,bottomMargin:26,leftMargin:26,phetioReadOnly:!0,phetioDynamicElement:!0,isDisposable:!1,accessibleName:e,tandem:A.A.REQUIRED},s),o=phet.brand.Brand;let a=[];const l=new pw(e,{font:new Gc(32),maxWidth:550,accessibleParagraph:null});a.push(l);const h=new oe([EV.A.versionPatternStringProperty],e=>Ge.A.format(e,i));a.push(new pw(h,{font:new Gc(16),maxWidth:550})),phet.chipper.buildTimestamp&&a.push(new pw(phet.chipper.buildTimestamp,{font:new Gc(10.4),maxWidth:550}));let c=null,d=null,u=null;if(rI.areUpdatesChecked){const e={left:0,top:0},t=dI.createCheckingNode(e),i=dI.createUpToDateNode(e),n=dI.createOutOfDateAboutNode(e),s=dI.createOfflineNode(e);c=t.stepListener,d=e=>{t.visible=e===eI.CHECKING,i.visible=e===eI.UP_TO_DATE,n.visible=e===eI.OUT_OF_DATE,s.visible=e===eI.OFFLINE,t.pdomVisible=t.visible,i.pdomVisible=i.visible,n.pdomVisible=n.visible,s.pdomVisible=s.visible},u=new Cr({children:[t,i,n,s],maxWidth:550,visibleProperty:Ny}),a.push(u)}const p=[];if(o.name&&p.push(new Zw(o.name,{font:new Gc(16),supScale:.5,supYOffset:3,maxWidth:550,readingBlockDisabledTagName:"h2"})),o.copyright){const e=phet.chipper.buildTimestamp?phet.chipper.buildTimestamp.split("-")[0]:(new Date).getFullYear(),t=Ge.A.fillIn(o.copyright,{year:e});p.push(new pw(t,{font:new Gc(12),maxWidth:550}))}let m=null;o.additionalLicenseStatement&&(m=new Zw(o.additionalLicenseStatement,{font:new Gc(10.4),fill:"gray",align:"left",maxWidth:550}),p.push(m)),p.length>0&&(a.push(new XC(15)),a=a.concat(p));let g=null;"phet"!==o.id&&"phet-io"!==o.id||(a.push(new XC(15)),g=new JC(n,{titleFont:new Gc({size:16,weight:"bold"}),textFont:new Gc(12),maxWidth:550}),a.push(g));const y=o.getLinks(kT.name,DS.A.value);if(y&&y.length>0){const e=new Rf({spacing:6,align:"left",maxWidth:550});a.push(e),DS.A.link(t=>{e.children.forEach(e=>e.dispose());const i=o.getLinks(kT.name,t),n=[];n.push(new XC(15));for(let e=0;ee?`${i}`:`${i}: ${t.url}`),r=new df(s,{links:{url:t.url},font:new Gc(16)});r.disposeEmitter.addListener(()=>{s.dispose()}),n.push(r)}e.children=n})}super(new Rf({align:"left",spacing:6,children:a,tagName:"div"}),r),this.updateStepListener=c,this.updateVisibilityListener=d,this.addAriaLabelledbyAssociation({thisElementName:Ls.PRIMARY_SIBLING,otherElementName:Ls.PRIMARY_SIBLING,otherNode:l})}};Xl.A.register("AboutDialog",uI);let pI=class e{static generateScreenshotAtIncreasedResolution(e,t){const i=document.createElement("canvas"),n=i.getContext("2d"),s=Ao.backingScale(n)*t;i.width=e.display.width*s,i.height=e.display.height*s,n.scale(s,s),n.fillStyle=e.display.domElement.style.backgroundColor,n.fillRect(0,0,i.width,i.height);const r=new hr(i,n);return e.rootNode.renderToCanvasSubtree(r,Pt.scaling(s)),i}static renderAtScale(e,t){const i=document.createElement("canvas"),n=i.getContext("2d");return i.width=e.width*t,i.height=e.height*t,n.scale(t,t),n.drawImage(e,0,0),i}static generateScreenshot(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"image/png";const n=e.generateScreenshotAtIncreasedResolution(t,2);return e.renderAtScale(n,.5).toDataURL(i)}};Xl.A.register("ScreenshotGenerator",pI);const mI=pI;let gI=class extends Wv{show(){this.shouldShowPopup()&&(rI.areUpdatesChecked&&!this.isShowingProperty.value&&(rI.resetTimeout(),rI.stateProperty.value!==eI.OFFLINE&&rI.stateProperty.value!==eI.UNCHECKED||rI.check(),fe.A.addListener(this.updateStepListener),rI.stateProperty.link(this.updateVisibilityListener)),super.show())}hide(){this.isShowingProperty.value&&(super.hide(),rI.areUpdatesChecked&&(rI.stateProperty.unlink(this.updateVisibilityListener),fe.A.removeListener(this.updateStepListener)))}constructor(e){const t={centerX:0,centerY:0,big:!0},i=dI.createCheckingNode(t),n=dI.createUpToDateNode(t),s=new Cr({tagName:"div"}),r=dI.createOfflineNode(t);super(new Cr({children:[i,n,s,r],tagName:"div"}),e);const o=()=>{const e=rI.latestVersion?rI.latestVersion.toString():"x.x.xx",i=rI.ourVersion.toString();s.children=[dI.createOutOfDateDialogNode(this,i,e,t)]};o(),this.updateStepListener=i.stepListener,this.updateVisibilityListener=e=>{e===eI.OUT_OF_DATE&&o(),i.visible=e===eI.CHECKING,n.visible=e===eI.UP_TO_DATE,s.visible=e===eI.OUT_OF_DATE,r.visible=e===eI.OFFLINE,i.pdomVisible=i.visible,n.pdomVisible=n.visible,s.pdomVisible=s.visible,r.pdomVisible=r.visible}}};Xl.A.register("UpdateDialog",gI);let AI=class e extends(Gv(Cr,0)){dispose(){this.disposePhetMenu(),_.each(this.items,e=>e.dispose()),super.dispose()}constructor(i,n){const s="phet"===phet.chipper.brand,r=phet.chipper.isApp,o=(0,t.Ay)()({phetioType:e.PhetMenuIO,phetioState:!1,phetioDocumentation:"This menu is displayed when the PhET button is pressed.",phetioVisiblePropertyInstrumented:!1,tagName:"ul",ariaRole:"menu"},n);super(o);const a=new iw(e=>new uI(i.simNameProperty,i.version,i.credits,{tandem:e,focusOnHideNode:this.focusOnHideNode}),[],{tandem:o.tandem.createTandem("aboutDialogCapsule"),phetioType:iw.PhetioCapsuleIO(Wv.DialogIO),disposeOnClear:!1});let l=null;const h=[{textStringProperty:EV.A.menuItem.phetWebsiteStringProperty,present:s,shouldBeHiddenWhenLinksAreNotAllowed:!0,callback:()=>{Zy("https://phet.colorado.edu/"+i.locale)}},{textStringProperty:EV.A.menuItem.reportAProblemStringProperty,present:s&&!r,shouldBeHiddenWhenLinksAreNotAllowed:!0,callback:()=>{const e=`https://phet.colorado.edu/files/troubleshooting/?sim=${encodeURIComponent(i.simNameProperty.value)}&version=${encodeURIComponent(`${i.version} ${phet.chipper.buildTimestamp?phet.chipper.buildTimestamp:"(unbuilt)"}`)}&url=${encodeURIComponent(window.location.href)}&dependencies=${encodeURIComponent(JSON.stringify({}))}`;Zy(e)}},{textStringProperty:new d.A("QR code"),present:phet.chipper.queryParameters.qrCode,shouldBeHiddenWhenLinksAreNotAllowed:!0,callback:()=>{Zy(`http://api.qrserver.com/v1/create-qr-code/?data=${encodeURIComponent(window.location.href)}&size=220x220&margin=0`)}},{textStringProperty:EV.A.menuItem.getUpdateStringProperty,present:rI.areUpdatesChecked,shouldBeHiddenWhenLinksAreNotAllowed:!0,callback:()=>{l||(l=new gI({focusOnHideNode:this.focusOnHideNode})),l.show()},options:{textFill:new oe([rI.stateProperty],e=>e===eI.OUT_OF_DATE?"#0a0":"#000")}},{textStringProperty:EV.A.menuItem.screenshotStringProperty,present:!r&&!phet.chipper.isFuzzEnabled(),shouldBeHiddenWhenLinksAreNotAllowed:!1,callback:()=>{const e=mI.generateScreenshot(i);if(window.Blob&&new window.Blob){const t="data:image/png;base64,",n=e.slice(t.length),s=window.atob(n),r=new window.Uint8Array(s.length);for(let e=0;e{phet.chipper.isFuzzEnabled()||eA.toggleFullScreen(i.display)},options:{checkedProperty:eA.isFullScreenProperty,tandem:o.tandem.createTandem("fullScreenMenuItem"),phetioDocumentation:"This menu item requests full-screen access for the simulation display.",visiblePropertyOptions:{phetioFeatured:!0}}},{textStringProperty:EV.A.menuItem.aboutStringProperty,present:!0,shouldBeHiddenWhenLinksAreNotAllowed:!1,callback:()=>a.getElement().show(),options:{separatorBefore:s,tandem:o.tandem.createTandem("aboutMenuItem"),phetioDocumentation:"This menu item shows a dialog with information about the simulation.",phetioVisiblePropertyInstrumented:!1}}].filter(e=>e.present||e.options&&e.options.tandem).map(e=>new ZC(()=>this.hide(),e.textStringProperty,e.callback,e.present,e.shouldBeHiddenWhenLinksAreNotAllowed,e.options)).filter(e=>e.present);this.items=h;const c=new Rf({stretch:!0,spacing:2,children:_.flatten(h.map(e=>e.separatorBefore?[new Bf({stroke:"gray"}),e]:[e]))}),u=new ua(null,{fill:"white",stroke:"black"});c.localBoundsProperty.link(()=>{c.left=5,c.top=5}),c.boundsProperty.link(e=>{u.shape=yI(e.width+10,e.height+10)}),this.addChild(u),this.addChild(c);const p=new Jc({keys:["escape","arrowDown","arrowUp","tab","shift+tab"],fire:(e,t)=>{const i=this.items[0],n=this.items[this.items.length-1];if(e&&e.preventDefault(),"arrowDown"===t){(n.focused?i:on.A.getNextFocusable()).focus()}else if("arrowUp"===t){(i.focused?n:on.A.getPreviousFocusable()).focus()}else"escape"!==t&&"tab"!==t&&"shift+tab"!==t||this.hide()}});this.addInputListener(p),this.disposePhetMenu=()=>{this.removeInputListener(p),p.dispose()}}};AI.PhetMenuIO=new f.A("PhetMenuIO",{valueType:AI,documentation:"The PhET Menu in the bottom right of the screen"});const yI=(e,t)=>{const i=(new Hi).moveTo(e-20,t).lineToRelative(0,20).lineToRelative(-20,-20).close();return Hi.roundRect(0,0,e,t,8,8).shapeUnion(i)};Xl.A.register("PhetMenu",AI);const fI=AI;let bI=class e extends dw{constructor(t,i,n){const s=phet.brand.Brand,r=s.logoOnBlackBackground,o=s.logoOnWhiteBackground,a=new _h(r,{scale:.28/r.height*108*.85,pickable:!1}),l=new QC({scale:.83,left:a.width+8,bottom:a.bottom-.5,pickable:!1}),h=new Cr({children:[a,l]}),c=Gm.get("pushButton");super(h,i,{highlightExtensionWidth:6,highlightExtensionHeight:5,highlightCenterOffsetY:4,listener:()=>{d.show(),d.items[0].focus(),c.play()},tandem:n,phetioType:e.PhetButtonIO,phetioDocumentation:"The button that appears at the right side of the navigation bar, which shows a menu when pressed",enabledPropertyOptions:{phetioFeatured:!0,phetioDocumentation:"When disabled, the (three dots) are hidden and the button cannot be pressed, hiding the PhET menu."},phetioVisiblePropertyInstrumented:!1,accessibleName:EV.A.a11y.phetMenuStringProperty,voicingNameResponse:EV.A.a11y.phetMenuStringProperty});const d=new fI(t,{tandem:n.createTandem("phetMenu"),focusOnHideNode:this});ye.multilink([t.boundsProperty,t.screenBoundsProperty,t.scaleProperty,d.localBoundsProperty],(e,t,i)=>{if(e&&t&&i){d.setScaleMagnitude(i),d.right=e.right-2;const n=e.height-t.height;d.bottom=t.bottom+n/2}}),ye.multilink([i,t.selectedScreenProperty,rI.stateProperty],(e,i,n)=>{const s=i===t.homeScreen,h=!e.equals(Wr.BLACK)&&!s,c=n===eI.OUT_OF_DATE;l.fill=h?c?"#0a0":"#222":c?"#3F3":"white",a.image=h?o:r}),this.buttonModel.enabledProperty.link(e=>{l.visible=e}),mS.mutateNode(this,!0)}};bI.PhetButtonIO=new f.A("PhetButtonIO",{valueType:bI,documentation:"The PhET Button in the bottom right of the screen"}),Xl.A.register("PhetButton",bI);const PI=bI,VI=new Be(fv.LAYOUT_BOUNDS.width,40);let vI=class extends Cr{layout(e,t,i){this.background.rectWidth=t,this.background.rectHeight=i,this.barContents.setScaleMagnitude(e)}constructor(e,t){super(),this.homeButton=null,this.navigationBarFillProperty=new oe([e.selectedScreenProperty,e.lookAndFeel.navigationBarFillProperty],(t,i)=>t===e.homeScreen?vv.BACKGROUND_COLOR:i),this.background=new fa(0,0,VI.width,VI.height,{pickable:!0,fill:this.navigationBarFillProperty}),this.addChild(this.background),this.barContents=new Cr,this.addChild(this.barContents);const i=new Bc(e.displayedSimNameProperty,{font:new Gc(16),fill:e.lookAndFeel.navigationBarTextFillProperty,tandem:t.createTandem("titleText"),phetioFeatured:!0,phetioDocumentation:"Displays the title of the simulation in the navigation bar (bottom left)",visiblePropertyOptions:{phetioFeatured:!0},stringPropertyOptions:{phetioReadOnly:!0},phetioVisiblePropertyInstrumented:!0}),n=new Cr({children:[i],visibleProperty:new oe([e.selectedScreenProperty],t=>t!==e.homeScreen)});this.barContents.addChild(n);const s=new PI(e,this.navigationBarFillProperty,t.createTandem("phetButton"));let r;this.barContents.addChild(s),this.a11yButtonsHBox=new NC(e,this.navigationBarFillProperty,{tandem:t}),this.barContents.addChild(this.a11yButtonsHBox),this.localeNode&&this.barContents.addChild(this.localeNode),this.addAriaLabelledbyAssociation({thisElementName:Ls.PRIMARY_SIBLING,otherNode:this,otherElementName:Ls.LABEL_SIBLING});const a=this.a11yButtonsHBox.bounds.isValid()?this.a11yButtonsHBox.width:0;if(1===e.simScreens.length)i.maxWidth=fv.LAYOUT_BOUNDS.width-10-25-6-a-(this.localeNode?this.localeNode.width:0)-6-s.width-10;else{const n=Math.min(i.width,.2*fv.LAYOUT_BOUNDS.width),l=new o(!0,{tandem:A.A.GENERAL_MODEL.createTandem("screens").createTandem("isUserNavigableProperty"),phetioFeatured:!0,phetioDocumentation:"If the screens are user navigable, icons are displayed in the navigation bar and the user can switch between screens."});r=new Cr({tagName:"ol",containerTagName:"nav",labelTagName:"h2",labelContent:EV.A.a11y.simScreensStringProperty,visibleProperty:new oe([e.activeSimScreensProperty,e.selectedScreenProperty,l],(t,i,n)=>i!==e.homeScreen&&t.length>1&&n)}),r.ariaLabelledbyAssociations=[{thisElementName:Ls.CONTAINER_PARENT,otherElementName:Ls.LABEL_SIBLING,otherNode:r}],this.barContents.addChild(r),this.homeButton=new YC(VI.height,e.lookAndFeel.navigationBarFillProperty,e.homeScreen?e.homeScreen.pdomDisplayNameProperty:new rc("NO HOME SCREEN"),{listener:()=>{e.selectedScreenProperty.value=e.homeScreen},tandem:t.createTandem("homeButton"),centerY:VI.height/2}),e.homeScreen&&r.addChild(this.homeButton);const h=fv.LAYOUT_BOUNDS.width/2-10-n-25-5-this.homeButton.width-5,c=fv.LAYOUT_BOUNDS.width/2-6-a-(this.localeNode?this.localeNode.width:0)-6-s.width-10,d=2*Math.min(h,c),u=(d-0*(e.simScreens.length-1))/e.simScreens.length,p=e.simScreens.map(i=>new zC(e.lookAndFeel.navigationBarFillProperty,e.selectedScreenProperty,i,e.simScreens.indexOf(i),VI.height,{maxButtonWidth:u,tandem:i.tandem.supplied?t.createTandem(i.tandem.name+"Button"):A.A.REQUIRED})),m=[this.homeButton,...p],g=Math.max(60,_.maxBy(p,e=>e.width).width),y=_.maxBy(p,e=>e.height).height,f=new Map;p.forEach(e=>{f.set(e.screen,new qb(e,{excludeInvisibleChildrenFromBounds:!0,alignBounds:new Ie(0,0,g,y),visibleProperty:e.visibleProperty}))});const b=new Of({spacing:0,maxWidth:d});r.addChild(b),e.activeSimScreensProperty.link(e=>{b.children=e.map(e=>f.get(e))}),nP.create(this,[this.background,b],(e,t)=>{t.center=e.center}),Dv.create(this.barContents,[this.homeButton,...p],(function(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),n=1;ne&&e.visible);e&&s.length>0&&(e.right=Math.min(...s.map(e=>e.left))-5)})),nP.create(this.barContents,[this.homeButton,i],(e,t)=>{t.maxWidth=e.left-10-25}),e.simNameProperty.link(e=>{m.forEach(t=>{t.voicingContextResponse=e})})}i.left=10,i.centerY=VI.height/2,s.centerY=VI.height/2,nP.create(this,[this.background,s],(e,t)=>{t.right=e.right-10}),nP.create(this.barContents,[s,this.a11yButtonsHBox],(e,t)=>{t.right=e.left-6,t.centerY=e.centerY}),this.localeNode&&nP.create(this.barContents,[s,this.a11yButtonsHBox,this.localeNode],(e,t,i)=>{t.right=e.left-6,t.centerY=e.centerY,i.centerY=e.centerY,i.right=Math.min(t.left,e.left)-6}),this.layout(1,VI.width,VI.height);const l=new Cr({tagName:"div",containerTagName:"section",labelTagName:"h2",labelContent:EV.A.a11y.simResourcesStringProperty,pdomOrder:[this.a11yButtonsHBox,s].filter(e=>void 0!==e)});l.ariaLabelledbyAssociations=[{thisElementName:Ls.CONTAINER_PARENT,otherElementName:Ls.LABEL_SIBLING,otherNode:l}],this.addChild(l)}};vI.NAVIGATION_BAR_SIZE=VI,Xl.A.register("NavigationBar",vI);const wI=vI,EI=_.hasIn(window,"phet.chipper.queryParameters.colorProfile")?phet.chipper.queryParameters.colorProfile:ff.DEFAULT_COLOR_PROFILE,SI=_.hasIn(window,"phet.chipper.colorProfiles")?phet.chipper.colorProfiles:[ff.DEFAULT_COLOR_PROFILE],TI=new rc(EI,{tandem:A.A.GENERAL_VIEW.createTandem("colorProfileProperty"),phetioFeatured:!0,validValues:SI});it.A.register("colorProfileProperty",TI);const CI=TI;let II=null;let xI=class e{registerToLocalStorage(e,t){const i="PREFERENCES:"+t;window.localStorage.getItem(i)&&(e.value=JSON.parse(window.localStorage.getItem(i))),e.link(e=>{window.localStorage.setItem(i,JSON.stringify(e))}),this.registedProperties.push(e)}static register(t,i){return phet.chipper.queryParameters.preferencesStorage?(II||(II=new e),II.enabled&&II.registerToLocalStorage(t,i),t):t}constructor(){this.enabled=!0,this.registedProperties=[];try{window.localStorage.setItem("test","test")}catch(e){if(this.enabled=!1,e instanceof Error){if(!(window.navigator.userAgent.includes("Safari")&&!window.navigator.userAgent.includes("Chrome"))||!e.message.includes("QuotaExceededError"))throw e;console.log("It looks like you are browsing with private mode in Safari. Please turn that setting off if you want to use PreferencesStorage")}}}};Xl.A.register("PreferencesStorage",xI);const DI=xI;function kI(){return(kI=Object.assign||function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:[];const n=e.createTandem(t.tandemName),s=i;for(let r=0;r0}supportsSimulationPreferences(){return this.preferenceModelHasCustom(this.simulationModel)}supportsVisualPreferences(){return this.visualModel.supportsInteractiveHighlights||this.visualModel.supportsProjectorMode||this.preferenceModelHasCustom(this.visualModel)}supportsAudioPreferences(){return this.audioModel.supportsSound||this.audioModel.supportsExtraSound||this.audioModel.supportsAnyVoicing||this.preferenceModelHasCustom(this.audioModel)}supportsInputPreferences(){return this.inputModel.supportsGestureControl||this.preferenceModelHasCustom(this.inputModel)}supportsLocalizationPreferences(){return this.localizationModel.supportsDynamicLocale||OT.length>1||this.preferenceModelHasCustom(this.localizationModel)}shouldShowDialog(){return this.supportsSimulationPreferences()||this.supportsVisualPreferences()||this.supportsInputPreferences()||this.supportsLocalizationPreferences()||this.supportsAudioPreferences()}constructor(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=phet.chipper.queryParameters,s=kI({},(0,t.Ay)()({tandem:A.A.OPT_OUT,phetioType:e.PreferencesModelIO,phetioFeatured:!0,phetioState:!1,phetioReadOnly:!0},i),{simulationOptions:(0,t.Ay)()({tandemName:"simulationModel",customPreferences:[]},i.simulationOptions),visualOptions:(0,t.Ay)()({tandemName:"visualModel",supportsProjectorMode:!1,supportsInteractiveHighlights:n.supportsInteractiveHighlights,customPreferences:[]},i.visualOptions),audioOptions:(0,t.Ay)()({tandemName:"audioModel",supportsVoicing:n.supportsVoicing,supportsTier1Voicing:n.supportsTier1Voicing,supportsSound:n.supportsSound,supportsExtraSound:n.supportsExtraSound,customPreferences:[]},i.audioOptions),inputOptions:(0,t.Ay)()({tandemName:"inputModel",supportsGestureControl:n.supportsGestureControl,customPreferences:[]},i.inputOptions),localizationOptions:(0,t.Ay)()({tandemName:"localizationModel",supportsDynamicLocale:!!DS.A.availableRuntimeLocales&&DS.A.supportsDynamicLocale&&phet.chipper.queryParameters.supportsDynamicLocale,customPreferences:[],includeLocalePanel:!0},i.localizationOptions)});super(s),this.simulationModel=s.simulationOptions;const r=s.tandem.createTandem("visualModel");this.visualModel=(0,h.A)({interactiveHighlightsEnabledProperty:new o(phet.chipper.queryParameters.interactiveHighlightsInitiallyEnabled,{tandem:r.createTandem("interactiveHighlightsEnabledProperty"),phetioState:!1}),colorProfileProperty:CI},s.visualOptions);const a=Nn.isSpeechSynthesisSupported()&&(phet.chipper.locale.startsWith("en")||phet.chipper.queryParameters.supportsDynamicLocale&&_.some(DS.A.availableRuntimeLocales,e=>e.startsWith("en"))),l="disabled"!==phet.chipper.queryParameters.audio,c=s.audioOptions.supportsVoicing&&a&&l,d=s.audioOptions.supportsTier1Voicing&&a&&l,u=c||d;this.audioModel={supportsVoicing:c,supportsTier1Voicing:d,supportsAnyVoicing:u,supportsSound:s.audioOptions.supportsSound&&l,supportsExtraSound:s.audioOptions.supportsExtraSound&&l,audioEnabledProperty:eh.audioEnabledProperty,soundEnabledProperty:_l.enabledProperty,extraSoundEnabledProperty:_l.extraSoundEnabledProperty,voicingEnabledProperty:Yn.enabledProperty,voicingMainWindowVoicingEnabledProperty:Yn.mainWindowVoicingEnabledProperty,voicingObjectResponsesEnabledProperty:bn.objectResponsesEnabledProperty,voicingContextResponsesEnabledProperty:bn.contextResponsesEnabledProperty,voicingHintResponsesEnabledProperty:bn.hintResponsesEnabledProperty,voicePitchProperty:Yn.voicePitchProperty,voiceRateProperty:Yn.voiceRateProperty,voiceProperty:Yn.voiceProperty,toolbarEnabledProperty:new o(!phet.chipper.queryParameters.voicingRemoveToolbar,{tandem:s.tandem.createTandem("audioModel").createTandem("toolbarEnabledProperty"),phetioState:!1}),customPreferences:s.audioOptions.customPreferences,tandemName:s.audioOptions.tandemName};const p=s.tandem.createTandem("inputModel");if(this.inputModel=(0,h.A)({gestureControlsEnabledProperty:new o(!1,{tandem:p.createTandem("gestureControlsEnabledProperty"),phetioState:!1})},s.inputOptions),this.localizationModel=(0,h.A)({localeProperty:DS.A},s.localizationOptions),this.audioModel.supportsExtraSound,this.addPhetioLinkedElementsForModel(s.tandem,this.simulationModel),this.addPhetioLinkedElementsForModel(s.tandem,this.visualModel,[{property:this.visualModel.colorProfileProperty}]),this.addPhetioLinkedElementsForModel(s.tandem,this.audioModel,[{property:this.audioModel.audioEnabledProperty,tandemName:"audioEnabledProperty"},{property:this.audioModel.soundEnabledProperty,tandemName:"soundEnabledProperty"},{property:this.audioModel.extraSoundEnabledProperty,tandemName:"extraSoundEnabledProperty"},{property:this.audioModel.voicingEnabledProperty,tandemName:"voicingEnabledProperty"},{property:this.audioModel.voicingMainWindowVoicingEnabledProperty,tandemName:"voicingMainWindowVoicingEnabledProperty"},{property:this.audioModel.voicingObjectResponsesEnabledProperty,tandemName:"voicingObjectResponsesEnabledProperty"},{property:this.audioModel.voicingContextResponsesEnabledProperty,tandemName:"voicingContextResponsesEnabledProperty"},{property:this.audioModel.voicingHintResponsesEnabledProperty,tandemName:"voicingHintResponsesEnabledProperty"},{property:this.audioModel.voicePitchProperty,tandemName:"voicePitchProperty"},{property:this.audioModel.voiceRateProperty,tandemName:"voiceRateProperty"}]),this.addPhetioLinkedElementsForModel(s.tandem,this.inputModel),this.addPhetioLinkedElementsForModel(s.tandem,this.localizationModel,[{property:this.localizationModel.localeProperty,tandemName:"localeProperty"}]),u){Yn.enabledProperty.value=phet.chipper.queryParameters.voicingInitiallyEnabled;let e=!1;if(DS.A.link(t=>{const i=Yn.voicingSupportedForLocale(t);Yn.enabledProperty.value?(Yn.enabledProperty.value=i,e=!0):e&&i&&(Yn.enabledProperty.value=!0,e=!1)}),Yn.enabledProperty.link(e=>{wl.enabled=e,!e&&wl.clear()}),phet.chipper.queryParameters.voicingInitiallyEnabled){const e=ye.multilink([Yn.voicesProperty,Yn.isInitializedProperty],(t,i)=>{i&&t.length>0&&(Yn.voiceProperty.value=Yn.getEnglishPrioritizedVoices()[0],ye.unmultilink(e))})}bn.objectResponsesEnabledProperty.value=!!phet.chipper.queryParameters.voicingAddObjectResponses,bn.contextResponsesEnabledProperty.value=!!phet.chipper.queryParameters.voicingAddContextResponses,bn.hintResponsesEnabledProperty.value=!!phet.chipper.queryParameters.voicingAddHintResponses}phet.chipper.queryParameters.printVoicingResponses&&Yn.startSpeakingEmitter.addListener(e=>console.log(e)),this.registerPreferencesStorage()}};MI.PreferencesModelIO=new f.A("PreferencesModelIO",{valueType:MI,toStateObject:e=>({supportsProjectorMode:e.visualModel.supportsProjectorMode,supportsInteractiveHighlights:e.visualModel.supportsInteractiveHighlights,supportsVoicing:e.audioModel.supportsVoicing,supportsTier1Voicing:e.audioModel.supportsTier1Voicing,supportsSound:e.audioModel.supportsSound,supportsExtraSound:e.audioModel.supportsExtraSound,supportsGestureControl:e.inputModel.supportsGestureControl,supportsDynamicLocale:e.localizationModel.supportsDynamicLocale,supportsAudioPreferences:e.supportsAudioPreferences(),supportsInputPreferences:e.supportsInputPreferences(),supportsLocalizationPreferences:e.supportsLocalizationPreferences(),supportsSimulationPreferences:e.supportsSimulationPreferences(),supportsVisualPreferences:e.supportsVisualPreferences()}),stateSchema:{supportsProjectorMode:n.A,supportsInteractiveHighlights:n.A,supportsVoicing:n.A,supportsTier1Voicing:n.A,supportsSound:n.A,supportsExtraSound:n.A,supportsGestureControl:n.A,supportsDynamicLocale:n.A,supportsAudioPreferences:n.A,supportsInputPreferences:n.A,supportsLocalizationPreferences:n.A,supportsSimulationPreferences:n.A,supportsVisualPreferences:n.A}}),Xl.A.register("PreferencesModel",MI);let BI=class e{static start(t){const i=new e;t.frameStartedEmitter.addListener(()=>i.frameStarted()),t.frameEndedEmitter.addListener(()=>i.frameEnded())}frameStarted(){this.frameStartTime=Date.now()}frameEnded(){if(this.allTimes.length>0&&this.allTimes.length%60==0){let e=0;for(let i=0;i0&&(this.longTimes.sort((e,t)=>t-e),t=t+" — "+this.longTimes),$("#phetProfiler").html(t);for(let i=0;i<30;i++)this.histogram[i]=0;this.longTimes.length=0,this.allTimes.length=0}if(this.previousFrameStartTime){const e=this.frameStartTime-this.previousFrameStartTime;this.allTimes.push(e),e<30?this.histogram[e]++:this.longTimes.push(e)}this.previousFrameStartTime=this.frameStartTime}constructor(){this.allTimes=[],this.histogram=[],this.longTimes=[],this.frameStartTime=0,this.previousFrameStartTime=0;for(let e=0;e<30;e++)this.histogram.push(0);$("body").append('
')}};Xl.A.register("Profiler",BI);const OI=BI,LI=new Image,RI=El.A.createLock(LI);LI.onload=RI,LI.src="data:image/png;base64,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";const NI=LI;let qI=class e extends Wv{dispose(){this.disposeOopsDialog(),super.dispose()}constructor(i,n){const s=(0,t.Ay)()({iconPosition:"right",topMargin:20,bottomMargin:20,phetioType:e.OopsDialogIO},n),r=new df(i,(0,t.Ay)()({font:new Gc(20),maxWidth:600,maxHeight:400},s.richTextOptions)),o=s.iconNode||new _h(NI,{maxHeight:132});super(new Of({spacing:20,children:"left"===s.iconPosition?[o,r]:[r,o]}),s),this.disposeOopsDialog=()=>{r.dispose()},"string"!=typeof i&&this.addLinkedElement(i)}};qI.OopsDialogIO=new f.A("OopsDialogIO",{valueType:qI,supertype:Wv.DialogIO}),Pa.register("OopsDialog",qI);let FI=class extends qI{constructor(e,i){const n=(0,t.Ay)()({richTextOptions:{font:new Gc(16)},title:new Bc(EV.A.queryParametersWarningDialog.invalidQueryParametersStringProperty,{font:new Gc(28)}),tandem:A.A.OPT_OUT},i);let s=EV.A.queryParametersWarningDialog.oneOrMoreQueryParametersStringProperty.value+"

";e.forEach(e=>{s+=`${e.key}=${e.value}
`}),s+="
"+EV.A.queryParametersWarningDialog.theSimulationWillStartStringProperty.value,super(s,n)}};Xl.A.register("QueryParametersWarningDialog",FI);const HI=FI,YI="data:audio/mpeg;base64,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",GI=Sl(Dl,YI),UI=El.A.createLock(YI),zI=new Il;let WI=!1;const QI=()=>{WI||(UI(),WI=!0)},KI=Dl.decodeAudioData(GI.buffer,e=>{null===zI.audioBufferProperty.value&&(zI.audioBufferProperty.set(e),QI())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),zI.audioBufferProperty.set(Dl.createBuffer(1,1,Dl.sampleRate)),QI()});KI&&KI.then(e=>{null===zI.audioBufferProperty.value&&(zI.audioBufferProperty.set(e),QI())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),QI()});const jI=zI;let _I=class extends Bm{constructor(e,t,i){super(jI,i),e.lazyLink(e=>{e!==t&&this.play()})}};Xl.A.register("ScreenSelectionSoundGenerator",_I);const ZI=_I;function XI(e,t,i,n,s,r,o,a,l){1===e.length&&i&&t&&JI("homeScreen",t,"cannot specify homeScreen=true for single-screen sims");let h=[];if(!o||r&&0!==r.length||(JI("screens",r,'"?screens" query parameter must have screen values'),h=e),o&&r)for(let p=0;p=0&&i1&&t&&(d=l(h),c.unshift(d));let u=0===n?c[0]:e[n-1];return c.includes(u)||(JI("initialScreen",n,"invalid initial screen: "+n),u=c[0]),{homeScreen:d,initialScreen:u,selectedSimScreens:h,screens:c,allScreensCreated:_.isEqual(new Set(e),new Set(h))&&(!(e.length>1)||!!d)}}function JI(e,t,i){QueryStringMachine.addWarning(e,t,i)}Xl.A.register("selectScreens",XI);const $I={INPUT:[...Fn.A.ARROW_KEYS,Fn.A.KEY_PAGE_UP,Fn.A.KEY_PAGE_DOWN,Fn.A.KEY_HOME,Fn.A.KEY_END,Fn.A.KEY_ENTER,Fn.A.KEY_SPACE],DIV:[...Fn.A.ARROW_KEYS,...Fn.A.WASD_KEYS],P:[Fn.A.KEY_ESCAPE],BUTTON:[Fn.A.KEY_ENTER,Fn.A.KEY_SPACE]},ex=Fn.A.ALL_KEYS;let tx=class{chooseNextElement(){if(null===this.currentElement)this.currentElement=document.activeElement;else if(this.random.nextDouble()<.1){this.clearListeners();const e=on.A.getRandomFocusable(this.random);e&&(e.focus(),this.currentElement=e)}}clearListeners(){this.keyupListeners.forEach(e=>{fe.A.clearTimeout(e.timeout),e()})}triggerClickEvent(){const e=document.activeElement;e instanceof HTMLElement&&e.click()}triggerKeyDownUpEvents(e){this.triggerDOMEvent("keydown",e);const t=this.random.nextInt(100),i=()=>{this.triggerDOMEvent("keyup",e),this.keyupListeners.includes(i)&&this.keyupListeners.splice(this.keyupListeners.indexOf(i),1)};i.timeout=fe.A.setTimeout(i,100===t?2e3:t),this.keyupListeners.push(i)}triggerRandomKeyDownUpEvents(e){const t=ex[Math.floor(this.random.nextDouble()*(ex.length-1))];this.triggerKeyDownUpEvents(t)}fuzzBoardEvents(e){if(this.display&&this.display._input&&this.display._input.pdomPointer){const e=this.display._input.pdomPointer;e&&!e.blockTrustedEvents&&(e.blockTrustedEvents=!0)}for(let t=0;t({identifier:e.id,target:i,clientX:e.position.x,clientY:e.position.y}));if(void 0!==window.Touch&&void 0!==window.TouchEvent&&1===window.Touch.length&&1===window.TouchEvent.length){const t=n.map(e=>new window.Touch(e));return new window.TouchEvent(e,{cancelable:!0,bubbles:!0,touches:t,targetTouches:[],changedTouches:t,shiftKey:!1})}{const t=document.createEvent("CustomEvent");return t.initCustomEvent(e,!0,!0,{touches:n,targetTouches:[],changedTouches:n}),t}}getRandomPosition(){return new Te.A(Math.floor(this.random.nextDouble()*this.display.width),Math.floor(this.random.nextDouble()*this.display.height))}createTouch(e){const t={id:this.nextTouchID++,position:e};return this.touches.push(t),t}removeTouch(e){this.touches.splice(this.touches.indexOf(e),1)}touchStart(e){const t=this.createTouchEvent("touchstart",[e]);this.display._input.validatePointers(),this.display._input.touchStart(e.id,e.position,new es(t))}touchMove(e){e.position=this.getRandomPosition();const t=this.createTouchEvent("touchmove",[e]);this.display._input.validatePointers(),this.display._input.touchMove(e.id,e.position,new es(t))}touchEnd(e){const t=this.createTouchEvent("touchend",[e]);this.display._input.validatePointers(),this.display._input.touchEnd(e.id,e.position,new es(t))}touchCancel(e){const t=this.createTouchEvent("touchcancel",[e]);this.display._input.validatePointers(),this.display._input.touchCancel(e.id,e.position,new es(t))}mouseToggle(){const e=document.createEvent("MouseEvent");e.initMouseEvent(this.isMouseDown?"mouseup":"mousedown",!0,!0,window,1,this.mousePosition.x,this.mousePosition.y,this.mousePosition.x,this.mousePosition.y,!1,!1,!1,!1,0,null),this.display._input.validatePointers(),this.isMouseDown?(this.display._input.mouseUp(this.mousePosition,new es(e)),this.isMouseDown=!1):(this.display._input.mouseDown(null,this.mousePosition,new es(e)),this.isMouseDown=!0)}mouseMove(){this.mousePosition=this.getRandomPosition();const e=document.createEvent("MouseEvent");e.initMouseEvent("mousemove",!0,!0,window,0,this.mousePosition.x,this.mousePosition.y,this.mousePosition.x,this.mousePosition.y,!1,!1,!1,!1,0,null),this.display._input.validatePointers(),this.display._input.mouseMove(this.mousePosition,new es(e))}constructor(e,t){this.display=e,this.touches=[],this.nextTouchID=1,this.isMouseDown=!1,this.mousePosition=new Te.A(0,0),this.random=new qe.A({seed:t}),this.mouseToggleAction=()=>{this.mouseToggle()},this.mouseMoveAction=()=>{this.mouseMove()},this.touchStartAction=()=>{const e=this.createTouch(this.getRandomPosition());this.touchStart(e)},this.touchMoveAction=()=>{const e=this.random.sample(this.touches);this.touchMove(e)},this.touchEndAction=()=>{const e=this.random.sample(this.touches);this.touchEnd(e),this.removeTouch(e)},this.touchCancelAction=()=>{const e=this.random.sample(this.touches);this.touchCancel(e),this.removeTouch(e)}}};it.A.register("InputFuzzer",nx);const sx=nx;var rx=i(2232);let ox=class e{handleEvent(e){"ArrowLeft"===e.code?this.halveStrings():"ArrowRight"===e.code?this.doubleStrings():"ArrowUp"===e.code?this.setStride(this.stride+1):"ArrowDown"===e.code?this.setStride(this.stride-1):"Space"===e.code&&this.reset()}doubleStrings(){this.setStringFactor(Math.min(2*this.stringFactor,8))}halveStrings(){this.setStringFactor(Math.max(.5*this.stringFactor,.01))}setStringFactor(e){this.stringFactor=e,console.log("stringFactor = "+this.stringFactor),function(e){rx.A.forEach(t=>{if(t.restoreInitialValue("en"),1!==e){const i=t.property.value.replace(/[\u202A\u202B\u202C]/g,"");t.property.value=function(e,t){if(e>1)return function(e,t){let i=e;for(;t>1;)i+=e,t-=1;return i}(t,e);{const i=t.match(/{{(.+?)}}/g)||[],n=t.replace(/{{(.+?)}}/g,""),s=lE(n.length*e+1,0);return n.substring(0,s)+i.join("")}}(e,i)}})}(this.stringFactor)}setStride(t){const i=e.WORDS;t>i.length-1?t=0:t<0&&(t=i.length-1),this.stride=t,console.log("stride = "+this.stride),rx.A.forEach((e,t)=>{e.property.value=i[(t+this.stride)%i.length]})}reset(){this.setStride(0),this.setStringFactor(1)}constructor(){this.stringFactor=1,this.stride=0}};ox.WORDS="Sometimes when Hippopotomonstrosesquippedaliophobia want lyrics you turn to Shakespeare like the following text copied from some work To be or not to be that is the question Supercalifragilisticexpeladocious tis nobler in the mind to suffer The slings and arrows of antidisestablishmentarianism fortune Or to take Incomprehensibility against a sea of Floccinaucinihilipilification".split(" "),Xl.A.register("DynamicStringTest",ox);let ax=class e extends jA{fuzzInputEvents(){const e=phet.chipper.queryParameters.fuzzTouch||phet.chipper.queryParameters.fuzz,t=phet.chipper.queryParameters.fuzzMouse||phet.chipper.queryParameters.fuzz;(t||e)&&this.inputFuzzer.fuzzEvents(phet.chipper.queryParameters.fuzzRate,t,e,phet.chipper.queryParameters.fuzzPointers),phet.chipper.queryParameters.fuzzBoard&&document.hasFocus()&&this.keyboardFuzzer.fuzzBoardEvents(phet.chipper.queryParameters.fuzzRate)}step(e){this.supportsPanAndZoomProperty.value&&sl.listener.step(e)}getFocusablePlaceholder(){if(this.focusablePlaceholder)return this.focusablePlaceholder;if(this.isAccessible())return null;{this.focusablePlaceholder=document.createElement("div"),this.focusablePlaceholder.tabIndex=0;const e=document.createElement("span"),t="This is an interactive sim. It changes as you play with it.";return e.innerHTML=t,e.ariaLabel=t,e.setAttribute("style",Ps.R),this.focusablePlaceholder.appendChild(e),document.body.appendChild(this.focusablePlaceholder),this.focusablePlaceholder}}constructor(i){const n=(0,t.Ay)()({rootRenderer:"svg",webgl:e.DEFAULT_WEBGL,allowBackingScaleAntialiasing:!0,allowSceneOverflow:!1,allowWebGL:phet.chipper.queryParameters.webgl,assumeFullWindow:!0,forceSVGRefresh:phet.chipper.queryParameters.forceSVGRefresh,accessibility:phet.chipper.queryParameters.supportsInteractiveDescription,preventMultitouch:phet.chipper.queryParameters.preventMultitouch,interruptMultitouch:phet.chipper.queryParameters.interruptMultitouch,tandem:A.A.REQUIRED},i);n.interactiveHighlightsEnabledProperty=n.preferencesModel.visualModel.interactiveHighlightsEnabledProperty,n.rootRenderer=phet.chipper.queryParameters.rootRenderer||n.rootRenderer,QueryStringMachine.containsKey("webgl")&&(n.webgl=phet.chipper.queryParameters.webgl),Ao.setWebGLEnabled(n.webgl),phet.chipper.isFuzzEnabled()&&(window.open=function(){return{focus:_.noop,blur:_.noop}}),$("body").css("padding","0").css("margin","0").css("overflow","hidden"),document.getElementById("sim")&&document.getElementById("sim").parentNode===document.body&&document.body.removeChild(document.getElementById("sim")),document.onselectstart=function(){return!1},super(new Cr({renderer:n.rootRenderer}),n),this.simulationRoot=new Cr,this.focusablePlaceholder=null,this.simulationRoot=new Cr,this.rootNode.addChild(this.simulationRoot),Ye.A.chromium&&this.simulationRoot.transformEmitter.addListener(()=>{this.refreshSVGOnNextFrame()});const s=phet.chipper.queryParameters.randomSeed*Math.PI;if(this.inputFuzzer=new sx(this,s),this.keyboardFuzzer=new ix(this,s),this.supportsPanAndZoomProperty=new o(phet.chipper.queryParameters.supportsPanAndZoom,{tandem:n.tandem.createTandem("supportsPanAndZoomProperty"),phetioFeatured:!0}),this.domElement.id="sim",phet.chipper.queryParameters.supportsInteractiveDescription&&(this.pdomRootElement.lang="en"),phet.chipper.queryParameters.sceneryLog&&it.A.enableLogging(phet.chipper.queryParameters.sceneryLog),phet.chipper.queryParameters.sceneryStringLog&&it.A.switchLogToString(),"dynamic"===phet.chipper.queryParameters.stringTest){const e=new ox;window.addEventListener("keydown",t=>e.handleEvent(t))}this.initializeEvents({tandem:A.A.GENERAL_CONTROLLER.createTandem("input")}),window.phet.joist.rootNode=this.rootNode,window.phet.joist.display=this,this.setPointerDisplayVisible(phet.chipper.queryParameters.showPointers),this.setPointerAreaDisplayVisible(phet.chipper.queryParameters.showPointerAreas),this.setHitAreaDisplayVisible(phet.chipper.queryParameters.showHitAreas),this.setCanvasNodeBoundsVisible(phet.chipper.queryParameters.showCanvasNodeBounds),this.setFittedBlockBoundsVisible(phet.chipper.queryParameters.showFittedBlockBounds),sl.initialize(this.simulationRoot,{tandem:n.tandem.createTandem("panZoomListener"),stepEmitter:null});const r=sl.listener;this.supportsPanAndZoomProperty.link(e=>{e?this.addInputListener(r):this.hasInputListener(r)&&this.removeInputListener(r)}),window.addEventListener("pageshow",e=>{e.persisted&&window.location.reload()})}};ax.DEFAULT_WEBGL=!1,Xl.A.register("SimDisplay",ax);var lx=i(1346);let hx=class e extends g.A{putInfo(e,t){void 0===t&&(t="{{undefined}}"),this.info[e]=t}constructor(t){let i,n,s;super({tandem:A.A.GENERAL_MODEL.createTandem("simInfo"),phetioType:e.SimInfoIO,phetioReadOnly:!0,phetioDocumentation:"A collection of data about the runtime and simulation. Available in the simStarted PhET-iO data stream event, as well as on demand in the PhET-iO state."}),this.info={},this.putInfo("url",window.location.href),this.putInfo("randomSeed",window.phet.chipper.queryParameters.randomSeed),this.putInfo("userAgent",window.navigator.userAgent),this.putInfo("language",window.navigator.language),this.putInfo("window",`${window.innerWidth}x${window.innerHeight}`),this.putInfo("referrer",document.referrer),this.putInfo("checkIE11StencilSupport",Ao.checkIE11StencilSupport()),this.putInfo("isWebGLSupported",!!phet.chipper.queryParameters.webgl&&Ao.isWebGLSupported);const r=[];window.navigator.pointerEnabled&&r.push("pointerEnabled"),window.navigator.msPointerEnabled&&r.push("msPointerEnabled"),window.navigator.onLine||r.push("offline");try{i=document.createElement("canvas"),n=i.getContext("2d"),s=Ao.backingStorePixelRatio(n),this.putInfo("pixelRatio",`${window.devicePixelRatio||1}/${s}`),(window.devicePixelRatio||1)/s!=1&&r.push("pixelRatioScaling")}catch(o){}this.putInfo("flags",r.join(", ")),i=null,this.putInfo("simName",t.simNameProperty.value),this.putInfo("simVersion",t.version),this.putInfo("repoName",kT.name),this.putInfo("screens",t.screens.map(e=>{const i={name:e.nameProperty.value||t.simNameProperty.value};return A.A.PHET_IO_ENABLED&&(i.phetioID=e.tandem.phetioID),i})),A.A.PHET_IO_ENABLED&&(this.putInfo("screenPropertyValue",t.selectedScreenProperty.value.tandem.phetioID),this.putInfo("wrapperMetadata",phet.preloads.phetio.simStartedMetadata),this.putInfo("dataStreamVersion",phet.phetio.dataStream.VERSION),this.putInfo("phetioCommandProcessorProtocol",phet.phetio.phetioCommandProcessor.PHET_IO_PROTOCOL))}};hx.SimInfoIO=new f.A("SimInfoIO",{valueType:hx,toStateObject:e=>({simName:e.info.simName,screens:e.info.screens,repoName:e.info.repoName,screenPropertyValue:e.info.screenPropertyValue,dataStreamVersion:e.info.dataStreamVersion,phetioCommandProcessorProtocol:e.info.phetioCommandProcessorProtocol,simVersion:e.info.simVersion,wrapperMetadata:e.info.wrapperMetadata,randomSeed:e.info.randomSeed,url:e.info.url,userAgent:e.info.userAgent,window:e.info.window,referrer:e.info.referrer,language:e.info.language,pixelRatio:e.info.pixelRatio,isWebGLSupported:e.info.isWebGLSupported,checkIE11StencilSupport:e.info.checkIE11StencilSupport,flags:e.info.flags||null}),applyState:_.noop,stateSchema:{simName:x.A,screens:(0,y.A)(lx.A),repoName:x.A,screenPropertyValue:x.A,wrapperMetadata:(0,C.A)(lx.A),dataStreamVersion:x.A,phetioCommandProcessorProtocol:x.A,simVersion:(0,C.A)(x.A),randomSeed:(0,C.A)(I.A),url:(0,C.A)(x.A),userAgent:(0,C.A)(x.A),window:(0,C.A)(x.A),referrer:(0,C.A)(x.A),language:(0,C.A)(x.A),pixelRatio:(0,C.A)(x.A),isWebGLSupported:(0,C.A)(n.A),checkIE11StencilSupport:(0,C.A)(n.A),flags:(0,C.A)(x.A)},apiStateKeys:["screens","repoName","dataStreamVersion","phetioCommandProcessorProtocol"]}),Xl.A.register("SimInfo",hx);const cx=hx;let dx=class{start(){this.sim.isConstructionCompleteProperty.link(e=>{e&&window.parent!==window&&window.parent.postMessage({message:"init"},"*")})}constructor(e){this.sim=e,window.addEventListener("message",t=>{"pause"===t.data.messageName?(e.stepOneFrame(),e.activeProperty.value=!1):"resume"===t.data.messageName&&(e.activeProperty.value=!0)})}};Xl.A.register("LegendsOfLearningSupport",dx);const ux=dx;let px=class{createOverviewContent(){const e=this.screenProperty.value.view;return e.getVoicingOverviewContent()}createDetailsContent(){const e=this.screenProperty.value.view;return e.getVoicingDetailsContent()}createHintContent(){this.screenProperty.value.view;return this.screenProperty.value.view.getVoicingHintContent()}constructor(e){this.screenProperty=e}};Xl.A.register("VoicingToolbarAlertManager",px);const mx=px;let gx=class extends Hi{constructor(e){super(),this.rect(0,0,e,e)}};Pa.register("StopIconShape",gx);let Ax=class extends jP{dispose(){this.disposeRoundToggleButton(),super.dispose()}constructor(e,i,n,s){const r=(0,t.Ay)()({valueOffSoundPlayer:Gm.get("toggleOff"),valueOnSoundPlayer:Gm.get("toggleOn"),tandem:A.A.REQUIRED,phetioFeatured:!0,listenerOptions:{tandem:A.A.OPT_OUT}},s),o=new aP(i,n,e,r),a=new oP(o);super(o,a,r),this.addLinkedElement(e,{tandemName:"property"});const l=()=>{e.value===i?r.valueOffSoundPlayer.play():e.value===n&&r.valueOnSoundPlayer.play()};this.buttonModel.produceSoundEmitter.addListener(l),this.disposeRoundToggleButton=()=>{this.buttonModel.produceSoundEmitter.removeListener(l),o.dispose()}}};fb.register("RoundToggleButton",Ax);let yx=class extends Ax{dispose(){this.disposeBooleanRoundToggleButton(),super.dispose()}constructor(e,i,n,s){const r=(0,t.Ay)()({content:null,tandem:A.A.REQUIRED},s),o=new rP(e,i,n);r.content=o,super(e,!1,!0,r),this.disposeBooleanRoundToggleButton=function(){o.dispose()}}};fb.register("BooleanRoundToggleButton",yx);const fx=yx;let bx=class extends Hi{constructor(e,t){super(),this.moveTo(0,0),this.lineTo(e,t/2),this.lineTo(0,t),this.close()}};Pa.register("PlayIconShape",bx);let Px=class e extends fx{dispose(){this.disposePlayStopButton(),super.dispose()}constructor(i,n,s){const r=(0,t.Ay)()({radius:KP.PLAY_CONTROL_BUTTON_RADIUS,scaleFactorWhenNotPlaying:1,includeGlobalHotkey:!1,startPlayingLabel:Wc.a11y.playControlButton.playStringProperty,endPlayingLabel:null,valueOffSoundPlayer:Gm.get("pause"),valueOnSoundPlayer:Gm.get("play"),xMargin:0,yMargin:0},s),o=.8*r.radius,a=r.radius,l=new ua(new bx(o,a),{fill:"black",centerX:.05*r.radius,centerY:0}),h=new Th(r.radius,{children:[l]});n.centerX=0,n.centerY=0;const c=new Th(r.radius,{children:[n]});super(i,c,h,r);const d=(e,t)=>{this.innerContent=e?r.endPlayingLabel:r.startPlayingLabel;const i=null===t?1:1/r.scaleFactorWhenNotPlaying;this.scale(e?i:r.scaleFactorWhenNotPlaying)};i.link(d);let u=null;r.includeGlobalHotkey&&phet.chipper.queryParameters.supportsInteractiveDescription&&(u=Jc.createGlobal(this,{keyStringProperties:e.TOGGLE_PLAY_HOTKEY_DATA.keyStringProperties,fireOnDown:!1,fire:()=>{i.set(!i.get());const e=i.get()?r.valueOnSoundPlayer:r.valueOffSoundPlayer;e&&e.play()}})),this.disposePlayStopButton=()=>{i.hasListener(d)&&i.unlink(d),u&&u.dispose()}}};Px.TOGGLE_PLAY_HOTKEY_DATA=new Sa({keyStringProperties:[new r.A("alt+k")],keyboardHelpDialogLabelStringProperty:Wc.keyboardHelpDialog.timingControls.pauseOrPlayActionStringProperty,repoName:Pa.name,global:!0}),Pa.register("PlayControlButton",Px);let Vx=class extends Px{constructor(e,i){const n=(0,t.Ay)()({radius:KP.PLAY_CONTROL_BUTTON_RADIUS,endPlayingLabel:Wc.a11y.playControlButton.stopStringProperty},i),s=.75*n.radius;super(e,new ua(new gx(s),{fill:"black"}),n)}};Pa.register("PlayStopButton",Vx);const vx=EV.A.a11y.toolbar.voicing.titleStringProperty,wx=EV.A.a11y.toolbar.voicing.quickInfoStringProperty,Ex=EV.A.a11y.toolbar.voicing.simVoicingOnAlertStringProperty,Sx=EV.A.a11y.toolbar.voicing.simVoicingOffAlertStringProperty,Tx=EV.A.a11y.toolbar.titleStringProperty,Cx=EV.A.a11y.toolbar.voicing.playOverviewLabelStringProperty,Ix=EV.A.a11y.toolbar.voicing.playDetailsLabelStringProperty,xx=EV.A.a11y.toolbar.voicing.playHintLabelStringProperty,Dx=EV.A.a11y.toolbar.voicing.overviewLabelStringProperty,kx=EV.A.a11y.toolbar.voicing.detailsLabelStringProperty,Mx=EV.A.a11y.toolbar.voicing.hintLabelStringProperty;let Bx=class extends Cr{constructor(e,i,n){var s,r;const o=(0,t.Ay)()({isDisposable:!1,tagName:"section",labelTagName:"h2",labelContent:Tx,visiblePropertyOptions:{phetioReadOnly:!0}},n);super(o);const a={font:new Gc(14),fill:i.navigationBarTextFillProperty,maxWidth:90},l=new Bc(vx,a),h=new pw(wx,a);h.focusHighlight=new oA(h,{innerStroke:"white"});const c=new Yw(Yn.mainWindowVoicingEnabledProperty,!1,!0,(0,t.sF)({accessibleName:vx,rightValueContextResponse:Ex,leftValueContextResponse:Sx,tandem:null==(s=o.tandem)?void 0:s.createTandem("muteSpeechSwitch")},Fw.TOGGLE_SWITCH_OPTIONS)),d=new Uw({labelNode:l,controlNode:c,tandem:null==(r=o.tandem)?void 0:r.createTandem("muteSpeechControl")}),u=new gV,p=new gV,m=new Ox(Dx,Cx,u,p,i,e.createOverviewContent.bind(e)),g=new Ox(kx,Ix,u,p,i,e.createDetailsContent.bind(e)),A=new Ox(Mx,xx,u,p,i,e.createHintContent.bind(e));this.children=[d,h,m.content,g.content,A.content],h.leftTop=d.leftBottom.plusXY(0,10),m.content.leftTop=h.leftBottom.plusXY(20,10),g.content.leftTop=m.content.leftBottom.plusXY(0,10),A.content.leftTop=g.content.leftBottom.plusXY(0,10);const y=[m,g,A],f=[m.playingProperty,g.playingProperty,A.playingProperty];y.forEach(e=>{e.playingProperty.link(t=>{e.playContent(f)})})}},Ox=class{playContent(e){if(this.playingProperty.value){_.without(e,this.playingProperty).forEach(e=>{e.value=!1}),this.objectResponseUtterance.priorityProperty.value=wn.TOP_PRIORITY,this.playStopButton.voicingSpeakResponse({objectResponse:this.createAlert(),utterance:this.objectResponseUtterance})}else wl.cancelUtterance(this.objectResponseUtterance)}constructor(e,t,i,n,s,r){this.lookAndFeel=s,this.objectResponseUtterance=new wn,this.createAlert=r,this.playingProperty=new o(!1,{reentrant:!0}),this.playStopButton=new Vx(this.playingProperty,{startPlayingLabel:t,voicingNameResponse:t,voicingIgnoreVoicingManagerProperties:!0,radius:12,tandem:A.A.OPT_OUT});const a=new Bc(e,{font:new Gc(12),fill:this.lookAndFeel.navigationBarTextFillProperty,maxWidth:100}),l=i.createBox(a,{xAlign:"left"}),h=n.createBox(this.playStopButton,{xAlign:"right"});this.content=new Of({children:[l,h],spacing:10}),Yn.endSpeakingEmitter.addListener((e,t)=>{t===this.objectResponseUtterance&&(this.playingProperty.set(!1),jA.hasInputListener(d)&&jA.removeInputListener(d))});const c=e=>{e.trail.nodes.includes(this.playStopButton)||(jA.removeInputListener(d),this.objectResponseUtterance.priorityProperty.value=wn.LOW_PRIORITY)},d={down:c,focus:c};Yn.startSpeakingEmitter.addListener((e,t)=>{t===this.objectResponseUtterance&&jA.addInputListener(d)})}};Xl.A.register("VoicingToolbarItem",Bx);const Lx=Bx,Rx=EV.A.a11y.toolbar.openToolbarStringProperty,Nx=EV.A.a11y.toolbar.closeToolbarStringProperty,qx=EV.A.a11y.toolbar.hideToolbarStringProperty,Fx=EV.A.a11y.toolbar.showToolbarStringProperty,Hx=EV.A.a11y.toolbar.toolbarShownStringProperty,Yx=EV.A.a11y.toolbar.toolbarHiddenStringProperty;let Gx=class extends Cr{getDisplayedWidth(){return this.rightPositionProperty.value*this.layoutScale+this.openButton.width/2}getHiddenPosition(){return-this.contentMargin/2}updateDestinationPosition(){this.isShowingProperty.value?this.rightDestinationPosition=this.openProperty.value?this.contentWidth+2*this.contentMargin:this.contentMargin:this.rightDestinationPosition=this.getHiddenPosition()}step(e){const t=Math.abs(this.rightPositionProperty.value-this.rightDestinationPosition);if(0!==t){const i=Math.min(t,250*e),n=this.rightPositionProperty.value;this.rightPositionProperty.value=this.rightDestinationPosition>n?n+i:n-i}}layout(e,t){this.layoutScale=e,this.menuContent.setScaleMagnitude(e),this.openButton.setScaleMagnitude(e),this.backgroundRectangle.rectWidth=e*(this.contentWidth+2*this.contentMargin),this.backgroundRectangle.rectHeight=t,this.backgroundRectangle.right=this.rightPositionProperty.value*e,this.openButton.center=this.backgroundRectangle.rightCenter,this.menuContent.centerTop=this.backgroundRectangle.centerTop.plusXY(0,15)}constructor(e,i,n,s){var r;const a=(0,t.Ay)()({isDisposable:!1,tagName:"div",visiblePropertyOptions:{phetioReadOnly:!0}},s);super(a),this.layoutScale=1,this.isEnabledProperty=e,this.backgroundRectangle=new fa(0,0,0,0,{fill:n.navigationBarFillProperty}),this.openProperty=new o(!phet.chipper.queryParameters.voicingCollapseToolbar),this.isShowingProperty=oe.and([this.isEnabledProperty,Yn.enabledProperty,eh.audioEnabledProperty]);const l=new mx(i);this.menuContent=new Lx(l,n,{tandem:null==(r=a.tandem)?void 0:r.createTandem("menuContent")});const h=new Ux;this.openButton=new ZP({content:h,listener:()=>this.openProperty.toggle(),buttonAppearanceStrategy:Ub.FlatAppearanceStrategy,baseColor:"lightgrey",tandem:A.A.OPT_OUT}),this.contentWidth=this.menuContent.localBounds.width,this.contentMargin=this.openButton.localBounds.width,this.rightPositionProperty=new R(this.getHiddenPosition()),this.rightDestinationPosition=0;const c=new Cr({children:[this.backgroundRectangle,this.menuContent,this.openButton]});this.addChild(c);fe.A.addListener(e=>{this.step(e)});this.openProperty.link((e,t)=>{if(h.matrix=e?Pt.scaling(-1,1):Pt.IDENTITY,this.menuContent.pdomVisible=e,this.openButton.accessibleName=e?Nx:Rx,this.openButton.voicingNameResponse=e?qx:Fx,this.updateDestinationPosition(),null!==t){const t=e?Hx:Yx;this.openButton.voicingSpeakContextResponse({contextResponse:t}),this.alertDescriptionUtterance(t)}});this.isShowingProperty.link(e=>{this.updateDestinationPosition(),c.pdomVisible=e})}},Ux=class extends ua{constructor(){const e=new Hi;for(let t=0;t<2;t++){const i=8*t;e.moveTo(i,0),e.lineTo(i+5,6),e.lineTo(i,12)}super(e,{stroke:"black",lineWidth:3.5,lineCap:"round"})}};Xl.A.register("Toolbar",Gx);const zx=Gx,Wx=Ye.A.android||Ye.A.mobileSafari;phet.joist.elapsedTime=0,phet.joist.playbackModeEnabledProperty=new o(phet.chipper.queryParameters.playbackMode);let Qx=class extends g.A{updateViews(){this.resizeToWindow(),this.selectedScreenProperty.value.view.step&&this.selectedScreenProperty.value.view.step(0),this.display.descriptionUtteranceQueue.clear(),wl.clear(),e.A.runOnNextTick(()=>phet.joist.display.updateDisplay())}finishInit(e){_.each(e,e=>{e.view.layerSplit=!0,this.detachInactiveScreenViews||this.display.simulationRoot.addChild(e.view)}),this.display.simulationRoot.addChild(this.navigationBar),this.preferencesModel.audioModel.supportsAnyVoicing&&(this.display.simulationRoot.addChild(this.toolbar),this.display.simulationRoot.pdomOrder=[this.toolbar],Yn.voicingFullyEnabledProperty.link(e=>{this.setSimVoicingVisible(e)})),this.selectedScreenProperty.link(t=>{e.forEach(e=>{const i=e===t;i&&(e.activeProperty.set(i),this.detachInactiveScreenViews&&!this.display.simulationRoot.hasChild(e.view)&&this.display.simulationRoot.insertChild(0,e.view)),e.view.setVisible(i),i||(this.detachInactiveScreenViews&&this.display.simulationRoot.hasChild(e.view)&&this.display.simulationRoot.removeChild(e.view),e.activeProperty.set(i))}),this.updateBackground(),m.value||sl.listener.resetTransform()}),this.display.simulationRoot.addChild(this.topLayer);const t=()=>{phet.joist.playbackModeEnabledProperty.value||(this.resizePending=!0)};if($(window).resize(t),window.addEventListener("resize",t),window.addEventListener("orientationchange",t),window.visualViewport&&window.visualViewport.addEventListener("resize",t),this.resizeToWindow(),rI.check(),QueryStringMachine.warnings.length){const e=new HI(QueryStringMachine.warnings,{closeButtonListener:()=>{e.hide(),e.dispose()}});e.show()}}showPopup(e,t){t&&(this.rootNode.interruptSubtreeInput(),this.modalNodeStack.push(e),this.setPDOMViewsVisible(!1),this.setNonModalVoicingVisible(!1)),e.layout&&e.layout(this.screenBoundsProperty.value),this.topLayer.addChild(e)}hidePopup(e,t){t&&(this.modalNodeStack.remove(e),0===this.modalNodeStack.length&&(this.setNonModalVoicingVisible(Yn.voicingFullyEnabledProperty.value),this.setPDOMViewsVisible(!0))),this.topLayer.removeChild(e)}resizeToWindow(){this.resizePending=!1,this.resize(window.innerWidth,window.innerHeight)}resize(e,t){this.resizeAction.execute(e,t)}start(){const e=[];this.screens.forEach(t=>{e.push(()=>{t.backgroundColorProperty.hasListener(this.updateBackground)||t.backgroundColorProperty.link(this.updateBackground),t.initializeModel()}),e.push(()=>{t.initializeView(this.simNameProperty,this.displayedSimNameProperty,this.screens.length,this.homeScreen===t)})});const t=i=>{setTimeout(()=>{e[i]();const n=Fe(0,e.length-1,.25,1,i),s="phet-io"===phet.chipper.brand?"progressBarClipArea":"progressBarForeground";document.getElementById(s)&&document.getElementById(s).setAttribute("width",""+n*this.splashScreenProgressBarWidth),i+1{if(this.finishInit(this.screens),Ao.polyfillRequestAnimationFrame(),phet.chipper.queryParameters.profiler&&OI.start(this),this._isConstructionCompleteProperty.value=!0,this.boundRunAnimationLoop(),phet.joist.playbackModeEnabledProperty.value){0,fe.A.emit(0)}A.A.PHET_IO_ENABLED&&!phet.preloads.phetio.queryParameters.phetioStandalone||window.phetSplashScreen.dispose(),phet.chipper.brand,this.simStartedTime=Date.now(),phet.chipper.queryParameters.continuousTest&&phet.chipper.reportContinuousTestResult({type:"continuous-test-load"}),phet.chipper.queryParameters.postMessageOnLoad&&window.parent&&window.parent.postMessage(JSON.stringify({type:"load",url:window.location.href}),"*")},25)},30/e.length)};t(0)}runAnimationLoop(){window.requestAnimationFrame(this.boundRunAnimationLoop),this.activeProperty.value&&!phet.joist.playbackModeEnabledProperty.value&&(this.fuzzFrame(),this.stepOneFrame());const t=Date.now();e.A.emit(Kx(this.lastAnimationFrameTime,t)),this.lastAnimationFrameTime=t,A.A.PHET_IO_ENABLED&&phet.phetio.phetioCommandProcessor.onAnimationLoop(this)}stepOneFrame(){const e=Date.now(),t=Kx(this.lastStepTime,e);this.lastStepTime=e,t>0&&this.stepSimulation(t)}stepSimulation(e){this.stepSimulationAction.execute(e)}setPDOMViewsVisible(e){for(let t=0;t=2&&this.screens.forEach(e=>{if(!(e instanceof vv)&&e.nameProperty instanceof be.A){e.nameProperty.stringKey}})}fuzzFrame(){this.frameCounter>0&&this.display.fuzzInputEvents(),A.A.PHET_IO_ENABLED&&phet.phetio.phetioEngine.fuzzElements()}getAssertionDebugInfo(){var e,t;const i={seed:Oe.A.getSeed(),currentScreenName:null==(t=this.selectedScreenProperty)||null==(e=t.value)?void 0:e.constructor.name,secondsSinceSimStarted:null===this.simStartedTime?"sim not started":(Date.now()-this.simStartedTime)/1e3};return this.topLayer.children.length>1&&(i.simTopLayer=this.topLayer.children.map(e=>`${e.constructor.name}${e.constructor.name.includes("Parent")?": "+e.children.map(e=>e.constructor.name):""}`)),i}constructor(e,i,n){const s=window.phetSplashScreenDownloadComplete(phet.chipper.brand);phet.chipper.queryParameters.launchCounter&&(e=function(e){let t=null,i=null;try{t=window.localStorage.getItem("phet.sim.launchCount")}catch(n){console.error("Error accessing localStorage:",n)}if(t){i=parseInt(t,10)+1}else i=1;try{window.localStorage.setItem("phet.sim.launchCount",ee(i,0))}catch(n){console.error("Error accessing localStorage:",n)}return new d.A(e.value+" (Run "+i+")")}(e));const a=(0,t.Ay)()({credits:{},homeScreenWarningNode:null,preferencesModel:null,webgl:ax.DEFAULT_WEBGL,detachInactiveScreenViews:!1,phetioState:!1,phetioReadOnly:!0,tandem:A.A.ROOT},n);a.preferencesModel||(a.preferencesModel=new MI);const l={webgl:a.webgl,tandem:A.A.GENERAL_VIEW.createTandem("display"),preferencesModel:a.preferencesModel};super(a),this._isConstructionCompleteProperty=new r.A(!1),this.isConstructionCompleteProperty=this._isConstructionCompleteProperty,this.frameStartedEmitter=new b.A,this.frameEndedEmitter=new b.A({tandem:A.A.GENERAL_MODEL.createTandem("frameEndedEmitter"),phetioHighFrequency:!0,phetioDocumentation:"Indicates when a frame ends. Listen to this Emitter if you have an action that must be performed after the model and view step completes."}),this.activeProperty=new o(!0,{tandem:A.A.GENERAL_MODEL.createTandem("activeProperty"),phetioFeatured:!0,phetioDocumentation:"Determines whether the entire simulation is running and processing user input. Setting this property to false pauses the simulation, and prevents user interaction."}),this.scaleProperty=new R(1),this.boundsProperty=new r.A(null),this.screenBoundsProperty=new r.A(null),this.lookAndFeel=new Ev,this.memoryMonitor=new xv,this.version=kT.version,this.frameCounter=0,this.resizePending=!0,this.locale=phet.chipper.locale||"en",this.toolbar=null,this.modalNodeStack=U(),this.barrierRectangle=new Va(this.modalNodeStack),this.topLayer=new Cr({children:[this.barrierRectangle]}),this.lastStepTime=null,this.lastAnimationFrameTime=null,this.simStartedTime=null,this.credits=a.credits,this.detachInactiveScreenViews=a.detachInactiveScreenViews,this.simNameProperty=e,this.splashScreenProgressBarWidth=s,phet.joist.playbackModeEnabledProperty.lazyLink(()=>{throw new Error("playbackModeEnabledProperty cannot be changed after Sim construction has begun")});const h=new r.A(new Be(0,0),{valueComparisonStrategy:"equalsFunction"});this.dimensionProperty=h,this.resizeAction=new _e.A((e,t)=>{if(h.value=new Be(e,t),0===e||0===t)return;const i=Math.min(e/fv.LAYOUT_BOUNDS.width,t/fv.LAYOUT_BOUNDS.height),n=i*wI.NAVIGATION_BAR_SIZE.height;this.navigationBar.layout(i,e,n),this.navigationBar.y=t-n,this.display.setSize(new Be(e,t));const s=t-this.navigationBar.height;this.toolbar&&this.toolbar.layout(i,s);const r=this.toolbar?this.toolbar.getDisplayedWidth():0,o=new Ie(r,0,e,s);_.each(this.screens,e=>e.view.layout(o)),this.topLayer.children.forEach(e=>{e.layout&&e.layout(o)}),Ye.A.mobileSafari&&window.scrollTo(0,0),this.scaleProperty.value=i,this.boundsProperty.value=new Ie(0,0,e,t),this.screenBoundsProperty.value=o.copy(),sl.listener.setTargetScale(i),sl.listener.setTargetBounds(this.boundsProperty.value),sl.listener.setPanBounds(this.boundsProperty.value),ul.layoutScale=i},{tandem:A.A.GENERAL_MODEL.createTandem("resizeAction"),parameters:[{name:"width",phetioType:I.A},{name:"height",phetioType:I.A}],phetioPlayback:!0,phetioEventMetadata:{alwaysPlaybackableOverride:!0},phetioDocumentation:"Executes when the sim is resized. Values are the sim dimensions in CSS pixels."}),this.stepSimulationAction=new _e.A(e=>{this.frameStartedEmitter.emit(),this.frameCounter++,e*=phet.chipper.queryParameters.speed,this.resizePending&&this.resizeToWindow();const t=this.selectedScreenProperty.value;e=Math.min(e,t.maxDT),phet.joist.elapsedTime+=1e3*e,fe.A.emit(e),t.model.step&&e&&t.model.step(e),window.TWEEN&&window.TWEEN.update(phet.joist.elapsedTime),this.display.step(e),t.view.step(e),A.A.PHET_IO_ENABLED&&!phet.phetio.phetioEngine.isReadyForDisplay||this.display.updateDisplay(),phet.chipper.queryParameters.memoryLimit&&this.memoryMonitor.measure(),this.frameEndedEmitter.emit()},{tandem:A.A.GENERAL_MODEL.createTandem("stepSimulationAction"),parameters:[{name:"dt",phetioType:I.A,phetioDocumentation:"The amount of time stepped in each call, in seconds."}],phetioHighFrequency:!0,phetioPlayback:!0,phetioDocumentation:"A function that steps time forward."});const c=A.A.GENERAL_MODEL.createTandem("screens"),u=XI(i,phet.chipper.queryParameters.homeScreen,QueryStringMachine.containsKey("homeScreen"),phet.chipper.queryParameters.initialScreen,QueryStringMachine.containsKey("initialScreen"),phet.chipper.queryParameters.screens,QueryStringMachine.containsKey("screens"),e=>{const t=e.map(e=>i.indexOf(e)+1),n=_.flatten(ke.combinationsOf(t).map(e=>Ne.permutationsOf(e))).filter(e=>e.length>0).sort();this.availableScreensProperty=new r.A(t,{tandem:c.createTandem("availableScreensProperty"),isValidValue:e=>_.some(n,t=>_.isEqual(e,t)),phetioFeatured:!0,phetioValueType:(0,y.A)(I.A),phetioDocumentation:"Controls which screens are available, and the order they are displayed."}),this.activeSimScreensProperty=new oe([this.availableScreensProperty],e=>e.map(e=>i[e-1]))},e=>new vv(this.simNameProperty,()=>this.selectedScreenProperty,e,this.activeSimScreensProperty,{tandem:a.tandem.createTandem(Zl.A.HOME_SCREEN_COMPONENT_NAME),warningNode:a.homeScreenWarningNode}));this.homeScreen=u.homeScreen,this.simScreens=u.selectedSimScreens,this.screens=u.screens,this.allScreensCreated=u.allScreensCreated,this.selectedScreenProperty=new r.A(u.initialScreen,{tandem:c.createTandem("selectedScreenProperty"),phetioFeatured:!0,phetioDocumentation:"Determines which screen is selected in the simulation",validValues:this.screens,phetioValueType:RV.ScreenIO}),this.activeSimScreensProperty.lazyLink(e=>{const t=this.selectedScreenProperty.value;t===this.homeScreen?1===e.length?this.selectedScreenProperty.value=e[0]:e.includes(this.homeScreen.model.selectedScreenProperty.value)||(this.homeScreen.model.selectedScreenProperty.value=e[0]):e.includes(t)||(this.selectedScreenProperty.value=e[0])}),this.displayedSimNameProperty=oe.deriveAny([this.availableScreensProperty,this.simNameProperty,this.selectedScreenProperty,EV.A.simTitleWithScreenNamePatternStringProperty,..._.uniq(this.screens.map(e=>e.nameProperty))],()=>{const e=this.availableScreensProperty.value,t=this.simNameProperty.value,n=this.selectedScreenProperty.value,s=EV.A.simTitleWithScreenNamePatternStringProperty.value,r=n.nameProperty.value,o=1===e.length&&i.length>1;return o&&t&&r?Ge.A.fillIn(s,{simName:t,screenName:r}):o&&r?r:t},{tandem:A.A.GENERAL_MODEL.createTandem("displayedSimNameProperty"),tandemNameSuffix:"NameProperty",phetioDocumentation:"Customize this string by editing its dependencies.",phetioFeatured:!0,phetioValueType:x.A});const p=new o(!0,{tandem:A.A.GENERAL_MODEL.createTandem("browserTabVisibleProperty"),phetioDocumentation:"Indicates whether the browser tab containing the simulation is currently visible",phetioReadOnly:!0,phetioFeatured:!0});this.browserTabVisibleProperty=p,document.addEventListener("visibilitychange",()=>{p.set("visible"===document.visibilityState)},!1),this.supportsGestureDescription=phet.chipper.queryParameters.supportsInteractiveDescription&&Wx,this.hasKeyboardHelpContent=_.some(this.simScreens,e=>!!e.createKeyboardHelpNode),window.phet.joist.sim=this,this.preferencesModel=a.preferencesModel,eh.initialize(this),this.preferencesModel.audioModel.supportsSound&&_l.addSoundGenerator(new ZI(this.selectedScreenProperty,this.homeScreen,{initialOutputLevel:.5}),{categoryName:"user-interface"}),window.phet.joist.ScreenshotGenerator=mI,this.simNameProperty.link(e=>{document.title=e}),this.preferencesModel.audioModel.supportsAnyVoicing&&(this.toolbar=new zx(this.preferencesModel.audioModel.toolbarEnabledProperty,this.selectedScreenProperty,this.lookAndFeel),this.toolbar.rightPositionProperty.lazyLink(()=>{this.resize(this.boundsProperty.value.width,this.boundsProperty.value.height)})),this.display=new ax(l),this.rootNode=this.display.rootNode,fP.initialize(this,this.display),this.activeProperty.lazyLink(e=>{e&&(this.lastStepTime=null,this.lastAnimationFrameTime=null)}),ye.multilink([this.activeProperty,phet.joist.playbackModeEnabledProperty],(e,t)=>{t?(this.display.interactive=!0,qn.A.enabled=!0):(this.display.interactive=e,qn.A.enabled=e)}),document.body.appendChild(this.display.domElement),sh.start(this),this.navigationBar=new wI(this,A.A.GENERAL_VIEW.createTandem("navigationBar")),this.updateBackground=()=>{this.lookAndFeel.backgroundColorProperty.value=Wr.toColor(this.selectedScreenProperty.value.backgroundColorProperty.value)},this.lookAndFeel.backgroundColorProperty.link(e=>{this.display.backgroundColor=e}),this.selectedScreenProperty.link(()=>this.updateBackground()),this.selectedScreenProperty.lazyLink((e,t)=>t.view.interruptSubtreeInput()),this.simInfo=new cx(this),A.A.PHET_IO_ENABLED&&phet.phetio.phetioEngine.onSimConstructionStarted(this.simInfo,this.isConstructionCompleteProperty,this.frameEndedEmitter,this.display),m.lazyLink(e=>{e||this.updateViews()}),this.boundRunAnimationLoop=this.runAnimationLoop.bind(this),phet.chipper.queryParameters.legendsOfLearning&&new ux(this).start()}};function Kx(e,t){return null===e?1/60:(t-e)/1e3}Xl.A.register("Sim",Qx);const jx=new Ct.A("circuitConstructionKitCommon");let _x=class extends Qx{constructor(e,t,i){super(e,t,i);const n=this.display.getFocusablePlaceholder();(0,He.Ay)(n),this.display.addInputListener({down:()=>{document.activeElement===document.body&&n.focus()}})}};jx.register("CCKCSim",_x);let Zx=class extends Eb{constructor(e,i,n){super(e,i,(0,t.Ay)()({orientation:"vertical",align:"left"},n))}};fb.register("VerticalAquaRadioButtonGroup",Zx);const Xx=(0,Uc.A)("CIRCUIT_CONSTRUCTION_KIT_COMMON");jx.register("CircuitConstructionKitCommonStrings",Xx);const Jx=Xx;let $x=class extends Ve.A{};$x.MAGNITUDE=new $x,$x.SIGNED=new $x,$x.enumeration=new Pe.A($x),jx.register("AmmeterReadoutType",$x);const eD=QueryStringMachine.getAll({currentType:{public:!0,type:"string",defaultValue:"electrons",validValues:["electrons","conventional"]},showCurrent:{public:!0,type:"boolean",defaultValue:!0},addRealBulbs:{type:"flag",public:!0},moreInductors:{public:!0,type:"flag"},schematicStandard:{public:!0,type:"string",defaultValue:"ieee",validValues:["ieee","iec","british"]},ammeterReadout:{public:!0,type:"string",defaultValue:"magnitude",validValues:["magnitude","signed"]},vertexDisplay:{type:"flag"},showDepictValuesToggleButton:{type:"flag"},showVoltmeterSamplePoints:{type:"flag"},batteryMinimumResistance:{type:"number",defaultValue:1e-4},capacitorResistance:{type:"number",defaultValue:1e-4},inductorResistance:{type:"number",defaultValue:1e-4},fullPrecisionAmmeter:{type:"flag"},wireResistivity:{type:"number",defaultValue:1e-10},showCurrents:{type:"flag"},inductanceMin:{type:"number",defaultValue:.1},inductanceMax:{type:"number",defaultValue:10},inductanceStep:{type:"number",defaultValue:.001},inductanceDefault:{type:"number",defaultValue:5},inductorNumberDecimalPlaces:{type:"number",defaultValue:3},capacitanceMin:{type:"number",defaultValue:.05},capacitanceMax:{type:"number",defaultValue:.2},capacitanceStep:{type:"number",defaultValue:.01},capacitanceDefault:{type:"number",defaultValue:.1},capacitorNumberDecimalPlaces:{type:"number",defaultValue:2},minDT:{type:"number",defaultValue:.001},searchTimeStep:{type:"boolean",defaultValue:!0},codap:{type:"flag"}});jx.register("CCKCQueryParameters",eD);const tD=eD,iD=new rh("magnitude"===tD.ammeterReadout?$x.MAGNITUDE:$x.SIGNED,{tandem:A.A.PREFERENCES.createTandem("ammeterReadoutTypeProperty"),phetioFeatured:!0});jx.register("ammeterReadoutTypeProperty",iD);const nD=iD;let sD=class extends Ve.A{};sD.IEC=new sD,sD.IEEE=new sD,sD.BRITISH=new sD,sD.enumeration=new Pe.A(sD),jx.register("SchematicType",sD);const rD=new rh("ieee"===tD.schematicStandard?sD.IEEE:"iec"===tD.schematicStandard?sD.IEC:sD.BRITISH,{tandem:A.A.PREFERENCES.createTandem("schematicTypeProperty"),phetioFeatured:!0});jx.register("schematicTypeProperty",rD);const oD=rD;let aD=class extends Rf{constructor(e){const t=e.createTandem("schematicStandardPreferencesControl"),i=e.createTandem("ammeterReadoutPreferencesControl"),n=Fw.PANEL_SECTION_CONTENT_OPTIONS,s=new Zx(oD,[{createNode:()=>new Bc(Jx.ieeeStringProperty,n),value:sD.IEEE,tandemName:"ieeeRadioButton"},{createNode:()=>new Bc(Jx.iecStringProperty,n),value:sD.IEC,tandemName:"iecRadioButton"},{createNode:()=>new Bc(Jx.britishStringProperty,n),value:sD.BRITISH,tandemName:"britishRadioButton"}],{tandem:t.createTandem("radioButtonGroup"),phetioVisiblePropertyInstrumented:!1,radioButtonOptions:{radius:8}}),r=new Zx(nD,[{createNode:()=>new Bc(Jx.magnitudeStringProperty,n),value:$x.MAGNITUDE,tandemName:"magnitudeRadioButton"},{createNode:()=>new Bc(Jx.signedStringProperty,n),value:$x.SIGNED,tandemName:"signedRadioButton"}],{tandem:i.createTandem("radioButtonGroup"),phetioVisiblePropertyInstrumented:!1,radioButtonOptions:{radius:8}});super({align:"left",spacing:Fw.CONTENT_SPACING,tandem:e,children:[new Rf({align:"left",spacing:Fw.CONTENT_SPACING,children:[new Bc(Jx.schematicStandardStringProperty,Fw.PANEL_SECTION_LABEL_OPTIONS),s],tandem:t,visiblePropertyOptions:{phetioFeatured:!0}}),new Bf,new Rf({align:"left",spacing:Fw.CONTENT_SPACING,children:[new Bc(Jx.ammeterReadoutStringProperty,Fw.PANEL_SECTION_LABEL_OPTIONS),r],tandem:i,visiblePropertyOptions:{phetioFeatured:!0}})]})}};jx.register("CCKCSimulationPreferencesContentNode",aD);const lD={PAUSED_DT:1e-6,ZOOM_SCALES:[.5,1,1.6],RETURN_ITEM_HIT_BOX_RATIO:.2,TOOLBOX_ICON_HEIGHT:31,TOOLBOX_ICON_WIDTH:60,METER_PRECISION:2,DEFAULT_RESISTANCE:10,DEFAULT_CAPACITANCE:.1,DEFAULT_BATTERY_RESISTANCE:tD.batteryMinimumResistance,BATTERY_RESISTANCE_RANGE:new T(tD.batteryMinimumResistance,10),RIGHT_SIDE_PANEL_MIN_WIDTH:190,VERTICAL_MARGIN:5,HORIZONTAL_MARGIN:10,TAP_THRESHOLD:15,SLIDER_TRACK_SIZE:new Be(160,5),FONT_AWESOME_ICON_SCALE:.07,HIGHLIGHT_LINE_WIDTH:5,WIRE_RESISTIVITY_RANGE:new T(tD.wireResistivity,.0168),WIRE_CROSS_SECTIONAL_AREA:5e-4,MINIMUM_WIRE_RESISTANCE:1e-14,MINIMUM_RESISTANCE:1.1e-10,DRAG_BOUNDS_EROSION:20,CHARGE_SEPARATION:28,BATTERY_LENGTH:102,AC_VOLTAGE_LENGTH:68,SWITCH_LENGTH:112,SWITCH_START:1/3,SWITCH_END:2/3,RESISTOR_LENGTH:110,FUSE_LENGTH:110,WIRE_LENGTH:100,CAPACITOR_LENGTH:110,INDUCTOR_LENGTH:110,COIN_LENGTH:85,ERASER_LENGTH:90,PENCIL_LENGTH:130,HAND_LENGTH:140,DOG_LENGTH:170,DOLLAR_BILL_LENGTH:140,PAPER_CLIP_LENGTH:75,SERIES_AMMETER_LENGTH:121,CORNER_RADIUS:6,SCHEMATIC_LINE_WIDTH:4,MAX_RESISTANCE:1e9,BULB_SCALE:2.52,HIGH_EDITOR_DELTA:100,HIGH_RESISTANCE:1e3,HIGH_RESISTANCE_RANGE:new T(100,1e4),PANEL_LINE_WIDTH:1.3,THUMB_SIZE:new Be(13,24),MAJOR_TICK_LENGTH:18,MINOR_TICK_LENGTH:12,FONT_SIZE:14,DEFAULT_FONT:new Gc(14),NUMBER_OF_WIRES:50,NUMBER_OF_TIME_DIVISIONS:4,CHART_SERIES_COLOR:"#404041",DC_CAROUSEL_SCALE:1.2,AC_CAROUSEL_SCALE:.85,MAX_DT:.5};jx.register("CCKCConstants",lD);const hD=lD;let cD=class extends r.A{constructor(e,i){super(e,(0,t.Ay)()({valueType:Wr,phetioValueType:Wr.ColorIO},i))}};it.A.register("ColorProperty",cD);const dD=[];let uD=class extends cD{dispose(){(0,a.A)(dD,this),super.dispose()}constructor(e,i,n,s){const r=(0,t.Ay)()({valueComparisonStrategy:"equalsFunction",tandemNameSuffix:["ColorProperty","FillProperty","StrokeProperty"]},s);n=_.mapValues(n,e=>Wr.toColor(e).setImmutable()),super(Wr.toColor(n[CI.value]||n[ff.DEFAULT_COLOR_PROFILE]),r),this.colorProfileMap=n,CI.link(e=>{this.value=Wr.toColor(this.colorProfileMap[e]||this.colorProfileMap[ff.DEFAULT_COLOR_PROFILE])}),this.name=`${e.name}.${i}`,this.link(e=>{window.parent!==window&&window.parent.postMessage(JSON.stringify({type:"reportColor",name:this.name,value:e.toHexString(),alpha:e.getAlpha()}),"*")}),dD.push(this)}};window.addEventListener("message",e=>{let t;try{t=JSON.parse(e.data)}catch(i){}if(t&&"setColor"===t.type)for(let n=0;n{const r=e[(s+1)%e.length],o=n.x*r.y-r.x*n.y;i+=o/2,t.addXY((n.x+r.x)*o,(n.y+r.y)*o)}),t.divideScalar(6*i),t}function ED(e){return(Math.exp(e)+Math.exp(-e))/2}function SD(e,t,i){return Math.sqrt(qt(e,t,i))}function TD(e,t){return e/t%1==0?0:e%t}function CD(e,t){return Math.abs(0===t?e:CD(t,TD(e,t)))}function ID(e,t){return(0,Xe.q)(Math.abs(e*t)/CD(e,t))}function xD(e){return Math.log(e)/Math.LN10}function DD(e,t,i,n){const s=e.x-n.x,r=e.y-n.y,o=(e.x-n.x)*(e.x-n.x)+(e.y-n.y)*(e.y-n.y),a=t.x-n.x,l=t.y-n.y,h=(t.x-n.x)*(t.x-n.x)+(t.y-n.y)*(t.y-n.y),c=i.x-n.x,d=i.y-n.y,u=(i.x-n.x)*(i.x-n.x)+(i.y-n.y)*(i.y-n.y);return s*l*u+r*h*c+o*a*d-o*l*c-r*a*u-s*h*d>0}function kD(e,t){return Le(e+1,t-1)}function MD(e){return(Math.exp(e)-Math.exp(-e))/2}function BD(e,t,i){i=void 0===i?1e-5:i;const n=new $e(0,0,0),s=t.direction,r=t.position,o=r.minus(n),a=s.dot(o),l=4*a*a-4*(o.magnitudeSquared-e*e);if(l(0,Ze.q)(e,t,i),moduloBetweenDown:(e,t,i)=>Gt(e,t,i),moduloBetweenUp:(e,t,i)=>Ut(e,t,i),rangeInclusive:(e,t)=>Le(e,t),rangeExclusive:(e,t)=>kD(e,t),toRadians:e=>OD(e),toDegrees:e=>Qt(e),mod:(e,t)=>TD(e,t),gcd:(e,t)=>CD(e,t),lcm:(e,t)=>ID(e,t),lineLineIntersection:(e,t,i,n)=>zt(e,t,i,n),circleCenterFromPoints:(e,t,i)=>Wt(e,t,i),pointInCircleFromPoints:(e,t,i,n)=>DD(e,t,i,n),sphereRayIntersection:(e,t,i)=>BD(e,t,i),solveLinearRootsReal:(e,t)=>Ht(e,t),solveQuadraticRootsReal:(e,t,i)=>Yt(e,t,i),solveCubicRootsReal:(e,t,i,n,s)=>jt(e,t,i,n,s),cubeRoot:e=>Kt(e),linear:(e,t,i,n,s)=>Fe(e,t,i,n,s),roundSymmetric:e=>(0,Xe.q)(e),toFixed:(e,t)=>ee(e,t),toFixedNumber:(e,t)=>lE(e,t),equalsEpsilon:(e,t,i)=>Wa(e,t,i),lineSegmentIntersection:(e,t,i,n,s,r,o,a)=>Ft(e,t,i,n,s,r,o,a),distToSegmentSquared:(e,t,i)=>qt(e,t,i),distToSegment:(e,t,i)=>SD(e,t,i),arePointsCollinear:(e,t,i,n)=>Nt(e,t,i,n),triangleArea:(e,t,i)=>Rt(e,t,i),triangleAreaSigned:(e,t,i)=>Lt(e,t,i),centroidOfPolygon:e=>wD(e),cosh:e=>ED(e),sinh:e=>MD(e),log10:e=>xD(e),boxMullerTransform:(e,t,i)=>(0,vD.v)(e,t,i),numberOfDecimalPlaces:e=>hE(e),roundToInterval:(e,t)=>cE(e,t)};w.A.register("Utils",LD);const RD=LD,ND=new T(0,Number.POSITIVE_INFINITY);let qD=class extends g.A{dispose(){this.disposeStopwatch(),super.dispose()}reset(){this.positionProperty.reset(),this.isVisibleProperty.reset(),this.isRunningProperty.reset(),this.timeProperty.reset()}step(e){this.setTime(this.timeProperty.value+e)}setTime(e){this.isRunningProperty.value&&(this.timeProperty.value=this.timeProperty.range.constrainValue(e),this.timeProperty.value>=this.timeProperty.range.max&&(this.isRunningProperty.value=!1))}constructor(e){const i=(0,t.Ay)()({position:Te.A.ZERO,isVisible:!1,timePropertyOptions:{range:ND,units:"s",isValidValue:e=>e>=0,phetioReadOnly:!0,phetioHighFrequency:!0},tandem:A.A.REQUIRED,tandemNameSuffix:"Stopwatch",phetioType:Kf(f.A.ObjectIO),phetioState:!1},e);super(i),this.positionProperty=new ch(i.position,{tandem:i.tandem.createTandem("positionProperty"),phetioDocumentation:`view coordinates for the upper-left of the stopwatch (initially ${i.position.x},${i.position.y})`,phetioFeatured:!0}),this.isVisibleProperty=new o(i.isVisible,{tandem:i.tandem.createTandem("isVisibleProperty"),phetioFeatured:!0}),this.isRunningProperty=new o(!1,{tandem:i.tandem.createTandem("isRunningProperty"),phetioFeatured:!0}),this.timeProperty=new R(0,(0,t.sF)({tandem:i.tandem.createTandem("timeProperty"),phetioFeatured:!0},i.timePropertyOptions));const n=()=>{m.value||(this.isRunningProperty.value=!1,this.timeProperty.value=0)};this.isVisibleProperty.link(n),this.disposeStopwatch=()=>{this.isVisibleProperty.unlink(n),this.positionProperty.dispose(),this.isVisibleProperty.dispose(),this.isRunningProperty.dispose(),this.timeProperty.dispose()}}};qD.ZERO_TO_ALMOST_SIXTY=new T(0,3599.99),Pa.register("Stopwatch",qD);let FD=class extends Ve.A{};FD.FORWARD=new FD,FD.BACKWARD=new FD,FD.UNSPECIFIED=new FD,FD.enumeration=new Pe.A(FD),jx.register("CurrentSense",FD);let HD=0,YD=class extends g.A{setPosition(e){this.positionProperty.set(e),this.unsnappedPositionProperty.set(e)}dispose(){this.isSelected()&&(this.selectionProperty.value=null),this.positionProperty.dispose(),this.voltageProperty.dispose(),this.isDraggableProperty.dispose(),this.isCuttableProperty.dispose(),this.labelStringProperty.dispose(),super.dispose()}isSelected(){return this.selectionProperty.value===this}constructor(e,i,n){const s=(0,t.Ay)()({draggable:!0,attachable:!0,interactive:!0,blackBoxInterface:!1,insideTrueBlackBox:!1,tandem:A.A.OPTIONAL,phetioDynamicElement:!0},n);super(s),this.index=HD++,this.selectionProperty=i,this.vertexTandem=s.tandem,this.positionProperty=new ch(e,{tandem:s.tandem&&s.tandem.createTandem("positionProperty"),valueComparisonStrategy:"equalsFunction",isValidValue:e=>e.isFinite(),phetioReadOnly:!0,phetioHighFrequency:!0,phetioFeatured:!0}),this.unsnappedPositionProperty=new ch(e,{isValidValue:e=>e.isFinite()}),this.voltageProperty=new R(0,{tandem:s.tandem&&s.tandem.createTandem("voltageProperty"),units:"V",phetioReadOnly:!0,phetioHighFrequency:!0,phetioFeatured:!0}),this.isDraggableProperty=new o(s.draggable,{tandem:s.tandem&&s.tandem.createTandem("isDraggableProperty"),phetioFeatured:!0}),this.interactiveProperty=new o(s.interactive),this.attachableProperty=new o(s.attachable),this.blackBoxInterfaceProperty=new o(s.blackBoxInterface),this.insideTrueBlackBoxProperty=new o(s.insideTrueBlackBox),this.relayerEmitter=new b.A,this.vertexSelectedPropertyListener=null,this.isDragged=!1,this.outerWireStub=!1,this.isCuttableProperty=new o(!0,{tandem:s.tandem.createTandem("isCuttableProperty"),phetioFeatured:!0}),this.labelStringProperty=new rc("",(0,t.sF)({tandem:s.tandem.createTandem("labelStringProperty"),phetioDocumentation:"Shows a custom text label next to the Vertex",phetioFeatured:!0}))}};YD.VertexIO=new f.A("VertexIO",{valueType:YD,toStateObject:e=>({position:Te.A.Vector2IO.toStateObject(e.positionProperty.value)}),stateObjectToCreateElementArguments:e=>[Te.A.Vector2IO.fromStateObject(e.position)],stateSchema:{position:Te.A.Vector2IO}}),jx.register("Vertex",YD);let GD=0;const UD=Kf(YD.VertexIO);let zD=class e extends g.A{computeVoltageDifference(){return this.endVertexProperty.value.voltageProperty.value-this.startVertexProperty.value.voltageProperty.value}linkVertex(e,t,i){t&&(t.positionProperty.hasListener(this.vertexMovedListener)&&t.positionProperty.unlink(this.vertexMovedListener),t.voltageProperty.hasListener(this.vertexVoltageListener)&&t.voltageProperty.unlink(this.vertexVoltageListener),t.positionProperty.get().equals(e.positionProperty.get())||this.vertexMovedEmitter.emit()),e.positionProperty.hasListener(this.vertexMovedListener)||e.positionProperty.lazyLink(this.vertexMovedListener),e.voltageProperty.hasListener(this.vertexVoltageListener)||e.voltageProperty.link(this.vertexVoltageListener),this.voltageDifferenceProperty.set(this.computeVoltageDifference())}step(e,t,i){}get startPositionProperty(){return this.startVertexProperty.get().positionProperty}get endPositionProperty(){return this.endVertexProperty.get().positionProperty}emitVertexMoved(){this.vertexMovedEmitter.emit()}dispose(){this.circuitElementDisposed=!0,this.disposeEmitterCircuitElement.emit(),this.disposeEmitterCircuitElement.dispose(),this.startVertexProperty.unlink(this.linkVertexListener),this.endVertexProperty.unlink(this.linkVertexListener),this.startPositionProperty.hasListener(this.vertexMovedListener)&&this.startPositionProperty.unlink(this.vertexMovedListener),this.endPositionProperty.hasListener(this.vertexMovedListener)&&this.endPositionProperty.unlink(this.vertexMovedListener);const e=this.startVertexProperty.value.voltageProperty,t=this.endVertexProperty.value.voltageProperty;e.hasListener(this.vertexVoltageListener)&&e.unlink(this.vertexVoltageListener),t.hasListener(this.vertexVoltageListener)&&t.unlink(this.vertexVoltageListener),this.isEditableProperty.dispose(),this.isDisposableProperty.dispose(),this.isValueDisplayableProperty.dispose(),this.startVertexProperty.dispose(),this.endVertexProperty.dispose(),this.labelStringProperty.dispose(),this.currentSenseProperty.dispose(),this.currentProperty.dispose(),super.dispose()}replaceVertex(e,t){const i=this.startVertexProperty.get();this.endVertexProperty.get();e===i?this.startVertexProperty.set(t):this.endVertexProperty.set(t)}getOppositeVertex(e){return this.startVertexProperty.get()===e?this.endVertexProperty.get():this.startVertexProperty.get()}containsVertex(e){return this.startVertexProperty.get()===e||this.endVertexProperty.get()===e}containsBothVertices(e,t){return this.containsVertex(e)&&this.containsVertex(t)}updateMatrixForPoint(e,t){const i=this.startPositionProperty.get(),n=this.endPositionProperty.get(),s=i.blend(n,e/this.chargePathLength),r=Te.A.getAngleBetweenVectors(i,n);t.setToTranslationRotationPoint(s,r)}containsScalarPosition(e){return e>=0&&e<=this.chargePathLength}toVertexString(){return`${this.startVertexProperty.value.index} -> ${this.endVertexProperty.value.index}`}constructor(i,n,s,a,l){const h=(0,t.Ay)()({interactive:!0,isSizeChangedOnViewChange:!0,insideTrueBlackBox:!1,isMetallic:!1,isFlammable:!1,tandem:a,isCurrentReentrant:!1,phetioDynamicElement:!0,phetioType:e.CircuitElementIO,isEditablePropertyOptions:{},isValueDisplayablePropertyOptions:{},labelStringPropertyOptions:{}},l);super(h),this.id=GD++,this.creationTime=phet.joist.elapsedTime,this.isFlammable=h.isFlammable,this.isMetallic=h.isMetallic,this.isSizeChangedOnViewChange=h.isSizeChangedOnViewChange,this.startVertexProperty=new r.A(i,{phetioValueType:YD.VertexIO,tandem:a.createTandem("startVertexProperty"),phetioState:!1,phetioReadOnly:!0,phetioFeatured:!0}),this.endVertexProperty=new r.A(n,{phetioValueType:YD.VertexIO,tandem:a.createTandem("endVertexProperty"),phetioState:!1,phetioReadOnly:!0,phetioFeatured:!0}),this.currentProperty=new R(0,{reentrant:h.isCurrentReentrant,tandem:a.createTandem("currentProperty"),phetioReadOnly:!0,phetioHighFrequency:!0,phetioFeatured:!0}),this.currentProperty.link(e=>{}),this.currentSenseProperty=new rh(FD.UNSPECIFIED,{tandem:a.createTandem("currentSenseProperty")}),this.interactiveProperty=new o(h.interactive),this.insideTrueBlackBoxProperty=new o(h.insideTrueBlackBox),this.chargeLayoutDirty=!0,this.connectedEmitter=new b.A,this.moveToFrontEmitter=new b.A,this.vertexSelectedEmitter=new b.A,this.vertexMovedEmitter=new b.A,this.startDragEmitter=new b.A({parameters:[{valueType:Ir}]}),this.disposeEmitterCircuitElement=new b.A,this.vertexMovedListener=this.emitVertexMoved.bind(this),this.linkVertexListener=this.linkVertex.bind(this),this.startPositionProperty.link(this.vertexMovedListener),this.endPositionProperty.link(this.vertexMovedListener),this.voltageDifferenceProperty=new R(this.computeVoltageDifference()),this.vertexVoltageListener=()=>this.voltageDifferenceProperty.set(this.computeVoltageDifference()),this.startVertexProperty.link(this.linkVertexListener),this.endVertexProperty.link(this.linkVertexListener),this.chargePathLength=s,this.circuitElementDisposed=!1,this.lengthProperty=void 0,this.isEditableProperty=new o(!0,(0,t.sF)({tandem:a.createTandem("isEditableProperty"),phetioDocumentation:"Whether the CircuitElement can have its numerical characteristics changed by the user",phetioFeatured:!0},h.isEditablePropertyOptions)),this.isDisposableProperty=new o(!0,{tandem:a.createTandem("isDisposableProperty"),phetioDocumentation:"Whether the CircuitElement can be disposed. Set this to false to make the CircuitElement persisent",phetioFeatured:!0}),this.isValueDisplayableProperty=new o(!0,(0,t.sF)({tandem:a.createTandem("isValueDisplayableProperty"),phetioDocumentation:'Whether the CircuitElement\'s value can be displayed when the "values" checkbox is selected',phetioFeatured:!0},h.isValueDisplayablePropertyOptions)),this.labelStringProperty=new rc("",(0,t.sF)({tandem:a.createTandem("labelStringProperty"),phetioDocumentation:"Shows a custom text label next to the circuit element",phetioFeatured:!0},h.labelStringPropertyOptions))}};zD.CircuitElementIO=new f.A("CircuitElementIO",{valueType:zD,documentation:"A Circuit Element, such as battery, resistor or wire",toStateObject:e=>({startVertexID:UD.toStateObject(e.startVertexProperty.value),endVertexID:UD.toStateObject(e.endVertexProperty.value)}),stateSchema:{startVertexID:UD,endVertexID:UD},stateObjectToCreateElementArguments:e=>[UD.fromStateObject(e.startVertexID),UD.fromStateObject(e.endVertexID)]}),jx.register("CircuitElement",zD);let WD=class extends g.A{reset(){this.isActiveProperty.reset(),this.bodyPositionProperty.reset(),this.isDraggingProbesWithBodyProperty.reset()}constructor(e,t){super({tandem:e,phetioState:!1,phetioFeatured:!0}),this.phetioIndex=t,this.isActiveProperty=new o(!1,{tandem:e.createTandem("isActiveProperty"),phetioFeatured:!0}),this.bodyPositionProperty=new ch(Te.A.ZERO,{tandem:e.createTandem("bodyPositionProperty"),phetioFeatured:!0}),this.isDraggingProbesWithBodyProperty=new o(!0,{tandem:e.createTandem("isDraggingProbesWithBodyProperty")}),this.droppedEmitter=new b.A({parameters:[{valueType:Ie}]})}};jx.register("Meter",WD);let QD=class extends WD{setConnectionAndCurrent(e){this.currentProperty.value=null===e?null:e.current,this.probeConnectionProperty.value=null===e?null:e.circuitElement}reset(){super.reset(),this.currentProperty.reset(),this.probePositionProperty.reset()}constructor(e,t){super(e,t),this.currentProperty=new r.A(null,{tandem:e.createTandem("currentProperty"),units:"A",phetioValueType:(0,C.A)(I.A),phetioReadOnly:!0,phetioFeatured:!0}),this.probePositionProperty=new ch(Te.A.ZERO,{tandem:e.createTandem("probePositionProperty"),phetioFeatured:!0}),this.probeConnectionProperty=new r.A(null,{tandem:e.createTandem("probeConnectionProperty"),phetioFeatured:!0,phetioValueType:(0,C.A)(Kf(zD.CircuitElementIO)),phetioReadOnly:!0,phetioDocumentation:"The circuit element that the ammeter is connected to, or null if not connected to a circuit element"}),this.isActiveProperty.link(e=>{e||(this.probeConnectionProperty.value=null)})}};jx.register("Ammeter",QD);const KD=new b.A({parameters:[{valueType:Object},{valueType:A.A}]});u.A.register("phetioStateSetEmitter",KD);const jD=KD,_D=new c.A;let ZD=class extends Jv{dispose(){}disposeElement(e){(0,a.A)(this._array,e),this.countProperty.value=this._array.length,super.disposeElement(e)}getArray(){return this._array}getArrayCopy(){return this._array.slice()}getElement(e){return this._array[e]}getLastElement(){return this.getElement(this.count-1)}get count(){return this.countProperty.value}filter(e){return this._array.filter(e)}includes(e){return this._array.includes(e)}indexOf(e){return this._array.indexOf(e)}forEach(e){this._array.forEach(e)}find(e){return this._array.find(e)}map(e){return this._array.map(e)}clear(e){const i=(0,t.Ay)()({phetioState:null,resetIndex:!0},e);for(;this._array.length>0;)this.disposeElement(this._array[0]);i.resetIndex&&(this.groupElementIndex=this.groupElementStartingIndex)}createCorrespondingGroupElement(e){const t=Zl.A.getGroupElementIndex(e);this.groupElementIndex===t&&this.groupElementIndex++;for(var i=arguments.length,n=new Array(i>1?i-1:0),s=1;s2&&void 0!==arguments[2]&&arguments[2];const i=this.phetioDynamicElementName+Zl.A.GROUP_SEPARATOR+e,n=A.A.PHET_IO_ENABLED&&this.isPhetioInstrumented()?this.phetioType.parameterTypes[0]:null,s=this.createDynamicElement(i,t,n);return this._array.push(s),this.countProperty.value=this._array.length,this.notifyElementCreated(s),s}constructor(e,i,n){var s;const r=(0,t.Ay)()({groupElementStartingIndex:1,containerSuffix:"Group"},n);super(e,i,r),this._array=[],this.groupElementStartingIndex=r.groupElementStartingIndex,this.groupElementIndex=this.groupElementStartingIndex,this.countProperty=new R(0,{tandem:null==(s=r.tandem)?void 0:s.createTandem("countProperty"),phetioDocumentation:"the number of elements in the group",phetioReadOnly:!0,phetioFeatured:!0,numberType:"Integer"})}};ZD.PhetioGroupIO=e=>(_D.has(e)||_D.set(e,new f.A(`PhetioGroupIO<${e.typeName}>`,{isValidValue:e=>e instanceof ZD,documentation:"An array that sends notifications when its values have changed.",metadataDefaults:{phetioDynamicElementName:null},parameterTypes:[e],addChildElement(t,i,n){const s=e.stateObjectToCreateElementArguments(n),r=Zl.A.getGroupElementIndex(i),o=t.createIndexedElement(r,s,!0);return t.groupElementIndex=Math.max(r+1,t.groupElementIndex),o}})),_D.get(e)),u.A.register("PhetioGroup",ZD);const XD=ZD,JD=new f.A("GetSetButtonsIO",{isValidValue:e=>!0});u.A.register("GetSetButtonsIO",JD);const $D=JD;let ek=class extends zD{constructor(e,i,n,s,r){const o=(0,t.Ay)()({numberOfDecimalPlaces:1},r);super(e,i,n,s,o),this.numberOfDecimalPlaces=o.numberOfDecimalPlaces,this.distanceBetweenVertices=e.positionProperty.get().distance(i.positionProperty.get()),this.isFixedCircuitElement=!0}};jx.register("FixedCircuitElement",ek);let tk=class extends me{constructor(e,t,i){super([e,t],(e,t)=>Math.abs(e*e*t),{units:"W",tandem:i,phetioValueType:I.A,phetioDocumentation:"The dissipated power in Watts",phetioHighFrequency:!0,phetioFeatured:!0})}};jx.register("PowerDissipatedProperty",tk);let ik=class extends ek{dispose(){this.voltageProperty.dispose(),this.powerDissipatedProperty.dispose(),this.powerGeneratedProperty.dispose(),super.dispose()}getCircuitProperties(){return[this.voltageProperty]}constructor(e,i,n,s,r,o){const a=(0,t.Ay)()({initialOrientation:"right",voltage:9,isFlammable:!0,numberOfDecimalPlaces:1,voltagePropertyOptions:{tandem:r.createTandem("voltageProperty"),phetioFeatured:!0}},o);super(e,i,s,r,a),this.voltageProperty=new R(a.voltage,a.voltagePropertyOptions),this.internalResistanceProperty=n,this.powerDissipatedProperty=new tk(this.currentProperty,n,r.createTandem("powerDissipatedProperty")),this.powerGeneratedProperty=new oe([this.currentProperty,this.voltageProperty],(e,t)=>Math.abs(e*t),{tandem:r.createTandem("powerGeneratedProperty"),phetioValueType:I.A,phetioHighFrequency:!0,phetioFeatured:!0}),this.initialOrientation=a.initialOrientation}};jx.register("VoltageSource",ik);let nk=class e extends ik{getCircuitProperties(){return[this.frequencyProperty,this.phaseProperty,this.maximumVoltageProperty,...super.getCircuitProperties()]}dispose(){this.maximumVoltageProperty.dispose(),this.frequencyProperty.dispose(),this.phaseProperty.dispose(),this.isPhaseEditableProperty.dispose(),this.isFrequencyEditableProperty.dispose(),this.isVoltageEditableProperty.dispose(),super.dispose()}step(e,t,i){super.step(e,t,i),this.time=e,this.voltageProperty.value=-this.maximumVoltageProperty.value*Math.sin(2*Math.PI*this.frequencyProperty.value*e+this.phaseProperty.value*Math.PI/180)}constructor(i,n,s,r,a){const l=(0,t.Ay)()({initialOrientation:"right",voltage:9,isFlammable:!0,numberOfDecimalPlaces:2,voltagePropertyOptions:{range:e.VOLTAGE_RANGE}},a);super(i,n,s,hD.BATTERY_LENGTH,r,l),this.isTraversibleProperty=new o(!0),this.maximumVoltageProperty=new R(l.voltage,{tandem:r.createTandem("maximumVoltageProperty"),range:e.MAX_VOLTAGE_RANGE}),this.frequencyProperty=new R(e.DEFAULT_FREQUENCY,{tandem:r.createTandem("frequencyProperty"),range:e.FREQUENCY_RANGE}),this.phaseProperty=new R(0,{range:new T(-180,180),tandem:r.createTandem("phaseProperty"),units:ZE.DEGREES}),this.isPhaseEditableProperty=new o(!0,{tandem:r.createTandem("isPhaseEditableProperty")}),this.isFrequencyEditableProperty=new o(!0,{tandem:r.createTandem("isFrequencyEditableProperty")}),this.isVoltageEditableProperty=new o(!0,{tandem:r.createTandem("isVoltageEditableProperty")}),this.time=0}};nk.VOLTAGE_RANGE=new T(-120,120),nk.DEFAULT_FREQUENCY=.5,nk.FREQUENCY_RANGE=new T(.1,2),nk.MAX_VOLTAGE_RANGE=new T(0,120),jx.register("ACVoltage",nk);const sk=Jx.currentUnitsStringProperty,rk=Jx.voltageUnitsStringProperty,ok={createCurrentReadout:function(e,t){if(tD.fullPrecisionAmmeter)return e+"";{const i=t?1e3:1e10,n=t?"> 10^3":"> 10^10",s=t?"< -10^3":"< -10^10",r=nD.value;if(null===e)return ZE.NO_VALUE;if(r===$x.MAGNITUDE&&Math.abs(e)>i)return n;if(r===$x.SIGNED&&e>i)return n;if(r===$x.SIGNED&&e<-i)return s;{const t=nD.value===$x.MAGNITUDE?Math.abs(e):e;return Ge.A.fillIn(sk,{current:RD.toFixed(t,hD.METER_PRECISION)})}}},createVoltageReadout:function(e){return Ge.A.fillIn(rk,{voltage:RD.toFixed(e,hD.METER_PRECISION)})},setInSceneGraph:function(e,t,i){e&&!t.hasChild(i)?t.addChild(i):!e&&t.hasChild(i)&&t.removeChild(i)},clampMagnitude(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e20;return Math.abs(e)>t?Math.sign(e)*t:e},getDropItemHitBoxForBounds(e){const t=.5*(1-hD.RETURN_ITEM_HIT_BOX_RATIO);return e.erodedXY(t*e.width,t*e.height)}};jx.register("CCKCUtils",ok);const ak=ok;let lk=class extends ek{clear(){this.mnaVoltageDrop=0,this.mnaCurrent=0,this.clearEmitter.emit()}dispose(){this.clearEmitter.dispose(),this.isClearableProperty.dispose(),super.dispose()}constructor(e,t,i,n,s){super(e,t,i,n,s),this.mnaVoltageDrop=0,this.mnaCurrent=0,this.clearEmitter=new b.A,this.isClearableProperty=new o(!0,{tandem:n.createTandem("isClearableProperty"),phetioDocumentation:"Determines whether the button to clear the component can be shown"})}};jx.register("DynamicCircuitElement",lk);let hk=class e extends lk{dispose(){this.capacitanceProperty.dispose(),super.dispose()}getCircuitProperties(){return[this.capacitanceProperty]}constructor(i,n,s,r){const a=(0,t.Ay)()({capacitance:e.CAPACITANCE_DEFAULT,numberOfDecimalPlaces:e.NUMBER_OF_DECIMAL_PLACES},r);super(i,n,hD.CAPACITOR_LENGTH,s,a),this.isTraversibleProperty=new o(!0),this.capacitanceProperty=new R(a.capacitance,{range:e.CAPACITANCE_RANGE,tandem:s.createTandem("capacitanceProperty")}),this.capacitanceProperty.lazyLink((e,t)=>{const i=t*(this.endVertexProperty.value.voltageProperty.value-this.startVertexProperty.value.voltageProperty.value)/e,n=this.startVertexProperty.value.voltageProperty.value,s=(i-(this.endVertexProperty.value.voltageProperty.value-n))/2;this.startVertexProperty.value.voltageProperty.value-=s,this.endVertexProperty.value.voltageProperty.value+=s,this.mnaVoltageDrop=-i})}};hk.CAPACITANCE_RANGE=new T(tD.capacitanceMin,tD.capacitanceMax),hk.NUMBER_OF_DECIMAL_PLACES=tD.capacitorNumberDecimalPlaces,hk.CAPACITANCE_DEFAULT=tD.capacitanceDefault,jx.register("Capacitor",hk);let ck=class e extends ek{dispose(){super.dispose(),this.currentRatingProperty.dispose(),this.isRepairableProperty.dispose(),this.isTrippedProperty.dispose()}resetFuse(){this.isTrippedProperty.reset(),this.timeCurrentRatingExceeded=0}step(e,t,i){super.step(e,t,i),Math.abs(this.currentProperty.value)>this.currentRatingProperty.value+1e-6?this.timeCurrentRatingExceeded+=t:this.timeCurrentRatingExceeded=0,this.timeCurrentRatingExceeded>0&&(this.isTrippedProperty.value=!0),this.resistanceProperty.value=this.isTrippedProperty.value?hD.MAX_RESISTANCE:1/this.currentRatingProperty.value*.06}getCircuitProperties(){return[this.resistanceProperty,this.isTrippedProperty]}constructor(i,n,s,r,a){const l=(0,t.Ay)()({fuseLength:hD.RESISTOR_LENGTH,currentRating:e.DEFAULT_CURRENT_RATING,isCurrentReentrant:!0,numberOfDecimalPlaces:1},a);super(i,n,l.fuseLength,s,l),this.currentRatingProperty=new R(l.currentRating,{range:e.RANGE,tandem:s.createTandem("currentRatingProperty"),phetioFeatured:!0}),this.isTrippedProperty=new o(!1,{tandem:s.createTandem("isTrippedProperty"),phetioFeatured:!0}),this.isTraversibleProperty=oe.not(this.isTrippedProperty),this.resistanceProperty=new R(hD.MINIMUM_RESISTANCE),this.timeCurrentRatingExceeded=0,this.isRepairableProperty=new o(!0,{tandem:s.createTandem("isRepairableProperty"),phetioFeatured:!0}),this.isTrippedProperty.lazyLink(()=>{r&&r.componentEditedEmitter.emit()})}};ck.RANGE=new T(.5,20),ck.DEFAULT_CURRENT_RATING=4,jx.register("Fuse",ck);const dk=hD.INDUCTOR_LENGTH;let uk=class e extends lk{dispose(){this.inductanceProperty.dispose(),super.dispose()}getCircuitProperties(){return[this.inductanceProperty]}constructor(i,n,s,r){const a=(0,t.Ay)()({inductance:e.INDUCTANCE_DEFAULT,numberOfDecimalPlaces:e.INDUCTANCE_NUMBER_OF_DECIMAL_PLACES},r);super(i,n,dk,s,a),this.isTraversibleProperty=new o(!0),this.inductanceProperty=new R(a.inductance,{range:e.INDUCTANCE_RANGE,tandem:s.createTandem("inductanceProperty")})}};uk.INDUCTANCE_DEFAULT=tD.inductanceDefault,uk.INDUCTANCE_RANGE=new T(tD.inductanceMin,tD.inductanceMax),uk.INDUCTANCE_NUMBER_OF_DECIMAL_PLACES=tD.inductorNumberDecimalPlaces,jx.register("Inductor",uk);let pk=class extends Ve.A{};pk.LIFELIKE=new pk,pk.SCHEMATIC=new pk,pk.enumeration=new Pe.A(pk,{phetioDocumentation:"Enumeration that determines how the circuit elements are rendered: lifelike or schematic"}),jx.register("CircuitElementViewType",pk);const mk=[new Te.A(.623,2.063),new Te.A(.623,.7605),new Te.A(.471,.46464),new Te.A(.471,.3834),new Te.A(.591,.336),new Te.A(.823*.87,.565*.6),new Te.A(.77256,.36),new Te.A(.922*.87,.699*.6),new Te.A(.80649,1.474),new Te.A(.88992,1.474)],gk=[new Te.A(.5,2.06),new Te.A(.5,.34),new Te.A(.89,.34),new Te.A(.89,1.474)];let Ak=class e extends ek{static createAtPosition(t,i,n,s,r,o,a){return new e(t,i,s,r,o,a)}static createVertexPair(t,i){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const s=e.createSamplePoints(t);return{startVertex:n?new YD(s[0],i.selectionProperty):i.vertexGroup.createNextElement(s[0]),endVertex:n?new YD(s[1],i.selectionProperty):i.vertexGroup.createNextElement(s[1])}}static createSamplePoints(e){const t=new Te.A(19,10),i=new Te.A(e.x-18,e.y).plus(t),n=i.plus(Te.A.createPolar(36,-Math.PI/4));return[i,n]}updatePathLength(){this.chargePathLength=this.getPathLength()}getPathLength(){let t=0;const i=this.viewTypeProperty.value===pk.LIFELIKE?mk:gk;let n=e.getFilamentPathPoint(0,Te.A.ZERO,i);for(let s=1;s3&&void 0!==arguments[3]?arguments[3]:0;return new e(t,new T(t,t),i,n,s)}constructor(e,t,i,n){let s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;super(),this.defaultResistance=e,this.range=t,this.isMetallic=i,this.length=n,this.verticalOffset=s}};fk.RESISTOR=new fk(10,new T(0,120),!1,hD.RESISTOR_LENGTH),fk.EXTREME_RESISTOR=new fk(1e3,new T(100,1e4),!1,hD.RESISTOR_LENGTH),fk.COIN=fk.fixed(0,!0,hD.COIN_LENGTH),fk.PAPER_CLIP=fk.fixed(0,!0,hD.PAPER_CLIP_LENGTH),fk.PENCIL=fk.fixed(25,!1,hD.PENCIL_LENGTH),fk.ERASER=fk.fixed(1e6,!1,hD.ERASER_LENGTH),fk.HAND=fk.fixed(1e5,!1,hD.HAND_LENGTH,15),fk.DOG=fk.fixed(1e5,!1,hD.DOG_LENGTH,-40),fk.DOLLAR_BILL=fk.fixed(1e6,!1,hD.DOLLAR_BILL_LENGTH),fk.enumeration=new Pe.A(fk),jx.register("ResistorType",fk);let bk=class e extends ek{dispose(){this.resistanceProperty.dispose(),this.powerDissipatedProperty.dispose(),this.isColorCodeVisibleProperty.dispose(),super.dispose()}isResistanceEditable(){return this.resistorType===fk.EXTREME_RESISTOR||this.resistorType===fk.RESISTOR}getCircuitProperties(){return[this.resistanceProperty]}constructor(i,n,s,r,a){const l=(0,t.Ay)()({isFlammable:!0,phetioType:e.ResistorIO,numberOfDecimalPlaces:s===fk.RESISTOR?1:0},a);l.isMetallic=s.isMetallic,s!==fk.RESISTOR&&s!==fk.EXTREME_RESISTOR&&(l.isEditablePropertyOptions={tandem:A.A.OPT_OUT}),super(i,n,s.length,r,l),this.isTraversibleProperty=new o(!0),this.resistorType=s,this.resistanceProperty=new R(s.defaultResistance,{tandem:r.createTandem("resistanceProperty"),range:this.resistorType.range,phetioFeatured:!0}),this.powerDissipatedProperty=new tk(this.currentProperty,this.resistanceProperty,r.createTandem("powerDissipatedProperty")),this.isColorCodeVisibleProperty=new o(!0,{tandem:this.resistorType===fk.RESISTOR?r.createTandem("isColorCodeVisibleProperty"):A.A.OPT_OUT,phetioDocumentation:"Whether the view can display the resistor color code bands",phetioFeatured:!0})}};bk.RESISTANCE_DECIMAL_PLACES=1,bk.HIGH_RESISTANCE_DECIMAL_PLACES=0,bk.ResistorIO=new f.A("ResistorIO",{valueType:bk,supertype:zD.CircuitElementIO,stateSchema:{resistorType:(0,ht.A)(fk)},toStateObject:e=>{const t=zD.CircuitElementIO.toStateObject(e);return _.merge({resistorType:(0,ht.A)(fk).toStateObject(e.resistorType)},t)},stateObjectToCreateElementArguments(e){const t=zD.CircuitElementIO.stateObjectToCreateElementArguments(e);return t.push((0,ht.A)(fk).fromStateObject(e.resistorType)),t}}),jx.register("Resistor",bk);let Pk=class extends ek{getCircuitProperties(){return[]}constructor(e,i,n,s){const r=(0,t.Ay)()({isEditablePropertyOptions:{tandem:A.A.OPT_OUT},isValueDisplayablePropertyOptions:{tandem:A.A.OPT_OUT},labelStringPropertyOptions:{tandem:A.A.OPT_OUT}},s);super(e,i,hD.SERIES_AMMETER_LENGTH,n,r),this.isTraversibleProperty=new o(!0),this.resistanceProperty=new R(0)}};jx.register("SeriesAmmeter",Pk);const Vk=hD.SWITCH_LENGTH,vk=hD.SWITCH_START,wk=hD.SWITCH_END;let Ek=class extends ek{dispose(){this.isClosedProperty.dispose(),super.dispose()}updateMatrixForPoint(e,t){const i=this.startPositionProperty.get(),n=this.endPositionProperty.get(),s=e/this.chargePathLength;if(s>vk&&s{this.resistanceProperty.value=e?0:hD.MAX_RESISTANCE,n&&n.componentEditedEmitter.emit()})}};jx.register("Switch",Ek);let Sk=class extends zD{step(e,t,i){super.step(e,t,i),this.update()}update(){const e=this.startPositionProperty.get(),t=this.endPositionProperty.get(),i=e.distance(t),n=5e-4*i;this.lengthProperty.set(n);const s=this.resistivityProperty.get()*n/hD.WIRE_CROSS_SECTIONAL_AREA,r=Math.max(hD.MINIMUM_WIRE_RESISTANCE,s);this.resistanceProperty.set(r),this.chargePathLength=Math.max(i,1e-6)}getCircuitProperties(){return[this.resistanceProperty]}dispose(){this.vertexMovedEmitter.removeListener(this.updateListener),this.resistivityProperty.unlink(this.updateListener),super.dispose()}constructor(e,i,n,s,r){const a=(0,t.Ay)()({wireStub:!1,isMetallic:!0,isEditablePropertyOptions:{tandem:A.A.OPT_OUT},isValueDisplayablePropertyOptions:{tandem:A.A.OPT_OUT},labelStringPropertyOptions:{tandem:A.A.OPT_OUT}},r),l=e.positionProperty.get().distance(i.positionProperty.get());super(e,i,l,s,a),this.isTraversibleProperty=new o(!0),this.wireStub=a.wireStub,this.resistanceProperty=new R(hD.MINIMUM_WIRE_RESISTANCE),phet.chipper.queryParameters.dev&&this.resistanceProperty.link(console.log),this.resistivityProperty=n,this.lengthProperty=new R(0),this.updateListener=()=>this.update(),this.vertexMovedEmitter.addListener(this.updateListener),this.resistivityProperty.link(this.updateListener),this.update()}};jx.register("Wire",Sk);let Tk=class{constructor(e,t,i){this.id=e,this.node0=t,this.node1=i}};jx.register("CoreModel",Tk);let Ck=class extends Tk{constructor(e,t,i,n,s){super(e,t,i),this.voltage=n,this.current=s}};jx.register("DynamicCoreModel",Ck);let Ik=class extends Ck{constructor(e,t,i,n,s,r){super(e,t,i,n,s),this.capacitance=r,this.capacitorVoltageNode1=null}};jx.register("LTACapacitor",Ik);let xk=class extends Ck{constructor(e,t,i,n,s,r){super(e,t,i,n,s),this.inductance=r,this.inductorVoltageNode1=null}};jx.register("LTAInductor",xk);let Dk=class{getNodeVoltage(e){return this.mnaSolution.getNodeVoltage(e)}getCurrent(e){return e.resistance>0?this.mnaSolution.getCurrentForResistor(e):this.mnaSolution.getSolvedCurrent(e)}getCurrentForCompanion(e){return _.find(this.currentCompanions,t=>t.element.id===e.id).getValueForSolution(this.mnaSolution)}getVoltage(e,t){return this.getNodeVoltage(t)-this.getNodeVoltage(e)}constructor(e,t,i){this.circuit=e,this.mnaSolution=t,this.currentCompanions=i}};jx.register("LTASolution",Dk);let kk=class e{update(t){this.solution=this.ltaCircuit.solvePropagate(t);const i=this.ltaCircuit.updateCircuit(this.solution);return new e(i,this.solution)}getCharacteristicArray(){const e=[];for(let t=0;t{t+=n.state.ltaSolution.getCurrent(e)*n.dt,i+=n.dt});const n=t/i;return n}getTimeAverageCurrentForCoreModel(e){let t=0,i=0;this.resultSet.forEach(n=>{t+=n.state.ltaSolution.getCurrentForCompanion(e)*n.dt,i+=n.dt});const n=t/i;return n}getInstantaneousCurrent(e){return this.getFinalState().ltaSolution.getCurrent(e)}getInstantaneousVoltage(e){return this.getFinalState().ltaSolution.getVoltage(e.nodeId0,e.nodeId1)}getInstantaneousVoltageForCoreModel(e){return this.getFinalState().ltaSolution.getVoltage(e.node0,e.node1)}getInstantaneousCurrentForCoreModel(e){return this.getFinalState().ltaSolution.getCurrentForCompanion(e)}getFinalState(){return _.last(this.resultSet).state}constructor(e){this.resultSet=e}};jx.register("LTAStateSet",Mk);let Bk=class{containsNodeId(e){return this.nodeId0===e||this.nodeId1===e}getOppositeNode(e){return this.nodeId0===e?this.nodeId1:this.nodeId0}toString(){return`${this.nodeId0}, ${this.nodeId1}`}constructor(e,t){this.nodeId0=e,this.nodeId1=t}};jx.register("MNACircuitElement",Bk);let Ok=class extends Bk{constructor(e,t,i){super(e,t),this.voltage=i}};jx.register("MNABattery",Ok);let Lk=class{getSolvedCurrent(e){return this.elements.get(e)}approxEquals(e,t){const i=Array.from(this.nodeVoltages.keys()),n=Array.from(e.nodeVoltages.keys());_.difference(i,n);for(let s=0;sMath.abs(e-t)<1e-4;jx.register("MNASolution",Lk);let Nk=class{toString(){return"toString() only defined when assertions are enabled"}getCurrentCount(){let e=0;for(let t=0;t0;){const i=e[0];t.push(i);const n=this.getConnectedNodeIds(i);for(let t=0;t0;){const e=i.shift();t.push(e);for(let n=0;nnew Yk(e)),n=[...t,...i],s=e=>{const t=qk(n,e);return t},r=new Oa(e.length,this.getNumVars()),o=new Oa(e.length,1);let a;try{for(let t=0;t{for(let i=0;i{const o=t.cond();return`Debugging circuit: ${e.toString()}\n equations:\n${n.join("\n")}\n\nA.cond=1E${RD.toFixed(Math.log10(o),4)} = ${RD.toFixed(o,4)} \nA=\n${t.transpose().toString()}\nz=\n${i.transpose().toString()}\nunknowns=\n${s.map(e=>e.toTermName()).join(", ")}\nx=\n${r.transpose().toString()}\n `};let zk=class extends Bk{constructor(e,t,i){super(e,t),this.resistance=i}};jx.register("MNAResistor",zk);const Wk=tD.minDT,Qk=tD.searchTimeStep;let Kk=class{stepInTimeWithHistory(e,t,i){let n=e,s=0;const r=[];let o=i;for(;si-s&&(o=i-s))}return phet.log&&console.log("states per frame: "+r.length),r}search(e,t,i,n){if(i===hD.PAUSED_DT)return{dt:hD.PAUSED_DT,state:t.update(e,hD.PAUSED_DT)};if(i<=Wk)return{dt:Wk,state:t.update(e,Wk)};if(Qk){const s=t.update(e,i),r=n||t.update(e,i/2),o=t.update(r,i/2),a=t.distance(s,o);return a<1e-5?{dt:i,state:o}:this.search(e,t,i/2,r)}return{dt:Wk,state:t.update(e,Wk)}}};jx.register("TimestepSubdivisions",Kk);let jk=class e{solvePropagate(e){const t=[],i=[],n=[];let s=0;this.ltaBatteries.forEach(e=>{const r="syntheticNode"+s++,o=new Ok(e.node0,r,e.voltage),a=new zk(r,e.node1,e.resistance);t.push(o),i.push(a),n.push({element:e,getValueForSolution:e=>e.getSolvedCurrent(o)})}),this.ltaCapacitors.forEach(r=>{const o="syntheticNode"+s++,a="syntheticNode"+s++,l=e/2/r.capacitance,h=tD.capacitorResistance,c=l*r.current-r.voltage,d=new Ok(r.node0,o,c),u=new zk(o,a,l),p=new zk(a,r.node1,h);t.push(d),i.push(u),i.push(p),r.capacitorVoltageNode1=a,n.push({element:r,getValueForSolution:e=>e.getCurrentForResistor(u)})}),this.ltaInductors.forEach(r=>{const o="syntheticNode"+s++,a="syntheticNode"+s++,l=2*r.inductance/e,h=r.voltage+-l*r.current,c=new Ok(r.node0,o,h),d=new zk(o,a,l),u=new zk(a,r.node1,tD.inductorResistance);t.push(c),i.push(d),i.push(u),r.inductorVoltageNode1=a,n.push({element:r,getValueForSolution:e=>e.getCurrentForResistor(d)})});const r=t,o=[...this.ltaResistors,...i],a=new Nk(r,o,[]).solve();return new Dk(this,a,n)}solveWithSubdivisions(e,t){const i={update:(e,t)=>e.update(t),distance:(e,t)=>_k(e.getCharacteristicArray(),t.getCharacteristicArray())},n=e.stepInTimeWithHistory(new kk(this,null),i,t);return new Mk(n)}solveWithSubdivisions2(e){return this.solveWithSubdivisions(new Kk,e)}updateWithSubdivisions(e){return this.solveWithSubdivisions2(e).getFinalState().ltaCircuit}solveItWithSubdivisions(e){return this.solveWithSubdivisions2(e).getFinalState().ltaSolution}update(e){return this.updateCircuit(this.solvePropagate(e))}updateCircuit(t){const i=this.ltaCapacitors.map(e=>new Ik(e.id,e.node0,e.node1,t.getVoltage(e.node0,e.capacitorVoltageNode1),t.getCurrentForCompanion(e),e.capacitance)),n=this.ltaInductors.map(e=>new xk(e.id,e.node0,e.node1,t.getVoltage(e.node0,e.inductorVoltageNode1),t.getCurrentForCompanion(e),e.inductance));return new e(this.ltaResistors,this.ltaBatteries,i,n)}constructor(e,t,i,n){this.ltaResistors=e,this.ltaBatteries=t,this.ltaCapacitors=i,this.ltaInductors=n}};const _k=(e,t)=>{let i=0;for(let n=0;nMath.log(e)/Math.log(t),n=m.getFinalState().ltaSolution.getVoltage(t.nodeId0,t.nodeId1),s=Math.abs(n),r=2,o=3;t.resistance=Ak.REAL_BULB_COLD_RESISTANCE+o*s/e(s+r,r),i.resistanceProperty.value=t.resistance}}p=new jk(n,i,s,r),m=p.solveWithSubdivisions(Jk,t)}i.forEach(e=>{h.get(e).currentProperty.value=m.getTimeAverageCurrentForCoreModel(e)}),n.forEach(e=>{l.get(e).currentProperty.value=m.getTimeAverageCurrent(e)}),s.forEach(e=>{const t=c.get(e);t.currentProperty.value=m.getTimeAverageCurrentForCoreModel(e),t.mnaCurrent=ak.clampMagnitude(m.getInstantaneousCurrentForCoreModel(e)),t.mnaVoltageDrop=ak.clampMagnitude(m.getInstantaneousVoltageForCoreModel(e))}),r.forEach(e=>{const t=d.get(e);t.currentProperty.value=m.getTimeAverageCurrentForCoreModel(e),t.mnaCurrent=ak.clampMagnitude(m.getInstantaneousCurrentForCoreModel(e)),t.mnaVoltageDrop=ak.clampMagnitude(m.getInstantaneousVoltageForCoreModel(e))}),o.forEach(e=>{e.currentProperty.value=0,e instanceof Ak&&e.isReal&&(e.resistanceProperty.value=Ak.REAL_BULB_COLD_RESISTANCE)});const g=[],A=[];e.vertexGroup.forEach(e=>{const t=m.getFinalState().ltaSolution.getNodeVoltage(e.index+"");"number"==typeof t?(e.voltageProperty.value=-t,g.push(e)):A.push(e)});const y=(e,t,i)=>{if(!g.includes(i)){const n=e===t.startVertexProperty.value?1:-1;t.isTraversibleProperty.value&&(t instanceof bk||t instanceof Sk||t instanceof Ak||t instanceof Ek||t instanceof ck||t instanceof Pk?(i.voltageProperty.value=e.voltageProperty.value,g.push(i)):t instanceof ik?(i.voltageProperty.value=e.voltageProperty.value+n*t.voltageProperty.value,g.push(i)):(t instanceof hk||t instanceof uk)&&(i.voltageProperty.value=e.voltageProperty.value-n*t.mnaVoltageDrop,g.push(i)))}},f=[],b=(t,i)=>{f.push(t),e.circuitElements.forEach(e=>{if(e.containsVertex(t)){const n=e.getOppositeVertex(t);!f.includes(n)&&e.isTraversibleProperty.value&&(i(t,e,n),b(n,i))}})},P=[...g,...A];P.forEach(e=>{f.includes(e)||b(e,y)});const V=[...o],v=t=>e.conserveCurrent(t,V);f.length=0,P.forEach(e=>b(e,v)),A.forEach(e=>{})}};jx.register("LinearTransientAnalysis",eM);const tM=hD.BATTERY_LENGTH;let iM=class e extends ik{step(e,t,i){}dispose(){this.isReversibleProperty.dispose(),super.dispose()}constructor(i,n,s,r,a,l){const h=(0,t.Ay)()({initialOrientation:"right",voltage:e.VOLTAGE_DEFAULT,isFlammable:!0,numberOfDecimalPlaces:"normal"===r?e.VOLTAGE_DECIMAL_PLACES:e.HIGH_VOLTAGE_DECIMAL_PLACES,voltagePropertyOptions:{range:"normal"===r?e.VOLTAGE_RANGE:e.HIGH_VOLTAGE_RANGE}},l);super(i,n,s,tM,a,h),this.isTraversibleProperty=new o(!0),this.initialOrientation=h.initialOrientation,this.batteryType=r,this.isReversibleProperty=new o(!0,{tandem:a.createTandem("isReversibleProperty"),phetioFeatured:!0})}};iM.VOLTAGE_DEFAULT=9,iM.VOLTAGE_RANGE=new T(0,120),iM.VOLTAGE_DECIMAL_PLACES=1,iM.HIGH_VOLTAGE_DEFAULT=1e3,iM.HIGH_VOLTAGE_RANGE=new T(100,1e5),iM.HIGH_VOLTAGE_DECIMAL_PLACES=0,jx.register("Battery",iM);let nM=class extends We.A{updatePositionAndAngle(){this.circuitElement.updateMatrixForPoint(this.distance,this.matrix),this.changedEmitter.emit()}dispose(){this.changedEmitter.dispose(),super.dispose()}constructor(e,t,i,n){super(),this.charge=n,this.circuitElement=e,this.distance=t,this.matrix=Pt.identity(),this.visibleProperty=i,this.changedEmitter=new b.A,this.updatePositionAndAngle()}};jx.register("Charge",nM);const sM=.43*hD.CHARGE_SEPARATION,rM=function(e){return Math.abs(e.currentProperty.get())};let oM=class{reset(){this.timeScaleProperty.reset(),this.timeScaleRunningAverage.clear()}step(e){if(0===this.charges.length||0===this.circuit.circuitElements.length)return;e=Math.min(e,1/30);const t=_.maxBy(this.circuit.circuitElements,rM),i=rM(t),n=25*i*(1/30);this.scale=n>=sM?sM/n:1;const s=RD.clamp(this.timeScaleRunningAverage.updateRunningAverage(this.scale),0,1);this.timeScaleProperty.set(s);for(let r=0;re.updatePositionAndAngle())}equalizeAll(e){const t=Oe.A.shuffle(_.range(this.charges.length));for(let i=0;i=1e-10&&this.equalizeCharge(n,e)}}equalizeCharge(e,t){const i=this.circuit.getChargesInCircuitElement(e.circuitElement),n=_.sortBy(i,"distance"),s=n.indexOf(e),r=n[s+1],o=n[s-1];if(r&&o){const i=r.distance-o.distance,n=e.distance;let s=o.distance+i/2;const a=Math.abs(s-n);if(Math.sign(s-n)===Math.sign(-e.circuitElement.currentProperty.get()*e.charge)){const i=Math.abs(68.75*t);a>i&&(sn&&(s=n+i)),s>=0&&s<=e.circuitElement.chargePathLength&&(e.distance=s)}}}propagate(e,t){const i=e.distance,n=-e.circuitElement.currentProperty.get()*e.charge;if(Math.abs(n)>1e-10){const s=i+25*n*t*this.scale;if(e.circuitElement.containsScalarPosition(s))e.distance=s;else{const t=n<0?-s:s-e.circuitElement.chargePathLength,i=s<0?e.circuitElement.startVertexProperty.get():e.circuitElement.endVertexProperty.get(),r=this.getPositions(e,t,i,0);if(r.length>0){const t=_.maxBy(r,"distanceToClosestElectron");e.circuitElement=t.circuitElement,e.distance=t.distance}}}}getPositions(e,t,i,n){const s=this.circuit,r=this.circuit.getNeighborCircuitElements(i),o=[];for(let a=0;a1e-10&&l.startVertexProperty.get()===i?(c=RD.clamp(t,0,l.chargePathLength),d=!0):h<-1e-10&&l.endVertexProperty.get()===i&&(c=RD.clamp(l.chargePathLength-t,0,l.chargePathLength),d=!0),d){const t=s.getChargesInCircuitElement(l),r=l.startVertexProperty.get()===i;let a=0;if(t.length>0)a=r?_.minBy(t,"distance").distance:l.chargePathLength-_.maxBy(t,"distance").distance,"number"==typeof c&&o.push({circuitElement:l,distance:c,distanceToClosestElectron:a});else if(n<20){const t=this.getPositions(e,0,l.getOppositeVertex(i),n+1);if(t.length>0){const e=_.minBy(t,"distanceToClosestElectron");"number"==typeof c&&o.push({circuitElement:l,distance:c,distanceToClosestElectron:e.distanceToClosestElectron+l.chargePathLength})}}}}return o}constructor(e){this.charges=e.charges,this.circuit=e,this.scale=1,this.timeScaleRunningAverage=new Tv(30),this.timeScaleProperty=new R(1,{range:new T(0,1)})}};jx.register("ChargeAnimator",oM);let aM=class extends Ve.A{};aM.ELECTRONS=new aM,aM.CONVENTIONAL=new aM,aM.enumeration=new Pe.A(aM),jx.register("CurrentType",aM);let lM=class extends Ve.A{};lM.EXPLORE=new lM,lM.TEST=new lM,lM.enumeration=new Pe.A(lM),jx.register("InteractionMode",lM);const hM=e=>e<0?FD.BACKWARD:e>0?FD.FORWARD:FD.UNSPECIFIED,cM=_.constant(!0);let dM=class e extends g.A{disposeCircuitElement(e){this.circuitElements.remove(e),this.groups.forEach(t=>t.includes(e)&&t.disposeElement(e))}createVertexPairArray(e,t){return[this.createVertex(e.plusXY(-t/2,0)),this.createVertex(e.plusXY(t/2,0))]}createVertex(e){return this.vertexGroup.createNextElement(e)}moveVerticesApart(e,t){const i=this.getNeighboringVertices(e),n=this.getNeighboringVertices(t);1!==i.length||e.blackBoxInterfaceProperty.get()?1!==n.length||t.blackBoxInterfaceProperty.get()||this.bumpAwaySingleVertex(t,n[0]):this.bumpAwaySingleVertex(e,i[0])}relayoutAllCharges(){this.circuitElements.forEach(e=>{e.chargeLayoutDirty=!0}),this.layoutChargesInDirtyCircuitElements()}bumpAwaySingleVertex(e,t){const i=e.positionProperty.value.distance(t.positionProperty.value);if(i<20){let i=t.positionProperty.value.minus(e.positionProperty.value);0===i.magnitude&&(i=new Te.A(1,0));const n=i.normalized().times(-45);this.translateVertexGroup(e,n)}else{const n=Math.PI/4*100/i;this.rotateSingleVertexByAngle(e,t,n);const s=this.closestDistanceToOtherVertex(e);this.rotateSingleVertexByAngle(e,t,-2*n);const r=this.closestDistanceToOtherVertex(e);r<=s&&this.rotateSingleVertexByAngle(e,t,2*n)}}rotateSingleVertexByAngle(e,t,i){const n=e.positionProperty.get(),s=t.positionProperty.get(),r=n.distance(s),o=n.minus(s).angle,a=s.plus(Te.A.createPolar(r,o+i));e.unsnappedPositionProperty.set(a),e.positionProperty.set(a)}closestDistanceToOtherVertex(e){let t=null;for(let i=0;i!e.blackBoxInterfaceProperty.value).forEach(e=>this.vertexGroup.disposeElement(e)),this.markDirty()}else this.circuitElements.clear(),this.groups.forEach(e=>e.clear()),this.vertexGroup.clear()}cutVertex(e){if(e.isDragged)return;let t=this.getNeighborCircuitElements(e);if(t.length<=1)return;t=t.filter(e=>e.interactiveProperty.get());const i=()=>t.map(t=>{const i=t.getOppositeVertex(e).positionProperty.get(),n=e.positionProperty.get();let s=i.minus(n);return 0===s.magnitude&&(s=Te.A.createPolar(1,Oe.A.nextDouble()*Math.PI*2)),s.withMagnitude(30)});let n=i(),s=n.map(e=>e.angle);t.length>2&&(t=_.sortBy(t,e=>{const i=t.indexOf(e);return s[i]}),n=i(),s=n.map(e=>e.angle));const r=2*Math.PI/t.length;let o=[];const a=_.sum(s)/s.length;if(2===t.length){const e=Te.A.createPolar(30,a-r/t.length),i=Te.A.createPolar(30,a+r/t.length),n=s[0]-a;o=n<0?[e,i]:[i,e]}else{const e=t.length<=5?30:30*t.length/5;t.forEach((t,i)=>{o.push(Te.A.createPolar(e,r*i+s[0]))})}t.forEach((t,i)=>{const n=this.vertexGroup.createNextElement(e.positionProperty.get());t.replaceVertex(e,n),this.translateVertexGroup(n,o[i])}),e.blackBoxInterfaceProperty.get()||this.vertexGroup.disposeElement(e),this.markDirty()}translateVertexGroup(e,t){const i=this.findAllFixedVertices(e);for(let n=0;ne.blackBoxInterfaceProperty.get())}isSingle(e){return 1===this.getNeighborCircuitElements(e.startVertexProperty.get()).length&&1===this.getNeighborCircuitElements(e.endVertexProperty.get()).length}removeVertexIfOrphaned(e){0!==this.getNeighborCircuitElements(e).length||e.blackBoxInterfaceProperty.get()||e.isDisposed||this.vertexGroup.disposeElement(e)}getNeighborCircuitElements(e){return this.circuitElements.filter(t=>t.containsVertex(e))}getNeighborCircuitElementsForCircuitElement(e){return[...this.getNeighborCircuitElements(e.startVertexProperty.value),...this.getNeighborCircuitElements(e.endVertexProperty.value)].filter(t=>t!==e)}countCircuitElements(e){return this.circuitElements.count(t=>t.containsVertex(e))}getVoltageBetweenConnections(e,t,i){return null===e||null===t?null:this.areVerticesElectricallyConnected(e.vertex,t.vertex)?e.vertex.insideTrueBlackBoxProperty.get()&&!i||t.vertex.insideTrueBlackBoxProperty.get()&&!i?null:e.voltage-t.voltage:null}areVerticesElectricallyConnected(e,t){return this.searchVertices(e,(e,t)=>t.isTraversibleProperty.value).includes(t)}markDirty(){this.dirty=!0}connect(e,t){t.blackBoxInterfaceProperty.get()?this.connect(t,e):(this.circuitElements.forEach(i=>{i.containsVertex(t)&&(i.replaceVertex(t,e),i.connectedEmitter.emit())}),t.isDraggableProperty.value||(e.isDraggableProperty.value=t.isDraggableProperty.value),t.isCuttableProperty.value||(e.isCuttableProperty.value=t.isCuttableProperty.value),""===e.labelStringProperty.value&&(e.labelStringProperty.value=t.labelStringProperty.value),this.vertexGroup.disposeElement(t),this.markDirty(),e.relayerEmitter.emit())}step(e){this.stepActions.forEach(e=>e()),this.stepActions.length=0,this.timeProperty.value+=e;const t=this.circuitElements.filter(e=>e.step),i=this.circuitElements.filter(e=>e instanceof lk);if(t.forEach(t=>t.step(this.timeProperty.value,e,this)),this.dirty||t.length>0||i.length>0){eM.solveModifiedNodalAnalysis(this,e),this.dirty=!1,this.circuitElements.filter(e=>e instanceof uk).forEach(e=>{const t=t=>this.getNeighborCircuitElements(t).filter(t=>t!==e).filter(e=>Math.abs(e.currentProperty.value)>1e-4).length>0;t(e.startVertexProperty.value)||t(e.endVertexProperty.value)||e.clear()}),this.circuitChangedEmitter.emit()}this.determineSenses(),this.chargeAnimator.step(e)}layoutChargesInDirtyCircuitElements(){this.circuitElements.forEach(e=>this.layoutCharges(e))}isVertexAdjacent(e,t){return e!==t&&this.circuitElements.some(i=>i.containsBothVertices(e,t))}getNeighborVerticesInGroup(e,t){const i=[];for(let n=0;n{0===e.currentProperty.value&&(e.currentSenseProperty.value=FD.UNSPECIFIED)});const t=this.circuitElements.filter(e=>0!==e.currentProperty.value);for(;;){if(0===t.filter(e=>e.currentSenseProperty.value===FD.UNSPECIFIED).length)break;this.propagateSenses();const i=t.filter(e=>e.currentSenseProperty.value===FD.UNSPECIFIED);if(0===i.length)break;let n=!1;const s=i.filter(e=>e instanceof nk);if(s.length>0){const t=s[0],i=this.circuitElements.filter(e=>e instanceof nk&&e.currentSenseProperty.value!==FD.UNSPECIFIED&&e!==t);i.length>0&&(e.assignSense(t,i[0]),n=!0)}if(!n){i.sort((e,t)=>this.getNeighborCircuitElementsForCircuitElement(e).length-this.getNeighborCircuitElementsForCircuitElement(t).length);const e=i[0];e.currentSenseProperty.value=hM(e.currentProperty.value),n=!0}}}static assignSense(e,t){const i=e.currentProperty.value,n=t.currentProperty.value,s=t.currentSenseProperty.value,r=n>=0&&s===FD.FORWARD?"positive":n>=0&&s===FD.BACKWARD||n<0&&s===FD.FORWARD?"negative":n<0&&s===FD.BACKWARD?"positive":"error";var o;e.currentSenseProperty.value="positive"===r?hM(i):(o=i)<0?FD.FORWARD:o>0?FD.BACKWARD:FD.UNSPECIFIED}propagateSenses(){const t=this.circuitElements.filter(e=>e.currentSenseProperty.value!==FD.UNSPECIFIED);if(t.length>0){const i=[];t.forEach(e=>{i.includes(e.startVertexProperty.value)||i.push(e.startVertexProperty.value),i.includes(e.endVertexProperty.value)||i.push(e.endVertexProperty.value)});const n=[];for(;i.length>0;){const t=i.pop();if(!n.includes(t)){const s=this.getNeighborCircuitElements(t);for(let r=0;re!==o&&e.currentSenseProperty.value!==FD.UNSPECIFIED);t.length>0&&e.assignSense(o,t[0])}n.includes(a)||i.includes(a)||i.push(a)}n.push(t)}}}}searchVertices(e,t){const i=[],n=[e],s=[];for(;n.length>0;){const e=n.pop();if(!s.includes(e)){const i=this.getNeighborCircuitElements(e);for(let r=0;r0;){const n=t.pop();if(!i.includes(n)){i.push(n);for(let i=0;it.circuitElement===e)}findAllFixedVertices(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e=>!0;return this.searchVertices(e,(e,i,n)=>t?i instanceof ek&&t(e,i,n):i instanceof ek)}getSelectedVertex(){const e=this.selectionProperty.value;return e instanceof YD?e:null}getDropTarget(e,t,i){lM.TEST;let n=this.vertexGroup.filter(t=>{if(this.isVertexAdjacent(e,t))return!1;if(t===e)return!1;if(t.isDragged)return!1;if(!(e.unsnappedPositionProperty.get().distance(t.positionProperty.get())<30))return!1;if(!t.attachableProperty.get())return!1;for(let r=0;r{if(!i.blackBoxInterfaceProperty.get()&&!t.containsPoint(i.positionProperty.get()))return!1;const n=i.positionProperty.get().minus(e.positionProperty.get());if(!i.blackBoxInterfaceProperty.get()&&!t.containsPoint(i.positionProperty.get()))return!0;for(let r=0;r!e.outerWireStub)}if(0===n.length)return null;return _.sortBy(n,t=>e.unsnappedPositionProperty.get().distance(t.positionProperty.get()))[0]}checkCurrentConservation(e){console.log("####### "+e),this.vertexGroup.forEach(e=>{const t=this.getNeighborCircuitElements(e);let i=0;t.forEach(t=>{const n=(t.startVertexProperty.value===e?1:-1)*t.currentProperty.value;i+=n}),console.log(`${e.index}: ${i}`)})}conserveCurrent(e,t){const i=this.getNeighborCircuitElements(e);let n=0;if(i.forEach(t=>{const i=(t.startVertexProperty.value===e?1:-1)*t.currentProperty.value;n+=i}),Math.abs(n)>1e-10){const s=i.filter(e=>!t.includes(e)),r=n/s.length;s.forEach(i=>{const n=i.startVertexProperty.value===e?1:-1;i.currentProperty.value+=-n*r,t.push(i)})}}flip(e){const t=e.startVertexProperty.value,i=e.endVertexProperty.value;e.startVertexProperty.value=i,e.endVertexProperty.value=t;const n=e.currentSenseProperty.value===FD.FORWARD?FD.BACKWARD:e.currentSenseProperty.value===FD.BACKWARD?FD.FORWARD:FD.UNSPECIFIED;e.currentSenseProperty.value=n,e.chargeLayoutDirty=!0,this.layoutChargesInDirtyCircuitElements(),this.markDirty()}layoutCharges(e){if(e.chargeLayoutDirty){e.chargeLayoutDirty=!1;const t=this.getChargesInCircuitElement(e),i=hD.CHARGE_SEPARATION/2,n=e.chargePathLength-i,s=i,r=n-s,o=Math.ceil(r/hD.CHARGE_SEPARATION),a=r/(o-1);for(let l=0;l0&&t[0].charge===h&&t[0].circuitElement===e&&t[0].visibleProperty===this.showCurrentProperty){const i=t.shift();i.circuitElement=e,i.distance=r,i.updatePositionAndAngle()}else{const t=new nM(e,r,this.showCurrentProperty,h);this.charges.add(t)}}this.charges.removeAll(t)}}toString(){return this.circuitElements.map(e=>e.constructor.name).join(", ")}reset(){this.clear(),this.showCurrentProperty.reset(),this.currentTypeProperty.reset(),this.wireResistivityProperty.reset(),this.sourceResistanceProperty.reset(),this.chargeAnimator.reset(),this.selectionProperty.reset()}constructor(e,t,i,n){super({tandem:i,phetioType:uM,phetioState:!1}),this.viewTypeProperty=e,this.addRealBulbsProperty=t;const s=n;this.includeACElements=s.includeACElements,this.includeLabElements=s.includeLabElements,this.blackBoxStudy=s.blackBoxStudy,this.wireResistivityProperty=new R(hD.WIRE_RESISTIVITY_RANGE.min,{tandem:i.parentTandem.createTandem("wireResistivityProperty"),range:hD.WIRE_RESISTIVITY_RANGE,phetioFeatured:!0}),this.sourceResistanceProperty=new R(hD.DEFAULT_BATTERY_RESISTANCE,{tandem:i.parentTandem.createTandem("sourceResistanceProperty"),range:hD.BATTERY_RESISTANCE_RANGE,phetioFeatured:!0}),this.circuitElements=U({phetioState:!0,phetioType:U.ObservableArrayIO(Kf(zD.CircuitElementIO)),tandem:i.createTandem("circuitElements"),phetioDocumentation:"All Circuit Elements, used for state save/restore",phetioFeatured:!0,elementAddedEmitterOptions:{phetioFeatured:!0},elementRemovedEmitterOptions:{phetioFeatured:!0},lengthPropertyOptions:{phetioFeatured:!0}}),this.charges=U(),this.currentTypeProperty=new rh("electrons"===tD.currentType?aM.ELECTRONS:aM.CONVENTIONAL,{tandem:i.parentTandem.createTandem("currentTypeProperty"),phetioFeatured:!0}),this.currentTypeProperty.lazyLink(()=>this.relayoutAllCharges()),this.showCurrentProperty=new o(tD.showCurrent,{tandem:i.parentTandem.createTandem("showCurrentProperty"),phetioFeatured:!0}),this.timeProperty=new R(0),this.chargeAnimator=new oM(this);const a=this.markDirty.bind(this);this.circuitElements.addItemAddedListener(e=>{e.getCircuitProperties().forEach(e=>e.lazyLink(a)),e instanceof lk&&(e.clearEmitter.addListener(a),e.disposeEmitterCircuitElement.addListener(()=>{e.clearEmitter.removeListener(a)})),e.chargeLayoutDirty=!0;const t=()=>this.markAllConnectedCircuitElementsDirty(e.startVertexProperty.get());e.lengthProperty&&(e.lengthProperty.link(t),e.disposeEmitterCircuitElement.addListener(()=>e.lengthProperty.unlink(t))),this.markDirty(),e.currentSenseProperty.lazyLink(l)}),this.circuitElements.addItemRemovedListener(e=>{this.removeVertexIfOrphaned(e.startVertexProperty.get()),this.removeVertexIfOrphaned(e.endVertexProperty.get()),this.selectionProperty.get()===e&&(this.selectionProperty.value=null),e.getCircuitProperties().forEach(e=>e.unlink(a)),this.charges.removeAll(this.getChargesInCircuitElement(e)),e.currentSenseProperty.unlink(l),this.markDirty()}),this.charges.addItemRemovedListener(e=>e.dispose()),this.circuitChangedEmitter=new b.A,this.vertexDroppedEmitter=new b.A({parameters:[{valueType:YD}]}),this.componentEditedEmitter=new b.A,this.selectionProperty=new r.A(null,{tandem:i.createTandem("selectionProperty"),phetioValueType:(0,C.A)(Kf(cn([zD.CircuitElementIO,YD.VertexIO]))),phetioFeatured:!0});const l=()=>{this.dirty=!0,this.circuitChangedEmitter.emit()};this.vertexGroup=new XD((e,t)=>new YD(t,this.selectionProperty,{tandem:e,phetioType:YD.VertexIO}),[new Te.A(-1e3,0)],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(YD.VertexIO),tandem:i.createTandem("vertexGroup")});const h=this.vertexGroup.createArchetype(this.vertexGroup.tandem.createTandem("archetypeStartVertex"),[new Te.A(0,0)]),c=this.vertexGroup.createArchetype(this.vertexGroup.tandem.createTandem("archetypeEndVertex"),[new Te.A(100,0)]);this.vertexGroup.elementCreatedEmitter.addListener(e=>{e.positionProperty.link(l);this.vertexGroup.filter(t=>e===t);this.selectionProperty.value=null}),this.stepActions=[],this.vertexDroppedEmitter.addListener(e=>{this.stepActions.push(()=>{const t=this.getNeighboringVertices(e);t.push(e);const i=[];if(t.forEach(e=>{this.vertexGroup.forEach(t=>{e!==t&&i.push({v1:e,v2:t})})}),i.length>0){const e=e=>e.v2.unsnappedPositionProperty.get().distance(e.v1.unsnappedPositionProperty.get()),t=_.minBy(i,e);e(t)<20&&!t.v1.isDragged&&!t.v2.isDragged&&this.moveVerticesApart(t.v1,t.v2)}})}),this.sourceResistanceProperty.link(a);const d=()=>[h,c];this.wireGroup=new XD((e,t,i)=>new Sk(t,i,this.wireResistivityProperty,e),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("wireGroup")}),this.batteryGroup=new XD((e,t,i)=>new iM(t,i,this.sourceResistanceProperty,"normal",e),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("batteryGroup")});const u=this.includeLabElements&&!this.includeACElements;this.extremeBatteryGroup=u?new XD((e,t,i)=>new iM(t,i,this.sourceResistanceProperty,"high-voltage",e,{voltage:1e3,numberOfDecimalPlaces:iM.HIGH_VOLTAGE_DECIMAL_PLACES}),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("extremeBatteryGroup"),phetioDynamicElementName:"extremeBattery"}):null,this.acVoltageGroup=this.includeACElements?new XD((e,t,i)=>new nk(t,i,this.sourceResistanceProperty,e),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("acVoltageGroup")}):null,this.resistorGroup=new XD((e,t,i)=>new bk(t,i,fk.RESISTOR,e),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(bk.ResistorIO),tandem:i.createTandem("resistorGroup")}),this.extremeResistorGroup=u?new XD((e,t,i)=>new bk(t,i,fk.EXTREME_RESISTOR,e),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(bk.ResistorIO),tandem:i.createTandem("extremeResistorGroup")}):null,this.householdObjectGroup=new XD((e,t,i,n)=>new bk(t,i,n,e),()=>[...d(),fk.COIN],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(bk.ResistorIO),tandem:i.createTandem("householdObjectGroup")}),this.fuseGroup=new XD((e,t,i)=>new ck(t,i,e,this),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("fuseGroup")}),this.seriesAmmeterGroup=this.includeLabElements?new XD((e,t,i)=>new Pk(t,i,e),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("seriesAmmeterGroup")}):null,this.extremeLightBulbGroup=u?new XD((e,t,i)=>Ak.createAtPosition(t,i,this,hD.HIGH_RESISTANCE,this.viewTypeProperty,e,{isExtreme:!0}),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("extremeLightBulbGroup")}):null,this.capacitorGroup=this.includeACElements?new XD((e,t,i)=>new hk(t,i,e),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("capacitorGroup")}):null,this.inductorGroup=this.includeACElements?new XD((e,t,i)=>new uk(t,i,e),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("inductorGroup")}):null,this.switchGroup=new XD((e,t,i)=>new Ek(t,i,e,this),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("switchGroup")}),this.lightBulbGroup=new XD((e,t,i)=>new Ak(t,i,hD.DEFAULT_RESISTANCE,this.viewTypeProperty,e),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("lightBulbGroup")}),this.realLightBulbGroup=this.includeLabElements&&!this.includeACElements?new XD((e,t,i)=>new Ak(t,i,hD.DEFAULT_RESISTANCE,this.viewTypeProperty,e,{isReal:!0,isEditablePropertyOptions:{tandem:A.A.OPT_OUT}}),d,{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(zD.CircuitElementIO),tandem:i.createTandem("realLightBulbGroup")}):null,this.groups=[this.wireGroup,this.batteryGroup,this.resistorGroup,this.switchGroup,this.lightBulbGroup,this.fuseGroup,this.householdObjectGroup,...this.extremeBatteryGroup?[this.extremeBatteryGroup]:[],...this.extremeResistorGroup?[this.extremeResistorGroup]:[],...this.extremeLightBulbGroup?[this.extremeLightBulbGroup]:[],...this.realLightBulbGroup?[this.realLightBulbGroup]:[],...this.seriesAmmeterGroup?[this.seriesAmmeterGroup]:[],...this.acVoltageGroup?[this.acVoltageGroup]:[],...this.capacitorGroup?[this.capacitorGroup]:[],...this.inductorGroup?[this.inductorGroup]:[]],this.dirty=!1}};const uM=new f.A("CircuitStateIO",{supertype:$D,valueType:dM,methods:{getValue:{returnType:lx.A,parameterTypes:[],implementation:function(){return phet.phetio.phetioEngine.phetioStateEngine.getState(this)},documentation:"Gets the current value of the circuit on this screen."},getValidationError:{returnType:(0,C.A)(x.A),parameterTypes:[lx.A],implementation:function(e){const t=Array.from(Object.keys(e));for(let i=0;i2&&void 0!==arguments[2]?arguments[2]:e.voltageProperty.value;this.vertex=e,this.voltage=i,this.circuitElement=t}};pM.VoltageConnectionIO=new f.A("VoltageConnectionIO",{valueType:pM,documentation:"In order to describe how a Voltmeter probe is connected to a circuit. It indicates the measured Vertex or Circuit Element, and the voltage at that point. For non-ideal wires, the voltage indicates the partial voltage dropped up to that point on the wire, like a potentiometer.",toStateObject:e=>({connection:Kf(f.A.ObjectIO).toStateObject(e.circuitElement||e.vertex),voltage:e.voltage}),fromStateObject:e=>null,stateSchema:{connection:Kf(f.A.ObjectIO),voltage:I.A}}),jx.register("VoltageConnection",pM);let mM=class extends WD{reset(){super.reset(),this.voltageProperty.reset(),this.redProbePositionProperty.reset(),this.blackProbePositionProperty.reset()}constructor(e,t){super(e,t),this.voltageProperty=new r.A(null,{tandem:e.createTandem("voltageProperty"),units:"V",phetioValueType:(0,C.A)(I.A),phetioReadOnly:!0,phetioFeatured:!0}),this.redProbePositionProperty=new ch(Te.A.ZERO,{tandem:e.createTandem("redProbePositionProperty"),phetioFeatured:!0}),this.blackProbePositionProperty=new ch(Te.A.ZERO,{tandem:e.createTandem("blackProbePositionProperty"),phetioFeatured:!0}),this.blackProbeConnectionProperty=new r.A(null,{tandem:e.createTandem("blackProbeConnectionProperty"),phetioValueType:(0,C.A)(pM.VoltageConnectionIO),phetioReadOnly:!0,phetioFeatured:!0}),this.redProbeConnectionProperty=new r.A(null,{tandem:e.createTandem("redProbeConnectionProperty"),phetioValueType:(0,C.A)(pM.VoltageConnectionIO),phetioReadOnly:!0,phetioFeatured:!0}),this.isActiveProperty.link(e=>{e||(this.blackProbeConnectionProperty.value=null,this.redProbeConnectionProperty.value=null)})}};jx.register("Voltmeter",mM);const gM=new Ct.A("twixt");let AM=class e{static polynomialEaseInValue(e,t){return Math.pow(t,e)}static polynomialEaseOutValue(e,t){return 1-Math.pow(1-t,e)}static polynomialEaseInOutValue(t,i){return i<=.5?.5*Math.pow(2*i,t):1-e.polynomialEaseInOutValue(t,1-i)}static polynomialEaseInDerivative(e,t){return e*Math.pow(t,e-1)}static polynomialEaseOutDerivative(e,t){return e*Math.pow(1-t,e-1)}static polynomialEaseInOutDerivative(t,i){return i<=.5?Math.pow(2,t-1)*t*Math.pow(i,t-1):e.polynomialEaseInOutDerivative(t,1-i)}static polynomialEaseInSecondDerivative(e,t){return(e-1)*e*Math.pow(t,e-2)}static polynomialEaseOutSecondDerivative(e,t){return-(e-1)*e*Math.pow(1-t,e-2)}static polynomialEaseInOutSecondDerivative(t,i){return i<=.5?Math.pow(2,t-1)*(t-1)*t*Math.pow(i,t-2):-e.polynomialEaseInOutSecondDerivative(t,1-i)}static polynomialEaseIn(t){return new e(e.polynomialEaseInValue.bind(null,t),e.polynomialEaseInDerivative.bind(null,t),e.polynomialEaseInSecondDerivative.bind(null,t))}static polynomialEaseOut(t){return new e(e.polynomialEaseOutValue.bind(null,t),e.polynomialEaseOutDerivative.bind(null,t),e.polynomialEaseOutSecondDerivative.bind(null,t))}static polynomialEaseInOut(t){return new e(e.polynomialEaseInOutValue.bind(null,t),e.polynomialEaseInOutDerivative.bind(null,t),e.polynomialEaseInOutSecondDerivative.bind(null,t))}constructor(e,t,i){this.value=e,this.derivative=t,this.secondDerivative=i}};AM.LINEAR=AM.polynomialEaseIn(1),AM.QUADRATIC_IN=AM.polynomialEaseIn(2),AM.QUADRATIC_OUT=AM.polynomialEaseOut(2),AM.QUADRATIC_IN_OUT=AM.polynomialEaseInOut(2),AM.CUBIC_IN=AM.polynomialEaseIn(3),AM.CUBIC_OUT=AM.polynomialEaseOut(3),AM.CUBIC_IN_OUT=AM.polynomialEaseInOut(3),AM.QUARTIC_IN=AM.polynomialEaseIn(4),AM.QUARTIC_OUT=AM.polynomialEaseOut(4),AM.QUARTIC_IN_OUT=AM.polynomialEaseInOut(4),AM.QUINTIC_IN=AM.polynomialEaseIn(5),AM.QUINTIC_OUT=AM.polynomialEaseOut(5),AM.QUINTIC_IN_OUT=AM.polynomialEaseInOut(5),gM.register("Easing",AM);const yM=AM;let fM=class{step(e){const t=this.ratio;if(t<1){let i=t+e/.35;i>1&&(i=1),this.ratio=i;const n=yM.CUBIC_IN_OUT.value(i)-yM.CUBIC_IN_OUT.value(t);return this.zoomCallback(n*this.totalDelta),i>=1}return t>=1}constructor(e,t,i){this.easing=yM.CUBIC_IN_OUT,this.ratio=0,this.totalDelta=t-e,this.zoomCallback=i}};jx.register("ZoomAnimation",fM);let bM=class{stepSingleStep(){_.times(6,()=>this.stepOnce(1/60)),this.circuit.layoutChargesInDirtyCircuitElements()}stepOnce(e){this.isValueDepictionEnabledProperty.value&&this.circuit.step(e),this.stopwatch.step(e),this.stepEmitter.emit(e)}step(e){if(!(e>=hD.MAX_DT)){if(this.zoomAnimation){this.zoomAnimation.step(e)&&(this.zoomAnimation=null)}(this.isPlayingProperty.value||this.circuit.dirty)&&this.stepOnce(this.isPlayingProperty.value?1/60:hD.PAUSED_DT),this.circuit.layoutChargesInDirtyCircuitElements()}}reset(){this.isValueDepictionEnabledProperty.reset(),this.showLabelsProperty.reset(),this.showValuesProperty.reset(),this.modeProperty.reset(),this.circuit.reset(),this.voltmeters.forEach(e=>e.reset()),this.ammeters.forEach(e=>e.reset()),this.viewTypeProperty.reset(),this.zoomLevelProperty.reset(),this.animatedZoomScaleProperty.reset(),this.stopwatch.reset(),this.isPlayingProperty.reset(),this.addRealBulbsProperty.reset(),this.zoomAnimation=null}constructor(e,i,n,s){const r=(0,t.Ay)()({revealing:!0,blackBoxStudy:!1,showNoncontactAmmeters:!0},s);this.zoomAnimation=null,this.viewTypeProperty=new rh(pk.LIFELIKE,{tandem:n.createTandem("viewTypeProperty"),phetioFeatured:!0}),this.addRealBulbsProperty=new o(tD.addRealBulbs,{tandem:i?n.createTandem("addRealBulbsProperty"):A.A.OPT_OUT,phetioFeatured:!0,hasListenerOrderDependencies:!0}),this.isShowNoncontactAmmeters=r.showNoncontactAmmeters;const a=n.createTandem("circuit");this.circuit=new dM(this.viewTypeProperty,this.addRealBulbsProperty,a,{blackBoxStudy:r.blackBoxStudy,includeLabElements:i,includeACElements:e});const l=n.createTandem("meters");this.voltmeters=[new mM(l.createTandem("voltmeter1"),1),new mM(l.createTandem("voltmeter2"),2)],this.ammeters=[new QD(this.isShowNoncontactAmmeters?l.createTandem("ammeter1"):A.A.OPT_OUT,1),new QD(this.isShowNoncontactAmmeters?l.createTandem("ammeter2"):A.A.OPT_OUT,2)],[...this.voltmeters,...this.ammeters].forEach(e=>{e.isActiveProperty.link(e=>{e&&(this.circuit.selectionProperty.value=null)})});const h=r.blackBoxStudy?n.createTandem("blackBoxStudy"):A.A.OPT_OUT;this.isValueDepictionEnabledProperty=new o(!tD.showDepictValuesToggleButton,{tandem:h.createTandem("isValueDepictionEnabledProperty"),phetioDocumentation:"whether the light bulb brightness and ammeter/voltmeter readouts, charges, flame, etc. can be seen"}),this.showLabelsProperty=new o(!0,{tandem:n.createTandem("showLabelsProperty"),phetioFeatured:!0}),this.showValuesProperty=new o(!1,{tandem:n.createTandem("showValuesProperty"),phetioFeatured:!0}),this.zoomLevelProperty=new R(hD.ZOOM_SCALES.indexOf(1),{numberType:"Integer",range:new T(0,hD.ZOOM_SCALES.length-1),tandem:n.createTandem("zoomLevelProperty"),phetioDocumentation:"This Property is controlled by the zoom buttons. It is an integer index that tells the sim how much to scale the view. Smaller values are more zoomed out. See zoomScaleProperty for the actual scale value.",phetioFeatured:!0}),this.zoomScaleProperty=new oe([this.zoomLevelProperty],e=>hD.ZOOM_SCALES[e],{validValues:hD.ZOOM_SCALES,tandem:n.createTandem("zoomScaleProperty"),phetioValueType:I.A,phetioDocumentation:"Scale that is applied to the view. This Property is derived from zoomLevelProperty, which is controlled by the zoom buttons."}),this.animatedZoomScaleProperty=new R(this.zoomScaleProperty.get()),this.zoomScaleProperty.lazyLink(e=>{m.value?this.animatedZoomScaleProperty.value=e:this.zoomAnimation=new fM(this.animatedZoomScaleProperty.get(),e,e=>{const t=this.animatedZoomScaleProperty.value+e,i=Math.min(...hD.ZOOM_SCALES),n=Math.max(...hD.ZOOM_SCALES),s=RD.clamp(t,i,n);this.animatedZoomScaleProperty.value=s})}),this.isPlayingProperty=new o(!0,{tandem:e?n.createTandem("isPlayingProperty"):A.A.OPT_OUT,phetioFeatured:!0}),this.modeProperty=new rh(lM.EXPLORE,{tandem:h.createTandem("modeProperty"),phetioDocumentation:"For Circuit Construction Kit: Black Box Study"});if(tD.showDepictValuesToggleButton){const e=()=>{this.isValueDepictionEnabledProperty.value=!1};this.circuit.vertexGroup.elementCreatedEmitter.addListener(e),this.circuit.vertexGroup.elementDisposedEmitter.addListener(e),this.circuit.componentEditedEmitter.addListener(e),this.circuit.circuitElements.lengthProperty.link(e)}const c=new b.A({tandem:a.createTandem("circuitChangedEmitter"),phetioDocumentation:"Emits when any circuit model parameter or topology has changed",phetioReadOnly:!0,phetioFeatured:!0}),d=()=>c.emit();this.circuit.vertexGroup.elementCreatedEmitter.addListener(d),this.circuit.vertexGroup.elementDisposedEmitter.addListener(d),this.circuit.componentEditedEmitter.addListener(d),this.isValueDepictionEnabledProperty.link(()=>this.circuit.chargeAnimator.timeScaleRunningAverage.clear()),this.viewTypeProperty.link(()=>{this.circuit.circuitElements.forEach(e=>{e instanceof Ak&&e.updatePathLength()}),this.circuit.relayoutAllCharges()}),this.revealingProperty=new o(r.revealing,{tandem:h.createTandem("revealingProperty"),phetioDocumentation:"For Circuit Construction Kit: Black Box Study"}),this.blackBoxBounds=null,this.stopwatch=new qD({tandem:e?n.createTandem("stopwatch"):A.A.OPT_OUT}),this.stepEmitter=new b.A({parameters:[{valueType:"number"}]})}};jx.register("CircuitConstructionKitModel",bM);let PM=class extends bM{constructor(e,t){super(!1,!0,e,t)}};bD.register("LabModel",PM);const VM=PM;let vM=class extends Hi{constructor(e,t){super();const i=e/3;this.rect(0,0,i,t),this.rect(2*i,0,i,t)}};Pa.register("PauseIconShape",vM);let wM=class extends Px{constructor(e,i){const n=(0,t.Ay)()({radius:KP.PLAY_CONTROL_BUTTON_RADIUS,includeGlobalHotkey:!0,endPlayingLabel:Wc.a11y.playControlButton.pauseStringProperty},i),s=n.radius,r=.6*n.radius;super(e,new ua(new vM(r,s),{fill:"black"}),n)}};Pa.register("PlayPauseButton",wM);let EM=class extends Cr{dispose(){this.lighterPaintProperty.dispose(),this.lightPaintProperty.dispose(),this.darkPaintProperty.dispose(),this.darkerPaintProperty.dispose(),super.dispose()}constructor(e,i){super();const n=(0,t.Ay)()({baseColor:new Wr(80,130,230),lightFactor:.5,lighterFactor:.1,darkFactor:.5,darkerFactor:.1,cornerRadius:10,lightSource:"leftTop",lightOffset:.525,darkOffset:.375},i),s=n.lightSource.includes("left"),r=n.lightSource.includes("Top"),o=n.cornerRadius;this.lighterPaintProperty=new xb(n.baseColor,{luminanceFactor:n.lightFactor+n.lighterFactor}),this.lightPaintProperty=new xb(n.baseColor,{luminanceFactor:n.lightFactor}),this.darkPaintProperty=new xb(n.baseColor,{luminanceFactor:-n.darkFactor}),this.darkerPaintProperty=new xb(n.baseColor,{luminanceFactor:-n.darkFactor-n.darkerFactor});const a=r?this.lighterPaintProperty:this.darkerPaintProperty,l=s?this.lightPaintProperty:this.darkPaintProperty,h=s?this.darkPaintProperty:this.lightPaintProperty,c=r?this.darkerPaintProperty:this.lighterPaintProperty,d=n.lightOffset*o,u=n.darkOffset*o,p=r?d:u,m=s?d:u,g=s?u:d,A=r?u:d,y=fa.roundedBounds(e,o,o,{pickable:!1}),f=fa.roundedBounds(e,o,o,{pickable:!1});y.fill=new tb(y.left,0,y.right,0).addColorStop(0,l).addColorStop(m/f.width,n.baseColor).addColorStop(1-g/f.width,n.baseColor).addColorStop(1,h),f.fill=new tb(0,f.top,0,f.bottom).addColorStop(0,a).addColorStop(p/f.height,new oe([a],e=>e.withAlpha(0))).addColorStop(1-A/f.height,new oe([c],e=>e.withAlpha(0))).addColorStop(1,c);const b=(new Hi).moveTo(0,0).arc(0,0,o,-Math.PI/2,0,!1).close(),P={leftTop:-Math.PI/2,rightTop:0,rightBottom:Math.PI/2,leftBottom:Math.PI}[n.lightSource],V=e.eroded(o),v=new ua(b,{x:s?V.minX:V.maxX,y:r?V.minY:V.maxY,rotation:P,fill:new nb(0,0,0,0,0,o).addColorStop(0,n.baseColor).addColorStop(1-d/o,n.baseColor).addColorStop(1,this.lighterPaintProperty),pickable:!1}),w=new ua(b,{x:s?V.maxX:V.minX,y:r?V.maxY:V.minY,rotation:P+Math.PI,fill:new nb(0,0,0,0,0,o).addColorStop(0,n.baseColor).addColorStop(1-u/o,n.baseColor).addColorStop(1,this.darkerPaintProperty),pickable:!1}),E=fa.roundedBounds(e,o,o,{stroke:new oe([h],e=>e.withAlpha(.4))});this.addChild(y),this.addChild(f),this.addChild(v),this.addChild(w),this.addChild(E),this.mutate(n)}};Pa.register("ShadedRectangle",EM);let SM=class extends Hi{constructor(e){super();const t=.3*e/2,i=.6*e,n=e,s=.5*e/2,r=.75*e/2;this.moveTo(s,-t),this.lineTo(i,-t),this.arc(i,n/2,n/2+t,-Math.PI/2,Math.PI/2,!1),this.lineTo(0,n+t),this.lineTo(0,n-t),this.lineTo(i,n-t),this.arc(i,n/2,n/2-t,Math.PI/2,-Math.PI/2,!0),this.lineTo(s,t),this.lineTo(s,r),this.lineTo(-s,0),this.lineTo(s,-r),this.close()}};Pa.register("UTurnArrowShape",SM);let TM=class e extends(ph(Cr)){dispose(){this.disposeStopwatchNode(),super.dispose()}static getDecimalPlaces(e,t){const i=Math.pow(10,t);e=(0,Xe.q)(e*i)/i;let n=""+(0,Xe.q)(e%1*i);for(;n.length{const i=n.showAsMinutesAndSeconds?CM(t):Math.floor(t),s=e.getDecimalPlaces(t,n.numberOfDecimalPlaces),r="string"==typeof n.units?n.units:n.units.value,o=n.smallNumberFont+"px";return Ge.A.fillIn(n.valueUnitsPattern,{value:`${i}${s}`,units:`${r}`})}}constructor(i,n){const s=(0,t.Ay)()({cursor:"pointer",numberDisplayRange:qD.ZERO_TO_ALMOST_SIXTY,iconHeight:10,iconFill:"black",iconLineWidth:1,backgroundBaseColor:"rgb( 80, 130, 230 )",buttonBaseColor:"#DFE0E1",resetButtonSoundPlayer:Gm.get("pushButton"),xSpacing:6,ySpacing:6,xMargin:8,yMargin:8,numberDisplayOptions:{numberFormatter:e.RICH_TEXT_MINUTES_AND_SECONDS,numberFormatterDependencies:[Wc.stopwatchValueUnitsPatternStringProperty],useRichText:!0,textOptions:{font:e.DEFAULT_FONT},align:"right",cornerRadius:4,xMargin:4,yMargin:2,maxWidth:150,pickable:!1},dragBoundsProperty:null,dragListenerOptions:{start:_.noop},keyboardDragListenerOptions:{},interactiveHighlightEnabled:!1,otherControls:[],includePlayPauseResetButtons:!0,visibleProperty:i.isVisibleProperty,tandem:A.A.REQUIRED,phetioFeatured:!0},n),r=new JE(i.timeProperty,s.numberDisplayRange,s.numberDisplayOptions);let o=null,a=null;if(s.includePlayPauseResetButtons){const e=new ua(new SM(s.iconHeight),{fill:s.iconFill}),n=e.height,r=.8*n,l=new ua(new bx(r,n),{fill:s.iconFill}),h=new ua(new vM(.75*r,n),{fill:s.iconFill}),c=new hP(i.isRunningProperty,h,l,(0,t.sF)({baseColor:s.buttonBaseColor,touchAreaXDilation:5,touchAreaXShift:5,touchAreaYDilation:8,tandem:s.tandem.createTandem("playPauseButton"),phetioVisiblePropertyInstrumented:!1,phetioEnabledPropertyInstrumented:!1},s.playPauseButtonOptions)),d=new Qb((0,t.sF)({listener:()=>{i.isRunningProperty.set(!1),i.timeProperty.set(0)},touchAreaXDilation:5,touchAreaXShift:-5,touchAreaYDilation:8,content:e,baseColor:s.buttonBaseColor,soundPlayer:s.resetButtonSoundPlayer,tandem:s.tandem.createTandem("resetButton"),phetioVisiblePropertyInstrumented:!1,phetioEnabledPropertyInstrumented:!1},s.resetButtonOptions));o=new Of({spacing:s.xSpacing,children:[d,c]});const u=e=>{d.enabled=e>0,c.enabled=e{i.timeProperty.unlink(u),d.dispose(),c.dispose()}}const l=new Rf({spacing:s.ySpacing,children:[r,...o?[o]:[],...s.otherControls]}),h=new Cr;l.boundsProperty.link(()=>{const e=new Ie(-s.xMargin,-s.yMargin,l.width+s.xMargin,l.height+s.yMargin);h.children=[new EM(e,{baseColor:s.backgroundBaseColor,tagName:"div",focusable:!0})]}),s.children=[h,l],super(s),phet.chipper.queryParameters.dev&&this.addChild(new Th(3,{fill:"red"}));const c=e=>{e?this.moveToFront():this.interruptSubtreeInput()};i.isVisibleProperty.link(c);const d=e=>this.setTranslation(e);i.positionProperty.link(d),this.dragListener=null,this.keyboardDragListener=null;let u=null;if(s.dragBoundsProperty){this.interactiveHighlightEnabled=!0,u=new oe([this.boundsProperty,s.dragBoundsProperty],(e,t)=>{const i=this.localToParentPoint(Te.A.ZERO);return new Ie(t.minX-(e.minX-i.x),t.minY-(e.minY-i.y),t.maxX-(e.maxX-i.x),t.maxY-(e.maxY-i.y))},{valueComparisonStrategy:"equalsFunction"}),s.dragBoundsProperty.link(()=>this.interruptSubtreeInput()),u.link(e=>{e.containsPoint(i.positionProperty.value)||(i.positionProperty.value=e.closestPointTo(i.positionProperty.value))});const e=(0,t.sF)({targetNode:this,positionProperty:i.positionProperty,dragBoundsProperty:u,tandem:s.tandem.createTandem("dragListener")},s.dragListenerOptions),n=e.start;e.start=(e,t)=>{this.moveToFront(),n(e,t)},this.dragListener=new Qm(e),h.addInputListener(this.dragListener);const r=(0,t.sF)({positionProperty:i.positionProperty,dragBoundsProperty:u,tandem:s.tandem.createTandem("keyboardDragListener")},s.keyboardDragListenerOptions);this.keyboardDragListener=new Km(r),this.addInputListener(this.keyboardDragListener),this.groupFocusHighlight=!0,this.addInputListener({down:()=>this.moveToFront()}),h.addInputListener({focus:()=>this.moveToFront()})}this.addLinkedElement(i,{tandemName:"stopwatch"}),this.disposeStopwatchNode=()=>{i.isVisibleProperty.unlink(c),i.positionProperty.unlink(d),r.dispose(),this.dragListener&&(h.removeInputListener(this.dragListener),this.dragListener.dispose()),this.keyboardDragListener&&(this.removeInputListener(this.keyboardDragListener),this.keyboardDragListener.dispose()),u&&u.dispose(),a&&a()},this.numberDisplay=r}};function CM(e){const t=e=(0,Xe.q)(100*e)/100,i=Math.floor(t/60),n=Math.floor(t)%60;return`${i<10?"0"+i:""+i}:${n<10?"0"+n:""+n}`}TM.NUMBER_FONT_FAMILY='"Trebuchet MS", "Lucida Grande", monospace',TM.DEFAULT_FONT=new Gc({size:20,family:TM.NUMBER_FONT_FAMILY}),TM.PLAIN_TEXT_MINUTES_AND_SECONDS=e=>CM(e)+TM.getDecimalPlaces(e,2),TM.RICH_TEXT_MINUTES_AND_SECONDS=TM.createRichTextNumberFormatter({showAsMinutesAndSeconds:!0,numberOfDecimalPlaces:2}),Pa.register("StopwatchNode",TM);let IM=class extends ZP{constructor(e){const i=(0,t.Ay)()({radius:20,direction:"forward",iconFill:"black",fireOnHold:!0,soundPlayer:Gm.get("stepForward"),innerContent:Wc.a11y.stepButton.stepForwardStringProperty,appendDescription:!0},e);i.xContentOffset="forward"===i.direction?.075*i.radius:-.15*i.radius,i.xMargin=i.yMargin=.525*i.radius;const n=.15*i.radius,s=.9*i.radius,r=.65*i.radius,o=s,a=new fa(0,0,n,s,{fill:i.iconFill}),l=new ua((new Hi).moveTo(0,o/2).lineTo(r,0).lineTo(0,-o/2).close(),{fill:i.iconFill});i.content=new Of({children:[a,l],spacing:n,sizable:!1,rotation:"forward"===i.direction?0:Math.PI}),super(i)}};Pa.register("StepButton",IM);let xM=class extends IM{constructor(e){super((0,t.Ay)()({direction:"backward",soundPlayer:Gm.get("stepBackward")},e))}};Pa.register("StepBackwardButton",xM);let DM=class extends IM{constructor(e){super((0,t.Ay)()({direction:"forward"},e))}};Pa.register("StepForwardButton",DM);let kM=class extends Of{getPlayPauseButtonCenter(){return this.playPauseButton.center}dispose(){this.disposePlayPauseStepButtonGroup(),super.dispose()}constructor(e,i){const n=(0,t.Ay)()({includeStepForwardButton:!0,includeStepBackwardButton:!1,playPauseStepXSpacing:10,playPauseButtonOptions:{radius:KP.DEFAULT_BUTTON_RADIUS,touchAreaDilation:5},stepBackwardButtonOptions:{radius:15,touchAreaDilation:5},stepForwardButtonOptions:{radius:15,touchAreaDilation:5},resize:!1,tandem:A.A.REQUIRED,tandemNameSuffix:"ButtonGroup",tagName:"div",appendDescription:!0,playingHelpText:null,pausedHelpText:null,phetioEnabledPropertyInstrumented:!0},i);if(!n.stepForwardButtonOptions.enabledProperty||!n.stepBackwardButtonOptions.enabledProperty){const t=oe.not(e);n.stepForwardButtonOptions.enabledProperty||(n.stepForwardButtonOptions.enabledProperty=t),n.stepBackwardButtonOptions.enabledProperty||(n.stepBackwardButtonOptions.enabledProperty=t)}const s=[],r=new wM(e,(0,t.sF)({tandem:n.tandem.createTandem("playPauseButton"),phetioDocumentation:"Button to control the animation in the simulation. This will also stop the model from stepping."},n.playPauseButtonOptions));s.push(r);let o=null;n.includeStepForwardButton&&(o=new DM((0,t.sF)({tandem:n.tandem.createTandem("stepForwardButton"),phetioDocumentation:"Progress the simulation a single model step forwards."},n.stepForwardButtonOptions)),s.push(o));let a=null;n.includeStepBackwardButton&&(a=new xM((0,t.sF)({phetioDocumentation:"Progress the simulation a single model step backwards.",tandem:n.tandem.createTandem("stepBackwardButton")},n.stepBackwardButtonOptions)),s.unshift(a)),n.spacing=n.playPauseStepXSpacing,n.children=s,super(n),this.playPauseButton=r;const l=n.includeStepForwardButton||n.includeStepBackwardButton,h=n.playingHelpText||(l?Wc.a11y.playPauseStepButtonGroup.playingHelpTextStringProperty:null),c=n.pausedHelpText||(l?Wc.a11y.playPauseStepButtonGroup.pausedHelpTextStringProperty:null),d=e=>{this.accessibleHelpText=e?h:c};e.link(d),this.disposePlayPauseStepButtonGroup=()=>{e.unlink(d),r.dispose(),o&&o.dispose(),a&&a.dispose()}}};Pa.register("PlayPauseStepButtonGroup",kM);let MM=class extends Ve.A{};MM.FAST=new MM,MM.NORMAL=new MM,MM.SLOW=new MM,MM.enumeration=new Pe.A(MM),Pa.register("TimeSpeed",MM);const BM=new Map;BM.set(MM.FAST,{stringProperty:Wc.speed.fastStringProperty,tandemName:"fastRadioButton"}),BM.set(MM.NORMAL,{stringProperty:Wc.speed.normalStringProperty,tandemName:"normalRadioButton"}),BM.set(MM.SLOW,{stringProperty:Wc.speed.slowStringProperty,tandemName:"slowRadioButton"});let OM=class extends Zx{constructor(e,i,n){const s=(0,t.Ay)()({labelOptions:{font:new Gc(14),maxWidth:130},spacing:9,tandem:A.A.REQUIRED,tandemNameSuffix:"RadioButtonGroup",labelTagName:"h4",accessibleName:Wc.a11y.timeControlNode.simSpeedsStringProperty,accessibleHelpText:Wc.a11y.timeControlNode.simSpeedDescriptionStringProperty},n);s.radioButtonOptions&&void 0!==s.radioButtonOptions.radius||(s.radioButtonOptions||(s.radioButtonOptions={}),s.radioButtonOptions.radius=new Bc("test",s.labelOptions).height/2),super(e,i.map(e=>{const t=BM.get(e).stringProperty;return{value:e,createNode:()=>new Bc(t,s.labelOptions),tandemName:BM.get(e).tandemName,options:{accessibleName:t}}}),s)}};Pa.register("TimeSpeedRadioButtonGroup",OM);const LM=[MM.NORMAL,MM.SLOW];let RM=class extends Cr{addPushButton(e,t){this.pushButtonGroup.insertChild(t,e),this.pushButtonGroup.updateLayout()}constructor(e,i){const n=(0,t.Ay)()({timeSpeedProperty:null,timeSpeeds:LM,speedRadioButtonGroupPlacement:"right",flowBoxSpacing:40,flowBoxAlign:"center",disabledOpacity:ff.DISABLED_OPACITY,tandem:A.A.REQUIRED,tandemNameSuffix:"TimeControlNode",visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,excludeInvisibleChildrenFromBounds:!0,tagName:"div",labelTagName:"h3",labelContent:Wc.a11y.timeControlNode.labelStringProperty},i);super(),this.pushButtonGroup=new kM(e,(0,t.sF)({tandem:n.tandem.createTandem("playPauseStepButtonGroup")},n.playPauseStepButtonOptions)),this.speedRadioButtonGroup=null,null!==n.timeSpeedProperty&&(this.speedRadioButtonGroup=new OM(n.timeSpeedProperty,n.timeSpeeds,(0,t.sF)({tandem:n.tandem.createTandem("speedRadioButtonGroup")},n.speedRadioButtonGroupOptions)),this.addDisposable(this.speedRadioButtonGroup));const s=[this.pushButtonGroup];this.speedRadioButtonGroup&&("left"===n.speedRadioButtonGroupPlacement||"top"===n.speedRadioButtonGroupPlacement?s.unshift(this.speedRadioButtonGroup):s.push(this.speedRadioButtonGroup));const r=new Vf({children:s,spacing:n.flowBoxSpacing,orientation:"left"===n.speedRadioButtonGroupPlacement||"right"===n.speedRadioButtonGroupPlacement?"horizontal":"vertical",align:n.flowBoxAlign});n.children=[r],nP.create(this,[r],e=>{const t=this.globalToLocalBounds(this.pushButtonGroup.playPauseButton.globalBounds),i=t.centerX,n=t.centerY;e.translation=e.translation.plusXY(-cE(i,1e-6),-cE(n,1e-6))}),this.addDisposable(this.pushButtonGroup),this.mutate(n)}};Pa.register("TimeControlNode",RM);let NM=class extends oS{constructor(e,i,n,s){const r=s;super(e,(0,t.sF)({fill:gD.panelFillProperty,stroke:gD.panelStrokeProperty,cornerRadius:hD.CORNER_RADIUS,titleXMargin:10,buttonXMargin:8,buttonYMargin:8,titleYMargin:4,titleXSpacing:14,contentYSpacing:0,lineWidth:hD.PANEL_LINE_WIDTH,minWidth:hD.RIGHT_SIDE_PANEL_MIN_WIDTH,expandedProperty:new o(!1,{tandem:n.createTandem("expandedProperty"),phetioFeatured:!0}),expandCollapseButtonOptions:{touchAreaYDilation:8,touchAreaXDilation:8},titleNode:new Bc(i,{fontSize:hD.FONT_SIZE,maxWidth:175,fill:gD.textFillProperty,tandem:n.createTandem("titleText")}),tandem:n},r))}};jx.register("CCKCAccordionBox",NM);let qM=class extends tP{constructor(e,i,n){super(e,i,n=(0,t.sF)({boxWidth:16},n))}};jx.register("CCKCCheckbox",qM);const FM=Jx.resistanceOhmsSymbolStringProperty;let HM=class extends Rf{constructor(e,i,n,s,r){const o=(e,t)=>new Bc(e,{fontSize:12,fill:gD.textFillProperty,tandem:t,maxWidth:45}),a=hD.BATTERY_RESISTANCE_RANGE,l=(a.max+a.min)/2,h=new xS(e,a,{trackSize:hD.SLIDER_TRACK_SIZE,thumbSize:hD.THUMB_SIZE,majorTickLength:hD.MAJOR_TICK_LENGTH,minorTickLength:hD.MINOR_TICK_LENGTH,constrainValue:e=>a.constrainValue(RD.roundSymmetric(e)),phetioVisiblePropertyInstrumented:!1,tandem:r.createTandem("slider")});h.addMajorTick(a.min,o(Jx.tinyStringProperty,r.createTandem("tinyLabelText"))),h.addMajorTick(l),h.addMajorTick(a.max,o(new wV(FM,{resistance:RD.toFixed(a.max,0)},{tandem:r.createTandem("maxLabelText").createTandem(Bc.STRING_PROPERTY_TANDEM_NAME)}),r.createTandem("maxLabelText")));for(let t=a.min+1;t1e-6&&h.addMinorTick(t);super({children:[new Bc(n,(0,t.sF)({fill:gD.textFillProperty,tandem:r.createTandem("titleText")},s)),h],tandem:r,visiblePropertyOptions:{phetioFeatured:!0}})}};jx.register("SourceResistanceControl",HM);const YM=Jx.lotsStringProperty,GM=Jx.tinyStringProperty,UM=Jx.wireResistivityStringProperty,zM={fontSize:12,maxWidth:45,fill:gD.textFillProperty};let WM=class extends Rf{constructor(e,i,n,s){const r=new Bc(UM,(0,t.sF)({tandem:s.createTandem("titleText"),fill:gD.textFillProperty},n)),o=new xS(e,hD.WIRE_RESISTIVITY_RANGE,{trackSize:hD.SLIDER_TRACK_SIZE,thumbSize:hD.THUMB_SIZE,majorTickLength:hD.MAJOR_TICK_LENGTH,phetioVisiblePropertyInstrumented:!1,tandem:s.createTandem("slider")});o.addMajorTick(0,new Bc(GM,zM)),o.addMajorTick(hD.WIRE_RESISTIVITY_RANGE.max,new Bc(YM,zM)),super({children:[r,o],tandem:s,visiblePropertyOptions:{phetioFeatured:!0}})}};jx.register("WireResistivityControl",WM);let QM=class extends NM{constructor(e,i,n,s,r){const o=(0,t.Ay)()({showRealBulbsCheckbox:!0},r),a={fontSize:hD.FONT_SIZE,maxWidth:120,fill:gD.textFillProperty},l=[new WM(e.wireResistivityProperty,i,a,s.createTandem("wireResistivityControl")),new HM(e.sourceResistanceProperty,i,n,a,s.createTandem("sourceResistanceControl"))];if(o.showRealBulbsCheckbox){const i=s.createTandem("addRealBulbsCheckbox");l.push(new qM(e.addRealBulbsProperty,new Bc(Jx.addRealBulbsStringProperty,(0,t.sF)({tandem:i.createTandem("labelText")},a)),{tandem:i}))}super(i.createBox(new Rf({align:"left",spacing:15,children:l})),Jx.advancedStringProperty,s,{titleAlignX:"left",titleXSpacing:10}),this.mutate(o)}};jx.register("AdvancedAccordionBox",QM);const KM={radius:50,innerRadius:35,handleWidth:50,handleHeight:30,handleCornerRadius:10,lightAngle:1.35*Math.PI,color:"#008541",sensorTypeFunction:_M()};let jM=class extends Cr{dispose(){this.brighter5Property.dispose(),this.brighter4Property.dispose(),this.brighter3Property.dispose(),this.brighter2Property.dispose(),this.darker2Property.dispose(),this.darker3Property.dispose(),super.dispose()}constructor(e){const i=(0,t.hz)()({},KM,e);super();const n=i.radius,s=n+i.handleHeight,r=i.handleWidth,o=Math.min(i.innerRadius,i.radius),a=i.handleCornerRadius,l=new si(new Te.A(0,0),n,n,0,.8*Math.PI,Math.PI*(1-.8),!1).start;function h(){return(new Hi).moveTo(0,s).arc(-r/2+a,s-a,a,Math.PI/2,Math.PI,!1).lineTo(-r/2,n+10).quadraticCurveTo(-r/2,n,l.x,l.y).ellipticalArc(0,0,n,n,0,.8*Math.PI,Math.PI*(1-.8),!1).quadraticCurveTo(r/2,n,+r/2,n+10).arc(r/2-a,s-a,a,0,Math.PI/2,!1).close()}const c=h().moveTo(o,0).arc(0,0,o,2*Math.PI,0,!0).close(),d=i.lightAngle,u=c.bounds.center,p=Te.A.createPolar(1,d),m=c.intersection(new wt(u,p)),g=m[m.length-1],A=(g?g.point:Te.A.ZERO).plus(p.timesScalar(1)),y=Te.A.createPolar(1,d+Math.PI),f=c.intersection(new wt(u,y)),b=f[f.length-1],P=(b?b.point:Te.A.ZERO).plus(y.timesScalar(1));this.brighter5Property=new xb(i.color,{luminanceFactor:.5}),this.brighter4Property=new xb(i.color,{luminanceFactor:.4}),this.brighter3Property=new xb(i.color,{luminanceFactor:.3}),this.brighter2Property=new xb(i.color,{luminanceFactor:.2}),this.darker2Property=new xb(i.color,{luminanceFactor:-.2}),this.darker3Property=new xb(i.color,{luminanceFactor:-.3});const V=new ua(c,{stroke:new tb(A.x,A.y,P.x,P.y).addColorStop(0,this.brighter2Property).addColorStop(1,this.darker2Property),fill:new tb(A.x,A.y,P.x,P.y).addColorStop(0,this.brighter5Property).addColorStop(.03,this.brighter4Property).addColorStop(.07,this.brighter4Property).addColorStop(.11,this.brighter2Property).addColorStop(.3,i.color).addColorStop(.8,this.darker2Property).addColorStop(1,this.darker3Property),lineWidth:2}),v=new ua(c,{fill:i.color,scale:new Te.A(.9,.93+.01*i.handleHeight/KM.handleHeight),centerX:V.centerX,stroke:new oe([this.brighter3Property],e=>e.withAlpha(.5)),lineWidth:1.2,y:2}),w=[];i.sensorTypeFunction&&w.push(i.sensorTypeFunction(n)),w.push(V,v),i.children=w.concat(i.children||[]);const E=h();i.mouseArea=i.mouseArea||E,i.touchArea=i.touchArea||E,this.mutate(i)}};function _M(e){const i=(0,t.Ay)()({centerColor:"white",middleColor:"#E6F5FF",edgeColor:"#C2E7FF"},e);return e=>new Th(e,{fill:new nb(.15*-e,.15*-e,0,.15*-e,.2*-e,.6*e).addColorStop(0,i.centerColor).addColorStop(.4,i.middleColor).addColorStop(1,i.edgeColor)})}jM.DEFAULT_PROBE_NODE_OPTIONS=KM,jM.glass=_M,jM.crosshairs=function(e){const i=(0,t.Ay)()({stroke:"black",lineWidth:3,intersectionRadius:8},e);return e=>{const t={stroke:i.stroke,lineWidth:i.lineWidth};return new Cr({children:[new sc(-e,0,-i.intersectionRadius,0,t),new sc(+e,0,+i.intersectionRadius,0,t),new sc(0,-e,0,-i.intersectionRadius,t),new sc(0,+e,0,+i.intersectionRadius,t)]})}},Pa.register("ProbeNode",jM);let ZM=class extends ua{dispose(){this.multilink.dispose(),super.dispose()}constructor(e,i,n,s,r){super(null,r=(0,t.Ay)()({stroke:"black"},r)),this.multilink=ye.multilink([e,i,n,s],(e,t,i,n)=>{this.shape=(new Hi).moveToPoint(e).cubicCurveToPoint(e.plus(t),i.plus(n),i)})}};Pa.register("WireNode",ZM);const XM=new Image,JM=El.A.createLock(XM);XM.onload=JM,XM.src="data:image/png;base64,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";const $M=XM;let eB=class extends Rf{dispose(){this.disposeProbeTextNode(),this.readoutText.dispose(),this.titleText.dispose(),super.dispose()}constructor(e,i,n,s,r){const o=(0,t.Ay)()({spacing:r&&r.seriesAmmeter?.5:3,seriesAmmeter:!1,pickable:!1},r),a=new Bc(e,{fontSize:o.seriesAmmeter?46:40,maxWidth:120,fill:gD.textFillProperty,tandem:s.createTandem("probeReadoutText"),stringPropertyOptions:{phetioReadOnly:!0}}),l=new fa(0,0,140,52,{cornerRadius:10,lineWidth:2,stroke:Wr.BLACK,fill:Wr.WHITE}),h=e=>{a.string===ZE.NO_VALUE?a.centerX=l.centerX:a.right=l.right-10,a.centerY=l.centerY};a.boundsProperty.link(h);const c=e=>a.setVisible(e);i.link(c);const d=new Bc(n,{fontSize:o.seriesAmmeter?33:42,maxWidth:140,fill:gD.textFillProperty,tandem:o.seriesAmmeter?s.createTandem("probeTitleText"):A.A.OPT_OUT});o.children=[d,new Cr({children:[l,a]})],o.seriesAmmeter&&(o.scale=.37),super(o),this.readoutText=a,this.titleText=d,this.disposeProbeTextNode=()=>{a.boundsProperty.unlink(h),l.dispose(),i.unlink(c)}}};jx.register("ProbeTextNode",eB);const tB=Jx.currentStringProperty;let iB=class extends Cr{startDrag(e){this.dragHandler&&this.dragHandler.press(e)}constructor(e,i,n){const s=(0,t.Ay)()({isIcon:!1,visibleBoundsProperty:null,showResultsProperty:new o(!0),blackBoxStudy:!1,showPhetioIndex:!1,phetioVisiblePropertyInstrumented:!1,tandem:A.A.REQUIRED},n),r=s.tandem,a=s.isIcon?A.A.OPT_OUT:r,l=new ch(new Te.A(0,0)),h=new ch(new Te.A(0,0)),c=new ZM(l,new ch(new Te.A(0,-30)),h,new ch(new Te.A(0,15)),{stroke:Wr.BLACK,lineWidth:3,pickable:!1}),d=new ah([e.currentProperty,nD,Jx.currentUnitsStringProperty],e=>ak.createCurrentReadout(e,s.blackBoxStudy)),u=new ah([tB],t=>s.showPhetioIndex?t+" "+e.phetioIndex:t),p=new eB(d,s.showResultsProperty,u,a,{centerX:$M.width/2,centerY:$M.height/2+7}),m=new _h($M,{scale:.5,cursor:"pointer",children:[p]}),g=new jM({cursor:"pointer",sensorTypeFunction:jM.crosshairs(),scale:.5,handleWidth:50,color:"#2c2c2b",innerRadius:43,children:[new fa(0,52,36,19,{cornerRadius:6,centerX:0,fill:"#e79547"})]});s.children=[m,c,g],super(s),this.probeNode=g,this.ammeter=e;const y=()=>{if(e.isDraggingProbesWithBodyProperty.get()){const t=e=>s.visibleBoundsProperty?s.visibleBoundsProperty.value.eroded(hD.DRAG_BOUNDS_EROSION).closestPointTo(e):e;e.probePositionProperty.set(t(e.bodyPositionProperty.value.plusXY(40,-80)))}};if(e.bodyPositionProperty.link(e=>{m.centerTop=e,l.value=m.centerTop.plusXY(0,8),y()}),e.probePositionProperty.link(e=>{this.probeNode.centerTop=e,h.value=this.probeNode.centerBottom}),s.isIcon)this.dragHandler=null;else{e.isActiveProperty.linkAttribute(this,"visible"),e.isActiveProperty.link(y);const t=new oe([s.visibleBoundsProperty],e=>e.eroded(hD.DRAG_BOUNDS_EROSION)),n=new Kc({positionProperty:e.probePositionProperty,useParentOffset:!0,tandem:a.createTandem("probeDragHandler"),start:()=>this.moveToFront(),dragBoundsProperty:t});this.dragHandler=new Kc({useParentOffset:!0,positionProperty:e.bodyPositionProperty,tandem:a.createTandem("dragListener"),start:()=>this.moveToFront(),end:function(){e.droppedEmitter.emit(m.globalBounds),e.isDraggingProbesWithBodyProperty.set(!1)},targetNode:this,dragBoundsProperty:t}),m.addInputListener(this.dragHandler),t.link(t=>{e.bodyPositionProperty.value=t.closestPointTo(e.bodyPositionProperty.value),e.probePositionProperty.value=t.closestPointTo(e.probePositionProperty.value)}),this.probeNode.addInputListener(n);const r=()=>{if(e.isActiveProperty.get()){const t=i.getCurrent(this.probeNode);e.setConnectionAndCurrent(t)}};i.circuit.circuitChangedEmitter.addListener(r),e.probePositionProperty.link(r)}s.isIcon&&(this.touchArea=this.bounds.copy(),this.mouseArea=this.bounds.copy(),this.cursor="pointer"),this.addLinkedElement(e,{tandemName:"ammeter"})}};jx.register("AmmeterNode",iB);let nB=class extends Cr{constructor(e){const i=(0,t.Ay)()({glassRadius:15,glassFill:"white",glassStroke:"black",icon:null},e),n=.25*i.glassRadius,s=new Th(i.glassRadius,{fill:i.glassFill,stroke:i.glassStroke,lineWidth:n}),r=i.glassRadius+n/2,o=new sc(r*Math.cos(Math.PI/4),r*Math.sin(Math.PI/4),i.glassRadius*Math.cos(Math.PI/4)+.65*i.glassRadius,i.glassRadius*Math.sin(Math.PI/4)+.65*i.glassRadius,{stroke:i.glassStroke,lineWidth:.4*i.glassRadius,lineCap:"round"});i.children=[s,o],i.icon&&(i.icon.center=s.center,i.children.push(i.icon)),super(i)}};Pa.register("MagnifyingGlassNode",nB);const sB=new Be(20,5);let rB=class extends fa{constructor(e){const i=(0,t.Ay)()({size:sB,fill:"black"},e);super(0,0,i.size.width,i.size.height,i)}};Pa.register("MinusNode",rB);const oB=rB;let aB=class extends Vf{dispose(){this.disposeZoomButtonGroup(),super.dispose()}constructor(e,i,n,s){const r=e.range,o=(0,t.Ay)()({applyZoomIn:e=>e+1,applyZoomOut:e=>e-1,touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,buttonOptions:{fireOnHold:!0,fireOnHoldDelay:600,fireOnHoldInterval:250,phetioVisiblePropertyInstrumented:!1,phetioEnabledPropertyInstrumented:!1},spacing:0,orientation:"horizontal",align:"center",tandem:A.A.REQUIRED,tandemNameSuffix:"ZoomButtonGroup",phetioFeatured:!0},s),a=o.spacing/2,l=Math.max(0,"horizontal"===o.orientation?o.mouseAreaXDilation-a:0),h=Math.max(0,"horizontal"===o.orientation?o.touchAreaXDilation-a:0),c=Math.max(0,"vertical"===o.orientation?o.mouseAreaYDilation-a:0),d=Math.max(0,"vertical"===o.orientation?o.touchAreaYDilation-a:0),u=new Qb((0,t.sF)({content:i,listener:()=>{e.value=o.applyZoomIn(e.value)},touchAreaXDilation:o.touchAreaXDilation,touchAreaYDilation:o.touchAreaYDilation,mouseAreaXDilation:o.mouseAreaXDilation,mouseAreaYDilation:o.mouseAreaYDilation,touchAreaXShift:h,touchAreaYShift:-d,mouseAreaXShift:l,mouseAreaYShift:-c,accessibleName:Wc.a11y.zoomInStringProperty,tandem:o.tandem.createTandem("zoomInButton")},o.buttonOptions)),p=new Qb((0,t.sF)({content:n,listener:()=>{e.value=o.applyZoomOut(e.value)},touchAreaXDilation:o.touchAreaXDilation,touchAreaYDilation:o.touchAreaYDilation,mouseAreaXDilation:o.mouseAreaXDilation,mouseAreaYDilation:o.mouseAreaYDilation,touchAreaXShift:-h,touchAreaYShift:d,mouseAreaXShift:-l,mouseAreaYShift:c,accessibleName:Wc.a11y.zoomOutStringProperty,tandem:o.tandem.createTandem("zoomOutButton")},o.buttonOptions));o.children="horizontal"===o.orientation?[p,u]:[u,p];const m=e=>{p.enabled=r.contains(o.applyZoomOut(e)),u.enabled=r.contains(o.applyZoomIn(e))};e.link(m),super(o),this.zoomOutButton=p,this.zoomInButton=u,this.addLinkedElement(e,{tandemName:"zoomProperty"}),this.disposeZoomButtonGroup=()=>{u.dispose(),p.dispose(),e.unlink(m)}}};Pa.register("ZoomButtonGroup",aB);let lB=class extends aB{constructor(e,i){const n=(0,t.Ay)()({magnifyingGlassNodeOptions:{glassRadius:15},buttonOptions:{baseColor:WP.BUTTON_YELLOW}},i),s=n.magnifyingGlassNodeOptions.glassRadius,r={size:new Be(1.3*s,s/3)};super(e,new nB((0,t.sF)({icon:new rV(r)},n.magnifyingGlassNodeOptions)),new nB((0,t.sF)({icon:new oB(r)},n.magnifyingGlassNodeOptions)),n)}};Pa.register("MagnifyingGlassZoomButtonGroup",lB);let hB=class extends lB{constructor(e,i){super(e,i=(0,t.sF)({spacing:20,buttonOptions:{buttonAppearanceStrategy:zb.ThreeDAppearanceStrategy,baseColor:WP.BUTTON_YELLOW,phetioReadOnly:!0},magnifyingGlassNodeOptions:{scale:.7},touchAreaXDilation:9,touchAreaYDilation:10},i))}};jx.register("CCKCZoomButtonGroup",hB);const cB=Jx.animationSpeedLimitReachedStringProperty;let dB=class extends Bc{constructor(e,t,i){super("",{fontSize:16,maxWidth:530}),ye.multilink([e,t,i,cB],(e,t,i)=>{const n=100*e,s=n<99.5,r=e<.01?"< 1":RD.toFixed(n,0);this.setString(Ge.A.fillIn(cB,{percent:r})),this.visible=s&&t&&i})}};jx.register("ChargeSpeedThrottlingReadoutNode",dB);let uB=class extends ZP{constructor(e){super((0,t.sF)({baseColor:WP.BUTTON_YELLOW,xMargin:10,yMargin:10},e))}};jx.register("CCKCRoundPushButton",uB);let pB=class extends uB{constructor(e,i){const n=new ua("M59.42,9.597v7.807c0,0.719-0.32,1.331-0.957,1.84c-0.641,0.508-1.411,0.762-2.312,0.762v3.254 c0,0.894-0.398,1.659-1.199,2.296s-1.762,0.956-2.887,0.956H4.666c-1.125,0-2.086-0.319-2.887-0.956S0.58,24.152,0.58,23.259V3.741 c0-0.894,0.398-1.659,1.199-2.297C2.58,0.809,3.541,0.489,4.666,0.489h47.398c1.125,0,2.086,0.319,2.887,0.955 c0.801,0.638,1.199,1.403,1.199,2.297v3.253c0.901,0,1.672,0.255,2.312,0.764C59.1,8.265,59.42,8.878,59.42,9.597z M52.88,17.403 h3.271V9.597H52.88V3.741c0-0.189-0.074-0.345-0.227-0.467c-0.153-0.122-0.351-0.184-0.589-0.184H4.666 c-0.238,0-0.433,0.062-0.589,0.184C3.925,3.396,3.85,3.552,3.85,3.741v19.518c0,0.189,0.075,0.345,0.228,0.467 c0.156,0.121,0.351,0.184,0.589,0.184h47.398c0.238,0,0.436-0.062,0.589-0.184c0.152-0.122,0.227-0.277,0.227-0.467V17.403z M43.614,2.819v21.486H3.866V2.819H43.614z",{scale:.45,fill:Wr.BLACK}),s="M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z".split("M"),r="M"+s[1],o="M"+s[2];super((0,t.Ay)()({touchAreaDilation:5,content:new Rf({spacing:3,children:[new ua(r,{fill:Wr.BLACK,scale:.035}),n,new ua(o,{fill:Wr.BLACK,scale:.035})]}),listener:()=>{const t=e.selectionProperty.value;t instanceof iM&&(e.flip(t),e.componentEditedEmitter.emit())},isDisposable:!1},i))}};jx.register("BatteryReverseButton",pB);const mB=new Hi("M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z").makeImmutable();let gB=class extends uB{constructor(e,t){super({touchAreaDilation:5,content:new ua(mB,{fill:"black",scale:.8*hD.FONT_AWESOME_ICON_SCALE}),listener:()=>{const t=e.selectionProperty.value;t instanceof zD&&(t.startVertexProperty.value.isDragged||t.endVertexProperty.value.isDragged||e.disposeCircuitElement(t))},isDisposable:!1,tandem:t,phetioVisiblePropertyInstrumented:!1})}};jx.register("CCKCTrashButton",gB);let AB=class e extends Of{constructor(i,n,s,r,o,a,l){var h;s.lazyLink(()=>o.componentEditedEmitter.emit());const c=(0,t.Ay)()({delta:.01,titleNodeOptions:{maxWidth:e.NUMBER_CONTROL_ELEMENT_MAX_WIDTH,font:hD.DEFAULT_FONT,fill:gD.textFillProperty},numberDisplayOptions:{maxWidth:94,valuePattern:n,decimalPlaces:a,textOptions:{font:hD.DEFAULT_FONT,fill:gD.textFillProperty}},layoutFunction:sS.createLayoutFunction1({arrowButtonsXSpacing:9}),sliderOptions:{thumbTouchAreaYDilation:5,thumbSize:new Be(10,20),trackSize:new Be(120,4)},tandem:A.A.OPT_OUT,isDisposable:!1,getAdditionalVisibilityProperties:e=>[]},l);super({children:[new sS(i,s,r,c)]}),h=this;const d=function(){for(var e=arguments.length,t=new Array(e),i=0;i{if(t instanceof nk&&u&&ye.unmultilink(u),e instanceof zD){const t=c.getAdditionalVisibilityProperties(e);u=ye.multilinkAny([e.isEditableProperty,...t],d)}})}};AB.NUMBER_CONTROL_ELEMENT_MAX_WIDTH=115,jx.register("CircuitElementNumberControl",AB);let yB=class extends Cr{constructor(e){const i=(0,t.Ay)()({radius:20,lineWidth:5,stroke:"red",fill:null},e),n=new Th(i.radius,{lineWidth:i.lineWidth,stroke:i.stroke,fill:i.fill}),s=new sc(0,0,2*i.radius,0,{lineWidth:i.lineWidth,stroke:i.stroke,rotation:Math.PI/4,center:n.center});i.children=[n,s],super(i)}};Pa.register("BannedNode",yB);const fB=vt(.032,0,0,0,-.032,0,0,0,1);let bB=class extends uB{constructor(e,i){const n=new ua(new Hi("M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z").transformed(fB),{scale:.45,fill:Wr.BLACK,center:Te.A.ZERO});super((0,t.Ay)()({touchAreaDilation:5,content:new Cr({children:[n,new yB({lineWidth:3,radius:17})]}),listener:()=>{const t=e.selectionProperty.value;t instanceof lk&&t.clear()},isDisposable:!1},i));const s=e=>{this.visible=e};e.selectionProperty.link((e,t)=>{t instanceof lk&&t.isClearableProperty.unlink(s),e instanceof lk&&e.isClearableProperty.link(s)})}};jx.register("ClearDynamicsButton",bB);let PB=class extends uB{constructor(e,i){const n=(new Hi).moveTo(0,0).zigZagToPoint(new Te.A(35,0),4.7,4,!1),s=new Cr({children:[new ua(n,{stroke:"black",lineWidth:1.2,centerX:0,centerY:0}),new Th(2.2,{fill:"black",centerX:0,centerY:0})],scale:.9});super((0,t.Ay)()({enabledPropertyOptions:{tandem:A.A.OPT_OUT},touchAreaDilation:5,content:s,listener:()=>{const t=e.selectionProperty.value;t instanceof ck&&(t.resetFuse(),e.componentEditedEmitter.emit())},isDisposable:!1},i));const r=e=>this.setEnabled(e);e.selectionProperty.link((e,t)=>{t instanceof ck&&t.isTrippedProperty.unlink(r),e instanceof ck&&e.isTrippedProperty.link(r)})}};jx.register("FuseRepairButton",PB);const VB=["pdomTimerDelay","pdomTimerInterval","accessibleRoleDescription"],vB=(e,i)=>{const n=Fo("AccessibleNumberSpinner",VB,class extends(ME(e,i)){set pdomTimerDelay(e){this._pdomTimerDelay=e,this._callbackTimer&&(this._callbackTimer.delay=e)}get pdomTimerDelay(){return this._pdomTimerDelay}set pdomTimerInterval(e){this._pdomTimerInterval=e,this._callbackTimer&&(this._callbackTimer.interval=e)}get pdomTimerInterval(){return this._pdomTimerInterval}set accessibleRoleDescription(e){this._accessibleRoleDescription=e,this.setPDOMAttribute("aria-roledescription",e)}get accessibleRoleDescription(){return this._accessibleRoleDescription}_accessibleNumberSpinnerHandleKeyDown(e){this.handleKeyDown(e),this._emitKeyState(e.domEvent,!0)}_emitKeyState(e,t){(0,k.A)(e,{valueType:Event}),Fn.A.isAnyKeyEvent(e,[Fn.A.KEY_UP_ARROW,Fn.A.KEY_RIGHT_ARROW])?this.pdomIncrementDownEmitter.emit(t):Fn.A.isAnyKeyEvent(e,[Fn.A.KEY_DOWN_ARROW,Fn.A.KEY_LEFT_ARROW])&&this.pdomDecrementDownEmitter.emit(t)}dispose(){this._disposeAccessibleNumberSpinner(),super.dispose()}constructor(){for(var e=arguments.length,n=new Array(e),s=0;s{if(this.enabledProperty.get()&&Fn.A.isRangeKey(e.domEvent)){const t=e.domEvent;t.preventDefault(),t.metaKey||this._callbackTimer.isRunning()||(this._accessibleNumberSpinnerHandleKeyDown(e),a=this._accessibleNumberSpinnerHandleKeyDown.bind(this,e),l=t,this._callbackTimer.addCallback(a),this._callbackTimer.start())}},keyup:e=>{const t=Fn.A.getEventCode(e.domEvent);Fn.A.isRangeKey(e.domEvent)&&(l&&t===Fn.A.getEventCode(l)&&(this._emitKeyState(e.domEvent,!1),this._callbackTimer.stop(!1),this._callbackTimer.removeCallback(a),a=null,l=null),this.handleKeyUp(e))},blur:e=>{a&&(this._emitKeyState(l,!1),this._callbackTimer.stop(!1),this._callbackTimer.removeCallback(a)),this.handleBlur(e)},input:this.handleInput.bind(this),change:this.handleChange.bind(this)};this.addInputListener(h),this._disposeAccessibleNumberSpinner=()=>{this._callbackTimer.dispose(),this.pdomIncrementDownEmitter.dispose(),this.pdomDecrementDownEmitter.dispose(),this.removeInputListener(h)}}});return n.prototype._mutatorKeys=VB.concat(n.prototype._mutatorKeys),n};fb.register("AccessibleNumberSpinner",vB);const wB=vB;let EB=class extends(wB(Cr,0)){dispose(){this.disposeNumberSpinner(),super.dispose()}constructor(e,i,n){const s=(0,t.Ay)()({arrowsSoundPlayer:Gm.get("pushButton"),arrowsPosition:"bothRight",arrowsScale:null,arrowButtonFill:"white",arrowButtonStroke:"black",arrowButtonLineWidth:1,deltaValue:1,xSpacing:5,ySpacing:3,numberDisplayOptions:{cornerRadius:5,backgroundStroke:"black"},touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,valueProperty:e,enabledRangeProperty:i,disabledOpacity:ff.DISABLED_OPACITY,interactiveHighlight:"invisible",tandem:A.A.REQUIRED,tandemNameSuffix:"Spinner",phetioFeatured:!0,phetioEnabledPropertyInstrumented:!0},n),r=s.incrementFunction||(e=>e+s.deltaValue),o=s.decrementFunction||(e=>e-s.deltaValue),a=new JE(e,i.value,(0,t.sF)({tandem:s.tandem.createTandem("numberDisplay")},s.numberDisplayOptions)),l={baseColor:s.arrowButtonFill,stroke:s.arrowButtonStroke,lineWidth:s.arrowButtonLineWidth,focusable:!1,soundPlayer:Lv,enabledPropertyOptions:{phetioReadOnly:!0,phetioFeatured:!1}},h=new dE("topBottom"===s.arrowsPosition||"bothRight"===s.arrowsPosition?"up":"right",()=>{e.set(r(e.get())),s.arrowsSoundPlayer.play()},(0,t.sF)({tandem:s.tandem.createTandem("incrementButton")},l)),c=new dE("topBottom"===s.arrowsPosition||"bothRight"===s.arrowsPosition?"down":"left",()=>{e.set(o(e.get())),s.arrowsSoundPlayer.play()},(0,t.sF)({tandem:s.tandem.createTandem("decrementButton")},l));let d;d||(d="leftRight"===s.arrowsPosition?a.height/h.height:"topBottom"===s.arrowsPosition?a.width/h.width:"bothRight"===s.arrowsPosition?(a.height/2-s.ySpacing/2)/h.height:(a.width/2-s.xSpacing/2)/h.width),s.arrowsScale&&(d*=s.arrowsScale),h.setScaleMagnitude(d),c.setScaleMagnitude(d);a.boundsProperty.link(()=>{"leftRight"===s.arrowsPosition?(h.left=a.right+s.xSpacing,c.right=a.left-s.xSpacing,h.centerY=c.centerY=a.centerY):"topBottom"===s.arrowsPosition?(h.centerX=c.centerX=a.centerX,h.bottom=a.top-s.ySpacing,c.top=a.bottom+s.ySpacing):"bothRight"===s.arrowsPosition?(h.left=c.left=a.right+s.xSpacing,h.bottom=a.centerY-s.ySpacing/2,c.top=a.centerY+s.ySpacing/2):(h.left=a.centerX+s.xSpacing/2,c.right=a.centerX-s.xSpacing/2,h.top=c.top=a.bottom+s.ySpacing)}),(s.touchAreaXDilation||s.touchAreaYDilation)&&(h.touchArea=h.localBounds.dilatedXY(s.touchAreaXDilation,s.touchAreaYDilation),c.touchArea=c.localBounds.dilatedXY(s.touchAreaXDilation,s.touchAreaYDilation),"bothRight"===s.arrowsPosition?(h.touchArea=h.touchArea.shiftedY(-s.touchAreaYDilation),c.touchArea=c.touchArea.shiftedY(s.touchAreaYDilation)):"bothBottom"===s.arrowsPosition&&(h.touchArea=h.touchArea.shiftedX(s.touchAreaXDilation),c.touchArea=c.touchArea.shiftedX(-s.touchAreaXDilation))),(s.mouseAreaXDilation||s.mouseAreaYDilation)&&(h.mouseArea=h.localBounds.dilatedXY(s.mouseAreaXDilation,s.mouseAreaYDilation),c.mouseArea=c.localBounds.dilatedXY(s.mouseAreaXDilation,s.mouseAreaYDilation),"bothRight"===s.arrowsPosition?(h.mouseArea=h.mouseArea.shiftedY(-s.mouseAreaYDilation),c.mouseArea=c.mouseArea.shiftedY(s.mouseAreaYDilation)):"bothBottom"===s.arrowsPosition&&(h.mouseArea=h.mouseArea.shiftedX(s.mouseAreaXDilation),c.mouseArea=c.mouseArea.shiftedX(-s.mouseAreaXDilation))),s.children=[a,h,c],s.keyboardStep=0,s.shiftKeyboardStep=0,s.pageKeyboardStep=0,s.onInput=(t,i)=>{if(t.isFromPDOM()){const n=t.domEvent,r=e.value;(Fn.A.isKeyEvent(n,Fn.A.KEY_HOME)&&i!==r||Fn.A.isKeyEvent(n,Fn.A.KEY_END)&&i!==r)&&s.arrowsSoundPlayer.play()}};const u=_.pick(s,Cr.REQUIRES_BOUNDS_OPTION_KEYS);super(_.omit(s,Cr.REQUIRES_BOUNDS_OPTION_KEYS));const p=()=>{h.enabled=r(e.value)<=i.value.max,c.enabled=o(e.value)>=i.value.min},m=e=>{p()};e.link(m);const g=t=>{e.value=t.constrainValue(e.value),p()};i.link(g);const y=e=>e&&h.pdomClick(),f=e=>e&&c.pdomClick();this.pdomIncrementDownEmitter.addListener(y),this.pdomDecrementDownEmitter.addListener(f),this.disposeNumberSpinner=()=>{a.dispose(),h.dispose(),c.dispose(),this.pdomIncrementDownEmitter.removeListener(y),this.pdomDecrementDownEmitter.removeListener(f),e.unlink(m),i.unlink(g)},this.mutate(u),this.numberDisplay=a,this.addLinkedElement(e,{tandemName:"property"})}};fb.register("NumberSpinner",EB);let SB=class extends Rf{constructor(e,i,n){n=(0,t.sF)({spacing:7},n);const s=new r.A(new T(-180,180)),a={enabledProperty:new o(!0),deltaValue:15,numberDisplayOptions:{align:"center",decimalPlaces:0,xMargin:10,yMargin:3,minBackgroundWidth:60,textOptions:{font:hD.DEFAULT_FONT},valuePattern:"{{value}}"+ZE.DEGREES},arrowsPosition:"leftRight",arrowsScale:.9,tandem:n.tandem.createTandem("numberSpinner")},l=new Bc(Jx.phaseShiftStringProperty,{font:hD.DEFAULT_FONT,maxWidth:AB.NUMBER_CONTROL_ELEMENT_MAX_WIDTH,fill:gD.textFillProperty}),h=new EB(e,s,a);n.children=[l,h],super(n);const c=(e,t)=>{this.visible=e&&t};let d=null;i.selectionProperty.link((e,t)=>{t instanceof nk&&d&&ye.unmultilink(d),e instanceof nk&&(d=ye.multilink([e.isPhaseEditableProperty,e.isEditableProperty],c))})}};jx.register("PhaseShiftControl",SB);const TB=Jx.theSwitchIsClosedStringProperty,CB=Jx.theSwitchIsOpenStringProperty;let IB=class extends Cr{constructor(e,t){const i=(e,t)=>new Bc(e,{fontSize:24,maxWidth:300,fill:gD.textFillProperty,tandem:t,visiblePropertyOptions:{phetioReadOnly:!0}}),n=i(TB,t.createTandem("closedText")),s=i(CB,t.createTandem("openText")),r=e=>{n.visible=e,s.visible=!e};e.selectionProperty.link((e,t)=>{t instanceof Ek&&t.isClosedProperty.unlink(r),e instanceof Ek&&e.isClosedProperty.link(r)}),super({children:[new Cr({children:[n,s]})],tandem:t,visiblePropertyOptions:{phetioFeatured:!0}})}};jx.register("SwitchReadoutNode",IB);const xB=Jx.capacitanceStringProperty,DB=Jx.capacitanceUnitsStringProperty,kB=Jx.currentRatingStringProperty,MB=Jx.currentUnitsStringProperty,BB=Jx.frequencyHzValuePatternStringProperty,OB=Jx.frequencyStringProperty,LB=Jx.inductanceStringProperty,RB=Jx.inductanceUnitsStringProperty,NB=Jx.resistanceOhmsValuePatternStringProperty,qB=Jx.resistanceStringProperty,FB=Jx.tapCircuitElementToEditStringProperty,HB=Jx.voltageStringProperty,YB=Jx.voltageVoltsValuePatternStringProperty,GB=function(e,t,i,n){let s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>!0;const o=new r.A(e,{});o.link(e=>{i.selectionProperty.value&&i.selectionProperty.value instanceof t&&(n(i.selectionProperty.value).value=e)});const a=e=>o.set(e);return i.selectionProperty.link((e,i)=>{i instanceof t&&s(i)&&n(i).unlink(a),e instanceof t&&s(e)&&n(e).link(a)}),o};let UB=class extends Cr{constructor(e,i,n,s,r,o){super();const a=(0,t.Ay)()({showPhaseShiftControl:!1},o),l=new gB(e,r.createTandem("trashButton")),h=new Cr({excludeInvisibleChildrenFromBounds:!0,children:[l]}),c=new PB(e,{tandem:r.createTandem("fuseRepairButton"),maxHeight:l.height}),d=new Cr({excludeInvisibleChildrenFromBounds:!0,children:[c]}),u=e=>d.setVisible(e);e.selectionProperty.link((e,t)=>{t instanceof ck&&t.isRepairableProperty.unlink(u),e instanceof ck&&e.isRepairableProperty.link(u)});const p=new bB(e,{tandem:e.includeACElements?r.createTandem("clearButton"):A.A.OPT_OUT,maxHeight:l.height}),g=new pB(e,{tandem:r.createTandem("batteryReverseButton"),maxHeight:l.height}),y=new Cr({excludeInvisibleChildrenFromBounds:!0,children:[g]}),f=e=>y.setVisible(e);e.selectionProperty.link((e,t)=>{t instanceof iM&&t.isReversibleProperty.unlink(f),e instanceof iM&&e.isReversibleProperty.link(f)});const b=new IB(e,r.createTandem("switchReadoutNode")),P=e=>h.setVisible(e);e.selectionProperty.link((e,t)=>{e instanceof zD&&e.isDisposableProperty.link(P),t instanceof zD&&t.isDisposableProperty.unlink(P)});const V=new AB(kB,new wV(MB,{current:UE.VALUE_NAMED_PLACEHOLDER}),GB(ck.DEFAULT_CURRENT_RATING,ck,e,e=>e.currentRatingProperty),ck.RANGE,e,1,{tandem:r.createTandem("fuseCurrentRatingControl"),delta:.1,sliderOptions:{constrainValue:e=>RD.roundToInterval(e,.5)}}),v=new AB(xB,new wV(DB,{capacitance:UE.VALUE_NAMED_PLACEHOLDER}),GB(hk.CAPACITANCE_DEFAULT,hk,e,e=>e.capacitanceProperty),hk.CAPACITANCE_RANGE,e,hk.NUMBER_OF_DECIMAL_PLACES,{tandem:e.includeACElements?r.createTandem("capacitanceNumberControl"):A.A.OPT_OUT,delta:tD.capacitanceStep,sliderOptions:{constrainValue:e=>RD.roundToInterval(e,tD.capacitanceStep)}}),w=new AB(LB,new wV(RB,{inductance:UE.VALUE_NAMED_PLACEHOLDER}),GB(uk.INDUCTANCE_DEFAULT,uk,e,e=>e.inductanceProperty),uk.INDUCTANCE_RANGE,e,uk.INDUCTANCE_NUMBER_OF_DECIMAL_PLACES,{tandem:e.includeACElements?r.createTandem("inductanceNumberControl"):A.A.OPT_OUT,delta:tD.inductanceStep,sliderOptions:{constrainValue:e=>RD.roundToInterval(e,.1)}}),E=new wV(NB,{resistance:UE.VALUE_NAMED_PLACEHOLDER}),S=(t,i)=>new AB(qB,E,GB(fk.RESISTOR.defaultResistance,i,e,e=>e.resistanceProperty,e=>e instanceof Ak&&!e.isExtreme||e instanceof bk&&e.resistorType!==fk.EXTREME_RESISTOR),fk.RESISTOR.range,e,bk.RESISTANCE_DECIMAL_PLACES,{tandem:r.createTandem(t),delta:.1,sliderOptions:{constrainValue:e=>RD.roundToInterval(e,1)},numberDisplayOptions:{decimalPlaces:bk.RESISTANCE_DECIMAL_PLACES}}),T=(t,i)=>new AB(qB,E,GB(fk.EXTREME_RESISTOR.defaultResistance,i,e,e=>e.resistanceProperty,e=>e instanceof Ak&&e.isExtreme||e instanceof bk&&e.resistorType===fk.EXTREME_RESISTOR),fk.EXTREME_RESISTOR.range,e,bk.HIGH_RESISTANCE_DECIMAL_PLACES,{tandem:e.includeLabElements?r.createTandem(t):A.A.OPT_OUT,delta:10,sliderOptions:{constrainValue:e=>RD.roundToInterval(e,100)},numberDisplayOptions:{decimalPlaces:bk.HIGH_RESISTANCE_DECIMAL_PLACES}}),C=S("resistorResistanceNumberControl",bk),I=S("lightBulbResistanceNumberControl",Ak),x=T("extremeResistorResistanceNumberControl",bk),D=T("extremeLightBulbResistanceNumberControl",Ak),k=new wV(YB,{voltage:UE.VALUE_NAMED_PLACEHOLDER}),M=new AB(HB,k,GB(iM.VOLTAGE_DEFAULT,iM,e,e=>e.voltageProperty,e=>"normal"===e.batteryType),iM.VOLTAGE_RANGE,e,iM.VOLTAGE_DECIMAL_PLACES,{tandem:r.createTandem("batteryVoltageNumberControl"),delta:.1,sliderOptions:{constrainValue:e=>RD.roundToInterval(e,1)},numberDisplayOptions:{decimalPlaces:iM.VOLTAGE_DECIMAL_PLACES}}),B=new AB(HB,k,GB(iM.HIGH_VOLTAGE_DEFAULT,iM,e,e=>e.voltageProperty,e=>"high-voltage"===e.batteryType),iM.HIGH_VOLTAGE_RANGE,e,iM.HIGH_VOLTAGE_DECIMAL_PLACES,{tandem:e.includeLabElements?r.createTandem("extremeBatteryVoltageNumberControl"):A.A.OPT_OUT,delta:10,sliderOptions:{constrainValue:e=>RD.roundToInterval(e,100)},numberDisplayOptions:{decimalPlaces:iM.HIGH_VOLTAGE_DECIMAL_PLACES}}),O=new SB(GB(0,nk,e,e=>e.phaseProperty),e,{tandem:e.includeACElements?r.createTandem("phaseShiftControl"):A.A.OPT_OUT}),L=new AB(HB,k,GB(9,nk,e,e=>e.maximumVoltageProperty),nk.MAX_VOLTAGE_RANGE,e,2,{tandem:e.includeACElements?r.createTandem("acVoltageControl"):A.A.OPT_OUT,getAdditionalVisibilityProperties:e=>e instanceof nk?[e.isVoltageEditableProperty]:[]}),R=new AB(OB,new wV(BB,{frequency:UE.VALUE_NAMED_PLACEHOLDER}),GB(nk.DEFAULT_FREQUENCY,nk,e,e=>e.frequencyProperty),nk.FREQUENCY_RANGE,e,2,{tandem:e.includeACElements?r.createTandem("frequencyControl"):A.A.OPT_OUT,delta:.01,getAdditionalVisibilityProperties:e=>e instanceof nk?[e.isFrequencyEditableProperty]:[]}),N=new Bc(FB,{fontSize:24,maxWidth:300,fill:gD.textFillProperty,tandem:r.createTandem("tapInstructionText"),phetioVisiblePropertyInstrumented:!0,visiblePropertyOptions:{phetioReadOnly:!0}}),q=()=>{if(!m.value){const t=e.circuitElements.filter(e=>e instanceof ek&&e.interactiveProperty.get());N.visible=t.length>0}};e.vertexDroppedEmitter.addListener(q),e.vertexGroup.elementDisposedEmitter.addListener(q),n.link(q);const F=()=>{var e;this.bounds.isValid()&&this.mutate((e=i.get(),{centerX:s.value,bottom:e.bottom-hD.HORIZONTAL_MARGIN}))};let H=null;const Y=[];e.selectionProperty.link(e=>{if(H&&(this.hasChild(H)&&this.removeChild(H),H!==N&&H!==h&&(H.dispose(),Y.forEach(e=>e()),Y.length=0)),H=null,e)if(e instanceof bk&&e.isResistanceEditable()){const t=e.resistorType===fk.EXTREME_RESISTOR;H=new zB([t?x:C,h])}else if(e instanceof Ak&&!e.isReal)H=new zB([e.isExtreme?D:I,h]);else if(e instanceof bk||e instanceof Ak&&e.isReal)H=h;else if(e instanceof iM){const t=new Cr({children:[y],excludeInvisibleChildrenFromBounds:!0});H=new zB([t,"high-voltage"===e.batteryType?B:M,h]),Y.push(()=>t.dispose())}else if(e instanceof ck)H=new zB([d,V,h]);else if(e instanceof Ek)H=new Of({children:[b,h],spacing:25,align:"bottom"});else if(e instanceof Pk||e instanceof Sk)H=h;else if(e instanceof nk){const e=[L,R];a.showPhaseShiftControl&&e.push(O),e.push(h),H=new zB(e)}else e instanceof hk?H=new zB([p,v,h]):e instanceof uk&&(H=new zB([p,w,h]));else H=N;null!==H&&(this.addChild(H),H===N||H instanceof IB?(this.mouseArea=null,this.touchArea=null):(this.mouseArea=this.localBounds.dilatedXY(20,hD.VERTICAL_MARGIN),this.touchArea=this.localBounds.dilatedXY(20,hD.VERTICAL_MARGIN))),F()}),i.link(F),this.localBoundsProperty.link(F)}},zB=class extends uP{dispose(){this.hbox.dispose(),super.dispose()}constructor(e){const t=new Of({spacing:25,align:"bottom",children:e});super(t,{fill:gD.editPanelFillProperty,stroke:null,xMargin:10,yMargin:10,cornerRadius:10,align:"center"}),this.hbox=t}};jx.register("CircuitElementEditContainerNode",UB);let WB=class e{static DEFAULT_BLEND(e,t,i){if(0===i)return e;if(1===i)return t;if("number"==typeof e&&"number"==typeof t)return e+(t-e)*i;if("object"==typeof e&&"object"==typeof t&&"function"==typeof e.blend)return e.blend(t,i);throw new Error(`Blending not supported for: ${JSON.stringify(e)}, ${JSON.stringify(t)}, pass in a blend option`)}static DEFAULT_DISTANCE(e,t){if("number"==typeof e&&"number"==typeof t)return Math.abs(e-t);if("object"==typeof e&&"object"==typeof t&&"function"==typeof e.distance)return e.distance(t);throw new Error(`Distance (required for speed) by default not supported for: ${JSON.stringify(e)}, ${JSON.stringify(t)}, pass in a distance option`)}static DEFAULT_ADD(e,t){if("number"==typeof e&&"number"==typeof t)return e+t;if("object"==typeof e&&"object"==typeof t&&"function"==typeof e.plus)return e.plus(t);throw new Error(`Addition (required for delta) by default not supported for: ${JSON.stringify(e)}, ${JSON.stringify(t)}, pass in an add option`)}static OBJECT_SET(e,t){return function(i){e[t]=i}}static OBJECT_GET(e,t){return function(){return e[t]}}static PROPERTY_SET(e){return function(t){e.value=t}}static PROPERTY_GET(e){return function(){return e.value}}computeStartEnd(){this.startingValue=null!==this.from?this.from:this.getValue(),this.endingValue=null!==this.to?this.to:this.add(this.startingValue,this.delta)}update(e){this.setValue(this.blend(this.startingValue,this.endingValue,this.easing.value(e)))}hasPreferredDuration(){return null!==this.speed}getPreferredDuration(){return null===this.speed?null:this.speed*this.distance(this.startingValue,this.delta)}constructor(i){this.startingValue=null,this.endingValue=null;const n=(0,t.Ay)()({setValue:null,getValue:null,property:null,object:null,attribute:null,to:null,delta:null,speed:null,from:null,easing:yM.CUBIC_IN_OUT,blend:e.DEFAULT_BLEND,distance:e.DEFAULT_DISTANCE,add:e.DEFAULT_ADD},i);n.object&&(n.setValue=e.OBJECT_SET(n.object,n.attribute),n.getValue=e.OBJECT_GET(n.object,n.attribute)),n.property&&(n.setValue=e.PROPERTY_SET(n.property),n.getValue=e.PROPERTY_GET(n.property)),this.getValue=n.getValue,this.setValue=n.setValue,this.easing=n.easing,this.from=n.from,this.to=n.to,this.delta=n.delta,this.speed=n.speed,this.blend=n.blend,this.distance=n.distance,this.add=n.add}};gM.register("AnimationTarget",WB);const QB=WB;let KB=class extends We.A{start(e){return this.runningProperty.value||(this.remainingDelay=this.delay,this.runningProperty.value=!0,this.startEmitter.emit(),this.step(void 0!==e?e:0)),this}stop(){return this.runningProperty.value?(this.runningProperty.value=!1,this.stopEmitter.emit(),this.endedEmitter.emit(),this):this}step(e){if(!this.runningProperty.value)return this;if(!this.animatingProperty.value){if(this.remainingDelay-=e,e=-this.remainingDelay,this.remainingDelay>0)return this;this.length=this.duration;for(let e=0;e0?(0,Ze.q)((this.length-this.remainingAnimation)/this.length,0,1):1;for(let i=0;ie.start(t)),e}dispose(){this.runningProperty.dispose(),this.animatingProperty.dispose(),this.startEmitter.dispose(),this.beginEmitter.dispose(),this.finishEmitter.dispose(),this.stopEmitter.dispose(),this.endedEmitter.dispose(),this.updateEmitter.dispose(),super.dispose()}constructor(e){const i=(0,t.Ay)()({targets:null,duration:null,delay:0,stepEmitter:fe.A},e);super(i),this.length=0,this.remainingDelay=0,this.remainingAnimation=0,this.runningProperty=new o(!1),this.animatingProperty=new o(!1),this.startEmitter=new b.A,this.beginEmitter=new b.A,this.finishEmitter=new b.A({parameters:[{valueType:"number"}]}),this.stopEmitter=new b.A,this.endedEmitter=new b.A({hasListenerOrderDependencies:!0}),this.updateEmitter=new b.A,this.targets=(null===i.targets?[i]:i.targets).map(e=>new QB(e)),this.duration=i.duration,this.delay=i.delay;const n=i.stepEmitter;if(n){const e=this.step.bind(this);this.runningProperty.link(t=>{t&&!n.hasListener(e)?n.addListener(e):!t&&n.hasListener(e)&&n.removeListener(e)}),this.disposeEmitter.addListener(()=>{n.hasListener(e)&&n.removeListener(e)})}}};gM.register("Animation",KB);const jB=KB,_B={up:0,down:Math.PI,left:-Math.PI/2,right:Math.PI/2};let ZB=class extends Qb{dispose(){this.customStrokeProperty&&this.customStrokeProperty.dispose(),super.dispose()}constructor(e){const i=(0,t.Ay)()({arrowDirection:"up",arrowSize:new Be(20,7),arrowPathOptions:{stroke:"black",lineWidth:3,lineCap:"round"},baseColor:"rgba( 200, 200, 200, 0.5 )",buttonAppearanceStrategy:Ub.FlatAppearanceStrategy,cornerRadius:4},e);let n=null;void 0===i.stroke&&(n=new xb(i.baseColor,{luminanceFactor:-.8}),i.stroke=n);let s=(new Hi).moveTo(0,0).lineTo(i.arrowSize.width/2,-i.arrowSize.height).lineTo(i.arrowSize.width,0);s=s.transformed(Pt.rotation2(_B[i.arrowDirection])),i.content=new ua(s,i.arrowPathOptions);const r=i.arrowDirection,o=i.cornerRadius;if(i.leftTopCornerRadius="up"===r||"left"===r?o:0,i.rightTopCornerRadius="up"===r||"right"===r?o:0,i.leftBottomCornerRadius="down"===r||"left"===r?o:0,i.rightBottomCornerRadius="down"===r||"right"===r?o:0,"up"===r||"down"===r){const e=i.mouseAreaYDilation/2||0,t=i.touchAreaYDilation/2||0;i.mouseAreaYDilation=e,i.touchAreaYDilation=t,i.mouseAreaYShift="up"===r?-e:e,i.touchAreaYShift="up"===r?-t:t}else{const e=i.mouseAreaXDilation/2||0,t=i.touchAreaXDilation/2||0;i.mouseAreaXDilation=e,i.touchAreaXDilation=t,i.mouseAreaXShift="left"===r?-e:e,i.touchAreaXShift="left"===r?-t:t}super(i),this.customStrokeProperty=n}};fb.register("CarouselButton",ZB);const XB=new Be(20,7);let JB=class extends Cr{dispose(){this.disposeCarousel(),super.dispose()}reset(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=this.animationEnabled;this.animationEnabled=e,this.pageNumberProperty.value=Math.min(this.defaultPageNumber,this.numberOfPagesProperty.value-1),this.animationEnabled=t}scrollToItemVisibleIndex(e){this.pageNumberProperty.set(this.itemVisibleIndexToPageNumber(e))}scrollToItem(e){this.scrollToAlignBox(this.getAlignBoxForItem(e))}scrollToAlignBox(e){const t=this.visibleAlignBoxesProperty.value.indexOf(e);t>=0&&this.scrollToItemVisibleIndex(t)}setItemVisible(e,t){this.getAlignBoxForItem(e).visible=t}getAlignBoxForItem(e){const t=this.alignBoxes[this.items.indexOf(e)];return t}getNodeForItem(e){const t=this.carouselItemNodes[this.items.indexOf(e)];return t}itemVisibleIndexToPageNumber(e){return Math.floor(e/this.itemsPerPage)}getVisibleAlignBoxes(){return _.sortBy(this.alignBoxes.filter(e=>e.visible),e=>this.scrollingNode.children.indexOf(e))}constructor(e,i){let n=!1;const s=(0,t.Ay)()({orientation:"horizontal",fill:"white",stroke:"black",lineWidth:1,cornerRadius:4,defaultPageNumber:0,itemsPerPage:4,spacing:12,margin:6,alignBoxOptions:{phetioType:VS,phetioState:!0,visiblePropertyOptions:{phetioFeatured:!0}},buttonOptions:{xMargin:5,yMargin:5,touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,baseColor:"rgba( 200, 200, 200, 0.5 )",disabledColor:Hb.LIGHT_GRAY,lineWidth:1,arrowPathOptions:{stroke:"black",lineWidth:3},arrowSize:XB,enabledPropertyOptions:{phetioReadOnly:!0,phetioFeatured:!1},soundPlayer:Gm.get("pushButton")},separatorsVisible:!1,separatorOptions:{stroke:"rgb( 180, 180, 180 )",lineWidth:.5,pickable:!1},animationEnabled:!0,animationOptions:{duration:.4,stepEmitter:fe.A,easing:yM.CUBIC_IN_OUT},tandem:A.A.OPTIONAL,visiblePropertyOptions:{phetioFeatured:!0}},i);super(),this.isAnimatingProperty=new o(!1),this.animationEnabled=s.animationEnabled,this.items=e,this.itemsPerPage=s.itemsPerPage,this.defaultPageNumber=s.defaultPageNumber;const r=Ee.fromLayoutOrientation(s.orientation),a=new gV,l=s.tandem.createTandem("items");this.carouselItemNodes=Vb(e,l),this.alignBoxes=e.map((e,i)=>a.createBox(this.carouselItemNodes[i],(0,t.sF)({tandem:e.tandemName?l.createTandem(e.tandemName):A.A.OPTIONAL},s.alignBoxOptions,e.alignBoxOptions))),this.scrollingNode=new $B(this,{children:this.alignBoxes,orientation:s.orientation,spacing:s.spacing,[r.opposite.coordinate+"Margin"]:s.margin}),this.visibleAlignBoxesProperty=oe.deriveAny(this.alignBoxes.map(e=>e.visibleProperty),()=>this.getVisibleAlignBoxes()),this.scrollingNode.childrenReorderedEmitter.addListener(()=>this.visibleAlignBoxesProperty.recomputeDerivation());const h=(0,t.sF)({cornerRadius:s.cornerRadius},s.buttonOptions),c=s.separatorsVisible?new Cr({pickable:!1}):null,d=new Cr({children:s.separatorsVisible?[c,this.scrollingNode]:[this.scrollingNode]}),u=e=>Math.max(Math.ceil(e.length/s.itemsPerPage),1);this.numberOfPagesProperty=new oe([this.visibleAlignBoxesProperty],e=>u(e),{isValidValue:e=>e>0});const p=u(this.alignBoxes);this.pageNumberProperty=new R(s.defaultPageNumber,{tandem:s.tandem.createTandem("pageNumberProperty"),numberType:"Integer",isValidValue:e=>e=0,range:new T(0,p-1),phetioFeatured:!0});const g=new oe([this.numberOfPagesProperty],e=>e>1),y=new ZB((0,t.sF)({arrowDirection:r===Ee.HORIZONTAL?"right":"down",tandem:s.tandem.createTandem("nextButton"),listener:()=>this.pageNumberProperty.set(this.pageNumberProperty.get()+1),enabledProperty:new oe([this.pageNumberProperty,this.numberOfPagesProperty],(e,t)=>ethis.pageNumberProperty.set(this.pageNumberProperty.get()-1),enabledProperty:new oe([this.pageNumberProperty],e=>e>0),visibleProperty:g},h)),b=new Cr({children:[d]}),P=new fa({cornerRadius:s.cornerRadius,fill:s.fill}),V=new fa({cornerRadius:s.cornerRadius,stroke:s.stroke,pickable:!1});this.carouselConstraint=new eO(this,P,V,b,f,y,d,this.alignBoxes,r,this.scrollingNode,this.itemsPerPage,s.margin,a,c,s.separatorOptions);let v=null;const w=new Ie(0,0,0,0);ye.multilink([this.pageNumberProperty,d.localBoundsProperty],(e,i)=>{if(e>=this.numberOfPagesProperty.value)return;v&&v.stop();const o=this.visibleAlignBoxesProperty.value[e*s.itemsPerPage],a=o?-o[r.minSide]+s.margin:0,l=null===w||!w.equals(i);w.set(i),this.animationEnabled&&!(null==m?void 0:m.value)&&n&&!l?(v=new jB((0,t.sF)({},s.animationOptions,{to:a,getValue:()=>d[r.coordinate],setValue:e=>{d[r.coordinate]=e}})),v.endedEmitter.addListener(()=>this.isAnimatingProperty.set(!1)),v.start(),this.isAnimatingProperty.value=!0):d[r.coordinate]=a}),this.visibleAlignBoxesProperty.link(()=>{this.pageNumberProperty.value=Math.min(this.pageNumberProperty.value,this.numberOfPagesProperty.value-1)}),s.children=[P,b,y,f,V],this.disposeCarousel=()=>{this.visibleAlignBoxesProperty.dispose(),this.pageNumberProperty.dispose(),this.alignBoxes.forEach(e=>{e.dispose()}),this.scrollingNode.dispose(),this.carouselConstraint.dispose(),this.carouselItemNodes.forEach(e=>e.dispose())},this.mutate(s),n=!0}},$B=class extends Vf{onIndexedNodeIOChildMoved(e){this.carousel.scrollToAlignBox(e)}constructor(e,t){super(t),this.carousel=e}},eO=class extends fy{updateSeparators(){const e=this.carousel.getVisibleAlignBoxes(),i=e.length>=2?_.range(1,e.length):[];this.separatorLayer.children=i.map(i=>{const n=(e[i-1][this.orientation.maxSide]+e[i][this.orientation.minSide])/2;return new Mf((0,t.sF)({[this.orientation.coordinate+"1"]:n,[this.orientation.coordinate+"2"]:n,[this.orientation.opposite.coordinate+"2"]:this.scrollingNode[this.orientation.opposite.size]},this.separatorOptions))})}computeClipArea(){const e=this.orientation,t=this.carousel.getVisibleAlignBoxes();if(0===t.length)return new Be(0,0);{const i=t[this.itemsPerPage-1]||t[t.length-1],n=new Be(i[e.maxSide]-t[0][e.minSide]+2*this.margin,this.scrollingNodeContainer.boundsProperty.value[e.opposite.size]);return this.orientation===Ee.HORIZONTAL?n:n.swapped()}}getBackgroundDimension(){let e,t;if(this.orientation===Ee.HORIZONTAL){const i=this.nextButton.visible?this.nextButton.width:0,n=this.previousButton.visible?this.previousButton.width:0;e=this.windowNode.width+i+n,t=this.windowNode.height}else{const i=this.nextButton.visible?this.nextButton.height:0,n=this.previousButton.visible?this.previousButton.height:0;e=this.windowNode.width,t=this.windowNode.height+i+n}return new Be(e,t)}layout(){super.layout();const e=this.orientation,t=this.alignGroup.getMaxSizeProperty(e.opposite).value+2*this.margin;this.nextButton[e.opposite.preferredSize]=t,this.previousButton[e.opposite.preferredSize]=t,this.nextButton[e.opposite.centerCoordinate]=this.backgroundNode[e.opposite.centerCoordinate],this.previousButton[e.opposite.centerCoordinate]=this.backgroundNode[e.opposite.centerCoordinate],this.windowNode[e.opposite.centerCoordinate]=this.backgroundNode[e.opposite.centerCoordinate],this.previousButton[e.minSide]=this.backgroundNode[e.minSide],this.nextButton[e.maxSide]=this.backgroundNode[e.maxSide],this.windowNode[e.centerCoordinate]=this.backgroundNode[e.centerCoordinate];const i=this.computeClipArea().toBounds();this.windowNode.clipArea=Hi.bounds(i),this.windowNode.localBounds=i;const n=this.getBackgroundDimension();this.carousel.backgroundWidth=n.width,this.carousel.backgroundHeight=n.height;const s=n.toBounds();this.backgroundNode.rectBounds=s,this.foregroundNode.rectBounds=s,this.separatorLayer&&this.updateSeparators()}constructor(e,t,i,n,s,r,o,a,l,h,c,d,u,p,m){super(e),this.carousel=e,this.backgroundNode=t,this.foregroundNode=i,this.windowNode=n,this.previousButton=s,this.nextButton=r,this.scrollingNodeContainer=o,this.alignBoxes=a,this.orientation=l,this.scrollingNode=h,this.itemsPerPage=c,this.margin=d,this.alignGroup=u,this.separatorLayer=p,this.separatorOptions=m,[this.backgroundNode,this.foregroundNode,this.windowNode,this.previousButton,this.nextButton,this.scrollingNodeContainer,...this.alignBoxes].forEach(e=>this.addNode(e,!1)),this.separatorLayer&&this.scrollingNode.constraint.finishedLayoutEmitter.addListener(()=>{this.updateSeparators()}),this.updateLayout()}};fb.register("Carousel",JB);let tO=class extends Cr{dispose(){this.disposePageControl(),super.dispose()}constructor(e,i,n){const s=(0,t.Ay)()({interactive:!1,orientation:"horizontal",dotRadius:3,lineWidth:1,dotSpacing:10,dotTouchAreaDilation:4,dotMouseAreaDilation:4,currentPageFill:"black",currentPageStroke:null,pageFill:"rgb( 200, 200, 200 )",pageStroke:null,tandem:A.A.REQUIRED,tandemNameSuffix:"PageControl",visiblePropertyOptions:{phetioFeatured:!0}},n),r=new kr({press:t=>{t.currentTarget instanceof iO&&(e.value=t.currentTarget.pageNumber)},tandem:s.tandem.createTandem("pressListener")}),o={lineWidth:s.lineWidth,mouseArea:0===s.dotMouseAreaDilation?null:Hi.circle(0,0,s.dotRadius+s.dotMouseAreaDilation),touchArea:0===s.dotTouchAreaDilation?null:Hi.circle(0,0,s.dotRadius+s.dotTouchAreaDilation),boundsMethod:"unstroked",cursor:s.interactive?"pointer":null,inputListeners:s.interactive?[r]:[]},a=new Vf({orientation:s.orientation,spacing:s.dotSpacing});let l=[];a.boundsProperty.link(()=>{a.center=Te.A.ZERO});const h=e=>{l.forEach(t=>{t.fill=e===t.pageNumber?s.currentPageFill:s.pageFill,t.stroke=e===t.pageNumber?s.currentPageStroke:s.pageStroke})};e.link(h);const c=t=>{l=_.range(0,t).map(e=>new iO(e,s.dotRadius,o)),a.children=l,h(e.value)};i.link(c),s.children=[a],super(s),this.disposePageControl=()=>{r.dispose(),i.unlink(c),e.unlink(h)}}},iO=class extends Th{constructor(e,t,i){super(t,i),this.pageNumber=e}};fb.register("PageControl",tO);let nO=class extends Of{reset(){this.carousel.reset()}constructor(e,i,n,s){s=(0,t.Ay)()({carouselOptions:{itemsPerPage:5,orientation:"vertical",buttonOptions:{touchAreaXDilation:8},spacing:24,margin:12,separatorsVisible:!0,fill:gD.panelFillProperty,stroke:gD.panelStrokeProperty,tandem:n.createTandem("carousel")}},s);const r=new JB(i,s.carouselOptions);r.mutate({scale:s.carouselScale}),super({spacing:5,children:[new tO(r.pageNumberProperty,r.numberOfPagesProperty,{orientation:"vertical",pageFill:Wr.WHITE,pageStroke:Wr.BLACK,currentPageStroke:Wr.TRANSPARENT,interactive:!0,tandem:n.createTandem("pageControl")}),r],tandem:n,visiblePropertyOptions:{phetioFeatured:!0}}),this.carousel=r}};jx.register("CircuitElementToolbox",nO);let sO=class{down(e){phet.chipper.isFuzzEnabled()&&Oe.A.nextDouble()<.99||this.observePointer(e.pointer)}observePointer(e){null!==this.pointer||e.isAttached()||null!==this.displayedProperty&&!this.displayedProperty.value||(this.pointer=e,this.pointer.addInputListener(this.pointerListener,!0))}dismissPointer(e){null!==this.pointer&&(this.pointer.removeInputListener(this.pointerListener),this.pointer=null)}dispose(){this.dismissPointer(this.pointer),this.displayedProperty&&this.displayedProperty.dispose()}constructor(e,i){this.displayedProperty=null;const n=(0,t.Ay)()({displayedNode:null},i);this.pointer=null,this.pointerListener={up:t=>{e(t),this.dismissPointer(this.pointer)},interrupt:()=>{this.dismissPointer(this.pointer)},cancel:()=>{this.dismissPointer(this.pointer)}},n.displayedNode&&(this.displayedProperty=new Cm(n.displayedNode))}};Xl.A.register("DisplayClickToDismissListener",sO);const rO=sO,oO=new Hi("M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z").makeImmutable();let aO=class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.currentProperty.value;this.circuitElement=e,this.current=t}};jx.register("AmmeterConnection",aO);let lO=class extends bk{step(e,t,i){super.step(e,t,i);const n=this.voltageDifferenceProperty.value;Math.abs(n)>100?this.triggerCount++:this.triggerCount=0,this.triggerCount>=2&&(i.cutVertex(this.startVertexProperty.value),this.isBarkingProperty.value=!0,this.lastBarkTime=e,this.triggerCount=0);this.isBarkingProperty.value&&e-this.lastBarkTime>.5&&(this.isBarkingProperty.value=!1,this.lastBarkTime=0)}constructor(e,t,i,n){super(e,t,fk.DOG,i,n),this.isBarkingProperty=new o(!1),this.lastBarkTime=0,this.triggerCount=0}};jx.register("Dog",lO);const hO=new Image,cO=El.A.createLock(hO);hO.onload=cO,hO.src="data:image/png;base64,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";const dO=hO;let uO=class extends Cr{markAsDirty(){this.dirty=!0}updateOpacityOnInteractiveChange(){const e=e=>{this.opacity=e?1:.5};this.circuitElement.interactiveProperty.link(e),this.disposeEmitter.addListener(()=>this.circuitElement.interactiveProperty.unlink(e))}containsSensorPoint(e){const t=this.globalToParentPoint(e);return this.step(),this.useHitTestForSensors?!!this.hitTest(t,!0,!1):this.containsPoint(t)}step(){this.dirty&&(this.updateRender(),this.dirty=!1)}endDrag(e,t,i,n,s,r,o){const a=this.circuitElement;a.interactiveProperty.get()&&(i.canNodeDropInToolbox(this)?this.circuit.disposeCircuitElement(a):(t.forEach(e=>{i.model.circuit.vertexGroup.includes(e)&&n.endDrag(e,o)}),this.selectCircuitElementNodeWhenNear(n,s,r)))}selectCircuitElementNodeWhenNear(e,t,i){if(!this.circuitElement.isDisposed&&i&&i.distance(t)this.dragListener.press(e,this);e.startDragEmitter.addListener(s),this.dirty=!0,this.disposeEmitter.addListener(()=>e.startDragEmitter.removeListener(s))}};jx.register("CircuitElementNode",uO);let pO=class extends Kc{press(e,t,i){const n=this.vertexGetters.map(e=>e());if(_.every(n,e=>this.circuitNode.canDragVertex(e))){if(super.press(e,t,i))return n.forEach(e=>this.circuitNode.setVerticesDragging(e)),!0}return!1}constructor(e,t,i){super(i),this.circuitNode=e,this.vertexGetters=t}};jx.register("CircuitNodeDragListener",pO);let mO=class extends fa{recomputeBounds(e){this.setRectBounds(e.getHighlightBounds())}constructor(e){super(0,0,0,0,8,8,{stroke:gD.highlightStrokeProperty,lineWidth:hD.HIGHLIGHT_LINE_WIDTH,pickable:!1}),this.recomputeBounds(e)}};jx.register("FixedCircuitElementHighlightNode",mO);const gO=new Pt,AO=new Pt,yO=new R(1);let fO=class extends uO{setViewType(e){this.contentNode.children=[e===pk.LIFELIKE?this.lifelikeNode:this.schematicNode],this.circuitElement.isSizeChangedOnViewChange&&this.highlightNode&&this.highlightNode.recomputeBounds(this)}updateRender(){const e=this.circuitElement.startPositionProperty.get(),t=this.circuitElement.endPositionProperty.get();if(e.equals(t))return;const i=Te.A.getAngleBetweenVectors(e,t),n=Te.A.getDistanceBetweenVectors(e,t);gO.setToTranslationRotationPoint(e,i),this.contentNode.setMatrix(gO),this.highlightNode&&this.circuitNode.circuit.selectionProperty.get()===this.circuitElement&&this.highlightNode.setMatrix(gO);const s=n/dO.width*.8,r=n*((1-.8)/2)/s,o=-dO.height;gO.multiplyMatrix(AO.setToScale(s)).multiplyMatrix(AO.setToTranslation(r,o)),this.fireNode&&this.fireNode.setMatrix(gO)}moveFixedCircuitElementNodeToFront(){this.circuitElement.interactiveProperty.get()&&(this.moveToFront(),this.circuitElement.moveToFrontEmitter.emit(),this.circuitElement.startVertexProperty.get().relayerEmitter.emit(),this.circuitElement.endVertexProperty.get().relayerEmitter.emit())}setSelectedCircuitElement(e){if(this.highlightNode){const t=e===this.circuitElement;ak.setInSceneGraph(t,this.circuitNode.highlightLayer,this.highlightNode),this.markAsDirty()}}dispose(){this.dragListener&&this.dragListener.interrupt(),this.dragListener&&this.dragListener.dispose(),this.circuitElement.vertexMovedEmitter.removeListener(this.markDirtyListener),this.updateHighlightVisibility&&this.circuitNode.circuit.selectionProperty.unlink(this.updateHighlightVisibility),this.circuitElement.connectedEmitter.removeListener(this.moveToFrontListener),this.circuitElement.vertexSelectedEmitter.removeListener(this.moveToFrontListener),this.fixedCircuitElementNodePickable&&this.circuitElement.interactiveProperty.unlink(this.pickableListener),this.circuitNode&&this.highlightNode&&ak.setInSceneGraph(!1,this.circuitNode.highlightLayer,this.highlightNode),this.viewTypeProperty.unlink(this.viewPropertyListener),!this.isIcon&&this.updateFireMultilink&&ye.unmultilink(this.updateFireMultilink),this.contentNode.dispose(),super.dispose()}updateFireVisible(e,t,i){this.fireNode.visible=((e,t)=>Math.abs(e)>=15&&t)(e,i)&&t>=1e-8}getHighlightBounds(){return this.contentNode.localBounds.dilated(10)}constructor(e,i,n,s,r,o,a,l){const h=i&&i.circuit,c=new Cr,d=(0,t.Ay)()({cursor:"pointer",children:[c],tandem:a,pickable:!0,isIcon:!1,showHighlight:!0},l);super(n,h,d),this.lifelikeNode=r,this.schematicNode=o,this.isIcon=d.isIcon,this.circuitNode=i,this.contentNode=c,this.fireNode=null,this.viewTypeProperty=s,this.viewPropertyListener=this.setViewType.bind(this),s.link(this.viewPropertyListener),!d.isIcon&&d.showHighlight?(this.highlightNode=new mO(this),this.viewPropertyListener(s.value)):this.highlightNode=null,this.markDirtyListener=this.markAsDirty.bind(this),n.vertexMovedEmitter.addListener(this.markDirtyListener),this.moveToFrontListener=this.moveFixedCircuitElementNodeToFront.bind(this),n.connectedEmitter.addListener(this.moveToFrontListener),n.vertexSelectedEmitter.addListener(this.moveToFrontListener),this.pickableListener=this.setPickable.bind(this),d.pickable&&n.interactiveProperty.link(this.pickableListener),this.fixedCircuitElementNodePickable=d.pickable||null;let u=null,p=null,m=!1;!d.isIcon&&i?(this.dragListener=new pO(i,[()=>n.endVertexProperty.get()],{start:e=>{this.moveToFront(),e.pointer&&e.pointer.point&&(u=e.pointer.point.copy(),p=e.pointer.point.copy(),n.interactiveProperty.get()&&i.startDragVertex(e.pointer.point,n.endVertexProperty.get(),n),m=!1)},drag:e=>{e.pointer.point&&(p=e.pointer.point.copy(),n.interactiveProperty.get()&&i.dragVertex(e.pointer.point,n.endVertexProperty.get(),!1),m=!0)},end:()=>this.endDrag(this.contentNode,[n.endVertexProperty.get()],e,i,u,p,m),tandem:a.createTandem("dragListener")}),this.contentNode.addInputListener(this.dragListener),d.showHighlight?(this.updateHighlightVisibility=this.setSelectedCircuitElement.bind(this),i.circuit.selectionProperty.link(this.updateHighlightVisibility)):this.updateHighlightVisibility=null,n.isFlammable?(this.fireNode=new _h(dO,{pickable:!1,imageOpacity:.95}),this.fireNode.mutate({scale:this.contentNode.width/this.fireNode.width}),this.addChild(this.fireNode),this.updateFireMultilink=e?ye.multilink([n.currentProperty,n instanceof bk?n.resistanceProperty:yO,e.model.isValueDepictionEnabledProperty],this.updateFireVisible.bind(this)):null):(this.fireNode=null,this.updateFireMultilink=null)):(this.dragListener=null,this.updateFireMultilink=null,this.updateHighlightVisibility=null)}};fO.webglSpriteNodes=[new _h(dO)],jx.register("FixedCircuitElementNode",fO);const bO=new Hi,PO=e=>9*Math.sin(e);for(let i=0;i<2*Math.PI;i+=Math.PI/2/100){const e=5.5*i;0===i?bO.moveTo(e,PO(i)):bO.lineTo(e,PO(i))}const VO=new ua(bO,{stroke:"black",lineWidth:4,centerX:0}),vO=e=>new Cr({x:hD.AC_VOLTAGE_LENGTH/2,children:[new Th(27,{stroke:"black",fill:e?null:"white",lineWidth:e?4:2,centerX:0}),VO,...e?[]:[new rV({size:new Be(10,2.5),centerX:0,centerY:-17.28}),new oB({size:new Be(10,2.5),centerX:0,centerY:17.28})]]}),wO=sb(vO(!0),{wrap:!1,resolution:2}),EO=sb(vO(!1),{wrap:!1,resolution:2});wO.mouseArea=Hi.circle(hD.AC_VOLTAGE_LENGTH-6,hD.AC_VOLTAGE_LENGTH-6,54),wO.touchArea=wO.mouseArea;let SO=class extends fO{constructor(e,i,n,s,r,o){const a=(0,t.Ay)()({useHitTestForSensors:!0},o);EO.centerY=0,super(e,i,n,s,EO,wO,r,a),this.acSource=n}};SO.webglSpriteNodes=[wO,EO],jx.register("ACVoltageNode",SO);const TO=new Image,CO=El.A.createLock(TO);TO.onload=CO,TO.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJIAAAAuCAYAAADDc0CAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABFRJREFUeNrsnM1uI0UUhU93V7fdbv8MkyiICJhECMgSsUJiwZZXQGKBkEbZsWM7u3kPxAKJNS/AI7BnAauImbGx3el2/1YVtzr2dOwsZ6aGiu6xrmP1qlz3q1P3droMsFivQd727+8UX/F02NUv35/gmy/GKErl3NiF7z2Nf/jriVToBu9zOlmvQwwSi0Fi/Y+2uq5Q8jyeCcvSWpuJ78O56np/zP7l5eV3FxcXn3Fq32a/42rsO9JZkiQzdiZ2pFdxJGHgMeH7PoNkUUopeDTn9Ha4uB2prg9ACoLgBiIGyX6f4wXbuAeOFIYhhBAIGCSramAWL0HUhYPz7u/qJH0DUhzHiKIIxpkYJKtV0hYkKlN95ShItxxpOp1iOIwJJMEg2c5FENJbSEC5B5J3CNLR0RHG46Tb3hgkyyWSIJBEROEWSL6n8fOfH3z7+PHnX+odSKenp5g9eABTKzFIFmXMKBgAXTjmSARS2g4eETCPdsSI8/NzHJMrmTqJQbLI0cCDHw3pQwxI90AKwkHHDPZAOj5GNGCQbCoikIKQQBIj2uKkY52/xngywQzjHqQ0TSGl7ApuBsme4iogR0qIKEqGko6NXuPk5D20VBK9BOnFi+eo6xqjmEGyqaQOEAwNSBPKi3QMI4WPPvkU74anPUjz+QJN0yAejRgkixq1AmJIEA2m8OCYI2mF9z88g5qc9SCtViva2hTGyZhBsqhKVhDxDBg+pKKjdatGIk969nyObK57kLLsuru5NJlOOLsWVWuBMHmHrOkIXuAYSOQ3z/5ZYlFkPUhFUXT/Z5tMppxdi2oRQSQPnQTJ3NROr9eYr5oeJNOxeZ6/d0+A9eY1iBT8MDI3lKhrC9waPFlS3SxgTOglSKbQrqoSxWbD2bWozaaELFMqlpYUrWMg0ZCLnEAqe5BM61+WFV1kkOyCVEFVBFKdULgHUrFJkWV1D1JVVZ0jlbfoYr15FUUNWVOx2qwpHGv/fSDPU6TpLZDKskRlomKQbKqsaqg6J4gy50AyTwfn1ylWq3IfpJJcqaZgWWz/ywaqoXJCEkita47k4TpdY7nc7Lf/FdVITd1wdm2CRPOtWlrRbeEkSOl6iX8XOfQeSLStme6NZRGkxjgS7QItrepWOQfS9XqFxSLtQdpQ228K7rZlkGyqbVtoSSB14RZIHr2yzNRIqx6kPN+BJDm7NkGiAltLWryqNofcHGv/PWitukOedxxJypazaxMkmm+t3ATJ7MS//vjxU/H1b0+k0mrrSHnXsSnJjmRTZr61osXbhYPHkQ4PSOZ5Bkk2q1z8Mi6DpPTNk5G67Z7vcU76AKQsy82ZTwT8LJJlkEyNIW+ejrwPIJkbkpEQ8M0ZK5Y9kMyvkXSh7gdI3TVsf2aFZS8PpuPZQXRPQPqbLq3pi804vXZB2i5hAO4vYv/q6uon4Qd/cGrfCk1ux52tjbc1dqRXdSROKYtBYjFILBaLdUf/CTAAdD5FTJbHDboAAAAASUVORK5CYII=";const IO=TO,xO=new Image,DO=El.A.createLock(xO);xO.onload=DO,xO.src="data:image/png;base64,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";const kO=xO;let MO=(new Hi).moveTo(0,0).lineTo(77.5,0).moveTo(77.5,25).lineTo(77.5,-25).moveTo(110.5,0).lineTo(188,0).moveTo(110.5,52).lineTo(110.5,-52);const BO=MO.bounds.width,OO=hD.BATTERY_LENGTH/BO;MO=MO.transformed(Pt.scale(OO,OO));const LO=sb(new ua(MO,{stroke:Wr.BLACK,lineWidth:hD.SCHEMATIC_LINE_WIDTH}),{wrap:!1});LO.centerY=0,LO.mouseArea=LO.bounds.shiftedY(LO.height/2),LO.touchArea=LO.bounds.shiftedY(LO.height/2);let RO=class extends fO{constructor(e,i,n,s,r,o){o=(0,t.sF)({useHitTestForSensors:!0},o);const a=new _h("normal"===n.batteryType?IO:kO);a.mutate({scale:n.distanceBetweenVertices/a.width}),a.centerY=0,super(e,i,n,s,a,LO,r,o),this.battery=n}};RO.webglSpriteNodes=[new _h(IO),new _h(kO)],jx.register("BatteryNode",RO);let NO=class e{getWidth(){return this.maxX-this.minX}get width(){return this.getWidth()}getHeight(){return this.maxY-this.minY}get height(){return this.getHeight()}getDepth(){return this.maxZ-this.minZ}get depth(){return this.getDepth()}getX(){return this.minX}get x(){return this.getX()}getY(){return this.minY}get y(){return this.getY()}getZ(){return this.minZ}get z(){return this.getZ()}getMinX(){return this.minX}getMinY(){return this.minY}getMinZ(){return this.minZ}getMaxX(){return this.maxX}getMaxY(){return this.maxY}getMaxZ(){return this.maxZ}getLeft(){return this.minX}get left(){return this.minX}getTop(){return this.minY}get top(){return this.minY}getBack(){return this.minZ}get back(){return this.minZ}getRight(){return this.maxX}get right(){return this.maxX}getBottom(){return this.maxY}get bottom(){return this.maxY}getFront(){return this.maxZ}get front(){return this.maxZ}getCenterX(){return(this.maxX+this.minX)/2}get centerX(){return this.getCenterX()}getCenterY(){return(this.maxY+this.minY)/2}get centerY(){return this.getCenterY()}getCenterZ(){return(this.maxZ+this.minZ)/2}get centerZ(){return this.getCenterZ()}getCenter(){return new $e(this.getCenterX(),this.getCenterY(),this.getCenterZ())}get center(){return this.getCenter()}get volume(){return this.width*this.height*this.depth}isEmpty(){return this.getWidth()<0||this.getHeight()<0||this.getDepth()<0}isFinite(){return isFinite(this.minX)&&isFinite(this.minY)&&isFinite(this.minZ)&&isFinite(this.maxX)&&isFinite(this.maxY)&&isFinite(this.maxZ)}hasNonzeroVolume(){return this.getWidth()>0&&this.getHeight()>0&&this.getDepth()>0}isValid(){return!this.isEmpty()&&this.isFinite()}containsCoordinates(e,t,i){return this.minX<=e&&e<=this.maxX&&this.minY<=t&&t<=this.maxY&&this.minZ<=i&&i<=this.maxZ}containsPoint(e){return this.containsCoordinates(e.x,e.y,e.z)}containsBounds(e){return this.minX<=e.minX&&this.maxX>=e.maxX&&this.minY<=e.minY&&this.maxY>=e.maxY&&this.minZ<=e.minZ&&this.maxZ>=e.maxZ}intersectsBounds(e){return!this.intersection(e).isEmpty()}toString(){return`[x:(${this.minX},${this.maxX}),y:(${this.minY},${this.maxY}),z:(${this.minZ},${this.maxZ})]`}equals(e){return this.minX===e.minX&&this.minY===e.minY&&this.minZ===e.minZ&&this.maxX===e.maxX&&this.maxY===e.maxY&&this.maxZ===e.maxZ}equalsEpsilon(e,t){t=void 0!==t?t:0;const i=this.isFinite(),n=e.isFinite();return i&&n?Math.abs(this.minX-e.minX)({minX:e.minX,minY:e.minY,minZ:e.minZ,maxX:e.maxX,maxY:e.maxY,maxZ:e.maxZ}),fromStateObject:e=>new NO(e.minX,e.minY,e.minZ,e.maxX,e.maxY,e.maxZ)}),w.A.register("Bounds3",NO),bs.mixInto(NO,{initialize:NO.prototype.setMinMax});const qO=NO;let FO=class extends T{getDefaultValue(){return this._defaultValue}get defaultValue(){return this.getDefaultValue()}setMin(e){super.setMin(e)}setMax(e){super.setMax(e)}setMinMax(e,t){return super.setMinMax(e,t)}toString(){return`[RangeWithValue (min:${this.min} max:${this.max} defaultValue:${this._defaultValue})]`}equals(e){return this.constructor===e.constructor&&this._defaultValue===e.defaultValue&&super.equals(e)}constructor(e,t,i){super(e,t),this._defaultValue=i}};w.A.register("RangeWithValue",FO);const HO=FO;var YO=i(6930);const GO={PLATE_WIDTH_RANGE:new HO(.01,.02,Math.sqrt(2e-4)),PLATE_HEIGHT:5e-4,POLARITY:YO.A.byKeys(["POSITIVE","NEGATIVE"]),PLATE_SEPARATION_RANGE:new HO(.002,.01,.006)};Pa.register("CapacitorConstants",GO);const UO=GO,zO=new Be(6,7),WO=YO.A.byKeys(["UP","DOWN"]),QO=(e,t,i,n)=>{n.moveTo(e.x,e.y-t/2-3),n.lineTo(e.x,e.y+t/2-3);const s=zO.width,r=zO.height,o=i===WO.UP?e.x-1/4:e.x+1/4;i===WO.UP?(n.moveTo(o,e.y-r/2),n.lineTo(o+s/2,e.y+r/2),n.lineTo(o-s/2,e.y+r/2)):i===WO.DOWN&&(n.moveTo(o,e.y+r/2),n.lineTo(o-s/2,e.y-r/2),n.lineTo(o+s/2,e.y-r/2))};let KO=class extends Hg{paintCanvas(e){const t=this.capacitor.getEffectiveEField(),i=this.getLineSpacing(t);if(i>0){e.beginPath();const n=this.capacitor.plateSizeProperty.value.width,s=n,r=this.capacitor.plateSeparationProperty.value,o=this.modelViewTransform.modelToViewDeltaXYZ(0,r,0).y,a=t>=0?WO.DOWN:WO.UP;let l=i/2;for(;l<=n/2;){let t=i/2;for(;t<=s/2;){const n=0,s=this.modelViewTransform.modelToViewXYZ(l,n,t),r=this.modelViewTransform.modelToViewXYZ(-l,n,t),h=this.modelViewTransform.modelToViewXYZ(l,n,-t),c=this.modelViewTransform.modelToViewXYZ(-l,n,-t);QO(s,o,a,e),QO(r,o,a,e),QO(h,o,a,e),QO(c,o,a,e),t+=i}l+=i}e.strokeStyle="black",e.fillStyle="black",e.lineWidth=1,e.fill(),e.stroke()}}getLineSpacing(e){return 0===e?0:.0258/Math.sqrt(Math.abs(e))}constructor(e,t,i,n){super({canvasBounds:n}),this.capacitor=e,this.modelViewTransform=t,this.maxEffectiveEField=i,ye.multilink([e.plateSizeProperty,e.plateSeparationProperty,e.plateVoltageProperty],()=>{this.isVisible()&&this.invalidatePaint()}),this.visibleProperty.link(e=>e&&this.invalidatePaint())}};Pa.register("EFieldNode",KO);const jO=KO,_O=new Te.A(0,0),ZO=new $e(0,0,0);let XO=class{modelToViewPosition(e){return _O.setPolar(e.z*Math.sin(this.pitch),this.yaw),_O.addXY(e.x,e.y),this.modelToViewTransform2D.transformPosition2(_O)}modelToViewXYZ(e,t,i){return this.modelToViewPosition(ZO.setXYZ(e,t,i))}modelToViewDelta(e){const t=this.modelToViewPosition(ZO.setXYZ(0,0,0));return this.modelToViewPosition(e).minus(t)}modelToViewDeltaXYZ(e,t,i){return this.modelToViewDelta(new $e(e,t,i))}modelToViewShape(e){return this.modelToViewTransform2D.transformShape(e)}modelToViewBounds(e){return this.modelToViewTransform2D.transformBounds2(e)}viewToModelPosition(e){return $e.from(this.modelToViewTransform2D.inversePosition2(e))}viewToModelXY(e,t){return this.viewToModelPosition(_O.setXY(e,t))}viewToModelDelta(e){const t=this.viewToModelPosition(_O.setXY(0,0));return this.viewToModelPosition(e).minus(t)}viewToModelDeltaXY(e,t){return this.viewToModelDelta(new Te.A(e,t))}viewToModelShape(e){return this.modelToViewTransform2D.inverseShape(e)}viewToModelBounds(e){return this.modelToViewTransform2D.inverseBounds2(e)}constructor(e){e=(0,h.A)({scale:12e3,pitch:30*Math.PI/180,yaw:-45*Math.PI/180},e),this.modelToViewTransform2D=new Da(Pt.scaling(e.scale)),this.pitch=e.pitch,this.yaw=e.yaw}};Pa.register("YawPitchModelViewTransform3",XO);const JO=XO;let $O=class{createTopFace(e,t,i,n,s,r){const o=this.modelViewTransform.modelToViewXYZ(e-n/2,t,i+r/2),a=this.modelViewTransform.modelToViewXYZ(e+n/2,t,i+r/2),l=this.modelViewTransform.modelToViewXYZ(e+n/2,t,i-r/2),h=this.modelViewTransform.modelToViewXYZ(e-n/2,t,i-r/2);return this.createFace(o,a,l,h)}createTopFaceBounds3(e){return this.createTopFace(e.minX,e.minY,e.minZ,e.width,e.height,e.depth)}createFrontFace(e,t,i,n,s,r){const o=this.modelViewTransform.modelToViewXYZ(e-n/2,t,i-r/2),a=this.modelViewTransform.modelToViewXYZ(e+n/2,t,i-r/2),l=this.modelViewTransform.modelToViewXYZ(e+n/2,t+s,i-r/2),h=this.modelViewTransform.modelToViewXYZ(e-n/2,t+s,i-r/2);return this.createFace(o,a,l,h)}createFrontFaceBounds3(e){return this.createFrontFace(e.minX,e.minY,e.minZ,e.width,e.height,e.depth)}createRightSideFace(e,t,i,n,s,r){const o=this.modelViewTransform.modelToViewXYZ(e+n/2,t,i-r/2),a=this.modelViewTransform.modelToViewXYZ(e+n/2,t,i+r/2),l=this.modelViewTransform.modelToViewXYZ(e+n/2,t+s,i+r/2),h=this.modelViewTransform.modelToViewXYZ(e+n/2,t+s,i-r/2);return this.createFace(o,a,l,h)}createRightSideFaceBounds3(e){return this.createRightSideFace(e.minX,e.minY,e.minZ,e.width,e.height,e.depth)}createBoxShape(e,t,i,n,s,r){const o=this.createTopFace(e,t,i,n,s,r),a=this.createFrontFace(e,t,i,n,s,r),l=this.createRightSideFace(e,t,i,n,s,r);return Hi.union([o,a,l])}createFace(e,t,i,n){return(new Hi).moveToPoint(e).lineToPoint(t).lineToPoint(i).lineToPoint(n).close()}constructor(e){this.modelViewTransform=e}};Pa.register("BoxShapeCreator",$O);const eL=$O,tL={lineWidth:1,stroke:"black"};let iL=class extends Cr{updateShapes(){this.topNode.shape=this.shapeCreator.createTopFaceBounds3(this.size),this.frontNode.shape=this.shapeCreator.createFrontFaceBounds3(this.size),this.rightSideNode.shape=this.shapeCreator.createRightSideFaceBounds3(this.size)}setBoxSize(e){e.equals(this.size)||(this.size=e,this.updateShapes())}constructor(e,t,i,n){super(),this.shapeCreator=new eL(e),this.topNode=new ua(null,(0,h.A)({fill:t},tL)),this.frontNode=new ua(null,(0,h.A)({fill:t.darkerColor()},tL)),this.rightSideNode=new ua(null,(0,h.A)({fill:t.darkerColor().darkerColor()},tL)),this.size=i,this.updateShapes(),this.addChild(this.topNode),this.addChild(this.frontNode),this.addChild(this.rightSideNode),n=(0,h.A)({pickable:!0},n),this.mutate(n)}};Pa.register("BoxNode",iL);const nL=iL,sL=WP.RED_COLORBLIND.toCSS(),rL=new T(1,625),oL=new Be(7,2);let aL=class extends Hg{getGridSize(e,t,i){let n=0,s=0;if(e>0){const r=Math.sqrt(e/t/i);n=(0,Xe.q)(t*r);const o=(0,Xe.q)(i*r),a=(0,Xe.q)(e/n);if(o!==a){s=Math.abs(e-o*n)=0&&this.polarity===UO.POLARITY.POSITIVE||this.getPlateCharge()<0&&this.polarity===UO.POLARITY.NEGATIVE}paintCanvas(e){const t=this.getPlateCharge(),i=this.getNumberOfCharges(t,this.maxPlateCharge);if(i>0){const t=this.modelViewTransform.viewToModelDeltaXY(oL.width,0).x,n=this.getContactWidth(),s=this.capacitor.plateSizeProperty.value.depth-2*t,r=this.getGridSize(i,n,s),o=r.height,a=r.width,l=n/a,h=s/o,c=l/2,d=h/2;for(let u=0;u0&&nthis.isVisible()&&this.invalidatePaint()),this.visibleProperty.link(e=>e&&this.invalidatePaint())}};const lL=(e,t)=>{const i=oL.width,n=oL.height;t.fillStyle=sL,t.fillRect(e.x-i/2,e.y-n/2,i,n),t.fillRect(e.x-n/2,e.y-i/2,n,i)},hL=(e,t,i)=>{const n=oL.width,s=oL.height;t.fillStyle="blue",i===Ee.VERTICAL?t.fillRect(e.x-n/2,e.y,n,s):t.fillRect(e.x-s/2,e.y-2.5,s,n)};Pa.register("PlateChargeNode",aL);const cL=aL,dL=new Wr(245,245,245);let uL=class extends nL{setChargeVisible(e){this.plateChargeNode.visible=e}getMaxBoxNodeBounds(){return new nL(this.modelViewTransform,dL,new qO(0,0,0,UO.PLATE_WIDTH_RANGE.max,UO.PLATE_HEIGHT,UO.PLATE_WIDTH_RANGE.max)).bounds}constructor(e,t,i,n,s){let r=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];super(t,dL,e.plateSizeProperty.value),this.modelViewTransform=t;const o=this.getMaxBoxNodeBounds();this.plateChargeNode=new cL(e,t,{polarity:i,maxPlateCharge:n,canvasBounds:o,orientation:s}),r&&this.addChild(this.plateChargeNode)}};Pa.register("PlateNode",uL);const pL=uL;let mL=class extends Cr{dispose(){this.disposeCapacitorNode(),super.dispose()}frontSideContainsSensorPoint(e){const t=this.topPlateNode.globalToParentPoint(e);return this.topPlateNode.containsPoint(t)}backSideContainsSensorPoint(e){const t=this.bottomPlateNode.globalToParentPoint(e);return this.bottomPlateNode.containsPoint(t)}getTopPlateClipShapeToGlobal(){const e=this.topPlateNode.topNode;return Hi.rect(e.center.x-100,e.center.y-300,200,300).transformed(e.getLocalToGlobalMatrix())}getBottomPlateClipShapeToGlobal(){const e=this.bottomPlateNode.frontNode;return Hi.rect(e.bounds.center.x-100,e.bounds.bottom,200,300).transformed(e.getLocalToGlobalMatrix())}updateGeometry(){this.topPlateNode.setBoxSize(this.capacitor.plateSizeProperty.value),this.bottomPlateNode.setBoxSize(this.capacitor.plateSizeProperty.value);const e=-this.capacitor.plateSeparationProperty.value/2-this.capacitor.plateSizeProperty.value.height;this.topPlateNode.center=this.modelViewTransform.modelToViewDeltaXYZ(0,e,0);const t=this.capacitor.plateSeparationProperty.value/2;this.bottomPlateNode.center=this.modelViewTransform.modelToViewDeltaXYZ(0,t,0)}getPlatesBounds(){return new Ie(this.topPlateNode.left,this.topPlateNode.top,this.bottomPlateNode.right,this.bottomPlateNode.bottom)}constructor(e,t,i,n,s){s=(0,h.A)({orientation:Ee.VERTICAL,includeChargeNode:!0},s),super(),(0,k.A)(s.orientation,{validValues:Ee.enumeration.values}),this.capacitor=e.capacitor,this.modelViewTransform=t,this.topPlateNode=new pL(this.capacitor,t,UO.POLARITY.POSITIVE,e.maxPlateCharge,s.orientation,s.includeChargeNode),this.bottomPlateNode=new pL(this.capacitor,t,UO.POLARITY.NEGATIVE,e.maxPlateCharge,s.orientation,s.includeChargeNode);const r=new jO(this.capacitor,t,e.maxEffectiveEField,this.getPlatesBounds());this.addChild(this.bottomPlateNode),this.addChild(r),this.addChild(this.topPlateNode);const o=ye.multilink([this.capacitor.plateSizeProperty,this.capacitor.plateSeparationProperty],()=>this.updateGeometry()),a=e=>{this.topPlateNode.setChargeVisible(e),this.bottomPlateNode.setChargeVisible(e)};i.link(a);const l=e=>r.setVisible(e);n.link(l),this.mutate(s),this.disposeCapacitorNode=()=>{o.dispose(),i.unlink(a),n.unlink(l)}}};Pa.register("CapacitorNode",mL);const gL=mL,AL=new Image,yL=El.A.createLock(AL);AL.onload=yL,AL.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAAUCAYAAABPuVmJAAACFklEQVRoQ+2ZP2gTYRjGn+fOzeHSycXJwaHLFRy6iE1w6KLGCEVKUVBw8A9eFcShShJFUAo2ttAuUkVFB6Ek6KCDNQEXBSEuxUkQ3By8bCLmHlEIWJPedbPf3XfLO9wN976/73u+5/1ewj6ZqgAzla1NFonAH47v9btgEVAB4AihHEhAgo3/vw6KFMJBG9JrF2wce/nmQ9y6jgXeOHogoMuaJJCEjVu7DpEUOkT50OPn8xtB3xB468xUnWTRbmQDhQyo71t8VBoEfSDwtesXAjmsQcAf0bfRuDqQmh6embvzL/Q+4N+ezfvqum3rb0yvgEK6UX7o4Pl1Z3of8K+NpYqoMkEIgo3m1iFSVN1RPFv5e+n2Af/44FbTAcasihun4oNO39bu45fzscDfLcyEEjzrylPQlUQKR4MbQ7HAX1w7F5KOZ1uwrd2CbY4POuNXF3KxwJ9cPNEkNZYKQct4eyGpNXn7frykL508UgFZtr1YClyMUD29vBJv2m6WCr4ctwXQM70xyfb/q9NV5F9ZWf0cK+m/X17aPxoQqFlZN/fWSdD07Ku3yRcvvdVwas9wHUDRzknMmxNFQuPu+7XDm75a7X04sWtnAKAKB17G/Y8ZlgboQCg//fSlb2f3mCaORwu57b67zS0RzEsYIeGlwM6kZkQAoQOiDagZ/fxxbzX8vu7MTrxLz7bRSX/2iTs8/SXIVoa/ADGQqWBIOVyOAAAAAElFTkSuQmCC";const fL=AL;let bL=(new Hi).moveTo(0,0).lineTo(79,0).moveTo(79,52).lineTo(79,-52),PL=(new Hi).moveTo(109,0).lineTo(188,0).moveTo(109,52).lineTo(109,-52);const VL=hD.CAPACITOR_LENGTH/188;bL=bL.transformed(Pt.scale(VL,VL)),PL=PL.transformed(Pt.scale(VL,VL));let vL=class extends fO{dispose(){this.disposeCapacitorCircuitElementNode(),super.dispose()}containsSensorPoint(e){return this.step(),this.frontSideContainsSensorPoint(e)||this.backSideContainsSensorPoint(e)}frontSideContainsSensorPoint(e){return this.viewTypeProperty.value===pk.LIFELIKE?this.capacitorCircuitElementLifelikeNode.frontSideContainsSensorPoint(e)||this.leftWireStub.containsPoint(this.leftWireStub.globalToParentPoint(e)):this.leftSchematicHitAreaPath.containsPoint(this.leftSchematicHitAreaPath.globalToParentPoint(e))}backSideContainsSensorPoint(e){return this.viewTypeProperty.value===pk.LIFELIKE?this.capacitorCircuitElementLifelikeNode.backSideContainsSensorPoint(e)||this.rightWireStub.containsPoint(this.rightWireStub.globalToParentPoint(e)):this.rightSchematicHitAreaPath.containsPoint(this.rightSchematicHitAreaPath.globalToParentPoint(e))}getHighlightBounds(){return this.viewTypeProperty.value===pk.LIFELIKE?this.contentNode.localBounds.erodedX(22).erodedY(15):this.contentNode.localBounds.dilatedX(10).dilatedY(10)}constructor(e,i,n,s,a,l){l=(0,t.sF)({isIcon:!1},l);const h={pickable:!0},c=new qO(0,0,0,.01414213562373095,UO.PLATE_HEIGHT,.01414213562373095),d=new R(.004),u={maxPlateCharge:26562e-16,capacitor:{plateSizeProperty:new r.A(c),plateSeparationProperty:d,plateVoltageProperty:new R(1.5),plateChargeProperty:new R(0),getEffectiveEField:()=>0}},p=new JO,m=new o(!0),g=new o(!0),y=new gL(u,p,m,g,{tandem:A.A.OPT_OUT,orientation:Ee.HORIZONTAL,includeChargeNode:!l.isIcon,scale:.45,rotation:-Math.PI/2,centerX:n.distanceBetweenVertices/2,centerY:0}),f=ye.multilink([n.capacitanceProperty,n.voltageDifferenceProperty],(e,t)=>{let i=2e-13*e*t;Math.abs(i)<1e-18&&(i=0),u.capacitor.plateChargeProperty.set(-i)}),b=new _h(fL,(0,t.sF)({centerX:y.centerX,centerY:y.centerY},h)),P=new _h(fL,(0,t.sF)({centerX:y.centerX,centerY:y.centerY},h)),V={stroke:Wr.BLACK,lineWidth:hD.SCHEMATIC_LINE_WIDTH,strokePickable:!0,pickable:!0},v={stroke:null,lineWidth:15,strokePickable:!0,pickable:!0},w=new ua(bL,V),E=new ua(PL,V),S=new Cr({children:[w,E]});S.mouseArea=S.localBounds.dilated(2),S.touchArea=S.localBounds.dilated(2),y.mouseArea=y.localBounds.erodedX(45).dilatedY(12),y.touchArea=y.localBounds.erodedX(45).dilatedY(12),super(e,i,n,s,new Cr({children:[y,b,P]}),S,a,l),this.capacitor=n,this.capacitorCircuitElementLifelikeNode=y,this.capacitorCircuitElementSchematicNode=S,this.leftWireStub=b,this.rightWireStub=P,this.leftSchematicPath=w,this.rightSchematicPath=E,this.leftSchematicHitAreaPath=new ua(bL,v),this.rightSchematicHitAreaPath=new ua(PL,v),S.addChild(this.leftSchematicHitAreaPath),S.addChild(this.rightSchematicHitAreaPath),n.capacitanceProperty.link(e=>{d.value=4e-4/e;const t=this.capacitorCircuitElementLifelikeNode.getTopPlateClipShapeToGlobal();b.clipArea=t.transformed(b.getGlobalToLocalMatrix());const i=this.capacitorCircuitElementLifelikeNode.getBottomPlateClipShapeToGlobal();P.clipArea=i.transformed(P.getGlobalToLocalMatrix())}),this.disposeCapacitorCircuitElementNode=()=>{f.dispose(),y.dispose()}}};vL.webglSpriteNodes=[new _h(fL)],jx.register("CapacitorCircuitElementNode",vL);const wL=new Image,EL=El.A.createLock(wL);wL.onload=EL,wL.src="data:image/png;base64,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";const SL=wL;var TL=i(5220);let CL=class{constructor(e,t,i){let n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];this.width=e,this.height=t,this.url=i,this.img=new Image,this.img.src=this.url,this.canvas=document.createElement("canvas"),this.canvas.width=this.width,this.canvas.height=this.height;const s=this.canvas.getContext("2d"),r=n?El.A.createLock(this.img):null;this.img.onload=()=>{s.drawImage(this.img,0,0),r&&r()}}};TL.A.register("MipmapElement",CL);const IL=[new CL(194,315,"data:image/png;base64,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"),new CL(97,158,"data:image/png;base64,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"),new CL(49,79,"data:image/png;base64,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"),new CL(25,40,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAoCAYAAAALz1FrAAAAAklEQVR4AewaftIAAAPDSURBVL3Bf4iedQEA8M/3+7zPc7vjfZ/3zndr5YQF28LbK6GwVEisJCL/PKEgVyCEU+7CFlhEHS/6Yn8YwZHsrpWTCKLaMJKI/dESz4k1UEHxDpG20XbLPMv0Lt3s8u7phZOcd+97d/vRfT7Bym7HDovmUaCEeYtKeBMPYUEHQXtfxLU4iQNWdis+idcxYo2+jb0u3G34PrZbxTC+4OJtxQg+poNvYLdLdyV+4DyJRTdjB0Zdun8hxQCedp7voeTyegA1LRF1vIN3XV6PYY+WiAEccvk9i0xLRIKX/X8saClhXgeT9w99C7uEoldb4RzG643REe3NYUeCT+NJS0w2B/9QBHeGED6EHDXUUEMNNcJHKW4b+swnrht74plfWe5qfLiE/1hiojn0ZYpbgrCv3hi9xwommkOPBMUdk82hr9Ubo/t8UIEsIrVE4CMIOGoV1zRGv1oU4Z+42XLdOBFRWO4xvFYoHpxsDl5rFSF4B6nlavhTRLBEvTH6Z8J3ArWCRyeagze4OAXmIs7iJkvUG6OP4JuBjUH45URz8FMuXNAScQCf1Ua9MfYwvk6RB+Hnk83Bz1u7m3BOS8SbSHRQb4z9rODuQpESHp5oDu6yNp/Dj7VEi57CvTq4pjH2aBDuKcjxoNVFBMxqiRb9Hn2o6aDeGD0UeJzwcau7F+PeE73vEPZaQaF4iyK1sitRxePeE73vBfwdX3FphvAL54k+6CH043oXZw+mMOk80XL34UvY7gLMnP13js3Yb4mgjeHh4acr5fJ1fX1971Z7e1WrVdXeXtVyOc0r5Sy/ovZ2CMH8/LzXpqf97cxUz19fecVbb589sOeuu+62REkbMcYNMcZuSyWJmGZaKiEE/5OUxKSkpUsb0TqI1kG0DqJ1EK2Dkjamp6fnZ2dmzMzMKL/xhjzP5dWqK/r6bNq0ycaNG8UkMTc359SpU6bOnDH96qvmWrRR0saRI0d+OzU1tStJkpDnuVqtZsuWLbZt22bnzp36+/ulaWp2dtb4+Lhjx445fvz4THd394+0EbVx8uTJB3p7e19yAXp6en53+vTp57URdZDn+U+SJFmwBqVS6fWtW7fep4OogxMnTvywXC4/bw0qlcqvjx49elwHJSsYGBjYd8ONN451b9iwoaurS09Pj0qlIs9zaZbZctVVNm/e/JeDBw9+9/DhwzopWcH+/ft/evvu3TEtlfZmWdafZVmSZZksy6RZdi5N0z/meT48MjLyDysI1ujZ5567NUvTW9I0rWZdXWcWFhZ+s2P79hetwX8BmSv+qJg8NW0AAAAASUVORK5CYII="),new CL(13,20,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAUCAYAAABWMrcvAAAAAklEQVR4AewaftIAAAHRSURBVJ3BQWhSYQDA8f/3KcHGHKgv3cEx58haztMQ3qE6dNghioICYyvaKZuHQYcOBUl7R/G8nbpHdOvmQQMXEh19czMwPfTIy4aMIGLufT3yUW+jaOz3E/yRBuaBAWADgiE/0AY2OeYqcJ9/uwPcxGMaWOb/bgNXcC0DkpN5gEMCh4DNyQxw+AEbl7mWfyNgGqEEvwgcn1KF9bsMfQPmcSziMI389S0j/4FjzLX8uy0j/4iha8AlCQgcAuoKzpjGylO8BBaIKENBoC4BiSNVWN8VqIcCkTWN/Av+TgCHEugDl3GkChsfFeoecMs0VnIcJQAfDgm8Bc7hmitsmMBrEAsctQRs4pAM7QBZflMDUBLX/vcfI8Ah0MYhcOVyuecXZ2czU/G4PRUOhrSx0bPjM+dbn+u1mWaz+XXp8ZMFXH5c0Wh0QghxA4caG2dkchIhxAVbm0BpexIPySlITsGPq91uWzvb20prtUQ8HieTyRAIBKhWq3Q6nT08fLgajUbti2UtWpYVllISi8VQSlEulw8qlcqzfr9v4pJ4JBKJl9ls1tZ1HU3TCIZC6Lpe63a7r/Dw4dHr9d4Xi8WDZDI5GolEdsOaVp5Lp1dLpdI+Hj8BtxuMfeusE5cAAAAASUVORK5CYII=")],xL=[new CL(194,315,"data:image/png;base64,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"),new CL(97,158,"data:image/png;base64,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"),new CL(49,79,"data:image/png;base64,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"),new CL(25,40,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAoCAYAAAALz1FrAAAAAklEQVR4AewaftIAAARQSURBVLXBW2zddQEA4O/3v53ubG0pZ0JZyS6BOUcXAnG6BwHRGDOJLyPRxE6Nxki0JROTaYzBgzT6gCFbRDq3MB5IjLqFB/RBwYiCxoBOljhahDnwQtVkg3W9bDu9nP7tUhJGe87p2cXvCxrrwXrzqsiRoGpeglN4CLPqCGr7JG7Ca9ivsY/hA3gTuzXpG7jHhbsT38P1lnAvPuHircFuvFsdX8V2l24VHnSe2LzbsB4DLt04UmzDH5znu0hcXt9ByZwI3ahgxuX1BO4yJ8I2HHT5/RmZORFivOL/Y9acBFV1DN3f93VsFvIr1BTO4pnu8sButU1hfYzb8awFhvp7f50HXwwhXIU2lFBCCSWUCGvJ7+z70Ptu3vPbQz+12HvQmWDaAoP9fZ8m/3AQHu4uD+zQwGB/36NB/rmh/r67u8sDD3unHFmE1AKBaxDwO0vYVB74Qp6Hk7jNYsvwaoTcYk/geC5/YKi/9yZLCEEFqcVKeC5CsEB3eeBvhG8GSjmPD/b3bnFxckxFOINbLNBdHngUXwusDMJPBvt7P+jCBXMi7MdH1NBd3vMIvkLeFoQfDfX3btW8W3DWnAinEKuju7znsZwv5fKU8Mhgf+9mzfko9pkTmfd77FTHpvKex4OwI6cND1hahIAxcyLzfoUOlNTRXR44GHiacKOl7cQz3hJ520Hco4FcPkGeamwV2vG0t0Te9hecwGdcmj782Hki7/QQNuL9Ls5deB1DzhNZ7Nv4FK53AUbPTLbhauy1QFDDU1/uOBREN4cQ5yFEoiiWZoniimIorSxFq7pWVZMkVZmseOnFIaMjlXh2dko1ih7b+oPhz1sgUUNiJEIsR448opoxvYKZmGpHEqIZoXqW6ZPMHBdh1spYDZElnDjb7bXxzc754382maympmZ4cjDVrEQDR07e6oWTK6VR7splEw6/caX0H63eNZp57l+xdR2xl9/coGW6pKPlr+qJNLCh/Yiedb9x61XDdr18o89ufNGJMV4fzdx7R0X5yXZjlVgaT2ok0UAhHnXO2tbD7t4wbXk64uMb/62za7UVhcj9WyecHn7J6KnjGok0qWv5K85pa5lyxbKqc9aWpjQjUcOrb8Szs/ksEiG0iOJWhWKH1rjTZFgjSddJ0kRl+ozhanBi9Kjq1H9FWXVaDYkadj61/Bfj4+PvLRTi0Na2TKnUrqvrGtel17kh3GCiuFGapsZmxjw7PeH5v484enRk/PTp0/vUEKlhbGzsvkKhcNQFKBQKv6xUKn9SQ6SONE33hxByTYjjeKRYLParI1LH+Pj4g2maHtGEYrH482PHjg2pI9FAT0/PD7ds2fL9lpaWQktLi2KxqLW1VVtbmyzLdF17ras7O4d379p1nwYSDezdu3dfz/btIU2SHVmWbciyLMqyTJZlsiybTLPs+VKp9K0DBw78UwNBk144fHhbmqa3Z1nWnmXZcBzHP1uzevUhTfgfTJhAUmzU/MYAAAAASUVORK5CYII="),new CL(13,20,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAUCAYAAABWMrcvAAAAAklEQVR4AewaftIAAAIESURBVI3BT0hTcQDA8e/vvbc5kW3N3puIMTVzDaxgCDGhOhQYhFBQqJShp8p36RzB0EcX230eomOX6NahQ4eiRhpCUTxDBE2CpmR/tik52Z/Xo73qTYr8fAR/HAZ6gTJQBQQ1CrAEZNjhJHCZf7sAnMWlExjj/84DJ3CMARK7M4pNAipAld0pY1OAKg5zUn8goBNhCX4S2BZ7kulhajaBXmwXsZmGPjBv6C/ZwZzUn84b+jVqzgDHJEBgEzBjgdc0xm/gJvgIooWaEDAjARK2nmT6i8C6IhBDpqFP8HcCqEhADjiOrSc5PWdhjQDnTGP8KvUEIGOTgIdAN45DyWkTuA+in3qXgAw2iZoFYIjfrDJYEo7C1nYjUAGWsAkcd4YDE5GQN6HIHssfiATbIpG9Wlhafj233r6e+746MD17CoeCY3+ooAGnN4pdVKXPdMg+8pt7oqXiKxoo4abgslHqZDG/D29RYfltgDZVoZDvQmtYwE3Bxe95T6+6gtLYRvfBbvyBAG9yS2wVqaPgmF3xrX7aLFuyp0Vo7UewmvoJ+oM8y1cofHj+DRcFx81HxVs+n2+0tdV74Kjmp0NuoaiEmN8Olp68a0pDnl8kXGKx2N3BwcFqIpFAVVVCzc0k+vpeZLPZe7jIuKytrWVSqVQ1Go02hcPhr6qmPY7H49dvT03lcPkBy4eYT4ZWwzkAAAAASUVORK5CYII=")],DL=[new CL(195,315,"data:image/png;base64,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"),new CL(98,158,"data:image/png;base64,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"),new CL(49,79,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAABPCAYAAABCtC2tAAAAAklEQVR4AewaftIAAAiCSURBVN3BD3DV9WEA8M/3l/BXQFCEXpGCroIS3E3ndOOPy7tud66tmatzTq7WpdxZ12RX/2yy6i59Pt0qbVVozboBm9hpa12rNm1nx7Av1m7n1lkn56OsYvmPhfCnSSAhyUu+CyY7giK89xKQ5vMJhsY03IRL0IXx2IcRjshjEloxAi/jK9hukILSnYUlqEAXcvgq1juxOViECiR4DZ/DbiUIijcN9+A9+Hd8HnmlK8dt+G3swX3YqAhBce7FZfgmVhl6i3AjNuA2BQoKMxf3YRNuc/KlcTmW4nknUObEfh9prMByp0YjtuMujMN/G4SPYg3meneMx9O4W4n+EGswzbvvG7hDkX4D38f7nR7K8R1cpwjfxVVOLzPwfczwFmXebhm2YoXTSzPyqME3DJA42uW4AH/l9PQ48vi4ARJH+wuscHpbgo8YIHHEfJThW05vO7ADt+iXOOJP8ZhfDhl8SL9En3JMwFN+OexAB+boVa5PLTYrQbqq8mrCB3FnuiHbmq6qvJewJ92QXZ6uSs0jVmN5uqHx1XRV5Z0YlW5ovDddlZqGzxCfTDc0rlW8LG7GrWX63IEvoEmRKmfNfEIIVxHPrZw98wwsRWXl7PO+JsZlQrga51XOnvkTfIWwsHL2zFcId+IG0UWNP928SvFexs14ItGnDOsVKV2VmiqYI8anCFeI4cOE9WgR42JcLMZncCluxC68TqgSXSbGZ4RQka5KjVG8PLr1SjAdUWmuxgGsxWTBdNHPsEkIc4VwFu7HVNEcbCZuw68QpwpWIxBTSpPHrya4FpuU5gLCAUGjGCeLcYoQt4sOiN4nxv3pbze+jENCmIS9hG1RnCiEMwgvinG/GC5Tmp+hKuBL+AH+WRFymdprf/JG0x1NrQcvuXLWjNaufM85//H6NhXvPcfk8WPtP3jIS1t2+p055zvsR5t2es+Z40w/a4K2jrw1uY2uufTC3btaDp7Z0dX9td9b/k/VinctrizHTGQUIZepXYmPjR81cmRre4deo0eUJ7p7eiRJ4rCIJAT/L0aCAYLDpkydcIZef/JqpuaCwPUVdfU7FO4l/FGCA2hSoFymdilxMXHkiLIy7V35QzF6Zfu+Fl3dPS3NbYdeaWpt27z3QNuets6ug3huy97mjrbOzt3Nhzp+2tze8equlgN7unsiwgZ06xWYj6cVZzMmlaEKzyhALlMzBo9gHKFzV8vBNRub9o1f/8bu6u37Wz7akc+/trO59cXNe5u90dzamu/pOWf9zj2X7tjfeldbV9e6pta2na837duy8xetIueu39l0+e6Wg4vOnTShuywJozGtJnXFpL/N/tf3FO7GBOUKFv4AU/VZ++OtOx4U49mE38Uewj7C+cQpgZwYRuN6IXYSd4pxMmGaYB9245o9Bw5OPtSVr0W7PlcrUoJxChTF2Y7433RD41ohtIvxesJWrMMcwnmE/xTiNuIdoi2iH2GWGC8UvYztWCz6+W/+zcrH8JI3xfNymZoKhZmF3QlacLECBOHH+kUu8ab4rBDOxxOoF2M5cWv629lV+BZhluA7Qlgm2COEvBC+SHyK+H4h/Is+6/UJuExhfg1NAZ/Dz/GgAuQytVuJ0xHxxYq6+lvTVanx6YZsq17pqtT4dEO2Vb90VWpMuiHbrle6KlWuV7ohm9crXZUak27ItuuVy9Q8jBp9bq6oq1/pxD6LlgRrcZGCxWWELgTCJ3OZ2vvTDdlW/dIN2VYDpBuy7fqlG7L5dEM2r1+6IdtucGbg2QRrMEmBKurqHySuRCSOwO25TO393h0B/5PokyhCRV19TeRRROII3J7L1N7v1BupV6LPL/DHijC3rr468igicQRuz2VqHnbqzEOnXok+j+PDijS3rr4aK9FNHIFbXs3U/INT4wZk9Ur0eQ5jlaCirv4T+DKhC2WB6lym5qtOvvdhhV6JI5pwixJU1NX/GR5ABwJuyGVqnnbyzERev8QRn8dVSlRR9/CnI/cR2vS5Jpep+bqT4za8oF/iiI3oxAeUaG5d/X2oI7Tpc10uU/OAoXc+lumXONqjWGwQKuoefoCYIXQi4JZcpuYaQ2cR9hogcbTvYhQ+YBAq6uqXEh/XZ2zkU4bOdXjQAIm3W4lPGqSKuvqPY4teQbjI0PgQ8lhngMTbfQ/tuMkgReF1b4pTc5maMQZvMf7OWySO7W4sQrlBCHTrF6MpBucGdOA5b5E4ti34IZYblJjoN/cz9VsMzsdwj2NIvLN78V58xLtvKdZhg2NIHN+nUYvxShDp0S+XqZmuNJW4GEu8g8TxbcDX8YgSBEcpV5q/xEOOI3Fif4/tWObUW4UX8G+OI1GYW3EOljh16lCGv3YCicLdhIW4xUn2w9e2XohfR7UCBAXKZrPTY4w/aG5unjxp0qQ9BgghGCiE4LDkUNvEss6OiUKQHz9xixCiY0iSROjsGFvWfnCKXnu7Y8eZZ529bv78+ZcrQLnClYcQZk6cOFGvcQrQM3qsntFjhRD0muE44shR8iNHOWxiCKNijOcqUGIYSAwDiWEgMQwkhoHEMJAYBhLDQGIYSAwDiWEgMQwkhoFE4Q6g1anTrkCJAqVSqSY86xQJIXxTgRLFuRv7nXybcJcCJYqQSqU24hkn3+p58+blFShRvD/HLidJjHHDvHnzMoqQKFIqldqHJ50EsRdWKFKiNEuwzdB7ZcGCBQ8pUqIElZWV7XjM0OoJIXxJCRIlqqysvAuvGSIxxhfnz5//j0qQGJxHDI0uLFeixCBUVlZ+Fv9qcCIeX7BgwZNKVGaQVq9e/Vh1dfVUXISReoUQDBRC8A724qEFCxZ8yiAEQ6SxsfGKEMISXBlCONsAIQRv8Qaewz0LFy7caJCCIfb888+PCSF8Ar+FqTHGCSGEHrRgWwjhhYULF64yhP4PHbDvjs694U4AAAAASUVORK5CYII="),new CL(25,40,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAoCAYAAAALz1FrAAAAAklEQVR4AewaftIAAAPcSURBVL3BX2wcdB0A8M/3d9frupVKZ9wwMyZD1If2AYyjYcuZNnEiiMYE4pMY5rYY22kUH4w+NKU8QCRoJFJjjLFqlvlgMGwx9GFpVwPysJD4QCd/AkxFszGKhXWM9Xr342aXbLR3Z4tLP5/Q2m24BVXUsICEgiUFnMPPcU4TobHd6McZPIKa5j6D3TiHB63SAfzQ2n0WD6HP/3Av9nv/SngIZU3sxZD/X8LDuNYyH8EDrp4bcZ9LkiX78DtXz19xAX3qEhISTri6fobb1RXxDTyjiZEv9k8Ih7BPdlC4lXySKBIflvOfR44ce8RKb6GmLmELHtfAyJcGbiZ3yb4lK2Gf7IOyHnxCzpuFz2muiuuKWNTEx7duvqMQacP5hcont3Vf84+/z7659YYtm984+fpcYVt3V+1fc28tlgqF1zV3ArcXMIBpy8yMDh3aVCp9k3xNsZA2dG/qKJy7UNm4rburbe78hY1buzZ1VKq17t5tH9o+OLBjYGzq+LiVTuHzBfThKVeYGR26kfzjas3RqedeefX02fn08pn/zMzOn/fCqdm/zc6//e+XXnvj1dNn5/+5WK0tXveBzpsGB27eODZ1/Kj3ege3JrRbJvNRlDrai0/ieuIxWW8wgS2YxwI2v3Bq9gnilZD7rHQTTidky/QOP3qYeCk4cNene749cnjq+yKuHzly7Lsidoi4S8SXiVtGjhy7l/w20WalMp4tImkofy/zSxG/mhkd2tsz/OiEupHDU4suq2mtC0cTXsQ9lukZHnscg0ERv352dPBOa1dQl3AI2zXQOzz2B/J+VINfzIwO3W31ul2SLKnhYxroGR47nOWvEWfJP5kZHfyC1dmPo+qSJb/HVzXROzw2Sb6HqGbutzqdeEpdsuR5Sz6liZ7hsenMYyF6ZkYHi1rbi5ddklz2U3xFC8Gb5FLOOrV2A8Zdklw2hxM4oIksuyhC1twPMO0KyXv9Ft24QwNBtqRDY3eiiglXSFa6H2X0WYOFxWoJO/Ajy4QGJicn/1itVne3tbVV1EWEiyLXiqlS6cztG+ZEuCgipMrCxsVarVjY0PGbXbt2fd0yRQ1ERGexWNxkuVRQay+IiGtdIZfaFfxXhwaSdZCsg2QdJOsgWQdJYxXvT1UDSWMHUbE270TEQQ0kDQwMDBzEX6xBznly586dT2ggaSIiHsYFq5Bzns85P6CJpIn+/v4jOGZ1Jsrl8pOaSFp7EHNayDm/lnMe1UJBC+Pj4yf37NnzXM55e0RsjYiCuohQt5BzfjoivlMul5/WQlil6enpXRFxW865OyLORMSfyuXycavwLmgAPhMV3lN4AAAAAElFTkSuQmCC"),new CL(13,20,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAUCAYAAABWMrcvAAAAAklEQVR4AewaftIAAAHHSURBVJ3BwUuTYRzA8e/ved9tZSNW4rykMNoO5aCLp3S4BdsOwQgST1INgqij0XUML126GQ6W1/6CHTs4wyCKKGsdhDrsMoZEupcinNvz9MJe9FWLws9HOBAHpgAN9BhQgAU0gTWOmAaK/N0N4CY+Z4G7/FsByOK5BUT5P7dx2YAGtnCVC5kLGP0UJACmC2KA1XKtvsRADwjbgMaTu3zxSWvHmbaU0kHb6hlgJHw6Uq7VlxjYAPIWMAE0GosPrgQtdW9ts9lsOz++t7addmvH2Rofjow+zF+NLK++XQdsIK4AC1eytLwhSnZnJydeikgakRxIfjh86pVAlIEp4I0CFPtMETHXZycvPS7X6rpcq2sOCwFfFNAGsriSpUoDzJzAtcbi/QWOU7gU8AIYw5MsVb4aWMFIjsPmgM+4FAMfgHn2ma6IUXh29/o2EALe4RI81Wp1IRaLzQQCgb7d/RUOONux7ujYp+DOt3Gn0/mZnb8zg8fGk0gkokABVz80hI6eQSC+d26EofPRTXwUJ6A4AcWBJqD5sw4+Ck8mk6kAHzmur7V+ho/CR0QqQA8fY8zrVCq1go/CJ51OV4FHwDrw3hjzHChyxG8gZox0VeVroQAAAABJRU5ErkJggg==")],kL=3*Math.PI/4,ML=3*Math.PI/2;let BL=class extends ua{setBrightness(e){const t=0===e?0:this.minRays+(0,Xe.q)(e*(this.maxRays-this.minRays)),i=this.minRayLength+e*(this.maxRayLength-this.minRayLength);let n=kL;const s=ML/(t-1),r=Fe(.3*this.maxRayLength,.6*this.maxRayLength,this.shortRayLineWidth,this.longRayLineWidth,i);this.lineWidth=(0,Ze.q)(r,this.shortRayLineWidth,this.longRayLineWidth);const o=new Hi;for(let a,l,h,c,d,u,p=0;p0),0===t&&o.circle(0,0,this.bulbRadius),this.setShape(o)}constructor(e,i){const n=(0,t.Ay)()({minRays:8,maxRays:60,minRayLength:0,maxRayLength:200,longRayLineWidth:1.5,mediumRayLineWidth:1,shortRayLineWidth:.5,stroke:"yellow"},i);super(null),this.bulbRadius=e,this.minRays=n.minRays,this.maxRays=n.maxRays,this.minRayLength=n.minRayLength,this.maxRayLength=n.maxRayLength,this.mediumRayLineWidth=n.mediumRayLineWidth,this.longRayLineWidth=n.longRayLineWidth,this.shortRayLineWidth=n.shortRayLineWidth,this.setBrightness(0),this.mutate(n)}};Pa.register("LightRaysNode",BL);const OL=new Image,LL=El.A.createLock(OL);OL.onload=LL,OL.src="data:image/png;base64,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";const RL=OL,NL=new Image,qL=El.A.createLock(NL);NL.onload=qL,NL.src="data:image/png;base64,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";const FL=NL,HL=new Image,YL=El.A.createLock(HL);HL.onload=YL,HL.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAAE7CAYAAACPC15UAAAACXBIWXMAABcSAAAXEgFnn9JSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAD85JREFUeNrs3QtwVHe9wPHfPvKAhITQkEAgJST0AaUPRntrIEC02opja58WpjMXeokzUm2t43VGbrW1Vu3DWpl6naptuYiOWq3T0qmg00oB0wFCIVDaRA2BpEB5piaBZF9nd+//f/Lobs4J2Ww2kN39foYze3azOSTZ/zf/PbubPY5wOCxAunPyIwAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEgBAAQgAIASAEfgQAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEABACQAgAIQCEwI8AIASAEABCAAgBIASAEABCAAgBIASAEABCAAgBIASAEABCAAgBIASAEABCAAgBIASAEABCAAgBIASAEIBEcyfDF/n7B+ZscegVh0P9M9fM08jLBlvvv+4gn2euOp3mZdHXc+qrfHRZ7+f1XK7Wnfq8Q5xO/TGnOPsuMz/uNC93Onuua5469XVc4nQ5zfNOp0tczt7zLrdad4rLrU71usslbn2qzrvdGebS80XHLxQMis/nFb/fZy4Bc/FLIBCQgOEXI2BI0AhIMKhO1XVDoZC5hMPh2JcB1w+pJejIPHDbD7fXEEICFPkbF4/qf9AXR/SFff8s6z1h9KyHeyMJ9UXo6IlBXx7uDSHcG0JYhRBWAz+sAtCL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";const GL=HL;let UL=class extends Cr{dispose(){this.disposeCustomLightBulbNode()}step(e,t){this.update()}update(){if(this.visible&&!this.baseOnly){const e=this.brightnessProperty.value;this.backNode.visible=e>0,this.backNode.visible&&(this.backNode.imageOpacity=RD.clamp(RD.linear(0,.5,0,1,e),0,1)),this.raysNode&&this.raysNode.setBrightness(e)}}constructor(e,i){const n=(0,t.Ay)()({baseOnly:!1,isExtreme:!0,scale:hD.BULB_SCALE,isReal:!1},i),s=n.baseOnly,r=n.isExtreme?GL:n.isReal?SL:FL,o=n.isReal?DL:IL,a=new _h(n.baseOnly?r:RL,{scale:.125,centerX:0,bottom:0,pickable:!1}),l=new _h(n.baseOnly?r:o,{scale:.125,centerBottom:a.centerBottom,pickable:!1});let h=null;if(n.baseOnly)n.children=[a];else{const e=l.width/2;h=new BL(e,{scale:n.scale,x:a.centerX,y:(l.top+e)*n.scale}),n.children=[a,l]}super(n),this.baseOnly=s,this.backNode=a,this.raysNode=h,this.brightnessProperty=e,n.baseOnly?this.brightnessObserver=null:(this.brightnessObserver=this.update.bind(this),this.brightnessProperty.link(this.brightnessObserver)),this.disposeCustomLightBulbNode=()=>{n.baseOnly||this.brightnessProperty.unlink(this.brightnessObserver)};const c=this.localBounds.width,d=this.localBounds.height;this.mouseArea=(new Hi).moveTo(this.localBounds.minX,this.localBounds.minY).lineToRelative(c,0).lineToRelative(0,.6*d).lineToRelative(.25*-c,0).lineToRelative(0,d*(.4-.1)).lineToRelative(.5*-c,0).lineToRelative(0,-d*(.4-.1)).lineToRelative(.25*-c,0).lineTo(this.localBounds.minX,this.localBounds.minY),this.touchArea=this.mouseArea,this.visibleProperty.link(e=>e&&this.update())}};UL.webglSpriteNodes=[new _h(RL),new _h(IL),new _h(FL),new _h(GL)],jx.register("CustomLightBulbNode",UL);const zL=new Pt;let WL=class extends fO{updateRender(){const e=this.circuitElement.startPositionProperty.get(),t=this.circuitElement.endPositionProperty.get().minus(e).angle+Math.PI/4;this.contentNode.setMatrix(zL.setToTranslationRotationPoint(e,t))}updateOpacityOnInteractiveChange(){}constructor(e,i,n,s,r,o){const a=new UL(new R(0),{baseOnly:!0,isExtreme:n.isExtreme,isReal:n.isReal});o=(0,t.sF)({pickable:!1,showHighlight:!1},o),super(e,i,n,s,a,new fa(0,0,10,10),r,o)}};jx.register("LightBulbSocketNode",WL);const QL=new Pt;let KL=class extends fO{updateRender(){const e=this.circuitElement.startPositionProperty.get(),t=this.circuitElement.endPositionProperty.get(),i=Te.A.getAngleBetweenVectors(e,t)+Math.PI/4;QL.setToTranslationRotationPoint(e,i),this.contentNode.setMatrix(QL),this.rayNodeContainer.setMatrix(QL),this.highlightNode&&this.highlightNode.setMatrix(QL),this.socketNode&&this.socketNode.updateRender()}dispose(){this.disposeCircuitConstructionKitLightBulbNode(),super.dispose()}updateOpacityOnInteractiveChange(){}constructor(e,i,n,s,r,o,a){const l=(0,t.sF)({isIcon:!1,useHitTestForSensors:!0},a),h=new R(0),c=ye.multilink([n.currentProperty,s,n.resistanceProperty],(e,t,i)=>{let n=((e,t)=>1*Math.log(1+t*e)/Math.log(1+2e3*e))(.35,Math.abs(e*e*i));n<1e-6&&(n=0),h.value=RD.clamp(n,0,1)});let d=new UL(h,{isReal:n.isReal});l.isIcon&&(d=new _h(n.isExtreme?xL:n.isReal?DL:IL,{scale:.37}),n.isReal&&d.addChild(new _h(SL)));const u=Ak.createSamplePoints(n.startPositionProperty.get()),p=u[0],m=u[1].minus(p),g=m.x,y=m.x/2,f=e=>e.moveTo(0,-73).arc(g/2,-73,y,Math.PI,-Math.PI,!0).moveTo(0,-73).arc(y,-73,5,Math.PI,0,!1).lineTo(g,-73),b=2*y,P=Math.cos(Math.PI/4),V=Math.sin(Math.PI/4),v=e=>e.moveTo(0,-73).arc(g/2,-73,y,Math.PI,-Math.PI,!0).moveTo(y+.5,-73).lineToRelative(y*P,-y*V).lineToRelative(-b*P,b*V).moveTo(y,-73).lineToRelative(-y*P,-y*V).lineToRelative(b*P,b*V),w=e=>e.moveTo(0,0).lineTo(0,-73).moveTo(g,-73).lineTo(g,m.y),E=w(f(new Hi)),S=w(v(new Hi)),T=f(new Hi).transformed(Pt.scaling(1.75)),C=v(new Hi).transformed(Pt.scaling(1.75)),I=new ua(T,{stroke:Wr.BLACK,lineWidth:l.isIcon?4:hD.SCHEMATIC_LINE_WIDTH});l.isIcon&&(I.center=d.center.plusXY(0,22));const x=e=>{l.isIcon?I.shape=e===sD.IEEE?T:C:I.shape=e===sD.IEEE?E:S};oD.link(x),l.isIcon||(I.mouseArea=I.bounds.dilated(2),I.touchArea=I.mouseArea),super(e,i,n,r,d,I,o,l),this.rayNodeContainer=new Cr({children:d instanceof UL?[d.raysNode]:[]});let D=null;i?(this.socketNode=new WL(e,i,n,r,A.A.OPT_OUT,l),D=e=>{this.rayNodeContainer.visible=e===pk.LIFELIKE},r.link(D),i&&!n.phetioIsArchetype&&i.lightBulbSocketLayer.addChild(this.socketNode),i&&i.addChildToBackground(this.rayNodeContainer)):this.socketNode=null,this.disposeCircuitConstructionKitLightBulbNode=()=>{c.dispose(),this.socketNode&&(this.socketNode&&i&&i.lightBulbSocketLayer.removeChild(this.socketNode),i&&i.removeChildFromBackground(this.rayNodeContainer),r.unlink(D),this.socketNode.dispose(),oD.unlink(x))}}};jx.register("CCKCLightBulbNode",KL);let jL=class extends Cr{constructor(e){const i=(0,t.Ay)()({sphereOpacity:1,minusSignOpacity:1,radius:10},e);i.children=[new Th(i.radius,{opacity:i.sphereOpacity,fill:new nb(2,-3,2,2,-3,7).addColorStop(0,"#4fcfff").addColorStop(.5,"#2cbef5").addColorStop(1,"#00a9e8")}),new fa(0,0,11,2,{opacity:i.minusSignOpacity,fill:"white",centerX:0,centerY:0})],super(i)}};Pa.register("ElectronChargeNode",jL);let _L=class e extends Hi{static getArrowShapePoints(e,i,n,s,r,o){const a=(0,t.Ay)()({tailWidth:5,headWidth:10,headHeight:10,fractionalHeadHeight:.5,doubleHead:!1,isHeadDynamic:!1,scaleTailToo:!1},o);if(r||(r=[]),n===e&&s===i)r.length=0;else{const t=new Te.A(n-e,s-i),o=t.magnitude;let l=a.headWidth,h=a.headHeight,c=a.tailWidth;if(a.isHeadDynamic){const e=a.fractionalHeadHeight*o;a.headHeight>e&&(h=e,a.scaleTailToo&&(l=a.headWidth*h/a.headHeight,c=a.tailWidth*h/a.headHeight))}else h=Math.min(a.headHeight,a.doubleHead?.35*o:.99*o);let d=0;const u=t.normalized(),p=u.rotated(Math.PI/2),m=function(t,n){const s=u.x*t+p.x*n+e,o=u.y*t+p.y*n+i;r[d]?(r[d].x=s,r[d].y=o):r.push(new Te.A(s,o)),d++};a.doubleHead?(m(0,0),m(h,l/2),m(h,c/2)):m(0,c/2),m(o-h,c/2),m(o-h,l/2),m(o,0),m(o-h,-l/2),m(o-h,-c/2),a.doubleHead?(m(h,-c/2),m(h,-l/2)):m(0,-c/2),dthis.lineTo(e.x,e.y)),this.close()}}};Pa.register("ArrowShape",_L);let ZL=class extends ua{get tailX(){return this._tailX}get tailY(){return this._tailY}get tipX(){return this._tipX}get tipY(){return this._tipY}setTailAndTip(e,t,i,n){this._tailX=e,this._tailY=t,this._tipX=i,this._tipY=n;const s=this.updateShapePoints();!this.shape||s?this.updateShape():this.shape.invalidatePoints()}updateShape(){const e=new Hi;if(this.shapePoints.length>1){e.moveToPoint(this.shapePoints[0]);for(let t=1;t{eR.children=[sb(new XL(A.A.OPT_OUT),{wrap:!1})]});let tR=class extends Cr{dispose(){this.charge.changedEmitter.removeListener(this.updateTransformListener),this.charge.visibleProperty.unlink(this.updateVisibleListener),this.outsideOfBlackBoxProperty.unlink(this.updateVisibleListener),super.dispose()}updateTransform(){const e=this.charge,t=e.circuitElement.currentProperty.get();if(e.charge>0){this.translation=e.matrix.getTranslation(),this.rotation=e.matrix.getRotation()+(t>0?Math.PI:0);const i=RD.linear(.015,1e-6,1,0,Math.abs(e.circuitElement.currentProperty.get())),n=RD.clamp(i,0,1);this.setOpacity(n)}else this.translation=e.matrix.getTranslation();if(this.updateVisible(),this.outsideOfBlackBoxProperty.set(!e.circuitElement.insideTrueBlackBoxProperty.get()),this.charge.circuitElement instanceof hk){const e=this.circuitNode.getCircuitElementNode(this.charge.circuitElement);if(e instanceof vL){let t=null;if(this.circuitNode.model.viewTypeProperty.value===pk.LIFELIKE)t=this.charge.distance0?eR:JL]}),e.disposeEmitter.addListener(()=>this.dispose()),this.circuitNode=t,this.charge=e,this.outsideOfBlackBoxProperty=new o(!1),this.updateVisibleListener=this.updateVisible.bind(this),this.updateTransformListener=()=>this.updateTransform(),e.changedEmitter.addListener(this.updateTransformListener),e.visibleProperty.link(this.updateVisibleListener),this.outsideOfBlackBoxProperty.link(this.updateVisibleListener),this.updateTransformListener()}};tR.webglSpriteNodes=[JL,eR],jx.register("ChargeNode",tR);let iR=class extends Cr{step(){this.rebuild()}rebuild(){this.removeAllChildren(),this.circuitNode.circuit.circuitElements.forEach(e=>{const t=e.startVertexProperty.value.positionProperty.value,i=e.endVertexProperty.value.positionProperty.value;let n=null,s=0;e.currentProperty.value>0&&(s=1),e.currentProperty.value<0&&(s=-1),n=1===s?new ZL(t.x,t.y,i.x,i.y,{fill:"red",stroke:"black",lineWidth:1}):-1===s?new ZL(i.x,i.y,t.x,t.y,{fill:"red",stroke:"black",lineWidth:1}):new ZL(t.x,t.y,i.x,i.y,{fill:"white",stroke:"black",lineWidth:1}),this.addChild(n);const r=i.minus(t).perpendicular.normalized().timesScalar(10),o=new ZL(t.x+r.x,t.y+r.y,i.x+r.x,i.y+r.y,{fill:"green"});this.addChild(o);const a=new Bc(e.currentProperty.value.toFixed(4)),l=new uP(a,{center:n.center,fill:e.currentSenseProperty.value===FD.FORWARD?"green":e.currentSenseProperty.value===FD.BACKWARD?"rgba(137, 196, 244, 1)":"white"});this.addChild(l)})}constructor(e){super(),this.circuitNode=e,this.rebuild()}};jx.register("CircuitDebugLayer",iR);const nR="data:audio/mpeg;base64,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",sR=Sl(Dl,nR),rR=El.A.createLock(nR),oR=new Il;let aR=!1;const lR=()=>{aR||(rR(),aR=!0)},hR=Dl.decodeAudioData(sR.buffer,e=>{null===oR.audioBufferProperty.value&&(oR.audioBufferProperty.set(e),lR())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),oR.audioBufferProperty.set(Dl.createBuffer(1,1,Dl.sampleRate)),lR()});hR&&hR.then(e=>{null===oR.audioBufferProperty.value&&(oR.audioBufferProperty.set(e),lR())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),lR()});const cR=oR,dR=new Hi("M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z").makeImmutable(),uR=new Hi("M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z").makeImmutable();let pR=class extends Cr{constructor(e){super(),this.addChild(new ua(dR,{fill:"white",stroke:"black",lineWidth:22.5,scale:new Te.A(-1,1)}));const t=new Te.A(.9,.9),i=2*Math.PI/20,n=new ua(uR,{fill:"black",scale:t.timesScalar(.8),rotation:-i}),s=new ua(uR,{fill:"black",scale:t}),r=new ua(uR,{fill:"black",scale:t.timesScalar(.8),rotation:i});this.addChild(new Of({scale:.5,children:[n,s,r],align:"bottom",spacing:60,center:this.center.plusXY(0,-3)})),this.mutate(e)}};jx.register("BarkNode",pR);const mR=new Image,gR=El.A.createLock(mR);mR.onload=gR,mR.src="data:image/png;base64,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";const AR=mR,yR=new Image,fR=El.A.createLock(yR);yR.onload=fR,yR.src="data:image/png;base64,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";const bR=yR,PR=new Image,VR=El.A.createLock(PR);PR.onload=VR,PR.src="data:image/png;base64,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";const vR=PR,wR=new Image,ER=El.A.createLock(wR);wR.onload=ER,wR.src="data:image/png;base64,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";const SR=wR,TR=new Image,CR=El.A.createLock(TR);TR.onload=CR,TR.src="data:image/png;base64,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";const IR=TR,xR=new Image,DR=El.A.createLock(xR);xR.onload=DR,xR.src="data:image/png;base64,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";const kR=xR,MR=new Image,BR=El.A.createLock(MR);MR.onload=BR,MR.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANEAAAAxCAYAAABEfkxtAAAACXBIWXMAABcSAAAXEgFnn9JSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADb1JREFUeNrsnQlUE+cWx292lkRAlCWIKEGJG6igoChuiNQdrdZnrVq1FmufirWtoj5rtdrFHl/b96ptXd9xAa1CFZCjtnXpAoogi4iyVhBNMAtkITtvvoFwUEETSCBD53/OdyDJZLbc39z7/WfmG0p9fT2QIkWq7aITZUVfnz9nAYUC6xwdHVRSaS1bUSPk9/HqrjN+btAbqFQa1dD8OwaDQUej6PPJn9k2RKUxeukN0OOp36iF362wVEhz5/Z+6/ips/FE2C6KrWeiWVMjx1Io1OPRs6d4T586qen9C8kpYK8uh7kR/cno7EI6nJQD3X2CQarUw49nUkupVMrSn1IvXichaoPeXPRagFar/X4A32/o6wujWRy243PTkCB1LVUKamHvybsQt20L/lomV8DxE4nqu4XFtxkMxsrDxxJySYhMkF+fvs5Bw4f81Levd0jMykVPwUOjMwHLSk2v6+sNkJyUSILURfT2zouwdcduYLMdQK/TNL2PYNr//TF1WVlFxq2svFnF5WVSEqJW4AkZOewIl+s2ccmiVzmenm5NnzFYHGDYsYHOsG/xu0mnjgNVmg1zJ/UjI5HAZZx/yFwYMaahZNdp60CrkoNWLWua5tEjIRw99qOsqkr4S8aN7KW2ApNNQLRk4bxPsdItJu7Dd52M8KCMQ2c6AsvBGXVIXzoPEiRil3E//qGA1Rs+eu4zg14LaqUUdBoFXnkg3S8qg2/+e7gGK/H2Hz1xeuPfGiIED41GW/qP12a6Dx82uAkepr0T3pqXbqaIBImY2nHgJqzetBc43TitToMA0tTV4M0IU1Z2PpxMOCfQ6/VHOhOmToEI2dUKhfLzxYvmeI8LD8Xfo1LpWNZxATrL0Wx4ngNJkkX2kYgE0Q8ZsPHTQyZNiwDSqRVYdpKAwdBwhuPqtXQ4k5hWgv27pTNs8Q6FCMGD/dkZOXksz2hX0xl2jX0ejkk7z7jjXqRzCQeBpa7EQOKTEUoAXfqzFNROw2B8RFTTAdWUg6lWJcP7TDqtCn+dnPozXLx0vUQgqF53+er15C4FUUt2NYKHiTJPK2bBUzsKq4d1GqVZy9z90Wb4Yl04GaEE0UeHCmDN+tin3qMzHYCB9YtfdoBFJoQGy0wIps6wxa16xQJy3AIDBlzB+jt8Izwo67zMLECdSK1a+VRn0hxdOH8OXp3IQ+mLjE6CiKaXtRAHSrypFCLcZGKwHPC/zwUxdiCmO9njJgSDJQV0agSDKQSD6cbcmVMLc3Lvjremk2eVTPSsXc3leuBGAYPFbhUevU6NgSPHM09bwGmuTRs2wP5NE8jIJJAup5eDgj0Ewse9uHpAJR7KTCiWaHRWi9MgmFAsIROiquqx1W1xi0M0b/b0//RwdVmyetUStpcXF9/g1pw2tLEaVa3JfR1TlJp8AewUBTBnIunQEU0f/68I1rz3nsnTo76TEaiWDs5GRw8dmB8+rILP9uxTqlTqw6eTkt+1yXLOaFevXLHQPThoKO60tVTLInBQikYdwuZnpS2la7/+CvveD4V6vY6MSoKJqq01a3p04EUuHWroahbUVUD9KCNQ6MCN4hA1X6x9vXeHQ+at26uXvbHgVUva4u3ORMhxq3os/CHug3fYI0cGt2gWGJ21thgE5ig78yaICi9B9HhfMiIJqJ9vVoLKeQSETxjXvszQaEi05PAZTYgbNzLhy68O1Li6OMe01xZvM0QIHmmt/Ks6tdrNwZEDp+MPPwcPMgY0WCq1JjjNtXPrZti9jCzjiKxNR/6CLdu3Wa7UwoBi2nGeMyQQTPMWvAlKhQzsWSyhczf22rbCZHY5h+xqQbXorKJO5evJ9aKEBQQC29GxCaD2OmttVdbNGzDCB0CvUpCRSGSpLdvvNzp8xsvIjA4fitfIyZNBrlBAbm6Om7BaeGLqlIid7j1d55hri9PNgUdSUxtfDxR/z14+VB6Ph8ODJJFIcBvSkgaBuUo5exq2z3cFnUpGBiKBFeRDhawb6TB8ZKhF54sO6KgfjprxZC6KWxcXFxg9ajSCiVJSUsJ7InyUPXvGK/fy8wqnFpeXlVuknEN29aBB/slUBjPUw9OLxvPlAZPJwAnGFoo3hUIOaUmHOm3Ho50uuHUaZoT2JKOQ4JLV6WD/VQrEbtps9WVFzV4Gjo5sQAnBmBQ0Gi2UlJbA40cP9QatJv3OnXvTX2aLvzATTY+anBY0MmgyBg+V5+vbAE5pAzgSidhmdnxK4hksC5EAdQVx7OkgrxF22PJQAsDKOby5uHRvAApLFAP4fFpJaWkYjckSYRxcSk67FGUWRPPnzNzHce6+LHD4CCaacUVlBVy5egUqKipsbqdnZWYBl42MC1cyArtAFlp/oAxiP3i/U5aPEkNmJmo3wdvbG2u9YfTosVTs/SnLly1Vy6TiQ6fOnlv1wnIuKmLipn78AR97cr3oErEYhwdlHVPUWeXcjs2bYcM0e/wIRoq4qhKp4btLYlixZgN4enl3yDJROWeKUHby7uUNbDYbqquF+sq/ymKTki988xREMW8t3+zc3XVbnUrNEAge4xlHozHvRGhnQPToYQWkHt0Db7/iSUYhgXWvUgF7fqqGz//9JbQ0lkZnQ2QUk8nEM5S7uwfY27G0UrFo+/4fDn5Cj545XVFUWu5Ap9OBwSDW0Tz+6GGIGU/2hYisW0W18EuxHew7sN/m1xUlFlSZFRTcRf8zKBTKzumvRG6h5+Xe8eLxemdk5d7p/+SJCBwcsNKIw2lqNBrNJjcIZaFuIMLKODILEVXn06uhsLYnxMZttOn1VKs1IJPJmhqCydnZCUYOD7xfeLcohN5o3/mj80APKit/yc654yoQCAE1JCNU9vYO+F8Wi0lmIVLt1ncXHoEHfwzErppnc+umVCoxWORN0Oj1+qbPXDB4xowKFvXu1Wui8aRsU/3W+EYPBNO9+0V/ZuUWOKjVamyGdXhrXhc2z1SdARUa9YXMQsTVnrMVMHzcTAiPmGIT62OEBcX5s9AYxWKxYBC/nzJg8MBRz17R8FwnqHECx3nRM5Y9qKj4Nie/kIVgal4XikQivCGhcg/BJJdKgO3s0iEbzeY4wv2HSjIaCarOdlL1Oh0Wr2LcQDNWXK2JjsX3kEH+Gp6v76rTiedbdM9a3ZrGLxyaEB62SSwW7SwoLKbqWiAUUSuVSqE4J7MhwDGQ2E5Yc+5uNaiQg9NvcBDWKX0AQf26kVFJMCE3dU9iCnj08oH+fH6HQYMO9PIaCdTJZY1lW90L4RnI9zP4+/luPJWU+sWL5m/yVdwL5808mF9wf2lewb0WR4+4fHxPy1nDilDt+HAtbF9AlnRE1fqDZbD1k13AcXLtEGieVXTMdrx8e1Z+fXsbBg/0P5GYfPENU5Zn1q0Q6Dq6wQN5KXl3748qLa+gmAKRNaFCF5320mWT2YigQlcobIuvhq27drXr/JCp0LwMIveePSA0OPCP/IKSaebcRt6m+4kQTEMD/C/9lnErWCB8YhZErUHl1MMN7NkcMhv9zYROtJ7LY0Bs3L+sDk1rELm79YAhA/rnlZVXhbdlDIZ23dmK3x4hfpKacSvX69je9nv9NDq9EaqGLGUKVCgbOcluwviA7mREElRXcsVQKPOCFe+utSo0zypm6zfgzXUX+vj0mdyeobUsMlAJgsmVzboYERbgzqBRLLZzTYVq1bIVsG8lmY2IrPjfpMDmTYDp0XOsBo1RWn09XP49VyCSqyMtMS6dRUf7QbeM8/t6fBUSwHOzIEsvVWlpKdAlN2HqcA4ZjQTW3hQJDAqaBFxPD6vMH2MHMnJLhIVlj9dacrhhq4w7987y1+P4fTzjBvlxHTtqAMWEUwmwbRZ5JTfR9c+jNbBi8WvAsrPghagUCmQXlCtLq0SffHvw+C5Lr7NVhxHGYNqLwfTWIJ6n1S/NRTcLUgTXICqARUYigSVX1cOOFAosX7zQIvMreiBU5hZVfo/BE2utdbb6WNzIyYuKCDsVEug3nuvKYVhzWQkJJ2DdBC2w7ShkNBJUaXlaELMCYURwcLvmUyWSaTNyiq+kXf59vrUfBmb1+qdxAyIRTOPHBJ2PCh822oVtR7XGsgzY5tSqVODAIiEion4v0kOJwgsiw9oOkESuMqTfLr6WlHoluqOepNfhzydCTp6HKyc+JIDnz7FnWgymO/k5oH2cDnODyH4REVUiNEBSYU+YPWt2m74vq9MYMnJL7j0WyRZ09AOSO+1JebOmRo7t19vjdOTYQPf2OnlKlRqSE4/DxigDGY0ElKCmHnan0WFNzJtmfxc5bldvFFRXieQRnfV08U5/ZqvRFg8N4LlR2wjTyfiTsHacHNhkGUdIfZZWD9PmLAYHO9NNIQMWtulWsKsJCZFRTU6embb4tWvXoZ9dAYT5UcloJKhyKgxwudwTomfNNCFiKXCnuEqRVVD29ZGTZ+JsYf1tBqLmMA3o67FqoC/3pYcliVgEl9POwodRZCASXRfz9SB2CIKRwSNa7/eWPKwrLBd8Z027uktAhGSqLX7gyDGIm1KHlXFkEHYFfftrPQwZNQO8uE9fwtWRdnWXgag5TNMix/w8Npg/9FlbHJVxw5wKINCbLOO6ktYn1MOKpQvBzp6N29XXMwtvp1z8bZItwkMIiIwy2uKB/j7+diwGVSyVQXxCPNYPIo2Eria5CiCzggGho8PudoZd3WUhIkXKlvV/AQYAEtvrGSQaGsIAAAAASUVORK5CYII=";const OR=MR,LR=new Image,RR=El.A.createLock(LR);LR.onload=RR,LR.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAsCAYAAACHUEHxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCNEM5Mzg1QjI5RjIxMUU3QTk5MUI1MkE1N0U2RTQzRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCNEM5Mzg1QzI5RjIxMUU3QTk5MUI1MkE1N0U2RTQzRiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI0QzkzODU5MjlGMjExRTdBOTkxQjUyQTU3RTZFNDNGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkI0QzkzODVBMjlGMjExRTdBOTkxQjUyQTU3RTZFNDNGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+CLMnGAAACCJJREFUeNrsnXts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";const NR=LR,qR=new Image,FR=El.A.createLock(qR);qR.onload=FR,qR.src="data:image/png;base64,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";const HR=qR,YR=[{name:"none",significantFigure:null,multiplier:null,tolerance:20,color:null},{name:"pink",significantFigure:null,multiplier:-3,tolerance:null,color:new Wr(255,105,180)},{name:"silver",significantFigure:null,multiplier:-2,tolerance:10,color:new Wr(192,192,192)},{name:"gold",significantFigure:null,multiplier:-1,tolerance:5,color:new Wr("#e6b600")},{name:"black",significantFigure:0,multiplier:0,tolerance:null,color:new Wr(0,0,0)},{name:"brown",significantFigure:1,multiplier:1,tolerance:null,color:new Wr(150,75,0)},{name:"red",significantFigure:2,multiplier:2,tolerance:null,color:new Wr(255,0,0)},{name:"orange",significantFigure:3,multiplier:3,tolerance:null,color:new Wr(255,165,0)},{name:"yellow",significantFigure:4,multiplier:4,tolerance:null,color:new Wr(255,255,0)},{name:"green",significantFigure:5,multiplier:5,tolerance:null,color:new Wr(154,205,50)},{name:"blue",significantFigure:6,multiplier:6,tolerance:null,color:new Wr(100,149,237)},{name:"violet",significantFigure:7,multiplier:7,tolerance:null,color:new Wr(148,0,211)},{name:"gray",significantFigure:8,multiplier:8,tolerance:null,color:new Wr(160,160,160)},{name:"white",significantFigure:9,multiplier:9,tolerance:null,color:new Wr(255,255,255)}],GR=(e,t)=>_.find(YR,i=>i[e]===t),UR={getEntries:function(e){if(0===e)return[GR("name","black")];let t=RD.roundSymmetric(Math.log(e)/Math.log(10)),i=e/Math.pow(10,t);i<1&&(i*=10,t--);const n=Math.floor(i),s=10*(i-n);let r=RD.roundSymmetric(s);10===r&&(r=9);const o=(n+r/10)*Math.pow(10,t),a=Math.abs((e-o)/e*100),l=_.filter(YR,e=>null!==e.tolerance),h=_.sortBy(l,"tolerance");let c=null;for(let d=0;da));d++);return[GR("significantFigure",n),GR("significantFigure",r),GR("multiplier",t-1),GR("tolerance",c.tolerance)]},getColorNames:function(e){return _.map(this.getEntries(e),"name")},getColorArray:function(e){return _.map(this.getEntries(e),"color")}};jx.register("ResistorColors",UR);const zR=UR,WR=new Map;WR.set(fk.COIN,AR),WR.set(fk.PAPER_CLIP,kR),WR.set(fk.PENCIL,OR),WR.set(fk.ERASER,SR),WR.set(fk.HAND,IR),WR.set(fk.EXTREME_RESISTOR,HR),WR.set(fk.RESISTOR,NR),WR.set(fk.DOG,bR),WR.set(fk.DOLLAR_BILL,vR);let QR=class extends fO{dispose(){this.disposeResistorNode(),super.dispose()}constructor(e,i,n,s,r,o){o=(0,t.sF)({isIcon:!1,useHitTestForSensors:!0},o);const a=new _h(WR.get(n.resistorType));let l=null,h=null;if(n.resistorType===fk.RESISTOR){const e=_.range(4).map(e=>new fa(33+19*e+(3===e?12:0),2.25,10,39.75)),t=new fa(0,0,10,39.75,{centerX:75,y:2.25});l=i=>{const n=zR.getColorArray(i);if(1===n.length)t.fill=n[0],e.forEach(e=>{e.fill=null});else{t.fill=null;for(let t=0;t{h.visible=e}),a.addChild(h)}const c=o.isIcon?hD.RESISTOR_LENGTH:n.distanceBetweenVertices;a.mutate({scale:c/a.width});let d=(new Hi).moveTo(0,.54*a.height).lineToRelative(45.36,0).lineToRelative(5.94,-54*.54/2).lineToRelative(11.88,54*.54).lineToRelative(11.88,-54*.54).lineToRelative(11.88,54*.54).lineToRelative(11.88,-54*.54).lineToRelative(11.88,54*.54).lineToRelative(5.94,-54*.54/2).lineToRelative(45.36,0),u=a.width/d.bounds.width;d=d.transformed(Pt.scale(u,u));const p=d.bounds.minX,m=d.bounds.minY;d=d.transformed(Pt.translation(-p,-m));let g=(new Hi).moveTo(0,15).lineToRelative(45.36,0).lineToRelative(0,-15).lineToRelative(70,0).lineToRelative(0,15).lineToRelative(45.36,0).lineToRelative(-45.36,0).lineToRelative(0,15).lineToRelative(-70,0).lineToRelative(0,-15);u=a.width/g.bounds.width,g=g.transformed(Pt.scale(u,u));const A=new oe([oD],e=>e===sD.IEEE?d:g),y=new ua(A,{stroke:Wr.BLACK,lineWidth:hD.SCHEMATIC_LINE_WIDTH});y.mouseArea=y.localBounds,y.touchArea=y.localBounds,y.centerY=0,a.centerY=0,a.translate(0,n.resistorType.verticalOffset),super(e,i,n,s,a,y,r,o),this.resistor=n,this.lifelikeResistorImageNode=a,this.disposeResistorNode=()=>{l&&n.resistanceProperty.unlink(l),a.dispose(),A.dispose(),h&&h.dispose()}}};QR.webglSpriteNodes=[new _h(NR),new _h(kR),new _h(AR),new _h(OR),new _h(SR),new _h(IR),new _h(HR),new _h(bR),new _h(vR)],jx.register("ResistorNode",QR);let KR=class extends QR{dispose(){super.dispose(),this.dog.isBarkingProperty.unlink(this.isBarkingListener),this.contentNode.boundsProperty.unlink(this.boundsListener)}constructor(e,t,i,n,s,r){super(e,t,i,n,s,r);const o=new Bm(cR);_l.addSoundGenerator(o),this.barkNode=new pR({maxWidth:60}),this.addChild(this.barkNode);const a=()=>{if(i.isBarkingProperty.value){const e=this.circuitElement.startVertexProperty.value.positionProperty.value,t=this.circuitElement.endVertexProperty.value.positionProperty.value,i=t.minus(e).getAngle(),n=t.minus(e).normalized(),s=n.getPerpendicular(),r=e.plus(s.timesScalar(100)).plus(n.timesScalar(12));this.barkNode.setRotation(i),this.barkNode.setTranslation(r)}};this.boundsListener=()=>a(),this.contentNode.boundsProperty.link(this.boundsListener),this.dog=i,this.isBarkingListener=e=>{a(),this.barkNode.visible=e,e&&o.play()},i.isBarkingProperty.link(this.isBarkingListener)}};jx.register("DogNode",KR);const jR=new Image,_R=El.A.createLock(jR);jR.onload=_R,jR.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANkAAABDCAYAAAARQ6BTAAAACXBIWXMAABcSAAAXEgFnn9JSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABMVJREFUeNrsm99PU2cYx982bcFgskJIOkw7zqwXrnhRlk2TzY7qkg2SxXGz6c22qn+A9C8gu3dBE7Pb+R8A00ycMJvsp7uC/Yi7sLOEBtyF40fiQgs97D1Q6pEdcclWeN7y+SRvTlPAnPI8Xz7P+7YqBQB1xbfdF+OdVlhfMnr16GXplRT4GnL56cIJStl46P5L68ttobeX06ug16juv5HtvjGwTbgGnguHL8Tj8XD80CEVjUVFvtKhi5/QjQ1MNBZT751+X9x9lUqldHFmRuXv5TPVsGWfFraAR8AcWw0fT6Ws11LHqTLsKn6fTwVDIXH35dzT4URifaV63rAmxseH9dNXq2FbeGrInIA179t3+4OPPgxHIhEqDLu/n/H7VSgYFH2P7e3t6vSZM+rHO3cyX47ddCTV7Rmy6og4fPb8ufDzHR1UF2SETKjJvHg9lVIrKytJNfHVkLZZ1stkg++cOmW90NlJZUHOuOj3qZAhIXN4q7dXTRemB9TGgUiuFjJtMautrW3gxEkO6UCayeSPi1vp7etTn165Mqg2TiBrJutPv3nSGC3D3jKZaX15OPGSikajaf3Q0jYrbIbs3UQiYZSWYQ+ZzMC+TL7crYrFYr9+eGkzZMkXDx6koiAwZNpkho2LDomuLnX982th97gYxmIgc1w002SBwPofhh53yBgVQazJTOzNYPDxwX3tEYceINNkPiN7MxDwCFnIwLkX9oLJ/Eb2pnfIMBlIDJnfzHEx4PrDwLgIssdFbbLGGRcJGYgcFw01mVfIguzJQKLJ/H4jezMYCGIywGQ7bjLnxQDIS5mZvekc2NRsTBUB6jzy8isAIGQAhAwACBkAIQMgZABAyAAkUnsz2rZtfhsgjzUze9N9z7WQVSoVCgryMra2ZmRv2hVCBoSsrlTsyj9Dtrq6SkVBZMhM7E1MBgZtyRrIZBVMBjJVZmRv2hWvcRGTgcyMGdmbFc/TRUwGQvdkmAygziEz0mQcfIBRJuPgA4BxkXERzA2ZWuPgA6DOKsNkAHXOGCYDYE/2L03G6SKIDVmjHOHzAWGQGjIjPyBsYzLAZHU2GSEDc2Jm5n/atBkXgXERkwFshExhMgBMhsnA8JA1zBE+b0aD2JA1yhE+H6sCseNiwxzhYzKQGTNDTWZjMsBkO2CyBXfICvpJi5KCvJCZeSg3Pz/vXKbcIZss3L9vxWIxqgriTGbiuPjHgwfruXKHbPTXn3/p7zhwgKoC4+L/wO/38s6omKuFLD9duNrc3Dz416NHVlNTE5UFTPYf+O3uXbW4uDiic/XEnkwtLy9/PHFr/LO3+3qpLIjalJm0JyuVSurbr79xwpXdfK4WMsdm+tIzNTmZ6TpyhOKCjIwpcz5WVS6X1RfXrjtBy25a7ImQVcn+8N33yaWlpeTRY8eoMMgYFw0wWblUVmM3bqg/Hz48WxWW8gxZNX3deg3Nzc4NvHL0VRWJRKg07Oa0KN5kzh7sp8mpBW0yJ2AjW78e8Poh/Y3ZuFKjt8ZuXmjZv78/Gouq1tZW1dLSQtVhhw1RUnOzs+Luy3kfbEGv4kzRCddl/dQl94joxvesfyzeaYX1Ja1XUmgdClv1DI2B7j1LXzKCbzGney9HpQB2mb8FGACL11kywtsrYAAAAABJRU5ErkJggg==";const ZR=jR;let XR=class extends Cr{constructor(e){super();const t=new Hi;["29.2,11.5 34.3,1.9 34.7,12.8 50.7,1.8 38.7,16.9 49.6,17.6 39.8,22.5","11.1,22.5 1.5,17.3 12.4,16.9 1.3,1 16.5,13 17.2,2.1 22.1,11.8","22.8,40.5 17.7,50.1 17.3,39.2 1.3,50.2 13.3,35.1 2.4,34.4 12.2,29.5","40.9,29.5 50.5,34.7 39.6,35.1 50.7,51 35.5,39 34.8,49.9 29.9,40.2"].forEach(e=>{const i=e.split(" ").map(e=>{const t=e.split(",");return new Te.A(Number(t[0]),Number(t[1]))});t.moveToPoint(i[0]);for(let n=1;n{const t=this.center,i=RD.linear(0,1,.75,2,e),n=RD.clamp(RD.linear(.8,1,1,0,e),0,1);this.setScaleMagnitude(i),this.setOpacity(n),this.center=t},from:0,to:1,duration:.3,easing:yM.QUADRATIC_IN_OUT});n.endedEmitter.addListener(()=>this.dispose()),n.start()}};jx.register("FuseTripAnimation",XR);let JR=class extends fO{dispose(){this.disposeFuseNode(),super.dispose()}constructor(e,i,n,s,r,o){const a=(0,t.Ay)()({isIcon:!1,useHitTestForSensors:!0},o),l=new _h(ZR,{scale:.691}),h=(l.width-30)/5/2,c=new Te.A(15,0),d=new Te.A(l.width-15,0),u=(new Hi).moveToPoint(c).zigZagToPoint(d,4,RD.roundSymmetric(h),!1),p=(new Hi).moveToPoint(c).zigZagToPoint(new Te.A(l.width/2-8,13),4,RD.roundSymmetric(h/2)-1,!1);p.moveToPoint(d),p.zigZagToPoint(new Te.A(l.width/2+8,-13),4,RD.roundSymmetric(h/2)-1,!1);const g=new ua(u,{stroke:"#302b2b",lineWidth:4,center:l.center}),A=e=>g.setLineWidth(RD.linear(n.currentRatingProperty.range.min,n.currentRatingProperty.range.max,1,4,e));n.currentRatingProperty.link(A);const y=new fa(15,3,l.width-30,l.height-6,{fill:"#c3dbfd",opacity:.5,stroke:"black",lineWidth:.5}),f=new Cr({children:[g,y,l]}),b=n.chargePathLength-40;let P=(new Hi).moveTo(0,0).lineToRelative(n.chargePathLength,0).moveTo(0,0).rect(20,-15,b,30);const V=a.isIcon?hD.RESISTOR_LENGTH:n.distanceBetweenVertices;f.mutate({scale:V/f.width});const v=f.width/P.bounds.width;P=P.transformed(Pt.scale(v,v));const w=new ua(P,{stroke:Wr.BLACK,lineWidth:hD.SCHEMATIC_LINE_WIDTH}),E=b/7,S=(new Hi).moveTo(0,P.bounds.centerY).lineToRelative(20,0).lineToRelative(0,-15).lineToRelative(b,0).lineToRelative(0,15).lineToRelative(20,0).lineToRelative(-20,0).lineToRelative(0,15).lineToRelative(-b,0).lineToRelative(0,-30).lineToRelative(E,0).lineToRelative(0,30).lineToRelative(b-2*E,0).lineToRelative(0,-30),T=e=>{w.shape=e===sD.IEEE||e===sD.BRITISH?P:S};oD.link(T),w.centerY=0,f.centerY=0,w.mouseArea=w.bounds.copy(),w.touchArea=w.bounds.copy(),super(e,i,n,s,f,w,r,a),this.fuse=n;const C=e=>{e&&!m.value&&i.addChild(new XR({center:this.center})),y.fill=e?"#4e4e4e":"#c3dbfd",g.shape=e?p:u};a.isIcon||this.fuse.isTrippedProperty.link(C),this.disposeFuseNode=()=>{f.dispose(),n.currentRatingProperty.unlink(A),a.isIcon||this.fuse.isTrippedProperty.unlink(C),oD.unlink(T)}}};JR.webglSpriteNodes=[new _h(ZR)],jx.register("FuseNode",JR);const $R=hD.INDUCTOR_LENGTH,eN=($R-40)/4/2,tN=(new Hi).moveTo(0,0).lineTo(20,0).arc(20+1*eN,0,eN,Math.PI,0,!1).arc(20+3*eN,0,eN,Math.PI,0,!1).arc(20+5*eN,0,eN,Math.PI,0,!1).arc(20+7*eN,0,eN,Math.PI,0,!1).lineTo($R,0),iN=hD.INDUCTOR_LENGTH,nN=new ci({lineWidth:4,lineCap:"round",lineJoin:"round"}),sN=new ci({lineWidth:2.5,lineCap:"round",lineJoin:"round"});let rN=class extends fO{constructor(e,i,n,s,r,o){o=(0,t.sF)({isIcon:!1,useHitTestForSensors:!0},o);const a=(new Hi).ellipticalArc(iN-7,30,5,30,0,-Math.PI/2,Math.PI/2,!1).ellipticalArc(7,30,5,30,0,Math.PI/2,-Math.PI/2,!0).close(),l=new ua(a,{fill:"white",stroke:"black"}),h=Hi.ellipse(7,30,5,30,2*Math.PI),c=new ua(h,{fill:"#c4c4c4",stroke:"black"}),d=new Cr;n.inductanceProperty.link(e=>{const t=RD.roundSymmetric(RD.linear(5,10,12,20,e)),i=[];for(let n=0;nnew ua(a.getStrokedShape(e),{fill:t});i.push(l(nN,"black")),i.push(l(sN,"#dc9180"))}d.children=i});const u=new Cr({children:[c,l,d],centerY:0}),p=iN/tN.bounds.width,m=tN.transformed(Pt.scale(p,p)),g=new ua(m,{stroke:Wr.BLACK,lineWidth:hD.SCHEMATIC_LINE_WIDTH});g.mouseArea=g.bounds.dilated(2),g.touchArea=g.bounds.dilated(2),super(e,i,n,s,u,g,r,o),this.inductor=n}};rN.webglSpriteNodes=[],jx.register("InductorNode",rN);const oN=Jx.currentStringProperty,aN=hD.SERIES_AMMETER_LENGTH,lN=e=>sb(new fa(0,0,aN,40,e),{wrap:!1}),hN=lN({cornerRadius:4,fill:"#f39033"}),cN=lN({cornerRadius:4,stroke:"#231f20",lineWidth:2.4});let dN=class extends fO{dispose(){this.disposeSeriesAmmeterNode(),super.dispose()}updateRender(){super.updateRender(),this.frontPanelContainer.setMatrix(this.contentNode.getMatrix()),this.frontPanelContainer.center=this.center}constructor(e,t,i,n,s,r){const o=new rc(ZE.NO_VALUE,{tandem:n.createTandem("probeReadoutText").createTandem(Bc.STRING_PROPERTY_TANDEM_NAME),phetioReadOnly:!0}),a=new eB(o,s,oN,n,{seriesAmmeter:!0}),l=()=>{let t=ZE.NO_VALUE;if(e){const n=e.model.circuit,s=n.getNeighboringVertices(i.startVertexProperty.get()).length>1,r=n.getNeighboringVertices(i.endVertexProperty.get()).length>1;if(s&&r){const e=i.currentSenseProperty.value===FD.BACKWARD?-1:1;t=ak.createCurrentReadout(i.currentProperty.get()*e,!1)}}o.value=t};i.currentProperty.link(l),i.startVertexProperty.lazyLink(l),i.endVertexProperty.lazyLink(l),i.currentSenseProperty.lazyLink(l),nD.lazyLink(l),Jx.currentUnitsStringProperty.lazyLink(l),t&&t.circuit.circuitChangedEmitter.addListener(l);const h=new Cr({children:[hN,new fa(0,0,aN,20,{fill:"#bcbdbf",centerY:20}),cN]});h.mouseArea=h.bounds.copy(),h.touchArea=h.bounds.copy(),h.centerY=0,super(e,t,i,new rh(pk.LIFELIKE),h,new Cr({children:[h]}),n,r),this.frontPanelContainer=new uP(a,{fill:"#f39033",stroke:null,xMargin:10,yMargin:1,pickable:!1}),r&&r.isIcon?h.addChild(this.frontPanelContainer.mutate({centerX:h.width/2,centerY:h.height/2-2})):t&&!i.phetioIsArchetype&&i.tandem.supplied&&t.seriesAmmeterNodeReadoutPanelLayer.addChild(this.frontPanelContainer),this.isIcon=!(!r||!r.isIcon),this.disposeSeriesAmmeterNode=()=>{i.currentSenseProperty.unlink(l),Jx.currentUnitsStringProperty.unlink(l),i.currentProperty.unlink(l),i.startVertexProperty.unlink(l),i.endVertexProperty.unlink(l),nD.unlink(l),this.isIcon||t&&t.seriesAmmeterNodeReadoutPanelLayer.removeChild(this.frontPanelContainer),h.dispose(),this.frontPanelContainer.dispose(),a.dispose(),t&&t.circuit.circuitChangedEmitter.removeListener(l),o.dispose()}}};jx.register("SeriesAmmeterNode",dN);const uN=sb(new Th(11.2,{fill:"#ae9f9e"}),{wrap:!1});let pN=class extends Cr{dispose(){this.disposeSolderNode(),super.dispose()}constructor(e,t){const i=e.circuit;super({children:[uN],preventFit:!0,pickable:!1}),this.vertex=t,this.startOffset=null;const n=()=>{this.isDisposed||(this.visible=i.countCircuitElements(t)>1)};i.vertexGroup.elementCreatedEmitter.addListener(n),i.vertexGroup.elementDisposedEmitter.addListener(n),i.circuitElements.addItemAddedListener(n),i.circuitElements.addItemRemovedListener(n);const s=this.setTranslation.bind(this);t.positionProperty.link(s),this.disposeSolderNode=()=>{t.positionProperty.unlink(s),i.vertexGroup.elementCreatedEmitter.removeListener(n),i.vertexGroup.elementDisposedEmitter.removeListener(n),i.circuitElements.removeItemAddedListener(n),i.circuitElements.removeItemRemovedListener(n)},n()}};pN.webglSpriteNodes=[uN],pN.SOLDER_RADIUS=11.2,jx.register("SolderNode",pN);const mN=hD.SWITCH_START,gN=hD.SWITCH_END,AN=hD.SWITCH_LENGTH,yN=new tb(0,-4,0,4).addColorStop(0,"#d48270").addColorStop(.3,"#e39b8c").addColorStop(1,"#b56351"),fN=function(e,t,i,n,s){const r=i/2,o=new fa(0,-i/2,AN*mN,i,{cornerRadius:r,fill:t,stroke:Wr.BLACK,pickable:!0}),a=(new Hi).moveTo(0,i/2).lineTo(AN*mN-n,i/2).arc(AN*mN-n/2,0,n/2,Math.PI,0,!1).arc(AN*mN+n/2,0,n/2,Math.PI,0,!0).lineTo(AN*mN+n,-i/2).lineTo(0,-i/2).lineTo(0,i/2),l=new ua(a,{x:AN*mN,fill:t,stroke:Wr.BLACK,lineWidth:e===pk.SCHEMATIC?0:1,pickable:!0});l.rotation=s?0:-Math.PI/4;const h=(new Hi).moveTo(AN*gN-n,i/2).lineTo(AN*gN-n,0).arc(AN*gN-n/2,0,n/2,Math.PI,0,!1).arc(AN*gN+n/2,0,n/2,Math.PI,0,!0).lineTo(AN*gN+n,-i/2).lineTo(AN-r,-i/2).arc(AN-r,0,r,-Math.PI/2,Math.PI/2).lineTo(AN*gN-n,i/2),c=new ua(h,{fill:t,stroke:Wr.BLACK,pickable:!0}),d=new Th(.6*i,{fill:"#a7a8ab",stroke:Wr.BLACK,lineWidth:4,x:AN*mN}),u=new Cr({children:[o,l,c,d]});return e===pk.SCHEMATIC&&u.addChild(new Th(.6*i,{fill:Wr.BLACK,stroke:Wr.BLACK,lineWidth:4,x:AN*gN})),u.leftSegmentNode=o,u.rotatingSegmentNode=l,u.rightSegmentNode=c,u},bN=fN(pk.LIFELIKE,yN,16,6,!1),PN=sb(bN,{wrap:!1}),VN=fN(pk.LIFELIKE,yN,16,6,!0),vN=sb(VN,{wrap:!1}),wN=sb(fN(pk.SCHEMATIC,Wr.BLACK,hD.SCHEMATIC_LINE_WIDTH,0,!1),{wrap:!1}),EN=sb(fN(pk.SCHEMATIC,Wr.BLACK,hD.SCHEMATIC_LINE_WIDTH,0,!0),{wrap:!1});let SN=class extends fO{startSideContainsSensorPoint(e){const t=this.contentNode.parentToLocalPoint(e),i=bN.leftSegmentNode.containsPoint(t),n=(this.circuitSwitch.isClosedProperty.value?VN:bN).rotatingSegmentNode.containsPoint(t);return i||n}endSideContainsSensorPoint(e){const t=this.contentNode.parentToLocalPoint(e);return bN.rightSegmentNode.containsPoint(t)}containsSensorPoint(e){const t=this.globalToParentPoint(e);return this.step(),this.startSideContainsSensorPoint(t)||this.endSideContainsSensorPoint(t)}dispose(){this.disposeSwitchNode(),super.dispose()}constructor(e,t,i,n,s,r){const o=new Cr,a=new Cr,l=e=>{o.children=[e?vN:PN],a.children=[e?EN:wN]};i.isClosedProperty.link(l),super(e,t,i,n,o,a,s,r),this.circuitSwitch=i;let h=null;const c=new Mr({tandem:s.createTandem("fireListener"),attach:!1,press:e=>{h=t.globalToLocalPoint(e.pointer.point)},fire:e=>{if(e){t.globalToLocalPoint(e.pointer.point).distance(h){i.isClosedProperty.unlink(l),e&&this.contentNode.removeInputListener(c),o.dispose(),a.dispose(),c.interrupt(),c.dispose()}}};jx.register("SwitchNode",SN);const TN=Jx.capacitanceFaradsSymbolStringProperty,CN=Jx.fuseValueStringProperty,IN=Jx.inductanceHenriesSymbolStringProperty,xN=Jx.resistanceOhmsSymbolStringProperty,DN=Jx.voltageUnitsStringProperty,kN=new Gc({size:22}),MN=(e,i)=>new Bc("",(0,t.sF)({tandem:e,font:kN,fill:gD.textFillProperty},i)),BN=(e,i)=>new df("",(0,t.sF)({tandem:e,font:kN},i)),ON='∞';let LN=class extends uP{dispose(){super.dispose(),this.disposeValueNode()}constructor(e,t,i,n,s){const r=new Rf({maxWidth:130});let o,a=null;if(t instanceof ik){const i=MN(s.createTandem("voltageText")),n=ye.multilink([t.voltageProperty,DN],(e,n)=>{i.string=Ge.A.fillIn(n,{voltage:RD.toFixed(e,t.numberOfDecimalPlaces)}),a&&a()});o=new Rf({align:"right",children:[i]});const l=MN(s.createTandem("resistanceText")),h=ye.multilink([e,xN],(e,t)=>{l.string=Ge.A.fillIn(t,{resistance:RD.toFixed(e,1)});const n=e>tD.batteryMinimumResistance?[i,l]:[i];o.getChildrenCount()!==n.length&&(o.children=n),a&&a()});r.disposeEmitter.addListener(()=>{n.dispose(),h.dispose()})}else if(t instanceof bk||t instanceof Ak){o=MN(s.createTandem("resistanceText"));const e=ye.multilink([t.resistanceProperty,xN],(e,i)=>{o.string=Ge.A.fillIn(i,{resistance:RD.toFixed(e,t.numberOfDecimalPlaces)}),a&&a()});r.disposeEmitter.addListener(()=>e.dispose())}else if(t instanceof hk){o=MN(s.createTandem("capacitorText"));const e=ye.multilink([t.capacitanceProperty,TN],(e,i)=>{o.string=Ge.A.fillIn(i,{resistance:RD.toFixed(e,t.numberOfDecimalPlaces)}),a&&a()});r.disposeEmitter.addListener(()=>e.dispose())}else if(t instanceof uk){o=MN(s.createTandem("inductorText"));const e=ye.multilink([t.inductanceProperty,IN],(e,i)=>{o.string=Ge.A.fillIn(i,{resistance:RD.toFixed(e,t.numberOfDecimalPlaces)}),a&&a()});r.disposeEmitter.addListener(()=>e.dispose())}else if(t instanceof Ek){o=BN(s.createTandem("switchText"));const e=ye.multilink([t.resistanceProperty,xN],(e,t)=>{o.string=Ge.A.fillIn(t,{resistance:e>1e5?ON:"0"}),a&&a()});r.disposeEmitter.addListener(()=>e.dispose())}else{if(!(t instanceof ck))throw new Error("ValueNode cannot be shown for "+t.constructor.name);{o=BN(s.createTandem("fuseText"),{align:"right",fill:gD.textFillProperty});const e=ye.multilink([t.resistanceProperty,t.currentRatingProperty,CN],(e,i,n)=>{const s=e===hD.MAX_RESISTANCE?ON:RD.toFixed(1e3*e,t.numberOfDecimalPlaces);o.string=Ge.A.fillIn(n,{resistance:s,currentRating:RD.toFixed(i,t.numberOfDecimalPlaces)}),a&&a()});r.disposeEmitter.addListener(()=>e.dispose())}}if(tD.showCurrents){const e=new Bc("",{fill:gD.textFillProperty});ye.multilink([t.currentProperty,t.currentSenseProperty],(t,i)=>{e.string=i.toString()+", "+t.toFixed(4)}),o=new Rf({children:[o,e]})}const l=new Bc("",{font:kN,fill:gD.textFillProperty});r.children=[l,o],super(r,{stroke:null,fill:new Wr(255,255,255,.6),tandem:s,cornerRadius:3,xMargin:3,yMargin:1,visiblePropertyOptions:{phetioReadOnly:!0},pickable:!1});const h=Pt.identity();a=()=>{o.visible=i.value&&t.isValueDisplayableProperty.value;const e=t.labelStringProperty.value;l.string=e,l.visible=e.length>0;const n=t instanceof Ak?.56:.5;t.updateMatrixForPoint(t.chargePathLength*n,h);const s=Te.A.createPolar(24,h.rotation+3*Math.PI/2);s.y>0&&(s.y=-s.y),this.centerBottom=h.translation.plus(s.timesScalar(.8))},t.vertexMovedEmitter.addListener(a),t.isValueDisplayableProperty.link(a),a(),i.link(a),n.link(a),t.labelStringProperty.link(a),this.disposeValueNode=()=>{r.dispose(),t.vertexMovedEmitter.removeListener(a),i.unlink(a),n.unlink(a),t.labelStringProperty.unlink(a)}}};jx.register("ValueNode",LN);const RN={lineWidth:1.3,lineDash:[6,4]},NN=sb(new Th(16,(0,t.sF)({stroke:Wr.RED},RN)),{wrap:!1}),qN=sb(new Th(16,(0,t.sF)({stroke:Wr.BLACK},RN)),{wrap:!1});let FN=class extends Cr{dispose(){const e=this.vertex,t=this.circuit,i=this.vertexCutButtonContainer,n=this.circuitNode;e.positionProperty.unlink(this.updateVertexNodePositionListener),e.selectionProperty.unlink(this.updateVertexNodePositionListener),e.selectionProperty.unlink(this.updateSelectedListener),e.interactiveProperty.unlink(this.updatePickableListener),e.relayerEmitter.removeListener(this.updateMoveToFront),ak.setInSceneGraph(!1,n.buttonLayer,i),ak.setInSceneGraph(!1,n.highlightLayer,this.highlightNode),t.vertexGroup.elementCreatedEmitter.removeListener(this.updateStrokeListener),t.vertexGroup.elementDisposedEmitter.removeListener(this.updateStrokeListener),t.vertexGroup.elementCreatedEmitter.removeListener(this.updateSelectedListener),t.vertexGroup.elementDisposedEmitter.removeListener(this.updateSelectedListener),t.circuitElements.removeItemAddedListener(this.updateStrokeListener),t.circuitElements.removeItemRemovedListener(this.updateStrokeListener),e.attachableProperty.unlink(this.updateStrokeListener),t.circuitChangedEmitter.removeListener(this.updateStrokeListener),this.dragListener.dispose(),this.removeInputListener(this.dragListener),e.isDraggableProperty.unlink(this.interruptionListener),this.vertexCutButtonContainer.dispose(),super.dispose()}updateSelected(){if(!this.isDisposed){const e=this.vertex.isSelected(),t=this.circuit.getNeighborCircuitElements(this.vertex);if(e){for(let e=0;e1||n;this.vertexCutButtonContainer.filters=s?[]:[Rb.FULL],this.vertexCutButtonContainer.opacity=s?1:ff.DISABLED_OPACITY,this.vertexCutButtonContainer.inputEnabled=s}}updateStroke(){if(!this.isDisposed){const e=this.circuit.countCircuitElements(this.vertex)>1?qN:NN;this.getChildAt(0)!==e&&(this.children=this.vertexLabelNode?[e,this.vertexLabelNode]:[e]),this.visible=this.vertex.attachableProperty.get()}}updateVertexCutButtonPosition(){const e=this.vertex.positionProperty.get(),t=this.circuit.getNeighborCircuitElements(this.vertex),i=new Te.A(0,0);for(let r=0;r0&&i.add(e.normalized())}i.magnitude<1e-6&&i.setXY(0,-1);const n=e.plus(i.normalized().timesScalar(70)),s=this.circuitNode.visibleBoundsInCircuitCoordinateFrameProperty.get().eroded(this.vertexCutButtonContainer.width/2);this.vertexCutButtonContainer.center=s.closestPointTo(n)}updateVertexNodePosition(){const e=this.vertex.positionProperty.get();this.translation=e,this.vertex.isSelected()&&(this.highlightNode.translation=e),this.updateReadoutTextPosition&&this.updateReadoutTextPosition(),this.vertex.isSelected()&&this.updateVertexCutButtonPosition()}setDraggable(e){e||this.dragListener.interrupt()}constructor(e,t,i){super({tandem:i,cursor:"pointer",tagName:"div",focusable:!0,focusHighlight:"invisible",phetioDynamicElement:!0,phetioVisiblePropertyInstrumented:!1});const n=e.circuit;this.circuit=n,this.vertexCutButtonContainer=new Cr({children:[e.vertexCutButton]}),this.circuitNode=e,this.addLinkedElement(t,{tandemName:"vertex"});const s=new Bc("",{fontSize:22,fill:gD.textFillProperty,pickable:!1}),r=new Bc("",{fontSize:14,fill:gD.textFillProperty,pickable:!1}),o=[s];tD.vertexDisplay&&o.push(r),this.vertexLabelNode=new Rf({children:o,maxWidth:50}),this.updateReadoutTextPosition=()=>{this.vertexLabelNode.centerX=0,this.vertexLabelNode.bottom=-30},tD.vertexDisplay&&t.voltageProperty.link(e=>{const i=RD.toFixed(e,3)+"V";r.setString(`${t.index} @ ${i}`),this.updateReadoutTextPosition&&this.updateReadoutTextPosition()}),t.labelStringProperty.link(e=>{s.string=e,this.updateReadoutTextPosition()}),this.vertex=t,this.startOffset=null,this.highlightNode=new Th(30,{stroke:gD.highlightStrokeProperty,lineWidth:hD.HIGHLIGHT_LINE_WIDTH,pickable:!1}),this.updateStrokeListener=this.updateStroke.bind(this),n.vertexGroup.elementCreatedEmitter.addListener(this.updateStrokeListener),n.vertexGroup.elementDisposedEmitter.addListener(this.updateStrokeListener),n.circuitChangedEmitter.addListener(this.updateStrokeListener),n.circuitElements.addItemAddedListener(this.updateStrokeListener),n.circuitElements.addItemRemovedListener(this.updateStrokeListener),t.attachableProperty.link(this.updateStrokeListener),this.updateSelectedListener=this.updateSelected.bind(this),t.selectionProperty.link(this.updateSelectedListener),t.isCuttableProperty.link(this.updateSelectedListener),this.updateMoveToFront=this.moveToFront.bind(this),t.relayerEmitter.addListener(this.updateMoveToFront),this.updatePickableListener=this.setPickable.bind(this),t.interactiveProperty.link(this.updatePickableListener);let a=null,l=null,h=!1;this.dragListener=new pO(e,[()=>t],{tandem:i.createTandem("dragListener"),start:i=>{a=i.pointer.point,l=i.pointer.point.copy(),e.startDragVertex(i.pointer.point,t,t),h=!1},drag:i=>{l=i.pointer.point.copy(),h=!0,e.dragVertex(i.pointer.point,t,!0)},end:()=>{e.endDrag(t,h),!t.isDisposed&&t.interactiveProperty.get()&&l.distance(a){const i=new tb(0,-8,0,8);return e.forEach(e=>{i.addColorStop(t(e.point),e.color)}),i},WN=[{point:0,color:new Wr("#993f35")},{point:.2,color:new Wr("#cd7767")},{point:.3,color:new Wr("#f6bda0")},{point:1,color:new Wr("#3c0c08")}],QN=zN(WN,_.identity),KN=zN(WN.reverse(),e=>1-e),jN=sb(new sc(0,0,100,0,{lineWidth:16,stroke:QN}),{wrap:!1}),_N=sb(new sc(0,0,100,0,{lineWidth:16,stroke:KN}),{wrap:!1}),ZN=sb(new Th(8,{fill:QN}),{wrap:!1}),XN=sb(new Th(8,{fill:KN}),{wrap:!1}),JN=new ci({lineWidth:26,lineCap:"round",lineJoin:"round"}),$N=new ci({lineWidth:23});let eq=class extends uO{updateRender(){if(this.viewTypeProperty.value===pk.LIFELIKE){const e=this.wire.startPositionProperty.get(),t=this.wire.endPositionProperty.get(),i=new Te.A(.916,.4),n=t.minus(e),s=i.dot(n),r=s<0?_N:jN,o=s<0?XN:ZN;this.lineNode.getChildAt(0)!==r&&this.lineNode.setChildren([r]),this.endCapParent.getChildAt(0)!==o&&this.endCapParent.setChildren([o]),this.startCapParent.getChildAt(0)!==o&&this.startCapParent.setChildren([o]),this.startCapParent.visible=!0,this.endCapParent.visible=!0}else this.lineNode.getChildAt(0)!==UN&&this.lineNode.setChildren([UN,GN]),this.startCapParent.visible=!1,this.endCapParent.visible=!1;const e=this.circuitElement.startPositionProperty.get(),t=this.circuitElement.endPositionProperty.get(),i=t.minus(e),n=Math.max(i.magnitude,1e-8),s=i.angle;if(this.endCapParent.setMatrix(YN.setToTranslationRotationPoint(t,s)),this.startCapParent.setMatrix(YN.setToTranslationRotationPoint(e,s)),YN.multiplyMatrix(Pt.scaling(n/100,1)),this.lineNodeParent.setMatrix(YN),this.circuitNode){const e=this.circuitNode.circuit.selectionProperty.get()===this.wire;this.highlightNode.visible=e,e&&(this.highlightNode.shape=(e=>{const t=e.startPositionProperty.get(),i=e.endPositionProperty.get();return Hi.lineSegment(t.x,t.y,i.x,i.y).getStrokedShape(JN)})(this.wire))}this.touchArea=(e=>{const t=e.startPositionProperty.get(),i=e.endPositionProperty.get(),n=i.distance(t);let s=null,r=null;return n>0?(s=t.blend(i,0/n),r=i.blend(t,0/n)):(s=t.average(i),r=s),Hi.lineSegment(s,r).getStrokedShape($N)})(this.wire),this.mouseArea=this.touchArea}dispose(){this.disposeWireNode(),super.dispose()}constructor(e,t,i,n,s){const r=new Cr({children:[ZN]}),o=new Cr({children:[ZN]}),a=new ua(null,{stroke:gD.highlightStrokeProperty,lineWidth:hD.HIGHLIGHT_LINE_WIDTH,pickable:!1,visible:!1}),l=new Cr,h=new Cr({children:[l],cursor:"pointer"}),c=new Cr({children:[a]});t&&t.highlightLayer.addChild(c);const d=t&&t.circuit;super(i,d,{children:[r,o,h],tandem:s}),this.viewTypeProperty=n,this.circuitNode=t,this.wire=i,this.startCapParent=r,this.endCapParent=o,this.lineNodeParent=h,this.lineNode=l,this.highlightNode=a;const u=()=>{this.isDisposed||(this.markAsDirty(),t||this.updateRender())};n.link(u);const p=e=>{this.pickable=e};i.interactiveProperty.link(p);const m=(e,t)=>{t&&t.positionProperty.unlink(u),e.positionProperty.link(u)};i.startVertexProperty.link(m),i.endVertexProperty.link(m);let g=null,A=null,y=!1;e?(this.dragListener=new pO(t,[()=>i.startVertexProperty.get(),()=>i.endVertexProperty.get()],{tandem:s.createTandem("dragListener"),start:e=>{i.interactiveProperty.get()&&(t.startDragVertex(e.pointer.point,i.startVertexProperty.get(),this.circuitElement),t.startDragVertex(e.pointer.point,i.endVertexProperty.get(),this.circuitElement),y=!1,g=e.pointer.point.copy(),A=e.pointer.point.copy())},drag:e=>{i.interactiveProperty.get()&&(A=e.pointer.point.copy(),t.dragVertex(e.pointer.point,i.startVertexProperty.get(),!1),t.dragVertex(e.pointer.point,i.endVertexProperty.get(),!1),y=!0)},end:()=>{this.endDrag(this,[i.startVertexProperty.get(),i.endVertexProperty.get()],e,t,g,A,y)}}),this.addInputListener(this.dragListener),t.circuit.selectionProperty.link(u)):this.dragListener=null;const f=()=>{i.interactiveProperty.get()&&this.moveToBack()};i.connectedEmitter.addListener(f),this.disposeWireNode=()=>{this.dragListener.interrupt(),this.dragListener.dispose(),i.startVertexProperty.unlink(m),i.endVertexProperty.unlink(m),t&&t.circuit.selectionProperty.unlink(u),i.interactiveProperty.unlink(p),i.startPositionProperty.unlink(u),i.endPositionProperty.unlink(u),i.connectedEmitter.removeListener(f),t&&t.highlightLayer.removeChild(c),n.unlink(u),this.lineNode.dispose(),this.highlightNode.dispose(),this.lineNodeParent.dispose(),c.dispose(),this.startCapParent.dispose(),this.endCapParent.dispose()},!t&&this.updateRender()}};eq.webglSpriteNodes=[GN,jN,_N,ZN],jx.register("WireNode",eq);let tq=class extends Cr{getCircuitElementNode(e){return this.circuitElementNodeMap[e.id]}getSolderNode(e){return this.solderNodes[e.index]}getVertexNode(e){return this.vertexNodes[e.index]}getAllDropTargets(e){const t=[];for(let i=0;ie.src.unsnappedPositionProperty.get().distance(e.dst.positionProperty.get()))[0]}return null}step(){this.circuit.circuitElements.forEach(e=>this.getCircuitElementNode(e).step()),this.circuitDebugLayer&&this.circuitDebugLayer.step()}canDragVertex(e){const t=this.circuit.findAllFixedVertices(e);for(let i=0;i!e.blackBoxInterfaceProperty.get());const a=r.filter(e=>e.getOppositeVertex(t).blackBoxInterfaceProperty.get());if(1===a.length){const e=a[0];if(e instanceof ek){const i=e.getOppositeVertex(t),n=s.minus(i.positionProperty.get()).angle,r=e.distanceBetweenVertices||e.lengthProperty.get(),a=o.indexOf(i);o.splice(a,1);const l=Te.A.createPolar(r,n).plus(i.positionProperty.get()),h=t.positionProperty.get(),c=l.minus(h),d=Te.A.createPolar(r,n+Math.PI),u=[];this.translateVertexGroup(t,o,c,()=>t.unsnappedPositionProperty.set(i.unsnappedPositionProperty.get().minus(d)),u)}}}dragVertex(e,t,i){const n=this.getVertexNode(t);if(n.startOffset){const s=n.globalToParentPoint(e).subtract(n.startOffset),r=this.circuit.getNeighborCircuitElements(t),o=this.circuit.findAllFixedVertices(t);let a=!1;for(let l=0;lt.unsnappedPositionProperty.set(e.unsnappedPositionProperty.get().minus(a)),o)}else{const e=s.minus(t.unsnappedPositionProperty.get());this.translateVertexGroup(t,o,e,null,o)}}}translateVertexGroup(e,t,i,n,s){const r=this.visibleBoundsProperty.get(),o=this.parentToLocalBounds(r);for(let h=0;hthis.getCircuitElementNode(e));for(let s=n.length-1;s>=0;s--){const e=n[s];if(!e)continue;let t=!0;if(e.circuitElement.insideTrueBlackBoxProperty.get()&&(t=this.model.revealingProperty.get()),t&&e.containsSensorPoint(i))return e}return null}getVoltageConnection(e){const t=this.localToGlobalPoint(e),i=_.values(this.solderNodes),n=_.find(i,t=>{const i=t.vertex.positionProperty.get();return e.distance(i)<=pN.SOLDER_RADIUS});if(n)return new pM(n.vertex,null);const s=this.hitCircuitElementNode(e,e=>e.isMetallic,t);if(s){const t=s.circuitElement.startPositionProperty.get(),i=s.circuitElement.endPositionProperty.get().minus(t),n=e.minus(t);let r=0===i.magnitude?0:n.dot(i)/i.magnitudeSquared;r=RD.clamp(r,0,1);const o=RD.linear(0,1,s.circuitElement.startVertexProperty.get().voltageProperty.get(),s.circuitElement.endVertexProperty.get().voltageProperty.get(),r);return new pM(s.circuitElement.startVertexProperty.get(),s.circuitElement,o)}{const i=this.hitCircuitElementNode(e,e=>e instanceof Ek,t);if(i&&i instanceof SN){if(i.startSideContainsSensorPoint(e))return new pM(i.circuitSwitch.startVertexProperty.get(),i.circuitElement);if(i.endSideContainsSensorPoint(e))return new pM(i.circuitSwitch.endVertexProperty.get(),i.circuitElement)}const n=this.hitCircuitElementNode(e,e=>e instanceof hk,t);if(n&&n instanceof vL){if(n.frontSideContainsSensorPoint(t))return new pM(n.circuitElement.startVertexProperty.get(),n.circuitElement);if(n.backSideContainsSensorPoint(t))return new pM(n.circuitElement.endVertexProperty.get(),n.circuitElement)}return null}}getCurrentInLayer(e,t){const i=e.parentToGlobalPoint(e.translation);for(let n=0;n{this.chargeLayer.visible=e&&t}),this.sensorLayer=new Cr,this.beforeCircuitElementsLayer=new Cr,this.afterCircuitElementsLayer=new Cr;const n=[this.lightRaysLayer,this.beforeCircuitElementsLayer,this.wireLayer,this.solderLayer,this.fixedCircuitElementLayer,this.vertexLayer,this.chargeLayer,this.lightBulbSocketLayer,this.seriesAmmeterNodeReadoutPanelLayer,this.afterCircuitElementsLayer,this.sensorLayer,this.highlightLayer,this.valueLayer,this.buttonLayer],s=[this.lightRaysLayer,this.beforeCircuitElementsLayer,this.wireLayer,this.fixedCircuitElementLayer,this.solderLayer,this.vertexLayer,this.chargeLayer,this.lightBulbSocketLayer,this.seriesAmmeterNodeReadoutPanelLayer,this.afterCircuitElementsLayer,this.sensorLayer,this.highlightLayer,this.valueLayer,this.buttonLayer];t.model.viewTypeProperty.link(e=>{this.children=e===pk.LIFELIKE?n:s}),this.visibleBoundsInCircuitCoordinateFrameProperty=new r.A(new Ie(0,0,1,1)),this.circuit=e,this.circuitElementNodeMap={},this.solderNodes={},this.vertexNodes={};const o=(t,i,n)=>{const s=s=>{if(t(s)){const t=n.createCorrespondingGroupElement(s.tandem.name,s);if(this.circuitElementNodeMap[s.id]=t,i.addChild(t),s instanceof ek&&!(s instanceof Pk)){const t=new LN(e.sourceResistanceProperty,s,this.model.showValuesProperty,this.model.viewTypeProperty,A.A.OPT_OUT);this.valueLayer.addChild(t),s.disposeEmitterCircuitElement.addListener(()=>{this.valueLayer.removeChild(t),t.dispose()})}}};e.circuitElements.addItemAddedListener(s),e.circuitElements.forEach(s),e.circuitElements.addItemRemovedListener(e=>{if(t(e)){const t=this.getCircuitElementNode(e);i.removeChild(t),n.disposeElement(t),delete this.circuitElementNodeMap[e.id]}})};o(e=>e instanceof Sk,this.wireLayer,new XD((e,i)=>new eq(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.wireGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("wireNodeGroup"),supportsDynamicState:!1})),o(e=>e instanceof iM&&"normal"===e.batteryType,this.fixedCircuitElementLayer,new XD((e,i)=>new RO(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.batteryGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("batteryNodeGroup"),supportsDynamicState:!1})),o(e=>e instanceof Ak&&!e.isExtreme&&!e.isReal,this.fixedCircuitElementLayer,new XD((e,i)=>new KL(t,this,i,this.model.isValueDepictionEnabledProperty,this.model.viewTypeProperty,e),()=>[this.circuit.lightBulbGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("lightBulbNodeGroup"),supportsDynamicState:!1})),this.circuit.seriesAmmeterGroup&&o(e=>e instanceof Pk,this.fixedCircuitElementLayer,new XD((e,i)=>new dN(t,this,i,e,this.model.isValueDepictionEnabledProperty),()=>[this.circuit.seriesAmmeterGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("seriesAmmeterNodeGroup"),supportsDynamicState:!1})),this.circuit.extremeBatteryGroup&&o(e=>e instanceof iM&&"high-voltage"===e.batteryType,this.fixedCircuitElementLayer,new XD((e,i)=>new RO(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.batteryGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("extremeBatteryNodeGroup"),supportsDynamicState:!1})),this.circuit.extremeResistorGroup&&o(e=>e instanceof bk&&e.resistorType===fk.EXTREME_RESISTOR,this.fixedCircuitElementLayer,new XD((e,i)=>new QR(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.extremeResistorGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("extremeResistorNodeGroup"),supportsDynamicState:!1})),this.circuit.extremeLightBulbGroup&&o(e=>e instanceof Ak&&e.isExtreme&&!e.isReal,this.fixedCircuitElementLayer,new XD((e,i)=>new KL(t,this,i,this.model.isValueDepictionEnabledProperty,this.model.viewTypeProperty,e),()=>[this.circuit.extremeLightBulbGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("extremeLightBulbNodeGroup"),supportsDynamicState:!1})),this.circuit.realLightBulbGroup&&o(e=>e instanceof Ak&&e.isReal,this.fixedCircuitElementLayer,new XD((e,i)=>new KL(t,this,i,this.model.isValueDepictionEnabledProperty,this.model.viewTypeProperty,e),()=>[this.circuit.realLightBulbGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("realLightBulbNodeGroup"),supportsDynamicState:!1})),this.circuit.capacitorGroup&&o(e=>e instanceof hk,this.fixedCircuitElementLayer,new XD((e,i)=>new vL(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.capacitorGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("capacitorNodeGroup"),supportsDynamicState:!1})),this.circuit.acVoltageGroup&&o(e=>e instanceof nk,this.fixedCircuitElementLayer,new XD((e,i)=>new SO(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.acVoltageGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("acVoltageNodeGroup"),supportsDynamicState:!1})),this.circuit.inductorGroup&&o(e=>e instanceof uk,this.fixedCircuitElementLayer,new XD((e,i)=>new rN(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.inductorGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("inductorNodeGroup"),supportsDynamicState:!1})),o(e=>e instanceof bk&&e.resistorType===fk.RESISTOR,this.fixedCircuitElementLayer,new XD((e,i)=>new QR(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.resistorGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("resistorNodeGroup"),supportsDynamicState:!1})),o(e=>e instanceof bk&&e.resistorType!==fk.RESISTOR&&e.resistorType!==fk.EXTREME_RESISTOR,this.fixedCircuitElementLayer,new XD((e,i)=>i instanceof lO?new KR(t,this,i,this.model.viewTypeProperty,e):new QR(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.householdObjectGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("householdObjectNodeGroup"),supportsDynamicState:!1})),o(e=>e instanceof Ek,this.fixedCircuitElementLayer,new XD((e,i)=>new SN(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.switchGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("switchNodeGroup"),supportsDynamicState:!1})),o(e=>e instanceof ck,this.fixedCircuitElementLayer,new XD((e,i)=>new JR(t,this,i,this.model.viewTypeProperty,e),()=>[this.circuit.fuseGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("fuseNodeGroup"),supportsDynamicState:!1}));const a=new ua(oO,{fill:"black",rotation:-Math.PI/2,maxWidth:36});this.vertexCutButton=new ZP({baseColor:"yellow",content:a,xMargin:10,yMargin:10,tandem:t.tandem.createTandem("vertexCutButton"),phetioVisiblePropertyInstrumented:!1,enabledPropertyOptions:{phetioReadOnly:!0,phetioFeatured:!1}}),this.vertexCutButton.addListener(()=>{const t=e.getSelectedVertex();t&&(e.cutVertex(t),c(this.visibleBoundsInCircuitCoordinateFrameProperty.value))});const l=new XD((e,t)=>new FN(this,t,e),()=>[e.vertexGroup.archetype],{groupElementStartingIndex:0,phetioType:XD.PhetioGroupIO(Cr.NodeIO),tandem:i.createTandem("vertexNodeGroup"),supportsDynamicState:!1}),h=e=>{const t=new pN(this,e);this.solderNodes[e.index]=t,this.solderLayer.addChild(t);const i=l.createCorrespondingGroupElement(e.tandem.name,e);this.vertexNodes[e.index]=i,this.vertexLayer.addChild(i)};e.vertexGroup.elementCreatedEmitter.addListener(h),e.vertexGroup.elementDisposedEmitter.addListener(e=>{const t=this.getVertexNode(e);this.vertexLayer.removeChild(t),delete this.vertexNodes[e.index],l.disposeElement(t);const i=this.getSolderNode(e);this.solderLayer.removeChild(i),delete this.solderNodes[e.index],i.dispose()}),e.vertexGroup.forEach(h);const c=t=>{for(let i=0;ithis.chargeLayer.addChild(new tR(e,this))),tD.showCurrents?(this.circuitDebugLayer=new iR(this),this.addChild(this.circuitDebugLayer)):this.circuitDebugLayer=null,phet.joist.display.addInputListener(new rO(e=>{0===e.target.getTrails(e=>e instanceof UB||e instanceof uO||e instanceof FN).length&&(this.circuit.selectionProperty.value=null)},{displayedNode:this}))}};jx.register("CircuitNode",tq);const iq=new Ct.A("bamboo");let nq=class{constructor(e){const i=(0,t.Ay)()({visible:!0},e);this.visible=i.visible,this.isDisposed=!1}};iq.register("CanvasPainter",nq);const sq=nq;let rq=class extends sq{setSpacing(e){this.spacing!==e&&(this.spacing=e)}setLineDashOffset(e){this.lineDashOffset=e}paintCanvas(e){e.strokeStyle=this.stroke,e.lineWidth=this.lineWidth,e.beginPath(),e.setLineDash(this.lineDash),e.lineDashOffset=this.lineDashOffset,this.chartTransform.forEachSpacing(this.axisOrientation,this.spacing,this.origin,this.clippingType,(t,i)=>{this.axisOrientation===Ee.VERTICAL?(e.moveTo(0,i),e.lineTo(this.chartTransform.viewWidth,i)):(e.moveTo(i,0),e.lineTo(i,this.chartTransform.viewHeight))}),e.stroke()}constructor(e,i,n,s){const r=(0,t.Ay)()({origin:0,clippingType:"strict",stroke:"black",lineWidth:1,lineDash:[1],lineDashOffset:0},s);super(),this.chartTransform=e,this.axisOrientation=i,this.spacing=n,this.origin=r.origin,this.clippingType=r.clippingType,this.stroke=r.stroke,this.lineDash=r.lineDash,this.lineWidth=r.lineWidth,this.lineDashOffset=r.lineDashOffset}};iq.register("CanvasGridLineSet",rq);const oq=rq;let aq=class extends sq{setStroke(e){this.strokeCSS=e instanceof Wr?e.toCSS():e}set stroke(e){this.setStroke(e)}dispose(){this.isDisposed=!0}setDataSet(e){this.dataSet=e}paintCanvas(e){if(e.beginPath(),this.strokeCSS){e.strokeStyle=this.strokeCSS,e.lineWidth=this.lineWidth,e.setLineDash(this.lineDash);let t=!0;const i=this.dataSet.length;for(let n=0;n{t.visible&&(e.save(),t.paintCanvas(e),e.restore())})}dispose(){this.disposeChartCanvasLinePlot(),super.dispose()}constructor(e,i,n){super((0,t.Ay)()({canvasBounds:new Ie(0,0,e.viewWidth,e.viewHeight)},n)),this.chartTransform=e,this.painters=i,this.update();const s=()=>this.update();e.changedEmitter.addListener(s),this.disposeChartCanvasLinePlot=()=>e.changedEmitter.removeListener(s)}};iq.register("ChartCanvasNode",lq);const hq=lq;let cq=class extends fa{update(){this.setRect(0,0,this.chartTransform.viewWidth,this.chartTransform.viewHeight)}dispose(){this.disposeChartRectangle(),super.dispose()}constructor(e,t){super(0,0,0,0,t),this.chartTransform=e,this.update();const i=()=>this.update();e.changedEmitter.addListener(i),this.disposeChartRectangle=()=>e.changedEmitter.removeListener(i)}};iq.register("ChartRectangle",cq);const dq=cq;let uq=class{evaluate(e){const t=this.evaluationFunction(e);return t}inverse(e){const t=this.inverseFunction(e);return t}constructor(e,t,i){i=(0,h.A)({domain:new T(Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY),range:new T(Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY)},i),this.evaluationFunction=e,this.inverseFunction=t,this.domain=i.domain,this.range=i.range}};w.A.register("Transform1",uq);const pq=uq;let mq=class{dispose(){this.changedEmitter.dispose()}forEachSpacing(e,t,i,n,s){const r=this.getSpacingBorders(e,t,i,n),o=r.min,a=r.max;for(let l=o;l<=a+1e-6;l++){const n=l*t+i;s(n,this.modelToView(e,n))}}modelToView(e,t){const i=e===Ee.HORIZONTAL?this.modelXRange:this.modelYRange,n=e===Ee.HORIZONTAL?this.viewWidth:this.viewHeight,s=e===Ee.HORIZONTAL?this.xTransform:this.yTransform,r=e===Ee.HORIZONTAL?this.modelXRangeInverted:this.modelYRangeInverted,o=s.evaluate(t),a=r?n:0,l=r?0:n,h=e===Ee.HORIZONTAL?Fe(s.evaluate(i.min),s.evaluate(i.max),a,l,o):Fe(s.evaluate(i.max),s.evaluate(i.min),a,l,o);return h}modelToViewX(e){return this.modelToView(Ee.HORIZONTAL,e)}modelToViewY(e){return this.modelToView(Ee.VERTICAL,e)}modelToViewXY(e,t){return new Te.A(this.modelToViewX(e),this.modelToViewY(t))}modelToViewPosition(e){return this.modelToViewXY(e.x,e.y)}modelToViewDelta(e,t){return this.modelToView(e,t)-this.modelToView(e,0)}modelToViewDeltaX(e){return this.modelToViewDelta(Ee.HORIZONTAL,e)}modelToViewDeltaY(e){return this.modelToViewDelta(Ee.VERTICAL,e)}modelToViewDeltaXY(e,t){return new Te.A(this.modelToViewDeltaX(e),this.modelToViewDeltaY(t))}viewToModel(e,t){const i=e===Ee.HORIZONTAL?this.modelXRange:this.modelYRange,n=e===Ee.HORIZONTAL?this.viewWidth:this.viewHeight,s=e===Ee.HORIZONTAL?this.xTransform:this.yTransform,r=e===Ee.HORIZONTAL?this.modelXRangeInverted:this.modelYRangeInverted,o=r?n:0,a=r?0:n,l=e===Ee.HORIZONTAL?Fe(o,a,s.evaluate(i.min),s.evaluate(i.max),t):Fe(o,a,s.evaluate(i.max),s.evaluate(i.min),t),h=s.inverse(l);return h}viewToModelX(e){return this.viewToModel(Ee.HORIZONTAL,e)}viewToModelY(e){return this.viewToModel(Ee.VERTICAL,e)}viewToModelXY(e,t){return new Te.A(this.viewToModelX(e),this.viewToModelY(t))}viewToModelPosition(e){return this.viewToModelXY(e.x,e.y)}viewToModelDeltaX(e){return this.viewToModelX(e)-this.viewToModelX(0)}viewToModelDeltaY(e){return this.viewToModelY(e)-this.viewToModelY(0)}viewToModelDelta(e){return this.viewToModelPosition(e).minus(this.viewToModelPosition(Te.A.ZERO))}setViewWidth(e){e!==this.viewWidth&&(this.viewWidth=e,this.changedEmitter.emit())}setViewHeight(e){e!==this.viewHeight&&(this.viewHeight=e,this.changedEmitter.emit())}setModelXRange(e){e.equals(this.modelXRange)||(this.modelXRange=e,this.changedEmitter.emit())}setModelYRange(e){e.equals(this.modelYRange)||(this.modelYRange=e,this.changedEmitter.emit())}getModelRange(e){return e===Ee.HORIZONTAL?this.modelXRange:this.modelYRange}setXTransform(e){this.xTransform!==e&&(this.xTransform=e,this.changedEmitter.emit())}setYTransform(e){this.yTransform!==e&&(this.yTransform=e,this.changedEmitter.emit())}getSpacingBorders(e,t,i,n){const s=this.getModelRange(e),r=gq(s.min,n,i,t,Math.ceil),o=gq(s.max,n,i,t,Math.floor);return new T(r,o)}constructor(e){const i=(0,t.Ay)()({viewWidth:100,modelXRange:new T(-1,1),modelXRangeInverted:!1,xTransform:new pq(e=>e,e=>e),viewHeight:100,modelYRange:new T(-1,1),modelYRangeInverted:!1,yTransform:new pq(e=>e,e=>e)},e);this.changedEmitter=new b.A,this.viewWidth=i.viewWidth,this.viewHeight=i.viewHeight,this.modelXRange=i.modelXRange,this.modelXRangeInverted=i.modelXRangeInverted,this.modelYRange=i.modelYRange,this.modelYRangeInverted=i.modelYRangeInverted,this.xTransform=i.xTransform,this.yTransform=i.yTransform}};function gq(e,t,i,n,s){return"lenient"===t?(0,Xe.q)((e-i)/n):s((e-i)/n)}iq.register("ChartTransform",mq);const Aq=mq;let yq=class extends ua{setDataSet(e){this.dataSet=e,this.update()}update(){const e=new Hi,t=this.dataSet.length;for(let i=0;ithis.update();e.changedEmitter.addListener(r),this.disposeScatterPlot=()=>e.changedEmitter.removeListener(r)}};iq.register("ScatterPlot",yq);const fq=yq,bq={doubleHead:!0,headHeight:4.5,headWidth:5,tailWidth:1.5,stroke:null};let Pq=class extends Vf{setDelta(e){e!==this.delta&&(this.delta=e,this.update())}update(){const e=this.chartTransform.modelToViewDelta(this.axisOrientation,this.delta);if(Math.abs(e-this.viewWidth)>1e-13){this.viewWidth=e;const t=e=>new sc(0,0,0,this.outerLineLength,{stroke:this.color,centerX:e}),i=t(0),n=t(e),s=new ZL(i.right,i.centerY,n.left,n.centerY,this.arrowNodeOptions),r=new Cr({children:[i,n,s]});this.labelNode.maxWidth=r.width,this.children=[r,this.labelNode]}}dispose(){this.disposeSpanNode(),super.dispose()}constructor(e,i,n,s,r){const o=(0,t.Ay)()({color:"black",outerLineLength:6,spacing:0},r);super(),this.chartTransform=e,this.axisOrientation=i,this.delta=n,this.labelNode=s,this.color=o.color,this.outerLineLength=o.outerLineLength,this.viewWidth=0,this.arrowNodeOptions=(0,t.sF)({fill:o.color},bq,o.arrowNodeOptions),this.update(),this.mutate(o);const a=()=>this.update();e.changedEmitter.addListener(a),this.disposeSpanNode=()=>e.changedEmitter.removeListener(a)}};iq.register("SpanNode",Pq);const Vq=Pq;let vq=class e extends ua{setSpacing(e){e!==this.spacing&&(this.spacing=e,this.update())}getSpacing(){return this.spacing}update(){const e=new Hi;this.chartTransform.forEachSpacing(this.axisOrientation,this.spacing,this.origin,this.clippingType,(t,i)=>{if(!this.skipCoordinates.includes(t)){const t=new Ie(0,0,0,0);if(this.axisOrientation===Ee.HORIZONTAL){const n="min"===this.edge?this.chartTransform.viewHeight:"max"===this.edge?0:this.chartTransform.modelToView(this.axisOrientation.opposite,this.value);e.moveTo(i,n-this.extent/2),e.lineTo(i,n+this.extent/2),t.setMinMax(i,n-this.extent/2,i,n+this.extent/2)}else{const n="min"===this.edge?0:"max"===this.edge?this.chartTransform.viewWidth:this.chartTransform.modelToView(this.axisOrientation.opposite,this.value);e.moveTo(n-this.extent/2,i),e.lineTo(n+this.extent/2,i),t.setMinMax(n-this.extent/2,i,n+this.extent/2,i)}}}),this.shape=e.makeImmutable()}dispose(){this.disposeTickMarkSet(),super.dispose()}getSpacingBorders(){return this.chartTransform.getSpacingBorders(this.axisOrientation,this.spacing,this.origin,this.clippingType)}constructor(i,n,s,r){const o=(0,t.Ay)()({value:0,edge:null,origin:0,skipCoordinates:[],stroke:"black",lineWidth:1,extent:e.DEFAULT_EXTENT,clippingType:"strict"},r);o.edge,super(null,o),this.chartTransform=i,this.axisOrientation=n,this.spacing=s,this.value=o.value,this.edge=o.edge,this.origin=o.origin,this.skipCoordinates=o.skipCoordinates,this.extent=o.extent,this.clippingType=o.clippingType,this.update();const a=()=>this.update();i.changedEmitter.addListener(a),this.disposeTickMarkSet=()=>i.changedEmitter.removeListener(a)}};vq.DEFAULT_EXTENT=10,iq.register("TickMarkSet",vq);const wq=vq;let Eq=class extends ua{setSpacing(e){this.spacing!==e&&(this.spacing=e,this.update())}getSpacing(){return this.spacing}update(){const e=[];this.chartTransform.forEachSpacing(this.axisOrientation,this.spacing,this.origin,this.clippingType,(t,i)=>{if(!this.skipCoordinates.includes(t)){const n=new Ie(0,0,0,0);if(this.axisOrientation===Ee.HORIZONTAL){const e="min"===this.edge?this.chartTransform.viewHeight:"max"===this.edge?0:this.chartTransform.modelToView(this.axisOrientation.opposite,this.value);n.setMinMax(i,e-this.extent/2,i,e+this.extent/2)}else{const e="min"===this.edge?0:"max"===this.edge?this.chartTransform.viewWidth:this.chartTransform.modelToView(this.axisOrientation.opposite,this.value);n.setMinMax(e-this.extent/2,i,e+this.extent/2,i)}let s=null;this.labelMap.has(t)?s=this.labelMap.get(t):this.createLabel&&(s=this.createLabel(t),this.labelMap.set(t,s)),s&&(this.positionLabel(s,n,this.axisOrientation),e.push(s))}});for(const t of this.labelMap.keys()){const i=this.labelMap.get(t);i&&!e.includes(i)&&(this.labelMap.delete(t),i.dispose())}this.children=e}invalidateTickLabelSet(){this.clearCache(),this.update()}clearCache(){for(const e of this.labelMap.values())e&&e.dispose();this.labelMap.clear()}setCreateLabel(e){this.createLabel=e,this.invalidateTickLabelSet()}dispose(){this.disposeTickLabelSet(),super.dispose()}getSpacingBorders(){return this.chartTransform.getSpacingBorders(this.axisOrientation,this.spacing,this.origin,this.clippingType)}constructor(e,i,n,s){const r=(0,t.Ay)()({value:0,edge:null,origin:0,skipCoordinates:[],extent:wq.DEFAULT_EXTENT,clippingType:"strict",createLabel:e=>new Bc(ee(e,1),{fontSize:12}),positionLabel:(e,t,i)=>(i===Ee.HORIZONTAL?e.centerTop=t.centerBottom.plusXY(0,1):e.rightCenter=t.leftCenter.plusXY(-1,0),e)},s);r.edge,super(null,r),this.chartTransform=e,this.axisOrientation=i,this.spacing=n,this.origin=r.origin,this.skipCoordinates=r.skipCoordinates,this.extent=r.extent,this.value=r.value,this.clippingType=r.clippingType,this.edge=r.edge,this.createLabel=r.createLabel,this.positionLabel=r.positionLabel,this.labelMap=new Map,this.update();const o=()=>this.update();e.changedEmitter.addListener(o),this.disposeTickLabelSet=()=>{e.changedEmitter.removeListener(o),this.clearCache()}}};iq.register("TickLabelSet",Eq);const Sq=Eq;let Tq=class extends jM{constructor(e,i,n){var s,r;const o=(0,t.Ay)()({cursor:"pointer",sensorTypeFunction:jM.crosshairs({stroke:"white"}),scale:.4,drag:_.noop},n);super(o);const a=new ch(new Te.A(0,0),{tandem:null==(s=o.tandem)?void 0:s.createTandem("positionProperty")});a.link(e=>this.setTranslation(e)),i.link(e=>this.setCenter(e.closestPointTo(this.center))),this.addInputListener(new Kc({positionProperty:a,dragBoundsProperty:i,press:()=>e.moveToFront(),drag:()=>o.drag(),tandem:null==(r=o.tandem)?void 0:r.createTandem("dragListener")}))}};jx.register("CCKCProbeNode",Tq);const Cq=Jx.oneSecondStringProperty,Iq=Jx.timeStringProperty;let xq=class extends Cr{addProbeNode(e,t,i,n,s,r){const o=new Tq(this,this.visibleBoundsProperty,{color:e,tandem:r});this.addChild(new ZM(s,new ch(new Te.A(-25,0)),new oe([o.boundsProperty],e=>e.centerBottom),new ch(new Te.A(0,25)),{lineWidth:3,stroke:t})),this.addChild(o);const a=()=>{o.mutate({right:this.backgroundNode.left-i,top:this.backgroundNode.top+n}),o.translation=this.visibleBoundsProperty.value.closestPointTo(o.translation)};return this.visibleProperty.link(a),this.alignProbesEmitter.addListener(a),o}reset(){this.series.clear(),this.meter.reset(),this.zoomLevelProperty.reset()}getBackgroundNodeGlobalBounds(){return this.localToGlobalBounds(this.backgroundNode.bounds)}startDrag(e){this.backgroundDragListener&&this.backgroundDragListener.press(e)}initializeBodyDragListener(e){this.meter.isActiveProperty.value=!1,this.meter.isDraggingProbesWithBodyProperty.value=!0;const t=new r.A(null),i=new Kc({allowTouchSnag:!1,positionProperty:this.meter.bodyPositionProperty,useParentOffset:!0,dragBoundsProperty:t,targetNode:this,tandem:this.tandem.createTandem("dragListener"),start:()=>{this.moveToFront(),this.meter.isDraggingProbesWithBodyProperty.value&&this.alignProbesEmitter.emit()},drag:()=>{this.meter.isDraggingProbesWithBodyProperty.value&&this.alignProbesEmitter.emit()},end:()=>{e.sensorToolbox.globalBounds.containsPoint(this.getBackgroundNodeGlobalBounds().center)&&(this.alignProbesEmitter.emit(),this.reset()),this.droppedEmitter.emit(),this.meter.isDraggingProbesWithBodyProperty.value=!1}}),n=()=>{const i=e.visibleBoundsProperty.value.eroded(hD.DRAG_BOUNDS_EROSION),n=e.localToGlobalBounds(i);t.value=this.globalToParentBounds(n),this.meter.bodyPositionProperty.value=t.value.closestPointTo(this.meter.bodyPositionProperty.value)};e.visibleBoundsProperty.link(n),this.circuitNode.transformEmitter.addListener(n),this.backgroundDragListener=i,this.backgroundNode.addInputListener(i)}constructor(e,i,n,s,r,o){const a=(0,t.Ay)()({defaultZoomLevel:new T(-2,2),preventFit:!0},o),l=new Cr({cursor:"pointer"});super();const h=a.tandem;this.meter=new WD(h.createTandem("meter"),0),this.series=s,this.circuitNode=e,this.timeProperty=i,this.visibleBoundsProperty=n,this.backgroundNode=l,this.backgroundDragListener=null,this.addChild(this.backgroundNode),this.mutate(a),this.alignProbesEmitter=new b.A;const c=new oe([l.boundsProperty],e=>e.leftBottom);this.droppedEmitter=new b.A,this.aboveBottomLeft1Property=new oe([c],e=>e.isFinite()?e.plusXY(0,-20):Te.A.ZERO),this.aboveBottomLeft2Property=new oe([c],e=>e.isFinite()?e.plusXY(0,-10):Te.A.ZERO);const d=new Aq({viewWidth:150,viewHeight:100,modelXRange:new T(0,4.25),modelYRange:new T(-2,2)}),u=new dq(d,{fill:"white",cornerXRadius:6,cornerYRadius:6}),p=new Bc(Iq,{fontSize:14,fill:"white",centerTop:u.centerBottom.plusXY(0,5),maxWidth:120}),m=new Bc(Cq,{fontSize:11,fill:"white"}),g=[new T(-1200,1200),new T(-1e3,1e3),new T(-800,800),new T(-600,600),new T(-400,400),new T(-200,200),new T(-150,150),new T(-100,100),new T(-50,50),new T(-20,20),new T(-10,10),new T(-2,2),new T(-.4,.4)],A=g.findIndex(e=>e.equals(a.defaultZoomLevel));this.zoomLevelProperty=new R(A,{range:new T(0,g.length-1),tandem:h.createTandem("zoomLevelProperty")});const y={stroke:"lightGray",lineDash:[5,5],lineWidth:.8,lineDashOffset:2.5},f=new oq(d,Ee.HORIZONTAL,1,y),P=new oq(d,Ee.VERTICAL,1,y),V=new Sq(d,Ee.VERTICAL,1,{edge:"min",extent:1.5,createLabel:e=>new Bc(RD.toFixed(e,this.zoomLevelProperty.value===g.length-1?1:0),{fontSize:10,fill:"white"})}),v=new lB(this.zoomLevelProperty,{orientation:"vertical",left:u.right+2,top:u.top,touchAreaXDilation:6,touchAreaYDilation:6,magnifyingGlassNodeOptions:{glassRadius:10,maxWidth:15},buttonOptions:{baseColor:"white",buttonAppearanceStrategy:Ub.FlatAppearanceStrategy,cornerRadius:0,xMargin:3,yMargin:3},tandem:h.createTandem("zoomButtonGroup")});this.zoomLevelProperty.link(e=>{d.setModelYRange(g[e]),P.setSpacing(g[e].max/2),V.setSpacing(g[e].max/2)});const w=[new Te.A(0,0)],E=new fq(d,w,{fill:"#717274",stroke:"#717274",radius:4});this.updatePen=()=>{w[0].x=i.value;const e=s.length;if(e>0){const t=s[e-1];w[0].y=null===t?0:t.y}else w[0].y=0;E.update()},i.link(e=>{d.setModelXRange(new T(e-4,e+.25)),P.setLineDashOffset(e*d.modelToViewDelta(Ee.HORIZONTAL,1)),this.updatePen()});const S=new hq(d,[f,P,new aq(d,s,{stroke:"#717274",lineWidth:1.5})]),C=new Bc(Jx.dataOutOfRangeStringProperty,{fill:"red",centerX:S.centerX,centerY:S.centerY,fontSize:13,maxWidth:d.viewWidth-20}),I=()=>{let e=!0;s.forEach(t=>{t&&d.modelXRange.contains(t.x)&&d.modelYRange.contains(t.y)&&(e=!1)}),(s.length>0&&null===s[s.length-1]||0===s.length)&&(e=!1),C.setVisible(e)};I(),s.addItemAddedListener(()=>{S.update(),this.updatePen(),I()}),s.addItemRemovedListener(()=>{S.update(),this.updatePen(),I()});const x=new Cr({clipArea:u.getShape(),children:[S,C,E]}),D=new Bc(r,{rotation:-Math.PI/2,fontSize:14,fill:"white",rightCenter:V.leftCenter.plusXY(-10,0),maxWidth:120}),k=new Vq(d,Ee.HORIZONTAL,1,m,{color:"white",left:u.left,top:u.bottom+3}),M=new Cr({children:[u,x,v,D,p,V,k]});p.leftthis.setVisible(e)),this.meter.bodyPositionProperty.link(e=>l.setCenter(e))}};jx.register("CCKCChartNode",xq);const Dq=Jx.currentWithUnitsStringProperty;let kq=class extends xq{step(e,t){if(this.meter.isActiveProperty.value){const t=this.circuitNode.getCurrent(this.probeNode1),i=null===t?null:t.current;for(this.series.push(null===i?null:new Te.A(e,i||0));null===this.series[0]||this.series.length>0&&this.series[0].xnew Bc(e,{tandem:t.createTandem("labelText"),fontSize:hD.FONT_SIZE,maxWidth:120,fill:gD.textFillProperty}),c=a.createTandem("currentTypeRadioButtonGroup"),d=new Of({children:[l.createBox(h(Oq,c.createTandem("electronsRadioButton")),Fq),new jL({scale:.75})],spacing:11}),u=new Of({children:[l.createBox(h(Bq,c.createTandem("conventionalRadioButton")),Fq),new XL(A.A.OPT_OUT)],spacing:11}),p=new Zx(i,[{value:aM.ELECTRONS,createNode:()=>d,tandemName:"electronsRadioButton"},{value:aM.CONVENTIONAL,createNode:()=>u,tandemName:"conventionalRadioButton"}],{tandem:c,spacing:6}),m=new qb(p,{tandem:A.A.OPT_OUT,leftMargin:30,visibleProperty:p.visibleProperty});t.linkAttribute(p,"enabled");const g=a.createTandem("labelsCheckbox"),y=new qM(s,h(Lq,g),{tandem:g}),f=a.createTandem("valuesCheckbox"),b=new qM(n,h(qq,f),{tandem:f});let P=null;if(o){const e=a.createTandem("stopwatchCheckbox");P=new qM(r.isVisibleProperty,h(Nq,e),{tandem:e})}const V=a.createTandem("showCurrentCheckbox"),v=[new Rf({align:"left",spacing:8,children:[new qM(t,h(Rq,V),{tandem:V}),m]}),y,b,...o?[P]:[]],w=new Rf({children:v,spacing:10,align:"left"}),E=e.createBox(w,{xAlign:"left"}),S=new Cr({excludeInvisibleChildrenFromBounds:!0});w.boundsProperty.link(e=>S.setChildren(e.isValid()?[E]:[])),super(S,a,{yMargin:10,visiblePropertyOptions:{phetioFeatured:!0}}),y.touchArea=y.localBounds.dilatedXY(5,5).withMaxX(this.bounds.width-30),y.mouseArea=y.touchArea,b.touchArea=b.localBounds.dilatedXY(5,5).withMaxX(this.bounds.width-30),b.mouseArea=b.touchArea,o&&P&&(P.touchArea=P.localBounds.dilatedXY(5,5).withMaxX(this.bounds.width-30),P.mouseArea=P.touchArea),this.stopwatchCheckbox=P}};jx.register("DisplayOptionsPanel",Hq);const Yq=hD.TOOLBOX_ICON_WIDTH;let Gq=class extends Rf{constructor(e,i,n,s,r,a,l,h,c,d){let u=null;e.value.length>0&&d&&d.tandem&&(u=new Bc(e,{fontSize:12,maxWidth:Yq,fill:gD.textFillProperty,tandem:d.tandem.createTandem("labelText"),visiblePropertyOptions:{phetioReadOnly:!0}}),delete d.tandem,i.linkAttribute(u,"visible"));const p=(0,t.Ay)()({spacing:2,cursor:"pointer",children:u?[a,u]:[a],touchAreaExpansionLeft:0,touchAreaExpansionTop:0,touchAreaExpansionRight:0,touchAreaExpansionBottom:0,excludeInvisibleChildrenFromBounds:!1,additionalProperty:new o(!0),ghostOpacity:.4},d);super(p),this.addInputListener(Kc.createForwardingListener(e=>{const t=e.pointer.point,i=r(t);i.y=i.y-(e.pointer.isTouchLike()?28:0);const n=c(i);s.circuitElements.add(n),n.startDragEmitter.emit(e)},{allowTouchSnag:!0}));let m=null,g=null;ye.multilink([s.circuitElements.lengthProperty,p.additionalProperty],(e,t)=>{const i=h();if(m!==i||g!==t){const e=i{this.touchArea=this.localBounds.withOffsets(p.touchAreaExpansionLeft,p.touchAreaExpansionTop,p.touchAreaExpansionRight,p.touchAreaExpansionBottom),this.mouseArea=this.touchArea};n.link(A),this.localBoundsProperty.link(A)}};jx.register("CircuitElementToolNode",Gq);const Uq=Jx.voltageWithUnitsStringProperty,zq=hD.CHART_SERIES_COLOR;let Wq=class extends xq{sampleValue(e){const t=this.circuitNode.globalToLocalPoint(this.localToGlobalPoint(this.probeNode1.translation)),i=this.circuitNode.globalToLocalPoint(this.localToGlobalPoint(this.probeNode2.translation)),n=this.circuitNode.getVoltageConnection(t),s=this.circuitNode.getVoltageConnection(i),r=this.circuitNode.circuit.getVoltageBetweenConnections(n,s,!1);return null===r?null:new Te.A(e,r)}step(e,t){if(this.meter.isActiveProperty.value)for(this.series.push(this.sampleValue(e)),tD.showVoltmeterSamplePoints&&this.circuitNode.addChild(new fa(-1,-1,2,2,{fill:Wr.BLACK,translation:this.circuitNode.globalToLocalPoint(this.localToGlobalPoint(this.probeNode1.translation))}));null===this.series[0]||this.series.length>0&&this.series[0].xnull===e?ZE.NO_VALUE:ak.createVoltageReadout(e)),d=new ah([_q],e=>a.showPhetioIndex?e+" "+i.phetioIndex:e),u=new eB(c,a.showResultsProperty,d,a.tandem,{centerX:jq[0].width/2,centerY:jq[0].height/2}),p=new _h(jq,{scale:.5,cursor:"pointer",children:[u]}),m=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return new ch(new Te.A(e,t))},g=m(),y=m(),f=new ZM(g,m(-30,15),y,m(-30,60),{stroke:Wr.BLACK,lineWidth:3,pickable:!1}),b=m(),P=m(),V=new ZM(b,m(30,15),P,m(30,60),{stroke:Wr.RED,lineWidth:3,pickable:!1});ye.multilink([i.bodyPositionProperty,i.isActiveProperty],(e,t)=>{if(p.center=e,g.value=p.centerBottom.plusXY(-8,-18),b.value=p.centerBottom.plusXY(8,-18),i.isDraggingProbesWithBodyProperty.get()){const t=-30-p.height/2,n=78,s=e=>a.visibleBoundsProperty?a.visibleBoundsProperty.value.eroded(hD.DRAG_BOUNDS_EROSION).closestPointTo(e):e;i.redProbePositionProperty.set(s(e.plusXY(+n,t))),i.blackProbePositionProperty.set(s(e.plusXY(-n,t)))}});const v=(e,t,i)=>n=>{e.translation=n,t.value=e.centerBottom.plusXY(32*i,-4)};if(i.redProbePositionProperty.link(v(h,P,1)),i.blackProbePositionProperty.link(v(l,y,-1)),super(a),super.addChild(p),super.addChild(f),super.addChild(l),super.addChild(V),super.addChild(h),this.circuitNode=s,this.voltmeter=i,this.redProbeNode=h,this.blackProbeNode=l,a.isIcon)this.dragHandler=null;else{i.isActiveProperty.linkAttribute(this,"visible");const t=(e,t)=>new Kc({positionProperty:e,start:()=>this.moveToFront(),tandem:t.createTandem("probeDragListener"),dragBoundsProperty:new oe([a.visibleBoundsProperty],e=>e.eroded(hD.DRAG_BOUNDS_EROSION))}),r=t(i.redProbePositionProperty,a.tandem.createTandem("redProbeDragListener")),o=t(i.blackProbePositionProperty,a.tandem.createTandem("blackProbeDragListener"));this.redProbeNode.addInputListener(r),this.blackProbeNode.addInputListener(o);const c=new oe([a.visibleBoundsProperty],e=>e.eroded(hD.DRAG_BOUNDS_EROSION));this.dragHandler=new Kc({positionProperty:i.bodyPositionProperty,tandem:a.tandem.createTandem("dragListener"),useParentOffset:!0,dragBoundsProperty:c,start:e=>{this.moveToFront()},end:()=>{i.droppedEmitter.emit(p.globalBounds),i.isDraggingProbesWithBodyProperty.set(!1)},targetNode:this}),c.link(e=>{i.redProbePositionProperty.set(e.closestPointTo(i.redProbePositionProperty.value)),i.blackProbePositionProperty.set(e.closestPointTo(i.blackProbePositionProperty.value)),i.bodyPositionProperty.set(e.closestPointTo(i.bodyPositionProperty.value))}),p.addInputListener(this.dragHandler);const d=(t,i,n)=>{const r=Te.A.createPolar(20,n*e.PROBE_ANGLE+Math.PI/2),o=i.plus(r);for(let e=0;e<10;e++){const t=i.blend(o,e/10),n=s.getVoltageConnection(t);if(tD.showVoltmeterSamplePoints&&this.circuitNode.addChild(new fa(-1,-1,2,2,{fill:Wr.BLACK,translation:t})),n)return n}return null},u=()=>{if(i.isActiveProperty.get()){const e=d(l,i.blackProbePositionProperty.get(),1),t=d(h,i.redProbePositionProperty.get(),-1),n=this.circuitNode.circuit.getVoltageBetweenConnections(t,e,!1);i.blackProbeConnectionProperty.set(e),i.redProbeConnectionProperty.set(t),i.voltageProperty.value=n}};n.circuit.circuitChangedEmitter.addListener(u),i.redProbePositionProperty.link(u),i.blackProbePositionProperty.link(u)}a.isIcon&&(this.touchArea=this.bounds.copy(),this.mouseArea=this.bounds.copy(),this.cursor="pointer"),this.addLinkedElement(i,{tandemName:"voltmeter"})}};Xq.PROBE_ANGLE=Zq,jx.register("VoltmeterNode",Xq);const Jq=Jx.ammetersStringProperty,$q=Jx.ammeterStringProperty,eF=Jx.currentChartStringProperty,tF=Jx.voltageChartStringProperty,iF=Jx.voltmeterStringProperty;let nF=class extends Mq{constructor(e,i,n,s,a,l,h,c){const d=i.circuit,u=(0,t.Ay)()({showResultsProperty:i.model.isValueDepictionEnabledProperty,showSeriesAmmeters:!0,showNoncontactAmmeters:!0,showCharts:!1},c),p=e=>Kc.createForwardingListener(t=>{const n=_.find(e,e=>!e.visible);if(n){const e=n instanceof Xq?n.voltmeter:n instanceof iB?n.ammeter:n.meter,s=i.globalToLocalPoint(t.pointer.point);e.isDraggingProbesWithBodyProperty.value=!0,e.isActiveProperty.value=!0,e.bodyPositionProperty.value=s,n.startDrag(t)}},{allowTouchSnag:!0}),m=new mM(A.A.OPT_OUT,0),g=new Xq(m,null,null,{tandem:A.A.OPT_OUT,isIcon:!0}),y=oe.and(n.map(e=>e.voltmeter.isActiveProperty));y.link(e=>g.setVisible(!e)),g.mutate({scale:53*1.4/Math.max(g.width,g.height)}),g.addInputListener(p(n));const f=new QD(A.A.OPT_OUT,0),b=new iB(f,null,{isIcon:!0,tandem:u.showNoncontactAmmeters?h.createTandem("noncontactAmmeterToolNode"):A.A.OPT_OUT,phetioVisiblePropertyInstrumented:!0,visiblePropertyOptions:{phetioFeatured:!0}}),P=oe.and(s.map(e=>e.ammeter.isActiveProperty));P.link(e=>{b.setOpacity(e?0:1),b.setInputEnabled(!e)}),b.mutate({scale:53/Math.max(b.width,b.height)}),b.addInputListener(p(s));const V=new Pk(new YD(Te.A.ZERO,d.selectionProperty),new YD(new Te.A(hD.SERIES_AMMETER_LENGTH,0),d.selectionProperty),A.A.OPT_OUT),v=new dN(null,null,V,A.A.OPT_OUT,u.showResultsProperty,{isIcon:!0});v.mutate({scale:53/v.width});const w=new Gq(new r.A(""),new o(!1),new rh(pk.SCHEMATIC),d,e=>i.globalToLocalPoint(e),v,6,()=>d.circuitElements.count(e=>e instanceof Pk),e=>{const t=hD.SERIES_AMMETER_LENGTH/2,i=d.vertexGroup.createNextElement(e.plusXY(-t,0)),n=d.vertexGroup.createNextElement(e.plusXY(t,0));return d.seriesAmmeterGroup.createNextElement(i,n)},{touchAreaExpansionLeft:3,touchAreaExpansionTop:15,touchAreaExpansionRight:3,touchAreaExpansionBottom:0,tandem:d.includeLabElements?h.createTandem("seriesAmmeterToolNode"):A.A.OPT_OUT,ghostOpacity:0,visiblePropertyOptions:{phetioFeatured:!0}}),E=new oe([d.circuitElements.lengthProperty],()=>6===d.circuitElements.count(e=>e instanceof Pk)),S=new Bc(iF,{maxWidth:60,fill:gD.textFillProperty,tandem:h.createTandem("voltmeterText"),visiblePropertyOptions:{phetioReadOnly:!0}}),T=new Bc(u.showSeriesAmmeters&&u.showNoncontactAmmeters?Jq:$q,{maxWidth:60,fill:gD.textFillProperty,tandem:h.createTandem("ammeterText"),visiblePropertyOptions:{phetioReadOnly:!0}});ye.multilink([i.model.showLabelsProperty,P,E,b.visibleProperty,v.visibleProperty,w.visibleProperty],(e,t,i,n,s,r)=>{T.visible=e&&(r&&u.showSeriesAmmeters||n&&u.showNoncontactAmmeters)});const C=new Rf({tandem:h.createTandem("voltmeterToolNode"),spacing:3,children:[g,S],excludeInvisibleChildrenFromBounds:!1,visiblePropertyOptions:{phetioFeatured:!0}});ye.multilink([i.model.showLabelsProperty,y,C.visibleProperty],(e,t,i)=>{S.visible=e&&i});const I=new Of({topMargin:10,children:[w]}),x=[];u.showNoncontactAmmeters&&x.push(b),u.showSeriesAmmeters&&x.push(I);const D=new Rf({tandem:A.A.OPT_OUT,spacing:3,children:[new Of({spacing:8,align:"bottom",children:x,excludeInvisibleChildrenFromBounds:!0}),T],excludeInvisibleChildrenFromBounds:!1}),k=[e.createBox(new Of({spacing:u.showNoncontactAmmeters&&u.showSeriesAmmeters?20:40,align:"bottom",children:[C,D]}))];if(u.showCharts){const e=new r.A(Ie.EVERYTHING),t=(e,t,n,s)=>{const r=fa.bounds(t.bounds,{fill:"blue",opacity:0}),o=new Cr({children:[t,r],cursor:"pointer"}),a=new Rf({spacing:3,children:[o,n],tandem:s}),l=oe.and(e.map(e=>e.meter.isActiveProperty));return l.link(e=>{t.setVisible(!e),a.inputEnabledProperty.value=!e}),r.addInputListener(p(e)),ye.multilink([i.model.showLabelsProperty,l],(e,t)=>{n.visible=e&&!t}),a},n=new Wq(i,new R(0),e),s=C.width/n.width;n.scale(s);const o=t(a,n,new Bc(tF,{maxWidth:60,fill:gD.textFillProperty,visiblePropertyOptions:{phetioReadOnly:!0}}),h.createTandem("voltageChartToolIcon")),c=t(l,new kq(i,new R(0),e,{scale:s,tandem:A.A.OPT_OUT}),new Bc(eF,{maxWidth:60,fill:gD.textFillProperty,visiblePropertyOptions:{phetioReadOnly:!0}}),h.createTandem("currentChartToolIcon"));o.centerX=C.centerX,c.centerX=D.centerX;const d=new Cr({children:[o,c]});k.push(new Bf),k.push(d)}super(new Rf({spacing:5,children:k}),h,{yMargin:8,visiblePropertyOptions:{phetioFeatured:!0}})}};jx.register("SensorToolbox",nF);let sF=class extends Ve.A{};sF.SELECTED=new sF,sF.DESELECTED=new sF,sF.OVER=new sF,sF.PRESSED=new sF,sF.enumeration=new Pe.A(sF),fb.register("RadioButtonInteractionState",sF);let rF=class extends Ae{constructor(e,t,i){super([e.focusedProperty,e.overProperty,e.looksOverProperty,e.looksPressedProperty,t],(e,t,n,s,r)=>{const o=r===i;return!n||s||o?(t||e)&&s?sF.PRESSED:o?sF.SELECTED:sF.DESELECTED:sF.OVER},{valueType:sF})}};fb.register("RadioButtonInteractionStateProperty",rF);let oF=class e extends zb{dispose(){this.disposeRectangularRadioButton(),super.dispose()}fire(){this.buttonModel.enabledProperty.get()&&(this.firedEmitter.emit(),this.buttonModel.produceSoundEmitter.emit())}constructor(i,n,s){const r=(0,t.Ay)()({soundPlayer:null,baseColor:Hb.LIGHT_BLUE,buttonAppearanceStrategy:e.FlatAppearanceStrategy,buttonAppearanceStrategyOptions:{overButtonOpacity:.8,overStroke:null,selectedStroke:Wr.BLACK,selectedLineWidth:1.5,selectedButtonOpacity:1,deselectedStroke:new Wr(50,50,50),deselectedLineWidth:1,deselectedButtonOpacity:.6},contentAppearanceStrategy:e.ContentAppearanceStrategy,contentAppearanceStrategyOptions:{overContentOpacity:.8,selectedContentOpacity:1,deselectedContentOpacity:.6},listenerOptions:{tandem:A.A.OPT_OUT},tagName:"input",inputType:"radio",labelTagName:"label",containerTagName:"li",appendDescription:!0,appendLabel:!0,tandem:A.A.REQUIRED,tandemNameSuffix:"RadioButton"},s),o=new Cb({enabledPropertyOptions:r.enabledPropertyOptions,tandem:r.tandem,phetioEnabledPropertyInstrumented:!1}),a=new rF(o,i,n);super(o,a,r),this.interactionStateProperty=a,i.value===n&&this.setPDOMAttribute("checked","checked");const l=e=>{this.pdomChecked=e===n};i.link(l),this.property=i,this.value=n,this.firedEmitter=new b.A({tandem:r.tandem.createTandem("firedEmitter"),phetioDocumentation:"Emits when the radio button is pressed",phetioReadOnly:!0,phetioEventType:ze.A.USER}),this.firedEmitter.addListener(()=>i.set(n)),o.downProperty.link(e=>{e||!o.overProperty.get()&&!o.focusedProperty.get()||o.interrupted||(this.fire(),this.voicingSpeakFullResponse({hintResponse:null}))});const h=r.soundPlayer||Gm.get("pushButton"),c=()=>{h.play()};o.produceSoundEmitter.addListener(c),this.disposeRectangularRadioButton=()=>{i.unlink(l),this.firedEmitter.dispose(),o.produceSoundEmitter.removeListener(c),o.dispose(),this.interactionStateProperty.dispose()}}};oF.FlatAppearanceStrategy=class{dispose(){this.disposeFlatAppearanceStrategy()}constructor(e,i,n,s){const r=(0,t.Ay)()({stroke:n,lineWidth:1,deselectedButtonOpacity:1,deselectedLineWidth:1,deselectedStroke:"gray",deselectedFill:null,overButtonOpacity:.8,overFill:null,overLineWidth:0,overStroke:null,selectedButtonOpacity:1,selectedLineWidth:1,selectedStroke:"black"},s),o=new xb(n,{luminanceFactor:-.4}),a=new xb(r.overFill||n,{luminanceFactor:s&&s.overFill?0:.4}),l=new xb(r.overStroke||r.deselectedStroke,{luminanceFactor:s&&s.overStroke?0:-.4});function h(t){switch(t){case sF.SELECTED:e.fill=n,e.stroke=r.selectedStroke,e.lineWidth=r.selectedLineWidth,e.opacity=r.selectedButtonOpacity;break;case sF.DESELECTED:e.fill=r.deselectedFill||n,e.stroke=r.deselectedStroke,e.lineWidth=r.deselectedLineWidth,e.opacity=r.deselectedButtonOpacity;break;case sF.OVER:e.fill=a,e.stroke=l,e.lineWidth=Math.max(r.overLineWidth,r.deselectedLineWidth),e.opacity=r.overButtonOpacity;break;case sF.PRESSED:e.fill=o,e.stroke=r.deselectedStroke,e.lineWidth=r.deselectedLineWidth,e.opacity=r.selectedButtonOpacity;break;default:throw new Error("unsupported interactionState: "+t)}}this.maxLineWidth=Math.max(r.selectedLineWidth,r.deselectedLineWidth,r.overLineWidth),e.cachedPaints=[n,a,o,l,r.selectedStroke,r.deselectedStroke],i.link(h),this.disposeFlatAppearanceStrategy=()=>{i.hasListener(h)&&i.unlink(h),l.dispose(),a.dispose(),o.dispose()}}},oF.ContentAppearanceStrategy=class{dispose(){this.disposeContentAppearanceStrategy()}constructor(e,i,n){const s=(0,t.Ay)()({deselectedContentOpacity:1,overContentOpacity:1,selectedContentOpacity:1},n);function r(t){if(null!==e)switch(t){case sF.DESELECTED:e.opacity=s.deselectedContentOpacity;break;case sF.OVER:e.opacity=s.overContentOpacity;break;case sF.SELECTED:e.opacity=s.selectedContentOpacity;break;case sF.PRESSED:e.opacity=s.deselectedContentOpacity;break;default:throw new Error("unsupported state: "+t)}}i.link(r),this.disposeContentAppearanceStrategy=()=>{i.hasListener(r)&&i.unlink(r)}}},fb.register("RectangularRadioButton",oF);let aF=0;let lF=class extends Vf{getButtonForValue(e){const t=this.radioButtonMap.get(e);return t}dispose(){this.radioButtonMap.clear(),this.disposeRadioButtonGroup(),super.dispose()}constructor(e,i,n){const s=(0,t.Ay)()({soundPlayers:null,labelAlign:"bottom",labelSpacing:0,touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,radioButtonOptions:{baseColor:Hb.LIGHT_BLUE,cornerRadius:4,xMargin:5,yMargin:5,xAlign:"center",yAlign:"center",buttonAppearanceStrategyOptions:{selectedStroke:"black",selectedLineWidth:1.5,selectedButtonOpacity:1,deselectedStroke:new Wr(50,50,50),deselectedLineWidth:1,deselectedButtonOpacity:.6,overButtonOpacity:.8},contentAppearanceStrategy:oF.ContentAppearanceStrategy,contentAppearanceStrategyOptions:{overContentOpacity:.8,selectedContentOpacity:1,deselectedContentOpacity:.6}},spacing:10,stretch:!0,orientation:"vertical",disabledOpacity:ff.DISABLED_OPACITY,tandem:A.A.REQUIRED,tandemNameSuffix:"ButtonGroup",visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,phetioFeatured:!0,tagName:"ul",labelTagName:"h3",ariaRole:"radiogroup",accessibleHelpTextBehavior:_s.HELP_TEXT_BEFORE_CONTENT,groupFocusHighlight:!0},n);aF++;const r=new Map,o=Vb(i,s.tandem),a=_.maxBy(o,e=>e.width).width,l=_.maxBy(o,e=>e.height).height,h=[],c=[],d=[],u=s.radioButtonOptions.xMargin,p=s.radioButtonOptions.yMargin;for(let g=0;ge.pointer.reserveForKeyboardDrag()};this.addInputListener(m),this.addLinkedElement(e,{tandemName:"property"}),this.disposeRadioButtonGroup=()=>{this.removeInputListener(m),c.forEach(e=>{e.focusHighlight.dispose(),e.radioButton.dispose(),e.radioButton!==e.layoutNode&&e.layoutNode.dispose()}),d.forEach(e=>e.dispose&&e.dispose()),o.forEach(e=>e.dispose())}}};fb.register("RectangularRadioButtonGroup",lF);const hF=hD.BATTERY_LENGTH;let cF=class extends lF{constructor(e,i,n){const s=(0,t.Ay)()({spacing:20,orientation:"horizontal",touchAreaXDilation:9,touchAreaYDilation:10,radioButtonOptions:{baseColor:gD.panelFillProperty,cornerRadius:hD.CORNER_RADIUS,xMargin:8,yMargin:11,buttonAppearanceStrategyOptions:{deselectedButtonOpacity:.4,overButtonOpacity:.7,selectedStroke:gD.panelStrokeProperty,deselectedStroke:gD.panelStrokeProperty},phetioVisiblePropertyInstrumented:!1},tandem:i},n),o=new YD(new Te.A(hF/2,0),new r.A(null)),a=new YD(new Te.A(-hF/2,0),new r.A(null)),l=new iM(a,o,new R(0),"normal",A.A.OPT_OUT,{initialOrientation:"left",numberOfDecimalPlaces:iM.VOLTAGE_DECIMAL_PLACES}),h=(e,t)=>new RO(null,null,l,new r.A(e),t,{isIcon:!0,scale:.4});super(e,[{value:pk.LIFELIKE,createNode:e=>h(pk.LIFELIKE,A.A.OPT_OUT),tandemName:"lifelikeRadioButton"},{value:pk.SCHEMATIC,createNode:e=>h(pk.SCHEMATIC,A.A.OPT_OUT),tandemName:"schematicRadioButton"}],s)}};jx.register("ViewRadioButtonGroup",cF);const dF=Jx.batteryResistanceStringProperty,uF=Jx.sourceResistanceStringProperty,pF=hD.VERTICAL_MARGIN,mF=hD.HORIZONTAL_MARGIN,gF=new gV({matchVertical:!1});let AF=class e extends Av{stepOnce(e){e>=hD.MAX_DT||this.chartNodes.forEach(t=>t.step(this.model.circuit.timeProperty.value,e))}step(e){this.circuitNode.step(),this.model.isPlayingProperty.value||this.chartNodes.forEach(e=>e.sampleLatestValue())}reset(){this.stopwatchNodePositionDirty=!0,this.circuitElementToolbox.reset(),this.advancedAccordionBox&&this.advancedAccordionBox.expandedProperty.reset(),this.chartNodes.forEach(e=>e.reset())}canNodeDropInToolbox(e){const t=e.circuitElement,i=this.model.circuit.isSingle(t),n=e instanceof fO?e.contentNode:e,s=this.globalToLocalBounds(n.globalBounds),r=ak.getDropItemHitBoxForBounds(s),o=t instanceof Pk?this.sensorToolbox:this.circuitElementToolbox.carousel,a=o.localToGlobalBounds(o.localBounds),l=this.globalToLocalBounds(a).intersectsBounds(r),h=!!o.getTrails().find(e=>e.isVisible());return i&&l&&h&&t.isDisposableProperty.value}constructor(i,n,s,r){const o=(0,t.Ay)()({showResetAllButton:!0,showSeriesAmmeters:!1,showTimeControls:!1,showAdvancedControls:!0,showCharts:!1,blackBoxStudy:!1,showStopwatchCheckbox:!1,showPhaseShiftControl:!1,hasACandDCVoltageSources:!1,showMeterPhetioIndex:!1},r);super({tandem:s}),this.model=i,this.circuitNodeBackLayer=new Cr,this.circuitNode=new tq(i.circuit,this,s.createTandem("circuitNode"));const a=s.createTandem("meterNodes"),l=i.voltmeters.map(e=>{const t=new Xq(e,i,this.circuitNode,{tandem:a.createTandem("voltmeterNode"+e.phetioIndex),phetioFeatured:!0,showResultsProperty:i.isValueDepictionEnabledProperty,visibleBoundsProperty:this.circuitNode.visibleBoundsInCircuitCoordinateFrameProperty,showPhetioIndex:o.showMeterPhetioIndex});return e.droppedEmitter.addListener(t=>{const i=ak.getDropItemHitBoxForBounds(t);!!this.sensorToolbox.getTrails().find(e=>e.isVisible())&&i.intersectsBounds(this.sensorToolbox.globalBounds)&&(e.isActiveProperty.value=!1)}),t}),h=i.ammeters.map(e=>{const t=new iB(e,this.circuitNode,{tandem:i.isShowNoncontactAmmeters?a.createTandem("ammeterNode"+e.phetioIndex):A.A.OPT_OUT,phetioFeatured:!0,showResultsProperty:i.isValueDepictionEnabledProperty,visibleBoundsProperty:this.circuitNode.visibleBoundsInCircuitCoordinateFrameProperty,blackBoxStudy:o.blackBoxStudy,showPhetioIndex:o.showMeterPhetioIndex});return e.droppedEmitter.addListener(t=>{const i=ak.getDropItemHitBoxForBounds(t);!!this.sensorToolbox.getTrails().find(e=>e.isVisible())&&i.intersectsBounds(this.sensorToolbox.globalBounds)&&(e.isActiveProperty.value=!1)}),t});if(this.chartNodes=[],o.showCharts){const e=e=>{const t=new Wq(this.circuitNode,i.circuit.timeProperty,this.circuitNode.visibleBoundsInCircuitCoordinateFrameProperty,{tandem:a.createTandem(e)});return t.initializeBodyDragListener(this),t},t=e=>{const t=new kq(this.circuitNode,i.circuit.timeProperty,this.circuitNode.visibleBoundsInCircuitCoordinateFrameProperty,{tandem:a.createTandem(e)});return t.initializeBodyDragListener(this),t};this.voltageChartNode1=e("voltageChartNode1"),this.voltageChartNode2=e("voltageChartNode2"),this.currentChartNode1=t("currentChartNode1"),this.currentChartNode2=t("currentChartNode2"),this.chartNodes.push(this.voltageChartNode1,this.voltageChartNode2,this.currentChartNode1,this.currentChartNode2)}else this.voltageChartNode1=null,this.voltageChartNode2=null,this.currentChartNode1=null,this.currentChartNode2=null;this.circuitElementToolbox=new nO(i.viewTypeProperty,n,s.createTandem("circuitElementToolbox"),o.circuitElementToolboxOptions),this.sensorToolbox=new nF(gF,this.circuitNode,l,h,[this.voltageChartNode1,this.voltageChartNode2],[this.currentChartNode1,this.currentChartNode2],s.createTandem("sensorToolbox"),{showSeriesAmmeters:o.showSeriesAmmeters,showNoncontactAmmeters:i.isShowNoncontactAmmeters,showCharts:o.showCharts,visiblePropertyOptions:{phetioFeatured:!0}}),this.viewRadioButtonGroup=new cF(i.viewTypeProperty,s.createTandem("viewRadioButtonGroup")),this.viewRadioButtonGroup.mutate({scale:this.circuitElementToolbox.carousel.backgroundWidth/this.viewRadioButtonGroup.width*o.circuitElementToolboxOptions.carouselScale}),this.displayOptionsPanel=new Hq(gF,i.circuit.showCurrentProperty,i.circuit.currentTypeProperty,i.showValuesProperty,i.showLabelsProperty,i.stopwatch,o.showStopwatchCheckbox,s.createTandem("displayOptionsPanel")),this.advancedAccordionBox=o.showAdvancedControls?new QM(i.circuit,gF,o.hasACandDCVoltageSources?uF:dF,s.createTandem("advancedAccordionBox"),{showRealBulbsCheckbox:!o.hasACandDCVoltageSources}):null,this.addChild(this.circuitNodeBackLayer);let c=null;o.showResetAllButton&&(c=new eV({tandem:s.createTandem("resetAllButton"),listener:()=>{i.reset(),this.reset()}}),this.addChild(c));const d=new Rf({align:"right",spacing:5,children:[this.circuitElementToolbox,this.viewRadioButtonGroup]});this.addChild(d);const u=new Rf({spacing:pF,children:o.showAdvancedControls?[this.displayOptionsPanel,this.sensorToolbox,this.advancedAccordionBox]:[this.displayOptionsPanel,this.sensorToolbox]}),p=new qb(u,{xAlign:"right",yAlign:"top",xMargin:mF,yMargin:pF});this.visibleBoundsProperty.linkAttribute(p,"alignBounds"),this.addChild(p),this.addChild(this.circuitNode);const m=new dB(i.circuit.chargeAnimator.timeScaleProperty,i.circuit.showCurrentProperty,i.isValueDepictionEnabledProperty);this.addChild(m);const g=new R(0),y=new UB(i.circuit,this.visibleBoundsProperty,i.modeProperty,g,s.createTandem("circuitElementEditContainerNode"),{showPhaseShiftControl:o.showPhaseShiftControl});this.addChild(y),l.forEach(e=>this.circuitNode.sensorLayer.addChild(e)),h.forEach(e=>this.circuitNode.sensorLayer.addChild(e)),this.chartNodes.forEach(e=>this.circuitNode.sensorLayer.addChild(e));const f=new hB(i.zoomLevelProperty,{tandem:s.createTandem("zoomButtonGroup"),visiblePropertyOptions:{phetioFeatured:!0}});if(f.mutate({scale:this.circuitElementToolbox.carousel.backgroundWidth/f.width*o.circuitElementToolboxOptions.carouselScale}),tD.showDepictValuesToggleButton){const e=new wM(i.isValueDepictionEnabledProperty,{tandem:s.createTandem("playPauseButton"),baseColor:"#33ff44"});this.addChild(e),this.visibleBoundsProperty.link(t=>{e.mutate({left:t.left+pF,bottom:t.bottom-pF-f.height-pF})})}let b=null;if(o.showTimeControls&&(b=new RM(i.isPlayingProperty,{tandem:s.createTandem("timeControlNode"),playPauseStepButtonOptions:{stepForwardButtonOptions:{listener:()=>i.stepSingleStep()}}}),this.addChild(b)),this.addChild(f),ye.multilink([this.visibleBoundsProperty,d.localBoundsProperty],e=>{d.left=e.left+mF,d.top=e.top+pF,o.showResetAllButton&&c&&c.mutate({right:e.right-mF,bottom:e.bottom-pF}),b&&(b.bottom=e.bottom-pF,u.bounds.isFinite()?b.left=u.left:c&&c.bounds.isFinite()&&(b.right=c.left)),Number.isFinite(d.right)?f.right=d.right:f.left=e.left+mF,f.bottom=e.bottom-pF;const t=this.circuitElementToolbox.bounds.isEmpty()?e.left:this.circuitElementToolbox.right,i=u.bounds.isEmpty()?e.right:u.left;g.value=(t+i)/2,m.mutate({centerX:g.value,bottom:e.bottom-100})}),this.circuitNode.setTranslation(this.layoutBounds.centerX,this.layoutBounds.centerY),this.circuitNodeBackLayer.setTranslation(this.layoutBounds.centerX,this.layoutBounds.centerY),ye.multilink([i.animatedZoomScaleProperty,this.visibleBoundsProperty],(e,t)=>{this.circuitNode.setScaleMagnitude(e),this.circuitNodeBackLayer.setScaleMagnitude(e),this.circuitNode.updateTransform(t)}),this.model.circuit.vertexDroppedEmitter.addListener(e=>{const t=this.model.circuit.getNeighborCircuitElements(e);if(1===t.length){const e=t[0],i=this.circuitNode.getCircuitElementNode(e);this.canNodeDropInToolbox(i)&&this.model.circuit.disposeCircuitElement(e)}}),jD.addListener(()=>{this.step(1/60)}),this.stopwatchNodePositionDirty=!0,o.showStopwatchCheckbox){const e=new TM(i.stopwatch,{dragBoundsProperty:this.visibleBoundsProperty,right:u.left-mF,numberDisplayOptions:{numberFormatter:TM.createRichTextNumberFormatter({numberOfDecimalPlaces:1})},tandem:s.createTandem("stopwatchNode")});this.addChild(e),i.stopwatch.isVisibleProperty.link(t=>{t&&this.stopwatchNodePositionDirty&&(i.stopwatch.positionProperty.value=new Te.A(u.left-e.width-10,this.globalToLocalBounds(this.displayOptionsPanel.stopwatchCheckbox.globalBounds).centerY-.2*e.height),this.stopwatchNodePositionDirty=!1)})}i.stepEmitter.addListener(e=>this.stepOnce(e)),Jc.createGlobal(this,{keyStringProperties:e.DELETE_HOTKEY_DATA.keyStringProperties,fire:e=>{null==e||e.preventDefault();const t=this.circuitNode.circuit.selectionProperty.value;if(this.circuitNode.vertexCutButton.inputEnabled&&t instanceof YD)t.isCuttableProperty.value&&this.circuitNode.circuit.cutVertex(this.circuitNode.circuit.getSelectedVertex());else if(t instanceof zD){const e=t;e.startVertexProperty.value.isDragged||e.endVertexProperty.value.isDragged||e.isDisposableProperty.value&&this.circuitNode.circuit.disposeCircuitElement(e)}}})}};AF.DELETE_HOTKEY_DATA=new Sa({keyStringProperties:[new r.A("delete"),new r.A("backspace")],repoName:jx.name,binderName:"Delete circuit element",global:!0}),jx.register("CCKCScreenView",AF);const yF=Jx.acSourceStringProperty,fF=Jx.capacitorStringProperty,bF=Jx.inductorStringProperty,PF=Jx.batteryStringProperty,VF=Jx.coinStringProperty,vF=Jx.dogStringProperty,wF=Jx.dollarBillStringProperty,EF=Jx.eraserStringProperty,SF=Jx.fuseStringProperty,TF=Jx.handStringProperty,CF=Jx.lightBulbStringProperty,IF=Jx.paperClipStringProperty,xF=Jx.pencilStringProperty,DF=Jx.resistorStringProperty,kF=Jx.switchStringProperty,MF=Jx.wireStringProperty,BF=hD.BATTERY_LENGTH,OF=hD.AC_VOLTAGE_LENGTH,LF=hD.FUSE_LENGTH,RF=hD.WIRE_LENGTH,NF=hD.SWITCH_LENGTH,qF=new gV,FF=new rh(pk.LIFELIKE),HF=new rh(pk.SCHEMATIC);let YF=class{createCircuitElementToolNode(e,i,n,s,r,a){const l=(0,t.Ay)()({additionalProperty:new o(!0),lifelikeIconHeight:hD.TOOLBOX_ICON_HEIGHT,schematicIconHeight:hD.TOOLBOX_ICON_HEIGHT},a),h=(e,t)=>{const i=new Cr({children:[e]});return i.mutate({scale:t/i.height}),i},c=new sP(this.viewTypeProperty,[{value:pk.LIFELIKE,createNode:()=>h(n(A.A.OPT_OUT,FF),l.lifelikeIconHeight)},{value:pk.SCHEMATIC,createNode:()=>h(n(A.A.OPT_OUT,HF),l.schematicIconHeight)}]);return new Gq(e,this.showLabelsProperty,this.viewTypeProperty,this.circuit,this.globalToCircuitNodePoint,qF.createBox(c,{yAlign:"bottom"}),i,this.createCounter(s),r,{tandem:l.tandem,additionalProperty:l.additionalProperty})}createCounter(e){return()=>this.circuit.circuitElements.filter(t=>e(t)&&!t.insideTrueBlackBoxProperty.get()).length}createWireToolNode(e){return this.createCircuitElementToolNode(MF,hD.NUMBER_OF_WIRES,(e,t)=>t.value===pk.LIFELIKE?new _h(fL,{tandem:e}):new sc(0,0,120,0,{stroke:Wr.BLACK,lineWidth:4.5,tandem:e}),e=>e instanceof Sk,e=>this.circuit.wireGroup.createNextElement(...this.circuit.createVertexPairArray(e,RF)),{tandem:e,lifelikeIconHeight:9,schematicIconHeight:2})}createRightBatteryToolNode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;const i=new iM(new YD(Te.A.ZERO,this.circuit.selectionProperty),new YD(new Te.A(hD.BATTERY_LENGTH,0),this.circuit.selectionProperty),new R(0),"normal",A.A.OPT_OUT);return this.createCircuitElementToolNode(PF,t,(e,t)=>new RO(null,null,i,t,e.createTandem("batteryIcon"),{isIcon:!0}),e=>e instanceof iM&&"right"===e.initialOrientation&&"normal"===e.batteryType,e=>this.circuit.batteryGroup.createNextElement(...this.circuit.createVertexPairArray(e,BF)),{tandem:e,lifelikeIconHeight:15})}createACVoltageToolNode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;const i=new nk(new YD(Te.A.ZERO,this.circuit.selectionProperty),new YD(new Te.A(OF,0),this.circuit.selectionProperty),new R(0),A.A.OPT_OUT);return this.createCircuitElementToolNode(yF,t,(e,t)=>new SO(null,null,i,t,e.createTandem("acSourceIcon"),{isIcon:!0,scale:.68}),e=>e instanceof nk,e=>this.circuit.acVoltageGroup.createNextElement(...this.circuit.createVertexPairArray(e,OF)),{tandem:e,lifelikeIconHeight:27,schematicIconHeight:27})}createLightBulbToolNode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.circuit.lightBulbGroup,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:CF,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;const r=Ak.createVertexPair(Te.A.ZERO,this.circuit,!0),a=Ak.createAtPosition(r.startVertex,r.endVertex,this.circuit,hD.DEFAULT_RESISTANCE,this.viewTypeProperty,A.A.OPT_OUT,{isExtreme:!1,isReal:n});return this.createCircuitElementToolNode(i,10,(e,t)=>new KL(null,null,a,new o(!0),t,A.A.OPT_OUT,{isIcon:!0,scale:.85}),e=>e instanceof Ak&&!e.isExtreme,e=>{const i=Ak.createVertexPair(e,this.circuit);return t.createNextElement(i.startVertex,i.endVertex)},{tandem:e,additionalProperty:s||new o(!0),schematicIconHeight:27})}createResistorToolNode(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.circuit.resistorGroup,n=arguments.length>2?arguments[2]:void 0;const s=(0,t.Ay)()({count:10,resistorType:fk.RESISTOR,lifelikeIconHeight:15,schematicIconHeight:14,labelStringProperty:DF,tandemName:"resistorToolNode"},n),r=s.labelStringProperty,o=s.resistorType,a=new bk(new YD(Te.A.ZERO,this.circuit.selectionProperty),new YD(new Te.A(o.length,0),this.circuit.selectionProperty),o,A.A.OPT_OUT);return this.createCircuitElementToolNode(r,s.count,(e,t)=>new QR(null,null,a,t,e.createTandem("resistorIcon"),{isIcon:!0}),e=>e instanceof bk&&e.resistorType===o,e=>{const t=this.circuit.createVertexPairArray(e,o.length);return i.createNextElement(t[0],t[1],o)},{tandem:e,lifelikeIconHeight:s.lifelikeIconHeight,schematicIconHeight:s.schematicIconHeight})}createFuseToolNode(e){const t=new ck(new YD(Te.A.ZERO,this.circuit.selectionProperty),new YD(new Te.A(hD.RESISTOR_LENGTH,0),this.circuit.selectionProperty),A.A.OPT_OUT,null);return this.createCircuitElementToolNode(SF,10,(e,i)=>new JR(null,null,t,i,e.createTandem("fuseIcon"),{isIcon:!0}),e=>e instanceof ck,e=>this.circuit.fuseGroup.createNextElement(...this.circuit.createVertexPairArray(e,LF)),{tandem:e,lifelikeIconHeight:15,schematicIconHeight:14})}createCapacitorToolNode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;const i=new hk(new YD(Te.A.ZERO,this.circuit.selectionProperty),new YD(new Te.A(hD.CAPACITOR_LENGTH,0),this.circuit.selectionProperty),A.A.OPT_OUT);return this.createCircuitElementToolNode(fF,t,(e,t)=>new vL(null,null,i,t,e.createTandem("capacitorIcon"),{isIcon:!0}),e=>e instanceof hk,e=>this.circuit.capacitorGroup.createNextElement(...this.circuit.createVertexPairArray(e,hD.CAPACITOR_LENGTH)),{tandem:e})}createInductorToolNode(e){const t=new uk(new YD(Te.A.ZERO,this.circuit.selectionProperty),new YD(new Te.A(hD.INDUCTOR_LENGTH,0),this.circuit.selectionProperty),A.A.OPT_OUT),i=tD.moreInductors?10:1;return this.createCircuitElementToolNode(bF,i,(e,i)=>new rN(null,null,t,i,e.createTandem("inductorIcon"),{isIcon:!0,scale:.75}),e=>e instanceof uk,e=>this.circuit.inductorGroup.createNextElement(...this.circuit.createVertexPairArray(e,hD.INDUCTOR_LENGTH)),{tandem:e,lifelikeIconHeight:22,schematicIconHeight:6})}createSwitchToolNode(e){return this.createCircuitElementToolNode(kF,5,(e,t)=>new SN(null,null,new Ek(new YD(Te.A.ZERO,this.circuit.selectionProperty),new YD(new Te.A(NF,0),this.circuit.selectionProperty),A.A.OPT_OUT,null),t,e.createTandem("switchIcon"),{isIcon:!0}),e=>e instanceof Ek,e=>this.circuit.switchGroup.createNextElement(...this.circuit.createVertexPairArray(e,NF)),{tandem:e,lifelikeIconHeight:22,schematicIconHeight:16})}createPaperClipToolNode(e){return this.createResistorToolNode(e,this.circuit.householdObjectGroup,{count:1,resistorType:fk.PAPER_CLIP,tandemName:"paperClipToolNode",labelStringProperty:IF})}createCoinToolNode(e){return this.createResistorToolNode(e,this.circuit.householdObjectGroup,{count:1,resistorType:fk.COIN,tandemName:"coinToolNode",labelStringProperty:VF,lifelikeIconHeight:30})}createDollarBillToolNode(e){return this.createResistorToolNode(e,this.circuit.householdObjectGroup,{count:1,resistorType:fk.DOLLAR_BILL,tandemName:"dollarBillToolNode",labelStringProperty:wF,lifelikeIconHeight:22})}createEraserToolNode(e){return this.createResistorToolNode(e,this.circuit.householdObjectGroup,{count:1,resistorType:fk.ERASER,tandemName:"eraserToolNode",labelStringProperty:EF,lifelikeIconHeight:17})}createPencilToolNode(e){return this.createResistorToolNode(e,this.circuit.householdObjectGroup,{count:1,resistorType:fk.PENCIL,tandemName:"pencilToolNode",labelStringProperty:xF,lifelikeIconHeight:12})}createHandToolNode(e){return this.createResistorToolNode(e,this.circuit.householdObjectGroup,{count:1,resistorType:fk.HAND,tandemName:"handToolNode",labelStringProperty:TF,lifelikeIconHeight:30})}createDogToolNode(e){return this.createResistorToolNode(e,this.circuit.householdObjectGroup,{count:1,resistorType:fk.DOG,tandemName:"dogToolNode",labelStringProperty:vF,lifelikeIconHeight:30})}createExtremeResistorToolNode(e){return this.createResistorToolNode(e,this.circuit.extremeResistorGroup,{count:4,resistorType:fk.EXTREME_RESISTOR,tandemName:"extremeResistorToolNode",labelStringProperty:DF})}createExtremeBatteryToolNode(e){return this.createCircuitElementToolNode(PF,4,(e,t)=>new RO(null,null,new iM(new YD(Te.A.ZERO,this.circuit.selectionProperty),new YD(new Te.A(hD.BATTERY_LENGTH,0),this.circuit.selectionProperty),new R(0),"high-voltage",A.A.OPT_OUT,{voltage:1e3,numberOfDecimalPlaces:iM.HIGH_VOLTAGE_DECIMAL_PLACES}),t,e.createTandem("extremeBatteryToolNode"),{isIcon:!0}),e=>e instanceof iM&&"right"===e.initialOrientation&&"high-voltage"===e.batteryType,e=>this.circuit.extremeBatteryGroup.createNextElement(...this.circuit.createVertexPairArray(e,NF)),{tandem:e,lifelikeIconHeight:15})}createExtremeBulbToolNode(e){const t=Ak.createVertexPair(Te.A.ZERO,this.circuit,!0);return this.createCircuitElementToolNode(CF,4,(e,i)=>new KL(null,null,Ak.createAtPosition(t.startVertex,t.endVertex,this.circuit,1e3,this.viewTypeProperty,A.A.OPT_OUT,{isExtreme:!0}),new o(!0),i,e.createTandem("extremeLightBulbToolNode"),{isIcon:!0}),e=>e instanceof Ak&&e.isExtreme,e=>{const t=Ak.createVertexPair(e,this.circuit,!1);return this.circuit.extremeLightBulbGroup.createNextElement(t.startVertex,t.endVertex)},{tandem:e})}constructor(e,t,i,n,s){this.circuit=e,this.showLabelsProperty=t,this.viewTypeProperty=i,this.globalToCircuitNodePoint=n,this.parentTandem=s,this.wireToolNode=null}};jx.register("CircuitElementToolFactory",YF);let GF=class extends AF{constructor(e,t,i){const n=new YF(e.circuit,e.showLabelsProperty,e.viewTypeProperty,e=>this.circuitNode.globalToLocalPoint(e),t.createTandem("circuitElementToolbox").createTandem("carousel").createTandem("circuitElementTools")),s={createNode:t=>n.createLightBulbToolNode(t,e.circuit.realLightBulbGroup,Jx.realBulbStringProperty,!0,e.addRealBulbsProperty),tandemName:"realBulbToolNode",alignBoxOptions:{visibleProperty:e.addRealBulbsProperty}},r=[{createNode:e=>n.createWireToolNode(e),tandemName:"wireToolNode1"},{createNode:e=>n.createRightBatteryToolNode(e),tandemName:"batteryToolNode"},{createNode:t=>n.createLightBulbToolNode(t,e.circuit.lightBulbGroup),tandemName:"lightBulbToolNode"},{createNode:e=>n.createResistorToolNode(e),tandemName:"resistorToolNode"},{createNode:e=>n.createSwitchToolNode(e),tandemName:"switchToolNode"},{createNode:e=>n.createWireToolNode(e),tandemName:"wireToolNode2"},{createNode:e=>n.createFuseToolNode(e),tandemName:"fuseToolNode"},{createNode:e=>n.createExtremeBatteryToolNode(e),tandemName:"extremeBatteryToolNode"},{createNode:e=>n.createExtremeBulbToolNode(e),tandemName:"extremeBulbToolNode"},{createNode:e=>n.createExtremeResistorToolNode(e),tandemName:"extremeResistorToolNode"},{createNode:e=>n.createWireToolNode(e),tandemName:"wireToolNode3"},{createNode:e=>n.createDollarBillToolNode(e),tandemName:"dollarBillToolNode"},{createNode:e=>n.createPaperClipToolNode(e),tandemName:"paperClipToolNode"},{createNode:e=>n.createCoinToolNode(e),tandemName:"coinToolNode"},{createNode:e=>n.createEraserToolNode(e),tandemName:"eraserToolNode"},{createNode:e=>n.createWireToolNode(e),tandemName:"wireToolNode4"},{createNode:e=>n.createPencilToolNode(e),tandemName:"pencilToolNode"},s];super(e,r,t,(0,h.A)({showSeriesAmmeters:!0},i)),e.addRealBulbsProperty.link(e=>{this.circuitElementToolbox.carousel.setItemVisible(s,e),e&&this.circuitElementToolbox.carousel.scrollToItem(s)})}};bD.register("LabScreenView",GF);const UF=GF,zF=VD.screen.labStringProperty;let WF=class extends RV{constructor(e,t){super(()=>new VM(e.createTandem("model"),t),t=>new UF(t,e.createTandem("view"),{circuitElementToolboxOptions:{carouselScale:hD.DC_CAROUSEL_SCALE}}),{name:zF,backgroundColorProperty:gD.screenBackgroundColorProperty,homeScreenIcon:new TV(new _h(fD),{fill:gD.screenBackgroundColorProperty,maxIconWidthProportion:1,maxIconHeightProportion:1}),tandem:e,maxDT:hD.MAX_DT})}};bD.register("LabScreen",WF);const QF=WF;let KF=null;const jF=El.A.createLock({name:"brand"}),_F=new URLSearchParams(window.location.search).has("esbuild");if(i(876)(`./${phet.chipper.brand}/js/Brand.${_F?"ts":"js"}`).then(e=>jF()).catch(e=>!1),A.A.PHET_IO_ENABLED){const e=El.A.createLock({name:"phetioEngine"});Promise.resolve().then((function(){var e=new Error("Cannot find module '../../phet-io/js/phetioEngine.js'");throw e.code="MODULE_NOT_FOUND",e})).then(t=>{KF=t.default,e()}).catch(e=>!1)}const ZF=El.A.createLock({name:"launch"});const XF=new class{launch(e){El.A.addListener(()=>{window.phet.joist.launchSimulation=()=>{this.launchComplete=!0,A.A.PHET_IO_ENABLED&&(null==KF||KF.onCrossFrameListenersReady()),e()},A.A.PHET_IO_ENABLED&&(null==KF||KF.initialize()),phet.chipper.queryParameters.postMessageOnReady&&window.parent&&window.parent.postMessage(JSON.stringify({type:"ready",url:window.location.href}),"*"),A.A.PHET_IO_ENABLED&&!phet.preloads.phetio.queryParameters.phetioStandalone||phet.chipper.queryParameters.playbackMode||window.phet.joist.launchSimulation()}),ZF(),window.phet.joist.launchCalled=!0}constructor(){this.launchComplete=!1}};Xl.A.register("simLauncher",XF);const JF=XF,$F=new Ct.A("circuitConstructionKitDcVirtualLab"),eH=(0,Uc.A)("CIRCUIT_CONSTRUCTION_KIT_DC_VIRTUAL_LAB");$F.register("CircuitConstructionKitDcVirtualLabStrings",eH);const tH=eH,iH=A.A.ROOT,nH=tH["circuit-construction-kit-dc-virtual-lab"].titleStringProperty;JF.launch(()=>{new _x(nH,[new QF(iH.createTandem("labScreen"),{showNoncontactAmmeters:!1})],{preferencesModel:new MI({simulationOptions:{customPreferences:[{createContent:e=>new aD(e)}]}}),credits:{leadDesign:"Amy Rouinfar",softwareDevelopment:"Sam Reid, Denzell Barnett, Matthew Blackman",team:"Michael Dubson, Ariel Paul, Kathy Perkins, Wendy Adams, Carl Wieman",qualityAssurance:"Jaspe Arias, Steele Dalton, Amanda Davis, Alex Dornan, Jaron Droder, Bryce Griebenow, Clifford Hardin, Ethan Johnson, Megan Lai, Brooklyn Lash, Emily Miller, Matthew Moore, Ashton Morris, Liam Mulhall, Devon Quispe, Ben Roberts, Jacob Romero, Nancy Salpepi, Marla Schulz, Ethan Ward, Kathryn Woessner",graphicArts:"Bryce Gruneich, Mariah Hermsmeyer, Cheryl McCutchan"},phetioDesigned:!0}).start(),_l.setOutputLevelForCategory("user-interface",0)})})()})()};