/**
   * @param {ButtonModel} buttonModel
   * @constructor
   */
  function MomentaryButtonInteractionStateProperty( buttonModel ) {

    DerivedProperty.call(
      this,
      [ buttonModel.overProperty, buttonModel.downProperty, buttonModel.enabledProperty ],
      function( over, down, enabled ) {
        return !enabled ? 'disabled' :
               over && !down ? 'over' :
               down ? 'pressed' :  // remain pressed regardless of whether 'over' is true
               'idle';
      } );
  }
 /**
  * @param {ButtonModel} buttonModel
  * @constructor
  */
 function ToggleButtonInteractionStateProperty( buttonModel ) {
   DerivedProperty.call(
     this,
     [ buttonModel.overProperty, buttonModel.downProperty, buttonModel.enabledProperty ],
     function( over, down, enabled ) {
       return !enabled ? 'disabled' :
              over && !(down ) ? 'over' :
              down ? 'pressed' :
              'idle';
     }
   );
 }