/*
 * 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.
 */

import 'jquery';
import 'angular';
import 'angular-acl';
import 'angular-animate';
import 'angular-sanitize';
import 'angular-strap';
import 'angular-strap/dist/angular-strap.tpl';
import 'angular1-async-filter';

import 'angular-messages';
import '@uirouter/angularjs';

import 'resize-observer-polyfill';

import 'tf-metatags';
import 'angular-translate';
import 'angular-smart-table';
import 'angular-ui-grid/ui-grid';
import 'angular-drag-and-drop-lists';
import 'angular-nvd3';
import 'angular-tree-control';
import 'angular-gridster';
import 'brace';
import 'brace/mode/xml';
import 'brace/mode/sql';
import 'brace/mode/java';
import 'brace/mode/csharp';
import 'brace/mode/dockerfile';
import 'brace/mode/snippets';
import 'brace/theme/chrome';
import 'brace/ext/language_tools';
import 'brace/ext/searchbox';
import 'file-saver';
import 'jszip';
import 'nvd3';
import 'lodash';

import 'angular-gridster/dist/angular-gridster.min.css';
import 'angular-tree-control/css/tree-control-attribute.css';
import 'angular-tree-control/css/tree-control.css';
import 'angular-ui-grid/ui-grid.css';
import 'nvd3/build/nv.d3.css';
