<?xml version="1.0"?>
<!--

  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.

-->

<!--

    Experimental Components

-->
<componentPackage>
	<!-- components -->
	<!-- Alert -->
	<component id="Alert" class="spark.components.Alert"/>
    <!-- DataAccordion -->
    <component id="DataAccordion" class="spark.components.DataAccordion"/>
    <!-- DataNavigator -->
    <component id="DataNavigator" class="spark.components.DataNavigator"/>
    <!-- DataNavigatorGroup -->
    <component id="DataNavigatorGroup" class="spark.components.DataNavigatorGroup"/>
    <!-- BorderDataNavigatorGroup -->
    <component id="BorderDataNavigator" class="spark.components.BorderDataNavigator"/>
    <!-- InlineScroller -->
    <component id="InlineScroller" class="spark.components.InlineScroller"/>
    <!-- ColorPicker -->
    <component id="ColorPicker" class="spark.components.ColorPicker"/>
    <!-- MaskedTextInput -->
    <component id="MaskedTextInput" class="spark.components.MaskedTextInput"/>
    <!-- Menu -->
    <component id="Menu" class="spark.components.Menu"/>
    <component id="MenuItemRenderer" class="spark.components.itemRenderers.MenuItemRenderer"/>
    <!-- MenuBar -->
    <component id="MenuBar" class="spark.components.MenuBar"/>
    <component id="MenuBarItemRenderer" class="spark.components.itemRenderers.MenuBarItemRenderer"/>
    <!-- ProgressBar -->
    <component id="ProgressBar" class="spark.components.ProgressBar"/>
    <!-- RichTextEditor -->
    <component id="RichTextEditor" class="spark.components.RichTextEditor"/>
    
	<!-- containers -->
    <component id="Accordion" class="spark.containers.Accordion"/>
    <component id="DeferredGroup" class="spark.containers.DeferredGroup"/>
    <component id="Navigator" class="spark.containers.Navigator"/>
    <component id="NavigatorGroup" class="spark.containers.NavigatorGroup"/>
    
    
    <!-- Horizontal and Vertical dividers and their groups -->
    <component id="Divider" class="spark.containers.Divider"/>
    <component id="HDivider" class="spark.containers.HDivider"/>
    <component id="VDivider" class="spark.containers.VDivider"/>
    <component id="DividerGroup" class="spark.containers.DividedGroup"/>
    <component id="HDividerGroup" class="spark.containers.HDividerGroup"/>
    <component id="VDividerGroup" class="spark.containers.VDividerGroup"/>
    
    <!-- layouts -->
    <component id="AccordionLayout" class="spark.layouts.AccordionLayout"/>
    <component id="CarouselLayout" class="spark.layouts.CarouselLayout"/>
    <component id="CoverflowLayout" class="spark.layouts.CoverflowLayout"/>
    <component id="InlineScrollerLayout" class="spark.layouts.InlineScrollerLayout"/>
    <component id="RolodexLayout" class="spark.layouts.RolodexLayout"/>
    <component id="StackLayout" class="spark.layouts.StackLayout"/>
    <component id="TimeMachineLayout" class="spark.layouts.TimeMachineLayout"/>
    
</componentPackage>
