phetsims / sun

User-interface components for PhET simulations, built on top of Scenery.
MIT License
4 stars 12 forks source link

AccordionBox should be resizable #803

Closed jonathanolson closed 2 months ago

jonathanolson commented 1 year ago

Implementation will be similar to Panel/ButtonNode. It should use the mixin Sizable.

marlitas commented 1 year ago

I'm trying to push myself to figure this one out and this is the starting patch.

```diff Index: mean-share-and-balance/js/leveling-out/view/LevelingOutControlPanel.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/mean-share-and-balance/js/leveling-out/view/LevelingOutControlPanel.ts b/mean-share-and-balance/js/leveling-out/view/LevelingOutControlPanel.ts --- a/mean-share-and-balance/js/leveling-out/view/LevelingOutControlPanel.ts (revision 6778dad7fee0fe0be317992a1732c6e58a9b1da1) +++ b/mean-share-and-balance/js/leveling-out/view/LevelingOutControlPanel.ts (date 1667861861927) @@ -64,7 +64,7 @@ titleNode: new Text( 'Mean', { fontSize: 15, maxWidth: MeanShareAndBalanceConstants.MAX_CONTROLS_TEXT_WIDTH } ), expandedProperty: model.isMeanAccordionExpandedProperty, layoutOptions: { minContentHeight: 200, yAlign: 'top' }, - + preferredWidth: 50, // phet-io tandem: options.tandem.createTandem( 'meanAccordionBox' ) } ); Index: sun/js/AccordionBox.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/sun/js/AccordionBox.ts b/sun/js/AccordionBox.ts --- a/sun/js/AccordionBox.ts (revision 79e01827560f5480fe9231901d6ab4936f5d51c9) +++ b/sun/js/AccordionBox.ts (date 1667863479040) @@ -15,7 +15,7 @@ import InstanceRegistry from '../../phet-core/js/documentation/InstanceRegistry.js'; import optionize, { combineOptions } from '../../phet-core/js/optionize.js'; import StrictOmit from '../../phet-core/js/types/StrictOmit.js'; -import { FocusHighlightFromNode, InteractiveHighlighting, Node, NodeOptions, Path, PDOMBehaviorFunction, PDOMPeer, Rectangle, RectangleOptions, TColor, Text } from '../../scenery/js/imports.js'; +import { FocusHighlightFromNode, InteractiveHighlighting, Node, NodeOptions, Path, PDOMBehaviorFunction, PDOMPeer, Rectangle, RectangleOptions, TColor, Text, Sizable, SizableOptions, AlignBoxXAlign, AlignBoxYAlign, LayoutConstraint, isWidthSizable } from '../../scenery/js/imports.js'; import accordionBoxClosedSoundPlayer from '../../tambo/js/shared-sound-players/accordionBoxClosedSoundPlayer.js'; import accordionBoxOpenedSoundPlayer from '../../tambo/js/shared-sound-players/accordionBoxOpenedSoundPlayer.js'; import SoundClipPlayer from '../../tambo/js/sound-generators/SoundClipPlayer.js'; @@ -39,8 +39,8 @@ fill?: TColor; minWidth?: number; - titleAlignX?: 'center' | 'left' | 'right'; - titleAlignY?: 'top' | 'center'; + titleAlignX?: AlignBoxXAlign; + titleAlignY?: AlignBoxYAlign; titleXMargin?: number; titleYMargin?: number; titleXSpacing?: number; @@ -79,14 +79,17 @@ headingTagName?: string; }; -export type AccordionBoxOptions = SelfOptions & NodeOptions; +type SuperOptions = NodeOptions & SizableOptions; +export type AccordionBoxOptions = SelfOptions & SuperOptions; -export default class AccordionBox extends Node { +export default class AccordionBox extends Sizable( Node ) { + + private readonly constraint: AccordionBoxConstraint; public readonly expandedProperty: Property; private readonly _contentAlign; - private readonly _contentNode; + public readonly _contentNode; private readonly _cornerRadius; private readonly _buttonXMargin; private readonly _buttonYMargin; @@ -103,14 +106,14 @@ private readonly _showTitleWhenExpanded; private readonly _buttonAlign; private readonly disposeEmitterAccordionBox: TEmitter; - private readonly titleNode: Node; - private readonly expandCollapseButton: ExpandCollapseButton; + public readonly titleNode: Node; + public readonly expandCollapseButton: ExpandCollapseButton; private readonly expandedBox: Rectangle; private readonly collapsedBox: Rectangle; private readonly workaroundBox: Rectangle; private readonly expandedTitleBar: InteractiveHighlightPath; private readonly collapsedTitleBar: InteractiveHighlightRectangle; - private readonly containerNode: Node; + public readonly containerNode: Node; private readonly resetAccordionBox: () => void; // Only defined if there is a stroke @@ -128,7 +131,7 @@ */ public constructor( contentNode: Node, providedOptions?: AccordionBoxOptions ) { - const options = optionize, NodeOptions>()( { + const options = optionize, SuperOptions>()( { // If not provided, a Text node will be supplied. Should have and maintain well-defined bounds if passed in titleNode: null as unknown as Node, @@ -235,6 +238,9 @@ this._minWidth = options.minWidth; this._showTitleWhenExpanded = options.showTitleWhenExpanded; this._buttonAlign = options.buttonAlign; + this.constraint = new AccordionBoxConstraint( this, { minWidth: options.minWidth, xMargin: options.contentXMargin, + yMargin: options.contentYMargin, spacing: options.contentXSpacing, titleXMargin: options.titleXMargin, + titleYMargin: options.titleYMargin, titleSpacing: options.titleXSpacing, lineWidth: options.lineWidth } ); // Fires when this instance is disposed. // AccordionBox does not use the {function} this.disposeAccordionBox pattern used in other PhET components. @@ -465,6 +471,11 @@ /** * Performs layout that positions everything that can change. + * + * No layout function in AccordionBox + * create a dimension2 sizeProperty, or a function that the Accordion Box to sets things + * + * potentially create a function that the Constraint calls so that AccordionBox elements aren't exposed. */ private layout(): void { const hasValidBounds = this._contentNode.bounds.isValid(); @@ -641,6 +652,78 @@ }; } +type AccordionBoxConstraintOptions = { + minWidth: number; + // minHeight: number; + xMargin: number; + yMargin: number; + spacing: number; + lineWidth?: number; + + titleXMargin: number; + titleYMargin: number; + titleSpacing: number; +}; + +class AccordionBoxConstraint extends LayoutConstraint { + private readonly accordionBox: AccordionBox; + private readonly minWidth: number; + // private readonly minHeight: number; + private readonly xMargin: number; + private readonly spacing: number; + private readonly lineWidth: number; + private readonly titleXMargin: number; + private readonly titleYMargin: number; + private readonly titleSpacing: number; + + public constructor( accordionBox: AccordionBox, options: AccordionBoxConstraintOptions ) { + super( accordionBox ); + + this.accordionBox = accordionBox; + this.minWidth = options.minWidth; + // this.minHeight = options.minHeight; + this.xMargin = options.xMargin; + this.spacing = options.spacing; + this.lineWidth = options.lineWidth ? options.lineWidth : 0; + + this.titleXMargin = options.titleXMargin; + this.titleYMargin = options.titleYMargin; + this.titleSpacing = options.titleSpacing; + + this.accordionBox.localPreferredWidthProperty.lazyLink( this._updateLayoutListener ); + this.accordionBox.localPreferredHeightProperty.lazyLink( this._updateLayoutListener ); + } + + protected override layout(): void { + super.layout(); + + const accordionBox = this.accordionBox; + const content = accordionBox._contentNode; + const title = accordionBox.titleNode; + const hasValidBounds = content.bounds.isValid(); + + if ( !hasValidBounds ) { + return; + } + + const minimumContentWidth = ( isWidthSizable( content ) && content.minimumWidth !== null ) ? content.minimumWidth : content.width; + const minimumTitleWidth = ( isWidthSizable( title ) && title.minimumWidth !== null ) ? title.minimumWidth : title.width; + // const minimumContentHeight = ( isHeightSizable( content ) && content.minimumHeight !== null ) ? content.minimumHeight : content.height; + + const minimumWidth = Math.max( this.minWidth, minimumContentWidth + ( 2 * this.xMargin ) + this.lineWidth + this.spacing, + minimumTitleWidth + ( 2 * this.titleXMargin ) + this.titleSpacing + accordionBox.expandCollapseButton.width ); + + const preferredWidth = accordionBox.localPreferredWidth ? accordionBox.localPreferredWidth : minimumWidth; + + if ( isWidthSizable( content ) && accordionBox.localPreferredWidth !== null ) { + content.preferredWidth = preferredWidth - this.lineWidth - 2 * this.xMargin; + } + + // Set minimums at the end + accordionBox.localMinimumWidth = minimumWidth; + } +} + class InteractiveHighlightPath extends InteractiveHighlighting( Path ) {} class InteractiveHighlightRectangle extends InteractiveHighlighting( Rectangle ) {} Index: scenery/js/layout/WidthSizable.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/scenery/js/layout/WidthSizable.ts b/scenery/js/layout/WidthSizable.ts --- a/scenery/js/layout/WidthSizable.ts (revision db2acc03529c4088cccfc963796b6ad3427b55dd) +++ b/scenery/js/layout/WidthSizable.ts (date 1667863479025) @@ -5,6 +5,8 @@ * so that layout containers could know how "small" the component can be made. The preferred width is set by the * layout container, and the component should adjust its size so that it takes up that width. * + * // When converting to sizable: set minimumWidth/Height if preferred is non-null this should be the minimum + * * @author Jonathan Olson */ ```
marlitas commented 1 year ago

