
/*
 * Copyright 2017-present Open Networking Foundation

 * Licensed 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 {xosDataSources} from '../datasources/index';
export const xosExtender = 'xosExtender';

import 'angular-ui-bootstrap';
import 'angular-animate';
import 'angular-toastr';
import 'oclazyload';
import {XosOnboarder, IXosOnboarder} from './services/onboard.service';


(function () {
  angular.module(xosExtender, [
    'oc.lazyLoad',
    xosDataSources
  ])
    .service('XosOnboarder', XosOnboarder)
    .run(function ($log: ng.ILogService, XosOnboarder: IXosOnboarder) {
      $log.info('[XosOnboarder] Setup');
    });
})();

