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

<tobago-config
    xmlns="http://myfaces.apache.org/tobago/tobago-config"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://myfaces.apache.org/tobago/tobago-config http://myfaces.apache.org/tobago/tobago-config-5.0.xsd"
    version="5.0">

  <name>tobago-theme-standard</name>

  <ordering>
    <after>
      <name>tobago-core</name>
    </after>
  </ordering>

  <theme-definitions>
    <theme-definition>
      <name>standard</name>
      <display-name>Standard Theme</display-name>
      <versioned>true</versioned>
      <resources production="true">
        <includes>
          <script name="/webjars/webcomponents__custom-elements/1.2.1/custom-elements.min.js"/>
<!--          <script name="/webjars/jquery/3.4.1/jquery.min.js"/>-->
          <script name="/webjars/tether/1.4.0/js/tether.min.js"/>
          <script name="/webjars/popper.js/1.14.3/umd/popper.min.js"/>
          <script name="/webjars/momentjs/2.24.0/min/moment-with-locales.min.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/jsf.js"/>
<!--          <script name="/tobago/standard/tobago-bootstrap/${project.version}/node_modules/@babel/polyfill/dist/polyfill.js"/>-->
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-polyfill.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago.min.js"/>
          <style name="/webjars/tether/1.4.0/css/tether.min.css"/>
          <style name="/tobago/standard/tobago-bootstrap/${project.version}/css/tobago.min.css"/>
          <style name="/webjars/font-awesome/4.7.0/css/font-awesome.min.css"/>
        </includes>
      </resources>
      <resources production="false">
        <includes>
          <script name="/webjars/webcomponents__custom-elements/1.2.1/externs/custom-elements.js"/>
<!--          <script name="/webjars/jquery/3.4.1/jquery.js"/>-->
          <script name="/webjars/tether/1.4.0/js/tether.js"/>
          <script name="/webjars/popper.js/1.14.3/umd/popper.js"/>
          <script name="/webjars/momentjs/2.24.0/min/moment-with-locales.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/jsf-development.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-deltaspike.js"/>
<!--          <script name="/tobago/standard/tobago-bootstrap/${project.version}/node_modules/@babel/polyfill/dist/polyfill.js"/>-->
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-polyfill.js"/>
          <script type="module" name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-bundle.js"/>
<!--
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/ext-bootstrap.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-listener.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-core.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-dropdown.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-date.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-command.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-file.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-focus.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-header-footer.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-in.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-jsf.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-overlay.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-panel.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-popover.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-popup.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-reload.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-scroll.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-select-....js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-sheet.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-split-layout.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-stars.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-suggest.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-tab.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-tree.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-tree-listbox.js"/>
          <script name="/tobago/standard/tobago-bootstrap/${project.version}/js/tobago-utils.js"/>
-->
          <style name="/webjars/tether/1.4.0/css/tether.css"/>
          <style name="/tobago/standard/tobago-bootstrap/${project.version}/css/tobago.css"/>
          <style name="/webjars/font-awesome/4.7.0/css/font-awesome.css"/>
        </includes>
      </resources>
    </theme-definition>
  </theme-definitions>
</tobago-config>
