Preparation to bower release
diff --git a/gulp/ngXosHelpers.js b/gulp/ngXosHelpers.js
new file mode 100644
index 0000000..4888bdf
--- /dev/null
+++ b/gulp/ngXosHelpers.js
@@ -0,0 +1,85 @@
+/*eslint-env node */
+
+(function () {
+  'use strict';
+
+  const gulp = require('gulp');
+  const uglify = require('gulp-uglify');
+  const concat = require('gulp-concat');
+  const ngAnnotate = require('gulp-ng-annotate');
+  const angularFilesort = require('gulp-angular-filesort');
+  const del = require('del');
+  const babel = require('gulp-babel');
+  const sourcemaps = require('gulp-sourcemaps');
+  const rename = require('gulp-rename');
+  const sass = require('gulp-sass');
+
+  module.exports = function(options){
+
+    // delete previous builded file
+    gulp.task('cleanLib', function(){
+      return del(
+        [
+          `${options.ngXosVendor}/ngXosHelpers.min.js`,
+          `${options.ngXosVendor}/xosUiComponents.js`,
+          `${options.ngXosVendor}/ngXos.css`
+        ],
+        {force: true}
+      );
+    });
+
+    gulp.task('style', function(){
+      return gulp.src(`${options.xosHelperSource}styles/main.scss`)
+        .pipe(sourcemaps.init())
+        .pipe(sass().on('error', sass.logError))
+        .pipe(rename('xosNgLib.css'))
+        .pipe(sourcemaps.write())
+        .pipe(gulp.dest(options.ngXosStyles));
+    });
+
+    // transpile js with sourceMaps
+    gulp.task('babel', function(){
+      return gulp.src(options.xosHelperSource + '**/*.js')
+        .pipe(babel({
+          presets: ['es2015']
+        }))
+        .pipe(gulp.dest(options.xosHelperTmp));
+    });
+
+    // build
+    gulp.task('helpers', ['cleanLib', 'babel', 'style'], function(){
+      return gulp.src([options.xosHelperTmp + '**/*.js'])
+        .pipe(angularFilesort())
+        .pipe(concat('ngXosHelpers.min.js'))
+        .pipe(ngAnnotate())
+        .pipe(uglify())
+        .pipe(gulp.dest(options.ngXosVendor));
+    });
+
+    // build Dev (no minify, sourcemaps), for development purposes
+    // gulp.task('helpersDev', ['babelDev'], function(){
+    //   return gulp.src([options.xosHelperTmp + '**/*.js'])
+    //     .pipe(angularFilesort())
+    //     .pipe(concat('ngXosHelpers.js'))
+    //     .pipe(ngAnnotate())
+    //     .pipe(gulp.dest(options.ngXosVendor));
+    // });
+
+    // concat only UI Components (for free use)
+    gulp.task('uiLibrary', function(){
+      return gulp.src([
+        options.xosHelperTmp + '**/*.js',
+        !options.xosHelperTmp + 'services/rest/*.js'
+      ])
+        .pipe(angularFilesort())
+        .pipe(concat('xosUiComponents.js'))
+        .pipe(ngAnnotate())
+        .pipe(gulp.dest(options.ngXosVendor));
+    });
+
+    gulp.task('dev', function(){
+      gulp.watch(`${options.xosHelperSource}**/*.scss`, ['style']);
+      gulp.watch(options.xosHelperSource + '**/*.js', ['helpersDev']);
+    });
+  };
+})();
\ No newline at end of file