Worked on this some more today, and I believe I am getting closer. Coming up against a bug on the height calculation, that I think I can figure out with a bit more time dedicated to it, but wanted to record my progress for the day. Would like to check in with @jonathanolson some time this or next week to:

  1. Make sure it's going in the right direction
  2. Consider edge cases that are currently not covered.
  3. Preliminary review
```diff Index: mean-share-and-balance/js/leveling-out/view/LevelingOutControlPanel.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/mean-share-and-balance/js/leveling-out/view/LevelingOutControlPanel.ts b/mean-share-and-balance/js/leveling-out/view/LevelingOutControlPanel.ts --- a/mean-share-and-balance/js/leveling-out/view/LevelingOutControlPanel.ts (revision b1f2d68e8c07d4e488886cb1bf5f63627d5c4dab) +++ b/mean-share-and-balance/js/leveling-out/view/LevelingOutControlPanel.ts (date 1668031092759) @@ -64,7 +64,8 @@ titleNode: new Text( 'Mean', { fontSize: 15, maxWidth: MeanShareAndBalanceConstants.MAX_CONTROLS_TEXT_WIDTH } ), expandedProperty: model.isMeanAccordionExpandedProperty, layoutOptions: { minContentHeight: 200, yAlign: 'top' }, - + preferredWidth: 50, + preferredHeight: 500, // phet-io tandem: options.tandem.createTandem( 'meanAccordionBox' ) } ); Index: sun/js/AccordionBox.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/sun/js/AccordionBox.ts b/sun/js/AccordionBox.ts --- a/sun/js/AccordionBox.ts (revision 79e01827560f5480fe9231901d6ab4936f5d51c9) +++ b/sun/js/AccordionBox.ts (date 1668032169216) @@ -15,7 +15,7 @@ import InstanceRegistry from '../../phet-core/js/documentation/InstanceRegistry.js'; import optionize, { combineOptions } from '../../phet-core/js/optionize.js'; import StrictOmit from '../../phet-core/js/types/StrictOmit.js'; -import { FocusHighlightFromNode, InteractiveHighlighting, Node, NodeOptions, Path, PDOMBehaviorFunction, PDOMPeer, Rectangle, RectangleOptions, TColor, Text } from '../../scenery/js/imports.js'; +import { AlignBoxXAlign, AlignBoxYAlign, FocusHighlightFromNode, InteractiveHighlighting, isHeightSizable, isWidthSizable, LayoutConstraint, Node, NodeOptions, Path, PDOMBehaviorFunction, PDOMPeer, Rectangle, RectangleOptions, Sizable, SizableOptions, TColor, Text } from '../../scenery/js/imports.js'; import accordionBoxClosedSoundPlayer from '../../tambo/js/shared-sound-players/accordionBoxClosedSoundPlayer.js'; import accordionBoxOpenedSoundPlayer from '../../tambo/js/shared-sound-players/accordionBoxOpenedSoundPlayer.js'; import SoundClipPlayer from '../../tambo/js/sound-generators/SoundClipPlayer.js'; @@ -26,6 +26,7 @@ import ExpandCollapseButton, { ExpandCollapseButtonOptions } from './ExpandCollapseButton.js'; import sun from './sun.js'; import TReadOnlyProperty from '../../axon/js/TReadOnlyProperty.js'; +import NumberProperty from '../../axon/js/NumberProperty.js'; // Options documented in optionize type SelfOptions = { @@ -39,8 +40,8 @@ fill?: TColor; minWidth?: number; - titleAlignX?: 'center' | 'left' | 'right'; - titleAlignY?: 'top' | 'center'; + titleAlignX?: AlignBoxXAlign; + titleAlignY?: AlignBoxYAlign; titleXMargin?: number; titleYMargin?: number; titleXSpacing?: number; @@ -79,38 +80,43 @@ headingTagName?: string; }; -export type AccordionBoxOptions = SelfOptions & NodeOptions; +type SuperOptions = NodeOptions & SizableOptions; +export type AccordionBoxOptions = SelfOptions & SuperOptions; -export default class AccordionBox extends Node { +export default class AccordionBox extends Sizable( Node ) { + + private readonly constraint: AccordionBoxConstraint; public readonly expandedProperty: Property; private readonly _contentAlign; - private readonly _contentNode; + public readonly _contentNode; private readonly _cornerRadius; - private readonly _buttonXMargin; - private readonly _buttonYMargin; + public readonly _buttonXMargin; + public readonly _buttonYMargin; private readonly _contentXMargin; private readonly _contentYMargin; private readonly _contentXSpacing; private readonly _contentYSpacing; - private readonly _titleAlignX; + public readonly _titleAlignX; private readonly _titleAlignY; private readonly _titleXMargin; private readonly _titleYMargin; private readonly _titleXSpacing; private readonly _minWidth; - private readonly _showTitleWhenExpanded; + public readonly _showTitleWhenExpanded; private readonly _buttonAlign; private readonly disposeEmitterAccordionBox: TEmitter; - private readonly titleNode: Node; - private readonly expandCollapseButton: ExpandCollapseButton; + public readonly titleNode: Node; + public readonly expandCollapseButton: ExpandCollapseButton; private readonly expandedBox: Rectangle; private readonly collapsedBox: Rectangle; + public readonly collapsedHeightProperty: Property; + public readonly expandedHeightProperty: Property; private readonly workaroundBox: Rectangle; private readonly expandedTitleBar: InteractiveHighlightPath; private readonly collapsedTitleBar: InteractiveHighlightRectangle; - private readonly containerNode: Node; + public readonly containerNode: Node; private readonly resetAccordionBox: () => void; // Only defined if there is a stroke @@ -128,7 +134,7 @@ */ public constructor( contentNode: Node, providedOptions?: AccordionBoxOptions ) { - const options = optionize, NodeOptions>()( { + const options = optionize, SuperOptions>()( { // If not provided, a Text node will be supplied. Should have and maintain well-defined bounds if passed in titleNode: null as unknown as Node, @@ -235,6 +241,14 @@ this._minWidth = options.minWidth; this._showTitleWhenExpanded = options.showTitleWhenExpanded; this._buttonAlign = options.buttonAlign; + this.preferredWidth = options.preferredWidth; + this.expandedHeightProperty = new NumberProperty( 0 ); + this.collapsedHeightProperty = new NumberProperty( 0 ); + this.constraint = new AccordionBoxConstraint( this, { + minWidth: options.minWidth, minHeight: options.minimumHeight, xMargin: options.contentXMargin, + yMargin: options.contentYMargin, xSpacing: options.contentXSpacing, titleXMargin: options.titleXMargin, + titleYMargin: options.titleYMargin, titleXSpacing: options.titleXSpacing, lineWidth: options.lineWidth + } ); // Fires when this instance is disposed. // AccordionBox does not use the {function} this.disposeAccordionBox pattern used in other PhET components. @@ -406,11 +420,11 @@ } ); this.addChild( pdomContainerNode ); - this.layout(); + this.constraint.layout(); // Watch future changes for re-layout (don't want to trigger on our first layout and queue useless ones) if ( options.resize ) { - const layoutListener = this.layout.bind( this ); + const layoutListener = this.constraint.layout.bind( this.constraint ); contentNode.boundsProperty.lazyLink( layoutListener ); this.titleNode.boundsProperty.lazyLink( layoutListener ); this.disposeEmitterAccordionBox.addListener( () => { @@ -465,8 +479,13 @@ /** * Performs layout that positions everything that can change. + * + * No layout function in AccordionBox + * create a dimension2 sizeProperty, or a function that the Accordion Box to sets things + * + * potentially create a function that the Constraint calls so that AccordionBox elements aren't exposed. */ - private layout(): void { + public layout(): void { const hasValidBounds = this._contentNode.bounds.isValid(); this.containerNode.children = hasValidBounds ? [ this.expandedBox, @@ -476,13 +495,14 @@ this.expandCollapseButton ] : []; - if ( !hasValidBounds ) { + // Bail if bounds are not valid + if ( !hasValidBounds || !this.localMinimumWidth ) { return; } - const collapsedBoxHeight = this.getCollapsedBoxHeight(); - const boxWidth = this.getBoxWidth(); - const expandedBoxHeight = this.getExpandedBoxHeight(); + const collapsedBoxHeight = this.collapsedHeightProperty.value; + const boxWidth = this.localMinimumWidth; + const expandedBoxHeight = this.expandedHeightProperty.value; this.expandedBox.rectWidth = boxWidth; this.expandedBox.rectHeight = expandedBoxHeight; @@ -513,6 +533,7 @@ // content layout this._contentNode.bottom = expandedBounds.bottom - this._contentYMargin; + console.log( this._contentNode.bottom, this.bottom, this._contentNode.height, this.height ); let contentSpanLeft = expandedBounds.left + this._contentXMargin; let contentSpanRight = expandedBounds.right - this._contentXMargin; if ( !this._showTitleWhenExpanded ) { @@ -575,61 +596,14 @@ * expand/collapse button. */ private getTitleBarShape(): Shape { - return Shape.roundedRectangleWithRadii( 0, 0, this.getBoxWidth(), this.getCollapsedBoxHeight(), { + + // Only called from layout which confirms bounds and localMinimumWidth are valid. + return Shape.roundedRectangleWithRadii( 0, 0, this.localMinimumWidth!, this.collapsedHeightProperty.value, { topLeft: this._cornerRadius, topRight: this._cornerRadius } ); } - /** - * Returns the computed width of the box (ignoring things like stroke width) - */ - private getBoxWidth(): number { - - // Initial width is dependent on width of title section of the accordion box - let width = Math.max( this._minWidth, this._buttonXMargin + this.expandCollapseButton.width + this._titleXSpacing + this.titleNode.width + this._titleXMargin ); - - // Limit width by the necessary space for the title node - if ( this._titleAlignX === 'center' ) { - // Handles case where the spacing on the left side of the title is larger than the spacing on the right side. - width = Math.max( width, ( this._buttonXMargin + this.expandCollapseButton.width + this._titleXSpacing ) * 2 + this.titleNode.width ); - - // Handles case where the spacing on the right side of the title is larger than the spacing on the left side. - width = Math.max( width, ( this._titleXMargin ) * 2 + this.titleNode.width ); - } - - // Compare width of title section to content section of the accordion box - // content is below button+title - if ( this._showTitleWhenExpanded ) { - return Math.max( width, this._contentNode.width + ( 2 * this._contentXMargin ) ); - } - // content is next to button - else { - return Math.max( width, this.expandCollapseButton.width + this._contentNode.width + this._buttonXMargin + this._contentXMargin + this._contentXSpacing ); - } - } - - /** - * Returns the ideal height of the collapsed box (ignoring things like stroke width) - */ - private getCollapsedBoxHeight(): number { - return Math.max( this.expandCollapseButton.height + ( 2 * this._buttonYMargin ), this.titleNode.height + ( 2 * this._titleYMargin ) ); - } - - /** - * Returns the ideal height of the expanded box (ignoring things like stroke width) - */ - private getExpandedBoxHeight(): number { - // content is below button+title - if ( this._showTitleWhenExpanded ) { - return this.getCollapsedBoxHeight() + this._contentNode.height + this._contentYMargin + this._contentYSpacing; - } - // content is next to button - else { - return Math.max( this.expandCollapseButton.height + ( 2 * this._buttonYMargin ), this._contentNode.height + ( 2 * this._contentYMargin ) ); - } - } - // The definition for how AccordionBox sets its accessibleName in the PDOM. Forward it onto its expandCollapseButton. // See AccordionBox.md for further style guide and documentation on the pattern. public static ACCORDION_BOX_ACCESSIBLE_NAME_BEHAVIOR: PDOMBehaviorFunction = @@ -641,6 +615,132 @@ }; } +type AccordionBoxConstraintOptions = { + minWidth: number; + minHeight: number | null; + xMargin: number; + yMargin: number; + xSpacing: number; + lineWidth?: number; + + titleXMargin: number; + titleYMargin: number; + titleXSpacing: number; +}; + +class AccordionBoxConstraint extends LayoutConstraint { + private readonly accordionBox: AccordionBox; + private readonly minWidth: number; + private readonly minHeight: number; + private readonly xMargin: number; + private readonly yMargin: number; + private readonly xSpacing: number; + private readonly lineWidth: number; + private readonly titleXMargin: number; + private readonly titleYMargin: number; + private readonly titleXSpacing: number; + + public constructor( accordionBox: AccordionBox, options: AccordionBoxConstraintOptions ) { + super( accordionBox ); + + this.accordionBox = accordionBox; + this.minWidth = options.minWidth; + this.minHeight = options.minHeight ? options.minHeight : 0; + this.xMargin = options.xMargin; + this.yMargin = options.yMargin; + this.xSpacing = options.xSpacing; + this.lineWidth = options.lineWidth ? options.lineWidth : 0; + + this.titleXMargin = options.titleXMargin; + this.titleYMargin = options.titleYMargin; + this.titleXSpacing = options.titleXSpacing; + + // Overwriting preferredWidth... probably for a good reason I don't understand. + // this.accordionBox.preferredWidthProperty.lazyLink( this._updateLayoutListener ); + // this.accordionBox.preferredHeightProperty.lazyLink( this._updateLayoutListener ); + } + + public override layout(): void { + super.layout(); + + const accordionBox = this.accordionBox; + const content = accordionBox._contentNode; + const title = accordionBox.titleNode; + const hasValidBounds = content.bounds.isValid(); + + if ( !hasValidBounds ) { + return; + } + + const minimumContentWidth = ( isWidthSizable( content ) && content.minimumWidth !== null ) ? content.minimumWidth : content.width; + const minimumTitleWidth = ( isWidthSizable( title ) && title.minimumWidth !== null ) ? title.minimumWidth : title.width; + const minimumContentHeight = ( isHeightSizable( content ) && content.minimumHeight !== null ) ? content.minimumHeight : content.height; + const minimumContentNodeHeight = Math.max( minimumContentHeight + ( 2 * this.yMargin ) + this.lineWidth, accordionBox.expandCollapseButton.height + accordionBox._buttonYMargin + this.lineWidth ); + const minimumTitleHeight = ( isHeightSizable( title ) && title.minimumHeight !== null ) ? title.minimumHeight : title.height; + const minimumTitleNodeHeight = Math.max( minimumTitleHeight + this.titleYMargin + this.lineWidth, accordionBox.expandCollapseButton.height + accordionBox._buttonYMargin + this.lineWidth ); + + // Initial width is the max of the provided minWidth, Content Width, or TitleWidth + let minimumWidth = Math.max( this.minWidth, minimumContentWidth + ( 2 * this.xMargin ) + this.lineWidth + this.xSpacing, + + //Should we combine all these minimums in AccordionBox and pass them through to constraint? + minimumTitleWidth + ( 2 * this.titleXMargin ) + this.lineWidth + this.titleXSpacing + accordionBox.expandCollapseButton.width + accordionBox._buttonXMargin ); + + let minimumHeight = Math.max( this.minHeight, minimumContentNodeHeight, minimumTitleNodeHeight ); + + // Limit width by the necessary space for the title node + if ( accordionBox._titleAlignX === 'center' ) { + // Handles case where the spacing on the left side of the title is larger than the spacing on the right side. + minimumWidth = Math.max( minimumWidth, ( accordionBox._buttonXMargin + accordionBox.expandCollapseButton.width + this.titleXSpacing ) * 2 + minimumTitleWidth + this.lineWidth ); + + // Handles case where the spacing on the right side of the title is larger than the spacing on the left side. + minimumWidth = Math.max( minimumWidth, ( this.titleXMargin ) * 2 + minimumTitleWidth + this.lineWidth ); + } + + // content is next to button + if ( !accordionBox._showTitleWhenExpanded ) { + minimumWidth = Math.max( minimumWidth, minimumContentWidth + ( 2 * this.xMargin ) + this.lineWidth + this.xSpacing + accordionBox.expandCollapseButton.width + accordionBox._buttonXMargin, + minimumTitleWidth + ( 2 * this.titleXMargin ) + this.lineWidth + this.titleXSpacing + accordionBox.expandCollapseButton.width + accordionBox._buttonXMargin ); + minimumHeight = Math.max( minimumHeight, minimumContentNodeHeight ); + } + // content is below button and title + else { + minimumHeight = Math.max( minimumHeight, minimumContentNodeHeight + minimumTitleNodeHeight ); + } + + const preferredWidth = accordionBox.preferredWidth ? accordionBox.preferredWidth : minimumWidth; + const preferredHeight = accordionBox.preferredHeight ? accordionBox.preferredHeight : minimumHeight; + + if ( isWidthSizable( content ) && accordionBox.preferredWidth !== null ) { + assert && assert( preferredWidth > ( this.lineWidth + 2 * this.xMargin ), `AccordionBoc preferredWidth must be larger than lineWidth: ${this.lineWidth} + xMargin: ${this.xMargin}` ); + content.preferredWidth = preferredWidth - this.lineWidth - 2 * this.xMargin; + minimumWidth = Math.max( minimumWidth, preferredWidth ); + } + else if ( accordionBox.preferredWidth !== null ) { + minimumWidth = Math.max( minimumWidth, preferredWidth ); + } + + if ( isHeightSizable( content ) && accordionBox.preferredHeight !== null ) { + assert && assert( preferredHeight > ( this.lineWidth + 2 * this.yMargin ), `AccordionBox preferredHeight must be larger than minimumTitleNodeHeight: ${minimumTitleNodeHeight} + lineWidth: ${this.lineWidth} + yMargin: ${this.yMargin}` ); + content.preferredHeight = preferredHeight- 2 * this.yMargin - minimumTitleNodeHeight; + minimumHeight = Math.max( minimumHeight, preferredHeight ); + } + else if ( accordionBox.preferredHeight !== null ) { + minimumHeight = Math.max( minimumHeight, preferredHeight ); + } + + accordionBox.collapsedHeightProperty.value = minimumTitleNodeHeight; + + assert && assert( minimumHeight >= minimumTitleNodeHeight + minimumContentNodeHeight, `minimumHeight should not be smaller than minimumTitleNodeHeight + minimumContentNodeHeight: ${minimumTitleNodeHeight + minimumContentNodeHeight}` ); + accordionBox.expandedHeightProperty.value = Math.max( minimumHeight - minimumTitleNodeHeight, minimumContentNodeHeight ); + + // Set minimums at the end + accordionBox.localMinimumWidthProperty.value = minimumWidth; + accordionBox.localMinimumHeightProperty.value = minimumHeight; + + accordionBox.layout(); + } +} + class InteractiveHighlightPath extends InteractiveHighlighting( Path ) {} class InteractiveHighlightRectangle extends InteractiveHighlighting( Rectangle ) {} Index: scenery/js/layout/WidthSizable.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/scenery/js/layout/WidthSizable.ts b/scenery/js/layout/WidthSizable.ts --- a/scenery/js/layout/WidthSizable.ts (revision 4bd140960a2da61f10286d9182dd251b9ea7e9c3) +++ b/scenery/js/layout/WidthSizable.ts (date 1668018280752) @@ -5,6 +5,8 @@ * so that layout containers could know how "small" the component can be made. The preferred width is set by the * layout container, and the component should adjust its size so that it takes up that width. * + * // When converting to sizable: set minimumWidth/Height if preferred is non-null this should be the minimum + * * @author Jonathan Olson */ ```
jonathanolson commented 1 year ago

