UNPKG

angular-formio-proyectoscolfuturo

Version:

Form.io Angular JSON Form Renderer ========================== This library serves as a Dynamic JSON Powered Form rendering library for [Angular](https://angular.io). This works by providing a JSON schema to a ```<formio>``` Angular component, where tha

842 lines (833 loc) 204 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('formiojs-proyectoscolfuturo'), require('lodash'), require('lodash/each'), require('lodash/intersection'), require('@angular/router'), require('lodash/merge'), require('lodash/throttle'), require('lodash/cloneDeep'), require('@angular/common'), require('@angular/forms'), require('rxjs'), require('ngx-bootstrap/pagination')) : typeof define === 'function' && define.amd ? define(['exports', '@angular/core', 'formiojs-proyectoscolfuturo', 'lodash', 'lodash/each', 'lodash/intersection', '@angular/router', 'lodash/merge', 'lodash/throttle', 'lodash/cloneDeep', '@angular/common', '@angular/forms', 'rxjs', 'ngx-bootstrap/pagination'], factory) : (global = global || self, factory(global['formio-manager'] = {}, global.core, global.formiojsProyectoscolfuturo, global._, global._each, global._intersection, global.router, global._merge, global._throttle, global._cloneDeep, global.common, global.forms, global.rxjs, global.pagination)); }(this, function (exports, core, formiojsProyectoscolfuturo, _, _each, _intersection, router, _merge, _throttle, _cloneDeep, common, forms, rxjs, pagination) { 'use strict'; var ___default = 'default' in _ ? _['default'] : _; _each = _each && _each.hasOwnProperty('default') ? _each['default'] : _each; _intersection = _intersection && _intersection.hasOwnProperty('default') ? _intersection['default'] : _intersection; _merge = _merge && _merge.hasOwnProperty('default') ? _merge['default'] : _merge; _throttle = _throttle && _throttle.hasOwnProperty('default') ? _throttle['default'] : _throttle; _cloneDeep = _cloneDeep && _cloneDeep.hasOwnProperty('default') ? _cloneDeep['default'] : _cloneDeep; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FormManagerConfig = /** @class */ (function () { function FormManagerConfig() { this.tag = ''; this.includeSearch = false; this.saveDraft = false; } FormManagerConfig.decorators = [ { type: core.Injectable }, ]; return FormManagerConfig; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FormioAppConfig = /** @class */ (function () { function FormioAppConfig() { this.appUrl = ''; this.apiUrl = ''; } FormioAppConfig.decorators = [ { type: core.Injectable }, ]; return FormioAppConfig; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FormioAuthConfig = /** @class */ (function () { function FormioAuthConfig() { } FormioAuthConfig.decorators = [ { type: core.Injectable }, ]; return FormioAuthConfig; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FormioAuthService = /** @class */ (function () { function FormioAuthService(appConfig, config) { var _this = this; this.appConfig = appConfig; this.config = config; this.authenticated = false; this.formAccess = {}; this.submissionAccess = {}; this.is = {}; this.user = null; if (this.appConfig && this.appConfig.appUrl) { formiojsProyectoscolfuturo.Formio.setBaseUrl(this.appConfig.apiUrl); formiojsProyectoscolfuturo.Formio.setProjectUrl(this.appConfig.appUrl); formiojsProyectoscolfuturo.Formio.formOnly = !!this.appConfig.formOnly; } else { console.error('You must provide an AppConfig within your application!'); } this.loginForm = this.appConfig.appUrl + '/' + _.get(this.config, 'login.form', 'user/login'); this.registerForm = this.appConfig.appUrl + '/' + _.get(this.config, 'register.form', 'user/login'); this.onLogin = new core.EventEmitter(); this.onLogout = new core.EventEmitter(); this.onRegister = new core.EventEmitter(); this.onUser = new core.EventEmitter(); this.onError = new core.EventEmitter(); this.ready = new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { _this.readyResolve = resolve; _this.readyReject = reject; })); // Register for the core events. formiojsProyectoscolfuturo.Formio.events.on('formio.badToken', (/** * @return {?} */ function () { return _this.logoutError(); })); formiojsProyectoscolfuturo.Formio.events.on('formio.sessionExpired', (/** * @return {?} */ function () { return _this.logoutError(); })); this.init(); } /** * @param {?} submission * @return {?} */ FormioAuthService.prototype.onLoginSubmit = /** * @param {?} submission * @return {?} */ function (submission) { this.setUser(submission); this.onLogin.emit(submission); }; /** * @param {?} submission * @return {?} */ FormioAuthService.prototype.onRegisterSubmit = /** * @param {?} submission * @return {?} */ function (submission) { this.setUser(submission); this.onRegister.emit(submission); }; /** * @return {?} */ FormioAuthService.prototype.init = /** * @return {?} */ function () { var _this = this; this.projectReady = formiojsProyectoscolfuturo.Formio.makeStaticRequest(this.appConfig.appUrl).then((/** * @param {?} project * @return {?} */ function (project) { _.each(project.access, (/** * @param {?} access * @return {?} */ function (access) { _this.formAccess[access.type] = access.roles; })); }), (/** * @return {?} */ function () { _this.formAccess = {}; return null; })); // Get the access for this project. this.accessReady = formiojsProyectoscolfuturo.Formio.makeStaticRequest(this.appConfig.appUrl + '/access').then((/** * @param {?} access * @return {?} */ function (access) { _.each(access.forms, (/** * @param {?} form * @return {?} */ function (form) { _this.submissionAccess[form.name] = {}; form.submissionAccess.forEach((/** * @param {?} subAccess * @return {?} */ function (subAccess) { _this.submissionAccess[form.name][subAccess.type] = subAccess.roles; })); })); _this.roles = access.roles; return access; }), (/** * @return {?} */ function () { _this.roles = {}; return null; })); this.userReady = formiojsProyectoscolfuturo.Formio.currentUser().then((/** * @param {?} user * @return {?} */ function (user) { _this.setUser(user); return user; })); // Trigger we are redy when all promises have resolved. if (this.accessReady) { this.accessReady .then((/** * @return {?} */ function () { return _this.projectReady; })) .then((/** * @return {?} */ function () { return _this.userReady; })) .then((/** * @return {?} */ function () { return _this.readyResolve(true); })) .catch((/** * @param {?} err * @return {?} */ function (err) { return _this.readyReject(err); })); } }; /** * @param {?} user * @return {?} */ FormioAuthService.prototype.setUser = /** * @param {?} user * @return {?} */ function (user) { if (user) { this.user = user; localStorage.setItem('formioAppUser', JSON.stringify(user)); this.setUserRoles(); } else { this.user = null; this.is = {}; localStorage.removeItem('formioAppUser'); formiojsProyectoscolfuturo.Formio.clearCache(); formiojsProyectoscolfuturo.Formio.setUser(null); } this.authenticated = !!formiojsProyectoscolfuturo.Formio.getToken(); this.onUser.emit(this.user); }; /** * @return {?} */ FormioAuthService.prototype.setUserRoles = /** * @return {?} */ function () { var _this = this; if (this.accessReady) { this.accessReady.then((/** * @return {?} */ function () { _.each(_this.roles, (/** * @param {?} role * @param {?} roleName * @return {?} */ function (role, roleName) { if (_this.user.roles.indexOf(role._id) !== -1) { _this.is[roleName] = true; } })); })); } }; /** * @return {?} */ FormioAuthService.prototype.logoutError = /** * @return {?} */ function () { this.setUser(null); localStorage.removeItem('formioToken'); this.onError.emit(); }; /** * @return {?} */ FormioAuthService.prototype.logout = /** * @return {?} */ function () { var _this = this; this.setUser(null); localStorage.removeItem('formioToken'); formiojsProyectoscolfuturo.Formio.logout() .then((/** * @return {?} */ function () { return _this.onLogout.emit(); })) .catch((/** * @return {?} */ function () { return _this.logoutError(); })); }; FormioAuthService.decorators = [ { type: core.Injectable }, ]; /** @nocollapse */ FormioAuthService.ctorParameters = function () { return [ { type: FormioAppConfig }, { type: FormioAuthConfig } ]; }; return FormioAuthService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FormManagerService = /** @class */ (function () { function FormManagerService(appConfig, config, auth) { var _this = this; this.appConfig = appConfig; this.config = config; this.auth = auth; if (this.appConfig && this.appConfig.appUrl) { formiojsProyectoscolfuturo.Formio.setBaseUrl(this.appConfig.apiUrl); formiojsProyectoscolfuturo.Formio.setProjectUrl(this.appConfig.appUrl); } else { console.error('You must provide an AppConfig within your application!'); } this.allAccessMap = { 'update_all': 'formEdit', 'delete_all': 'formDelete' }; this.ownAccessMap = { 'update_own': 'formEdit', 'delete_own': 'formDelete' }; this.actionAllowed = (/** * @param {?} action * @return {?} */ function (action) { return _this.isActionAllowed(action); }); this.reset(); } /** * @param {?} action * @return {?} */ FormManagerService.prototype.isActionAllowed = /** * @param {?} action * @return {?} */ function (action) { return this.access[action]; }; /** * @return {?} */ FormManagerService.prototype.setAccess = /** * @return {?} */ function () { var _this = this; this.access = { formCreate: true, formView: true, formEdit: true, formDelete: true, submissionIndex: true }; if (this.auth) { this.access = { formCreate: false, formView: false, formEdit: false, formDelete: false, submissionIndex: false }; this.ready = this.auth.ready.then((/** * @return {?} */ function () { /** @type {?} */ var adminRoles = []; _each(_this.auth.roles, (/** * @param {?} role * @param {?} name * @return {?} */ function (role, name) { if (role.admin) { adminRoles.push(role._id); } })); if (_this.auth.user && _this.auth.user.roles) { _this.auth.user.roles.forEach((/** * @param {?} roleId * @return {?} */ function (roleId) { if (adminRoles.indexOf(roleId) !== -1) { _this.access.formCreate = true; _this.access.formView = true; _this.access.formEdit = true; _this.access.formDelete = true; _this.access.submissionIndex = true; } if (!_this.access.formCreate) { _this.access.formCreate = (_this.auth.formAccess.create_all.indexOf(roleId) !== -1); } if (!_this.access.formView) { _this.access.formView = (_this.auth.formAccess.read_all.indexOf(roleId) !== -1); } if (!_this.access.formEdit) { _this.access.formEdit = (_this.auth.formAccess.update_all.indexOf(roleId) !== -1); } if (!_this.access.formDelete) { _this.access.formDelete = (_this.auth.formAccess.delete_all.indexOf(roleId) !== -1); } if (!_this.access.submissionIndex) { _this.access.submissionIndex = (_this.auth.formAccess.read_all.indexOf(roleId) !== -1); } })); } })); } else { this.ready = Promise.resolve(false); } }; /** * @param {?=} route * @return {?} */ FormManagerService.prototype.reset = /** * @param {?=} route * @return {?} */ function (route) { var _this = this; if (route) { route.params.subscribe((/** * @param {?} params * @return {?} */ function (params) { if (params.id) { _this.formio = new formiojsProyectoscolfuturo.Formio(_this.formio.formsUrl + "/" + params.id); } else { _this.reset(); } })); } else { this.formio = new formiojsProyectoscolfuturo.Formio(this.appConfig.appUrl); this.setAccess(); } }; /** * @param {?} roles * @return {?} */ FormManagerService.prototype.hasAccess = /** * @param {?} roles * @return {?} */ function (roles) { if (!this.auth.user) { return false; } return !!_intersection(roles, this.auth.user.roles).length; }; /** * @param {?} form * @return {?} */ FormManagerService.prototype.setForm = /** * @param {?} form * @return {?} */ function (form) { var _this = this; if (form.access) { // Check if they have access here. form.access.forEach((/** * @param {?} access * @return {?} */ function (access) { // Check for all access. if (_this.allAccessMap[access.type] && !_this.access[_this.allAccessMap[access.type]]) { _this.access[_this.allAccessMap[access.type]] = _this.hasAccess(access.roles); } // Check for own access. if (_this.auth && _this.auth.user && (form._id === _this.auth.user._id) && _this.ownAccessMap[access.type] && !_this.access[_this.ownAccessMap[access.type]]) { _this.access[_this.ownAccessMap[access.type]] = _this.hasAccess(access.roles); } })); } return form; }; /** * @return {?} */ FormManagerService.prototype.loadForm = /** * @return {?} */ function () { var _this = this; return this.formio.loadForm().then((/** * @param {?} form * @return {?} */ function (form) { return _this.setForm(form); })); }; /** * @param {?} route * @return {?} */ FormManagerService.prototype.setSubmission = /** * @param {?} route * @return {?} */ function (route) { var _this = this; return new Promise((/** * @param {?} resolve * @return {?} */ function (resolve) { route.params.subscribe((/** * @param {?} params * @return {?} */ function (params) { _this.formio = new formiojsProyectoscolfuturo.Formio(_this.formio.submissionsUrl + "/" + params.id); resolve(_this.formio); })); })); }; /** * @return {?} */ FormManagerService.prototype.loadForms = /** * @return {?} */ function () { return this.formio.loadForms({ params: { tags: this.config.tag } }); }; /** * @param {?} form * @return {?} */ FormManagerService.prototype.createForm = /** * @param {?} form * @return {?} */ function (form) { return this.formio.createform(form); }; FormManagerService.decorators = [ { type: core.Injectable }, ]; /** @nocollapse */ FormManagerService.ctorParameters = function () { return [ { type: FormioAppConfig }, { type: FormManagerConfig }, { type: FormioAuthService } ]; }; return FormManagerService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FormManagerIndexComponent = /** @class */ (function () { function FormManagerIndexComponent(service, route, router$$1, config) { this.service = service; this.route = route; this.router = router$$1; this.config = config; this.gridQuery = { tags: this.config.tag, type: 'form' }; this.refreshGrid = new core.EventEmitter(); } /** * @return {?} */ FormManagerIndexComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.service.reset(); }; /** * @return {?} */ FormManagerIndexComponent.prototype.onSearch = /** * @return {?} */ function () { /** @type {?} */ var searchInput = this.search.nativeElement.value; if (searchInput.length > 0) { this.gridQuery.skip = 0; this.gridQuery.title__regex = '/' + searchInput + '/i'; } else { delete this.gridQuery.title__regex; } this.refreshGrid.emit(this.gridQuery); }; /** * @param {?} action * @return {?} */ FormManagerIndexComponent.prototype.onAction = /** * @param {?} action * @return {?} */ function (action) { this.router.navigate([action.row._id, action.action], { relativeTo: this.route }); }; /** * @param {?} row * @return {?} */ FormManagerIndexComponent.prototype.onSelect = /** * @param {?} row * @return {?} */ function (row) { this.router.navigate([row._id, 'view'], { relativeTo: this.route }); }; /** * @return {?} */ FormManagerIndexComponent.prototype.onCreateItem = /** * @return {?} */ function () { this.router.navigate(['create'], { relativeTo: this.route }); }; FormManagerIndexComponent.decorators = [ { type: core.Component, args: [{ template: "<div class=\"input-group mb-3\" *ngIf=\"config.includeSearch\"> <input type=\"text\" class=\"form-control\" placeholder=\"Search Forms\" aria-label=\"Search Forms\" aria-describedby=\"button-search\" #search> <div class=\"input-group-append\"> <button class=\"btn btn-outline-secondary\" type=\"button\" id=\"button-search\" (click)=\"onSearch()\"><i class=\"fa fa-search\"></i> Search</button> </div> </div> <formio-grid *ngIf=\"service.ready\" [formio]=\"service.formio\" [gridType]=\"'form'\" [query]=\"{tags: config.tag, type: 'form'}\" [refresh]=\"refreshGrid\" [isActionAllowed]=\"service.actionAllowed\" (rowAction)=\"onAction($event)\" (rowSelect)=\"onSelect($event)\" (createItem)=\"onCreateItem()\" ></formio-grid> " },] }, ]; /** @nocollapse */ FormManagerIndexComponent.ctorParameters = function () { return [ { type: FormManagerService }, { type: router.ActivatedRoute }, { type: router.Router }, { type: FormManagerConfig } ]; }; FormManagerIndexComponent.propDecorators = { search: [{ type: core.ViewChild, args: ['search',] }] }; return FormManagerIndexComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FormioAlerts = /** @class */ (function () { function FormioAlerts() { this.alerts = []; } /** * @param {?} alert * @return {?} */ FormioAlerts.prototype.setAlert = /** * @param {?} alert * @return {?} */ function (alert) { this.alerts = [alert]; }; /** * @param {?} alert * @return {?} */ FormioAlerts.prototype.addAlert = /** * @param {?} alert * @return {?} */ function (alert) { this.alerts.push(alert); }; /** * @param {?} alerts * @return {?} */ FormioAlerts.prototype.setAlerts = /** * @param {?} alerts * @return {?} */ function (alerts) { this.alerts = alerts; }; return FormioAlerts; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ // >>>>>>> upstream/master /* tslint:disable */ var FormBuilderComponent = /** @class */ (function () { function FormBuilderComponent(config) { var _this = this; this.config = config; if (this.config) { formiojsProyectoscolfuturo.Formio.setBaseUrl(this.config.apiUrl); formiojsProyectoscolfuturo.Formio.setProjectUrl(this.config.appUrl); } else { console.warn('You must provide an AppConfig within your application!'); } this.change = new core.EventEmitter(); this.ready = new Promise((/** * @param {?} resolve * @return {?} */ function (resolve) { _this.readyResolve = resolve; })); } /** * @param {?} instance * @return {?} */ FormBuilderComponent.prototype.setInstance = /** * @param {?} instance * @return {?} */ function (instance) { var _this = this; this.formio = instance; instance.on('saveComponent', (/** * @return {?} */ function () { return _this.change.emit({ type: 'saveComponent', form: instance.schema }); })); instance.on('updateComponent', (/** * @return {?} */ function () { return _this.change.emit({ type: 'updateComponent', form: instance.schema }); })); instance.on('deleteComponent', (/** * @return {?} */ function () { return _this.change.emit({ type: 'deleteComponent', form: instance.schema }); })); this.readyResolve(instance); return instance; }; /** * @param {?} display * @return {?} */ FormBuilderComponent.prototype.setDisplay = /** * @param {?} display * @return {?} */ function (display) { var _this = this; return this.builder.setDisplay(display).then((/** * @param {?} instance * @return {?} */ function (instance) { return _this.setInstance(instance); })); }; /** * @param {?} form * @return {?} */ FormBuilderComponent.prototype.buildForm = /** * @param {?} form * @return {?} */ function (form) { var _this = this; if (!form || !this.builderElement || !this.builderElement.nativeElement) { return; } if (this.builder) { return this.builder.instance.form = form; } /** @type {?} */ var Builder = this.formbuilder || formiojsProyectoscolfuturo.FormBuilder; this.builder = new Builder(this.builderElement.nativeElement, form, _.assign({ icons: 'fontawesome' }, this.options || {})); this.builder.render().then((/** * @param {?} instance * @return {?} */ function (instance) { return _this.setInstance(instance); })); }; /** * @param {?} changes * @return {?} */ FormBuilderComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes.form && changes.form.currentValue) { this.buildForm(changes.form.currentValue || { components: [] }); } }; /** * @return {?} */ FormBuilderComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { this.buildForm(this.form); }; FormBuilderComponent.decorators = [ { type: core.Component, args: [{ selector: 'form-builder', template: "<div #builder></div> ", styles: [".flatpickr-calendar{background:0 0;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08)}.flatpickr-calendar.inline,.flatpickr-calendar.open{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasTime .dayContainer,.flatpickr-calendar .hasWeeks .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:after,.flatpickr-calendar:before{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.arrowRight:after,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.rightMost:before{left:auto;right:22px}.flatpickr-calendar.arrowCenter:after,.flatpickr-calendar.arrowCenter:before{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:after,.flatpickr-calendar.arrowTop:before{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:after,.flatpickr-calendar.arrowBottom:before{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:0 0;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9)}.flatpickr-months .flatpickr-next-month.flatpickr-disabled,.flatpickr-months .flatpickr-prev-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-next-month i,.flatpickr-months .flatpickr-prev-month i{position:relative}.flatpickr-months .flatpickr-next-month.flatpickr-prev-month,.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-next-month.flatpickr-next-month,.flatpickr-months .flatpickr-prev-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-next-month:hover,.flatpickr-months .flatpickr-prev-month:hover{color:#959ea9}.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-next-month svg,.flatpickr-months .flatpickr-prev-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-next-month svg path,.flatpickr-months .flatpickr-prev-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-inner-spin-button,.numInputWrapper input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{display:block;content:\"\";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{background:0 0;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,.5);background:0 0;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:0 0;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:0;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:active,.flatpickr-current-month .flatpickr-monthDropdown-months:focus{outline:0}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:0;padding:0}.flatpickr-weekdays{background:0 0;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:0 0;color:rgba(0,0,0,.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:0 0;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day.nextMonthDay:focus,.flatpickr-day.nextMonthDay:hover,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.today.inRange,.flatpickr-day:focus,.flatpickr-day:hover{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:focus,.flatpickr-day.today:hover{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.endRange,.flatpickr-day.endRange.inRange,.flatpickr-day.endRange.nextMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.endRange:focus,.flatpickr-day.endRange:hover,.flatpickr-day.selected,.flatpickr-day.selected.inRange,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.selected:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange,.flatpickr-day.startRange.inRange,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.startRange:focus,.flatpickr-day.startRange:hover{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.endRange.startRange,.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.endRange.endRange,.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.endRange.startRange.endRange,.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.nextMonthDay,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.prevMonthDay{color:rgba(57,57,57,.3);background:0 0;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,.3);background:0 0;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:\"\";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:0 0;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-am-pm,.flatpickr-time .flatpickr-time-separator{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time .flatpickr-am-pm:focus,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time input:hover{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.choices{position:relative;margin-bottom:24px;font-size:16px}.choices:focus{outline:0}.choices:last-child{margin-bottom:0}.choices.is-disabled .choices__inner,.choices.is-disabled .choices__input{background-color:#eaeaea;cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.choices.is-disabled .choices__item{cursor:not-allowed}.choices[data-type*=select-one]{cursor:pointer}.choices[data-type*=select-one] .choices__inner{padding-bottom:7.5px}.choices[data-type*=select-one] .choices__input{display:block;width:100%;padding:10px;border-bottom:1px solid #ddd;background-color:#fff;margin:0}.choices[data-type*=select-one] .choices__button{background-image:url(../../../node_modules/formiojs-proyectoscolfuturo/dist/icons/cross-inverse.svg);padding:0;background-size:8px;position:absolute;top:50%;right:0;margin-top:-10px;margin-right:25px;height:20px;width:20px;border-radius:10em;opacity:.5}.choices[data-type*=select-one] .choices__button:focus,.choices[data-type*=select-one] .choices__button:hover{opacity:1}.choices[data-type*=select-one] .choices__button:focus{box-shadow:0 0 0 2px #00bcd4}.choices[data-type*=select-one]:after{content:\"\";height:0;width:0;border-style:solid;border-color:#333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:50%;margin-top:-2.5px;pointer-events:none}.choices[data-type*=select-one].is-open:after{border-color:transparent transparent #333 transparent;margin-top:-7.5px}.choices[data-type*=select-one][dir=rtl]:after{left:11.5px;right:auto}.choices[data-type*=select-one][dir=rtl] .choices__button{right:auto;left:0;margin-left:25px;margin-right:0}.choices[data-type*=select-multiple] .choices__inner,.choices[data-type*=text] .choices__inner{cursor:text}.choices[data-type*=select-multiple] .choices__button,.choices[data-type*=text] .choices__button{position:relative;display:inline-block;margin:0 -4px 0 8px;padding-left:16px;border-left:1px solid #008fa1;background-image:url(../../../node_modules/formiojs-proyectoscolfuturo/dist/icons/cross.svg);background-size:8px;width:8px;line-height:1;opacity:.75}.choices[data-type*=select-multiple] .choices__button:focus,.choices[data-type*=select-multiple] .choices__button:hover,.choices[data-type*=text] .choices__button:focus,.choices[data-type*=text] .choices__button:hover{opacity:1}.choices__inner{display:inline-block;vertical-align:top;width:100%;background-color:#f9f9f9;padding:7.5px 7.5px 3.75px;border:1px solid #ddd;border-radius:2.5px;font-size:14px;min-height:44px;overflow:hidden}.is-focused .choices__inner,.is-open .choices__inner{border-color:#b7b7b7}.is-open .choices__inner{border-radius:2.5px 2.5px 0 0}.is-flipped.is-open .choices__inner{border-radius:0 0 2.5px 2.5px}.choices__list{margin:0;padding-left:0;list-style:none}.choices__list--single{display:inline-block;padding:4px 16px