<?xml version="1.0" encoding="UTF-8"?>
<!--

  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.

-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.royale.framework</groupId>
    <artifactId>themes</artifactId>
    <version>0.9.4-SNAPSHOT</version>
  </parent>

  <artifactId>Jewel-Light-NoFlat-Primary-Orange-Theme</artifactId>
  <version>0.9.4-SNAPSHOT</version>
  <packaging>swc</packaging>

  <name>Apache Royale: Framework: Themes: Jewel-Light-NoFlat-Primary-Orange-Theme</name>

  <build>
    <sourceDirectory>src/main/royale</sourceDirectory>
    <plugins>
      <plugin>
        <groupId>org.apache.royale.compiler</groupId>
        <artifactId>royale-maven-plugin</artifactId>
        <version>${royale.compiler.version}</version>
        <extensions>true</extensions>
        <configuration>
          <includeFiles>
            <include-file>
              <name>assets/*</name>
              <path>../../JewelTheme/src/main/resources/assets/*</path>
            </include-file>
            <include-file>
              <name>defaults.css</name>
              <path>../src/main/resources/defaults.css</path>
            </include-file>
          </includeFiles>
        </configuration>
      </plugin>

       <plugin>
        <groupId>nl.geodienstencentrum.maven</groupId>
        <artifactId>sass-maven-plugin</artifactId>
        <configuration>
          <resources>
            <!-- Depends on JewelTheme SASS framework files-->
            <resource>
                <source>
                    <directory>${basedir}/src/main/sass</directory>
                    <includes>
                        <include>defaults.sass</include>
                    </includes>
                </source>
                <destination>${basedir}/src/main/resources</destination>
            </resource>
          </resources>
        </configuration>
        <executions>
          <execution>
              <id>generate-css-using-sass</id>
              <goals>
                  <goal>update-stylesheets</goal>
              </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>