Implemented above, @marlitas can you review?

zepumph commented 1 year ago

I think there is a CT error.

``` normal-modes : fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317965500%7D&brand=phet&ea&fuzz Query: brand=phet&ea&fuzz Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz&duration=90000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317965500%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz&duration=90000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317965500%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317965500%7D&brand=phet&ea&fuzz [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318882822%7D&brand=phet&ea&fuzz Query: brand=phet&ea&fuzz Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz&duration=90000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318882822%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz&duration=90000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318882822%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318882822%7D&brand=phet&ea&fuzz [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684322717977%7D&brand=phet&ea&fuzz Query: brand=phet&ea&fuzz Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz&duration=90000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684322717977%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz&duration=90000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684322717977%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684322717977%7D&brand=phet&ea&fuzz [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326442133%7D&brand=phet&ea&fuzz Query: brand=phet&ea&fuzz Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz&duration=90000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326442133%7D [NAVIGATED] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz&duration=90000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326442133%7D [NAVIGATED] about:blank [NAVIGATED] https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326442133%7D&brand=phet&ea&fuzz [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Bayes Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684328480896%7D&brand=phet&ea&fuzz Query: brand=phet&ea&fuzz Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz&duration=90000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684328480896%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz&duration=90000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684328480896%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684328480896%7D&brand=phet&ea&fuzz [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt : assertSlow http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318591751%7D&brand=phet&eall&fuzz Query: brand=phet&eall&fuzz Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26eall%26fuzz&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318591751%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26eall%26fuzz&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318591751%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318591751%7D&brand=phet&eall&fuzz [CONSOLE] enabling assert [CONSOLE] enabling assertSlow [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt : assertSlow http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684322334538%7D&brand=phet&eall&fuzz Query: brand=phet&eall&fuzz Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26eall%26fuzz&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684322334538%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26eall%26fuzz&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684322334538%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684322334538%7D&brand=phet&eall&fuzz [CONSOLE] enabling assert [CONSOLE] enabling assertSlow [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt : assertSlow https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684325130279%7D&brand=phet&eall&fuzz Query: brand=phet&eall&fuzz Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26eall%26fuzz&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684325130279%7D [NAVIGATED] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26eall%26fuzz&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684325130279%7D [NAVIGATED] about:blank [NAVIGATED] https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684325130279%7D&brand=phet&eall&fuzz [CONSOLE] enabling assert [CONSOLE] enabling assertSlow [PAGE ERROR] Error: TypeError: this.layout is not a function at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Bayes Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt : assertSlow https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684327729942%7D&brand=phet&eall&fuzz Query: brand=phet&eall&fuzz Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26eall%26fuzz&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684327729942%7D [NAVIGATED] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26eall%26fuzz&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684327729942%7D [NAVIGATED] about:blank [NAVIGATED] https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684327729942%7D&brand=phet&eall&fuzz [CONSOLE] enabling assert [CONSOLE] enabling assertSlow [PAGE ERROR] Error: TypeError: this.layout is not a function at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Bayes Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt : assertSlow http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684330454503%7D&brand=phet&eall&fuzz Query: brand=phet&eall&fuzz TypeError: this.layout is not a function NormalModeSpectrumAccordionBox/<@http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at layout (NormalModeSpectrumAccordionBox.js:252:11) at (ReadOnlyProperty.ts:411:14) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) at (Sim.ts:895:16) at i (Sim.ts:911:21) at (Sim.ts:895:16) at i (Sim.ts:911:21) at (Sim.ts:895:16) at i (Sim.ts:911:21) at (Sim.ts:895:16) at (Sim.ts:988:13) at start (normal-modes-main.js:35:6) at callback (simLauncher.ts:67:8) at launchSimulation (simLauncher.ts:88:26) at listener (asyncLoader.ts:50:42) at forEach (asyncLoader.ts:50:21) at proceedIfReady (asyncLoader.ts:63:11) at image (logo_png.ts:6:0) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26eall%26fuzz&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684330454503%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26eall%26fuzz&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684330454503%7D [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22assertSlow%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684330454503%7D&brand=phet&eall&fuzz [CONSOLE] enabling assert [CONSOLE] enabling assertSlow [CONSOLE] [JavaScript Warning: "An AudioContext was prevented from starting automatically. It must be created or resumed after a user gesture on the page." {file: "http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/tambo/js/phetAudioContext.js" line: 15}] [CONSOLE] [JavaScript Warning: "WebGL warning: : WebglAllowWindowsNativeGl:false restricts context creation on this system." {file: "http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/scenery/js/util/Utils.js" line: 443}] [CONSOLE] [JavaScript Warning: "Failed to create WebGL context: WebGL creation failed: * WebglAllowWindowsNativeGl:false restricts context creation on this system. () * Exhausted GL driver options. (FEATURE_FAILURE_WEBGL_EXHAUSTED_DRIVERS)" {file: "http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/scenery/js/util/Utils.js" line: 443}] [CONSOLE] [JavaScript Warning: "WebGL warning: : WebglAllowWindowsNativeGl:false restricts context creation on this system." {file: "http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/scenery/js/util/Utils.js" line: 443}] [CONSOLE] [JavaScript Warning: "Failed to create WebGL context: WebGL creation failed: * WebglAllowWindowsNativeGl:false restricts context creation on this system. () * Exhausted GL driver options. (FEATURE_FAILURE_WEBGL_EXHAUSTED_DRIVERS)" {file: "http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/scenery/js/util/Utils.js" line: 443}] [CONSOLE] continuous-test-error [PAGE ERROR] TypeError: this.layout is not a function id: "Sparky Node Firefox" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt : listenerOrderRandom http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318471930%7D&brand=phet&ea&fuzz&listenerOrder=random Query: brand=phet&ea&fuzz&listenerOrder=random Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26listenerOrder%3Drandom&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318471930%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26listenerOrder%3Drandom&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318471930%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318471930%7D&brand=phet&ea&fuzz&listenerOrder=random [CONSOLE] enabling assert [CONSOLE] listenerOrder random seed: 543661 [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt : listenerOrderRandom http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319166376%7D&brand=phet&ea&fuzz&listenerOrder=random Query: brand=phet&ea&fuzz&listenerOrder=random Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26listenerOrder%3Drandom&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319166376%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26listenerOrder%3Drandom&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319166376%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319166376%7D&brand=phet&ea&fuzz&listenerOrder=random [CONSOLE] enabling assert [CONSOLE] listenerOrder random seed: 695801 [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt : listenerOrderRandom http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323707583%7D&brand=phet&ea&fuzz&listenerOrder=random Query: brand=phet&ea&fuzz&listenerOrder=random Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26listenerOrder%3Drandom&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323707583%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26listenerOrder%3Drandom&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323707583%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323707583%7D&brand=phet&ea&fuzz&listenerOrder=random [CONSOLE] enabling assert [CONSOLE] listenerOrder random seed: 453425 [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt : listenerOrderRandom https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326242439%7D&brand=phet&ea&fuzz&listenerOrder=random Query: brand=phet&ea&fuzz&listenerOrder=random Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26listenerOrder%3Drandom&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326242439%7D [NAVIGATED] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26listenerOrder%3Drandom&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326242439%7D [NAVIGATED] about:blank [NAVIGATED] https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326242439%7D&brand=phet&ea&fuzz&listenerOrder=random [CONSOLE] enabling assert [CONSOLE] listenerOrder random seed: 587768 [PAGE ERROR] Error: TypeError: this.layout is not a function at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Bayes Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : fuzz : unbuilt : listenerOrderRandom http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22fuzz%22%2C%22unbuilt%22%2C%22listenerOrderRandom%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684329680147%7D&brand=phet&ea&fuzz&listenerOrder=random Query: brand=phet&ea&fuzz&listenerOrder=random Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) id: Sparky Puppeteer Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : multitouch-fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317794020%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false Query: brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false TypeError: this.layout is not a function NormalModeSpectrumAccordionBox/<@http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at layout (NormalModeSpectrumAccordionBox.js:252:11) at (ReadOnlyProperty.ts:411:14) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) at (Sim.ts:895:16) at i (Sim.ts:911:21) at (Sim.ts:895:16) at i (Sim.ts:911:21) at (Sim.ts:895:16) at i (Sim.ts:911:21) at (Sim.ts:895:16) at (Sim.ts:988:13) at start (normal-modes-main.js:35:6) at callback (simLauncher.ts:67:8) at launchSimulation (simLauncher.ts:88:26) at listener (asyncLoader.ts:50:42) at forEach (asyncLoader.ts:50:21) at proceedIfReady (asyncLoader.ts:63:11) at image (logo_png.ts:6:0) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dfalse&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317794020%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dfalse&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317794020%7D [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317794020%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false [CONSOLE] enabling assert [CONSOLE] [JavaScript Warning: "An AudioContext was prevented from starting automatically. It must be created or resumed after a user gesture on the page." {file: "http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/tambo/js/phetAudioContext.js" line: 15}] [CONSOLE] [JavaScript Warning: "WebGL warning: : WebglAllowWindowsNativeGl:false restricts context creation on this system." {file: "http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/scenery/js/util/Utils.js" line: 443}] [CONSOLE] [JavaScript Warning: "Failed to create WebGL context: WebGL creation failed: * WebglAllowWindowsNativeGl:false restricts context creation on this system. () * Exhausted GL driver options. (FEATURE_FAILURE_WEBGL_EXHAUSTED_DRIVERS)" {file: "http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/scenery/js/util/Utils.js" line: 443}] [CONSOLE] [JavaScript Warning: "WebGL warning: : WebglAllowWindowsNativeGl:false restricts context creation on this system." {file: "http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/scenery/js/util/Utils.js" line: 443}] [CONSOLE] [JavaScript Warning: "Failed to create WebGL context: WebGL creation failed: * WebglAllowWindowsNativeGl:false restricts context creation on this system. () * Exhausted GL driver options. (FEATURE_FAILURE_WEBGL_EXHAUSTED_DRIVERS)" {file: "http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/scenery/js/util/Utils.js" line: 443}] [CONSOLE] continuous-test-error [PAGE ERROR] TypeError: this.layout is not a function id: "Sparky Node Firefox" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : multitouch-fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318937416%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false Query: brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dfalse&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318937416%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dfalse&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318937416%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318937416%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : multitouch-fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323014844%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false Query: brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dfalse&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323014844%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dfalse&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323014844%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323014844%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : multitouch-fuzz : unbuilt https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684325456850%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false Query: brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dfalse&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684325456850%7D [NAVIGATED] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dfalse&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684325456850%7D [NAVIGATED] about:blank [NAVIGATED] https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684325456850%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Bayes Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : multitouch-fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22multitouch-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684328073685%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false Query: brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=false Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) id: Sparky Puppeteer Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : pan-and-zoom-fuzz : unbuilt https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317729941%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true Query: brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dtrue&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317729941%7D [NAVIGATED] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dtrue&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317729941%7D [NAVIGATED] about:blank [NAVIGATED] https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684317729941%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Bayes Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : pan-and-zoom-fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319387630%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true Query: brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dtrue&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319387630%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dtrue&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319387630%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319387630%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : pan-and-zoom-fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323229821%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true Query: brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dtrue&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323229821%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dtrue&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323229821%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323229821%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : pan-and-zoom-fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326870399%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true Query: brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dtrue&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326870399%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dtrue&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326870399%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684326870399%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : pan-and-zoom-fuzz : unbuilt http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684329250057%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true Query: brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dtrue&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684329250057%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26fuzzPointers%3D2%26supportsPanAndZoom%3Dtrue&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684329250057%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22pan-and-zoom-fuzz%22%2C%22unbuilt%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684329250057%7D&brand=phet&ea&fuzz&fuzzPointers=2&supportsPanAndZoom=true [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : xss-fuzz http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318175654%7D&brand=phet&ea&fuzz&stringTest=xss Query: brand=phet&ea&fuzz&stringTest=xss Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26stringTest%3Dxss&duration=10000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318175654%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26stringTest%3Dxss&duration=10000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318175654%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684318175654%7D&brand=phet&ea&fuzz&stringTest=xss [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : xss-fuzz http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319202822%7D&brand=phet&ea&fuzz&stringTest=xss Query: brand=phet&ea&fuzz&stringTest=xss Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26stringTest%3Dxss&duration=10000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319202822%7D [NAVIGATED] http://127.0.0.1/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26stringTest%3Dxss&duration=10000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319202822%7D [NAVIGATED] about:blank [NAVIGATED] http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684319202822%7D&brand=phet&ea&fuzz&stringTest=xss [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at http://127.0.0.1/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Sparky Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ---------------------------------- normal-modes : xss-fuzz https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323989263%7D&brand=phet&ea&fuzz&stringTest=xss Query: brand=phet&ea&fuzz&stringTest=xss Uncaught TypeError: this.layout is not a function TypeError: this.layout is not a function at layout (NormalModeSpectrumAccordionBox.js:252:11) at listener (ReadOnlyProperty.ts:411:4) at link (NormalModeSpectrumAccordionBox.js:235:33) at (OneDimensionScreenView.js:78:43) at (OneDimensionScreen.js:35:15) at createView (Screen.ts:307:22) at initializeView (Sim.ts:889:15) at (Sim.ts:897:25) [URL] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26stringTest%3Dxss&duration=10000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323989263%7D [NAVIGATED] https://sparky.colorado.edu/continuous-testing/aqua/html/sim-test.html?url=..%2F..%2Fct-snapshots%2F1684316519693%2Fnormal-modes%2Fnormal-modes_en.html&simQueryParameters=brand%3Dphet%26ea%26fuzz%26stringTest%3Dxss&duration=10000&testInfo=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323989263%7D [NAVIGATED] about:blank [NAVIGATED] https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/normal-modes/normal-modes_en.html?continuousTest=%7B%22test%22%3A%5B%22normal-modes%22%2C%22xss-fuzz%22%5D%2C%22snapshotName%22%3A%22snapshot-1684316519693%22%2C%22timestamp%22%3A1684323989263%7D&brand=phet&ea&fuzz&stringTest=xss [CONSOLE] enabling assert [PAGE ERROR] Error: TypeError: this.layout is not a function at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:199:12 at NumberProperty.link (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/axon/js/ReadOnlyProperty.js:326:5) at new NormalModeSpectrumAccordionBox (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/NormalModeSpectrumAccordionBox.js:184:34) at new OneDimensionScreenView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/view/OneDimensionScreenView.js:68:44) at OneDimensionScreen.createView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/normal-modes/js/one-dimension/OneDimensionScreen.js:31:18) at OneDimensionScreen.initializeView (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Screen.js:232:23) at Array. (https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:723:16) at https://sparky.colorado.edu/continuous-testing/ct-snapshots/1684316519693/chipper/dist/js/joist/js/Sim.js:732:21 [CONSOLE] continuous-test-error id: "Bayes Node Puppeteer" Snapshot from 5/17/2023, 3:41:59 AM ```
jonathanolson commented 1 year ago

Hah:

// needed to center based on the recalculated layout (layout should be a private method, TODO: fix)
this.layout();

Fixed above.

pixelzoom commented 1 year ago

FYI, this was causing problems in Unit Rates, https://github.com/phetsims/unit-rates/issues/218. Are we not doing screenshot comparisons to look for regressions?

It would be nice to get this issue reviewed and closed. It's been assigned for review since May 17, 2023.

marlitas commented 1 year ago

Thanks for bringing light to this. I think the review is pretty close to wrap up. I committed some notes on May 24th and looks like I forgot to assign @jonathanolson back to it afterwards. Doing so now.

jonathanolson commented 2 months ago

Looks like no REVIEW/TODOs in the code, closing!