<!--

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

-->
<s:ItemRenderer
	xmlns:fx="http://ns.adobe.com/mxml/2009"
	xmlns:s="library://ns.adobe.com/flex/spark"
	xmlns:mx="library://ns.adobe.com/flex/mx">
	
	<s:states>
		<s:State name="normal"/>
		<s:State name="hovered"/>
		<s:State name="selected" />
	</s:states>
	
	<s:layout>
		<s:VerticalLayout/>
	</s:layout>
	
	<s:HGroup verticalAlign="middle" paddingTop="0" paddingBottom="0">
		<mx:Image source="{data.photo}" width="50" height="40" alpha.hovered=".5"/>
		<s:Label text="{data.name}" color.hovered="0x1313cd" color.selected="0x000000" verticalAlign="bottom"/>
	</s:HGroup>
	
</s:ItemRenderer>
