<?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.

-->


<royale-config>
   <compiler>
      <mxml>
          <children-as-data>true</children-as-data>
          <imports>
              <implicit-import>org.apache.royale.events.*</implicit-import>
              <implicit-import>org.apache.royale.geom.*</implicit-import>
              <implicit-import>org.apache.royale.core.ClassFactory</implicit-import>
              <implicit-import>org.apache.royale.core.IFactory</implicit-import>
          </imports>
      </mxml>
      <binding-value-change-event>org.apache.royale.events.ValueChangeEvent</binding-value-change-event>
      <binding-value-change-event-kind>org.apache.royale.events.ValueChangeEvent</binding-value-change-event-kind>
      <binding-value-change-event-type>valueChange</binding-value-change-event-type>
      <binding-event-handler-event>org.apache.royale.events.Event</binding-event-handler-event>
      <binding-event-handler-class>org.apache.royale.events.EventDispatcher</binding-event-handler-class>
      <states-class>org.apache.royale.states.State</states-class>
      <states-instance-override-class>org.apache.royale.states.AddItems</states-instance-override-class>
      <states-property-override-class>org.apache.royale.states.SetProperty</states-property-override-class>
      <states-event-override-class>org.apache.royale.states.SetEventHandler</states-event-override-class>
      <component-factory-class>org.apache.royale.core.ClassFactory</component-factory-class>
      <component-factory-interface>org.apache.royale.core.IFactory</component-factory-interface>

      <namespaces>
      <!-- Specify a URI to associate with a manifest of components for use as MXML -->
      <!-- elements.                                                                -->
         <namespace>
            <uri>library://ns.apache.org/royale/basic</uri>
            
            <manifest>../../frameworks/projects/Core/src/main/resources/basic-manifest.xml</manifest>
         
        </namespace>                                                 
         <namespace>
            <uri>library://ns.apache.org/royale/html5</uri>
            
            <manifest>../../frameworks/projects/HTML5/src/main/resources/html5-manifest.xml</manifest>
         
        </namespace>
		<namespace>
            <uri>library://ns.apache.org/royale/html</uri>
         	<manifest>../../frameworks/projects/HTML/src/main/resources/html-manifest.xml</manifest>
        </namespace>   
   
      </namespaces>

      <!-- List of CSS or SWC files to apply as a theme. -->
      <theme>
      </theme>
	  
   </compiler>   
</royale-config>
