<?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.7</version>
  </parent>

  <artifactId>Jewel-Light-NoFlat-Secondary-Violet-Theme</artifactId>
  <version>0.9.7</version>
  <packaging>swc</packaging>

  <name>Apache Royale: Framework: Themes: Jewel-Light-NoFlat-Secondary-Violet-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>
    </plugins>
  </build>

<properties><project.build.outputTimestamp>2020-05-05T16:16:59Z</project.build.outputTimestamp></properties></project>
