/*
*
*  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.
*
*/
@namespace "http://flex.apache.org/experimental/ns";
@namespace s "library://ns.adobe.com/flex/spark";

Accordion
{
	skinClass: ClassReference("spark.skins.AccordionSkin");
}

Accordion s|ButtonBarButton
{
	cornerRadius : 0;
}

Alert 
{
    skinClass: ClassReference("spark.skins.AlertSkin");
}

BorderDataNavigator
{
	skinClass: ClassReference("spark.skins.BorderDataNavigatorSkin");
}

CallOut
{
	skinClass: ClassReference("spark.skins.spark.CallOutSkin");
}

/*CallOutArrow
{
	skinClass: ClassReference("spark.skins.spark.CallOutArrowSkin");
}*/

ColorPicker 
{
    skinClass: ClassReference("spark.skins.ColorPickerSkin");
}

ProgressBar 
{
    skinClass: ClassReference("spark.skins.ProgressBarSkin");
}

DataAccordion
{
	skinClass: ClassReference("spark.skins.DataAccordionSkin");
}

DataAccordion s|ButtonBarButton
{
	cornerRadius : 0;
}

DataNavigator
{
	skinClass: ClassReference("spark.skins.DataNavigatorSkin");
}

InlineScroller
{
	skinClass: ClassReference("spark.skins.InlineScrollerSkin");
}

Navigator
{
	skinClass: ClassReference("spark.skins.NavigatorSkin");
}

Menu {
    skinClass: ClassReference("spark.skins.MenuSkin");
}

MenuBar {
    skinClass: ClassReference("spark.skins.MenuBarSkin");
}