
/*
 * 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 {xosCore} from '../core/index';
import {xosCrud} from './crud/crud';
import {xosDashboard} from './dashboard/dashboard';
import {XosCrudRelationService} from './crud/crud.relations.service';

export const xosViews = 'xosViews';

angular
  .module('xosViews', [xosCore])
  .service('XosCrudRelation', XosCrudRelationService)
  .component('xosCrud', xosCrud)
  .component('xosDashboard', xosDashboard);
