@valtimo/components 4.17.0 → 4.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/assets/css/ng-multiselect-dropdown.theme.scss +208 -0
  2. package/bundles/valtimo-components.umd.js +205 -31
  3. package/bundles/valtimo-components.umd.js.map +1 -1
  4. package/bundles/valtimo-components.umd.min.js +2 -2
  5. package/bundles/valtimo-components.umd.min.js.map +1 -1
  6. package/esm2015/lib/components/alert/alert.component.js +1 -1
  7. package/esm2015/lib/components/alert/alert.module.js +1 -1
  8. package/esm2015/lib/components/alert/alert.service.js +1 -1
  9. package/esm2015/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.js +1 -1
  10. package/esm2015/lib/components/bpmn-js-diagram/bpmn-js-diagram.module.js +1 -1
  11. package/esm2015/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.js +1 -1
  12. package/esm2015/lib/components/breadcrumb-navigation/breadcrumb-navigation.module.js +1 -1
  13. package/esm2015/lib/components/camunda/form/camunda-form.components.js +1 -1
  14. package/esm2015/lib/components/camunda/form/camunda-form.module.js +1 -1
  15. package/esm2015/lib/components/camunda/form/custom/camunda-custom-form.component.js +1 -1
  16. package/esm2015/lib/components/camunda/form/custom/camunda-custom-form.module.js +1 -1
  17. package/esm2015/lib/components/camunda/form/generated/camunda-generated-form.component.js +1 -1
  18. package/esm2015/lib/components/camunda/form/generated/camunda-generated-form.module.js +1 -1
  19. package/esm2015/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.js +1 -1
  20. package/esm2015/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.js +1 -1
  21. package/esm2015/lib/components/camunda/form/generated/formfield/camunda-formfield.service.js +1 -1
  22. package/esm2015/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.js +1 -1
  23. package/esm2015/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.js +1 -1
  24. package/esm2015/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.js +1 -1
  25. package/esm2015/lib/components/camunda/form/generated/formfield/formfield.model.js +1 -1
  26. package/esm2015/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.js +1 -1
  27. package/esm2015/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.js +1 -1
  28. package/esm2015/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.js +1 -1
  29. package/esm2015/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.js +1 -1
  30. package/esm2015/lib/components/camunda/form/generated/formfield/validation/date.validators.js +1 -1
  31. package/esm2015/lib/components/card/card.component.js +1 -1
  32. package/esm2015/lib/components/card/card.module.js +1 -1
  33. package/esm2015/lib/components/components.module.js +1 -1
  34. package/esm2015/lib/components/data-list/data-list.component.js +1 -1
  35. package/esm2015/lib/components/data-list/data-list.module.js +1 -1
  36. package/esm2015/lib/components/dropzone/dropzone.component.js +2 -2
  37. package/esm2015/lib/components/dropzone/dropzone.module.js +1 -1
  38. package/esm2015/lib/components/field-auto-focus/field-auto-focus.directive.js +1 -1
  39. package/esm2015/lib/components/field-auto-focus/field-auto-focus.module.js +1 -1
  40. package/esm2015/lib/components/file-size/file-size.module.js +1 -1
  41. package/esm2015/lib/components/file-size/file-size.pipe.js +1 -1
  42. package/esm2015/lib/components/filter-sidebar/filter-sidebar.component.js +1 -1
  43. package/esm2015/lib/components/filter-sidebar/filter-sidebar.module.js +1 -1
  44. package/esm2015/lib/components/form-io/form-io-builder.component.js +1 -1
  45. package/esm2015/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.js +63 -0
  46. package/esm2015/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.js +1 -1
  47. package/esm2015/lib/components/form-io/form-io-uploader/form-io-uploader.component.js +2 -2
  48. package/esm2015/lib/components/form-io/form-io-uploader/form-io-uploader.formio.js +1 -1
  49. package/esm2015/lib/components/form-io/form-io.component.js +5 -1
  50. package/esm2015/lib/components/form-io/form-io.module.js +2 -7
  51. package/esm2015/lib/components/form-io/formio-config.js +1 -1
  52. package/esm2015/lib/components/form-io/services/form-io-dom.service.js +1 -1
  53. package/esm2015/lib/components/form-io/services/form-io-state.service.js +13 -2
  54. package/esm2015/lib/components/left-sidebar/left-sidebar.component.js +1 -1
  55. package/esm2015/lib/components/left-sidebar/left-sidebar.module.js +1 -1
  56. package/esm2015/lib/components/list/ListFilterPipe.directive.js +1 -1
  57. package/esm2015/lib/components/list/list.component.js +4 -3
  58. package/esm2015/lib/components/list/list.module.js +1 -1
  59. package/esm2015/lib/components/menu/menu-item-text.component.js +1 -1
  60. package/esm2015/lib/components/menu/menu-routing.module.js +1 -1
  61. package/esm2015/lib/components/menu/menu.component.js +5 -3
  62. package/esm2015/lib/components/menu/menu.init.js +1 -1
  63. package/esm2015/lib/components/menu/menu.module.js +1 -1
  64. package/esm2015/lib/components/menu/menu.service.js +12 -4
  65. package/esm2015/lib/components/menu/submenu-item-text.component.js +1 -1
  66. package/esm2015/lib/components/modal/modal.component.js +1 -1
  67. package/esm2015/lib/components/modal/modal.module.js +1 -1
  68. package/esm2015/lib/components/multiselect-dropdown/multiselect-dropdown.component.js +47 -0
  69. package/esm2015/lib/components/multiselect-dropdown/multiselect-dropdown.module.js +30 -0
  70. package/esm2015/lib/components/page-header/page-header.component.js +1 -1
  71. package/esm2015/lib/components/page-header/page-header.module.js +1 -1
  72. package/esm2015/lib/components/page-title/page-title.component.js +1 -1
  73. package/esm2015/lib/components/page-title/page-title.module.js +1 -1
  74. package/esm2015/lib/components/progress-bar/progress-bar.component.js +1 -1
  75. package/esm2015/lib/components/progress-bar/progress-bar.module.js +1 -1
  76. package/esm2015/lib/components/right-sidebar/right-sidebar.component.js +1 -1
  77. package/esm2015/lib/components/right-sidebar/right-sidebar.module.js +1 -1
  78. package/esm2015/lib/components/searchable-dropdown/searchable-dropdown.component.js +1 -1
  79. package/esm2015/lib/components/searchable-dropdown/searchable-dropdown.module.js +1 -1
  80. package/esm2015/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.js +3 -3
  81. package/esm2015/lib/components/searchable-dropdown-select/searchable-dropdown-select.module.js +1 -1
  82. package/esm2015/lib/components/spinner/spinner.component.js +1 -1
  83. package/esm2015/lib/components/spinner/spinner.module.js +1 -1
  84. package/esm2015/lib/components/timeline/timeline.component.js +1 -1
  85. package/esm2015/lib/components/timeline/timeline.module.js +1 -1
  86. package/esm2015/lib/components/topbar/topbar.component.js +3 -3
  87. package/esm2015/lib/components/topbar/topbar.module.js +1 -1
  88. package/esm2015/lib/components/uploader/uploader-drag-drop.directive.js +1 -1
  89. package/esm2015/lib/components/uploader/uploader.component.js +2 -2
  90. package/esm2015/lib/components/uploader/uploader.module.js +1 -1
  91. package/esm2015/lib/components/version/version.service.js +1 -1
  92. package/esm2015/lib/components/view-content/type-converters/booleanTypeConverter.js +1 -1
  93. package/esm2015/lib/components/view-content/type-converters/dateTypeConverter.js +1 -1
  94. package/esm2015/lib/components/view-content/type-converters/enumTypeConverter.js +1 -1
  95. package/esm2015/lib/components/view-content/type-converters/relatedFilesTypeConverter.js +1 -1
  96. package/esm2015/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.js +1 -1
  97. package/esm2015/lib/components/view-content/type-converters/stringTypeConverter.js +1 -1
  98. package/esm2015/lib/components/view-content/type-converters/type-converters.model.js +1 -1
  99. package/esm2015/lib/components/view-content/view-content.service.js +1 -1
  100. package/esm2015/lib/components/webcam/webcam.component.js +3 -3
  101. package/esm2015/lib/components/webcam/webcam.module.js +1 -1
  102. package/esm2015/lib/components/widget/widget.component.js +1 -1
  103. package/esm2015/lib/components/widget/widget.module.js +1 -1
  104. package/esm2015/lib/models/alert.model.js +1 -1
  105. package/esm2015/lib/models/form-io.model.js +1 -1
  106. package/esm2015/lib/models/index.js +1 -1
  107. package/esm2015/lib/models/pagination.model.js +1 -1
  108. package/esm2015/lib/models/searchable-dropdown.model.js +1 -1
  109. package/esm2015/lib/models/timeline.model.js +1 -1
  110. package/esm2015/lib/models/version.model.js +1 -1
  111. package/esm2015/public_api.js +6 -2
  112. package/esm2015/valtimo-components.js +4 -5
  113. package/fesm2015/valtimo-components.js +177 -26
  114. package/fesm2015/valtimo-components.js.map +1 -1
  115. package/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.d.ts +2 -0
  116. package/lib/components/form-io/services/form-io-state.service.d.ts +3 -0
  117. package/lib/components/menu/menu.component.d.ts +4 -0
  118. package/lib/components/menu/menu.service.d.ts +10 -6
  119. package/lib/components/multiselect-dropdown/multiselect-dropdown.component.d.ts +15 -0
  120. package/lib/components/multiselect-dropdown/multiselect-dropdown.module.d.ts +2 -0
  121. package/lib/models/form-io.model.d.ts +4 -0
  122. package/package.json +3 -2
  123. package/public_api.d.ts +4 -0
  124. package/valtimo-components.d.ts +3 -4
  125. package/valtimo-components.metadata.json +1 -1
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/forms'), require('moment'), require('@valtimo/choicefield'), require('@angular/router'), require('ngx-logger'), require('@valtimo/config'), require('rxjs'), require('@valtimo/document'), require('@valtimo/security'), require('@ng-bootstrap/ng-bootstrap'), require('@ngx-translate/core'), require('@angular/common/http'), require('@valtimo/context'), require('rxjs/operators'), require('@angular/platform-browser'), require('bpmn-js/dist/bpmn-navigated-viewer.production.min.js'), require('heatmap.js-fixed/build/heatmap.js'), require('@valtimo/resource'), require('angular-formio'), require('jwt-decode'), require('dropzone'), require('ngx-spinner')) :
3
- typeof define === 'function' && define.amd ? define('@valtimo/components', ['exports', '@angular/core', '@angular/common', '@angular/forms', 'moment', '@valtimo/choicefield', '@angular/router', 'ngx-logger', '@valtimo/config', 'rxjs', '@valtimo/document', '@valtimo/security', '@ng-bootstrap/ng-bootstrap', '@ngx-translate/core', '@angular/common/http', '@valtimo/context', 'rxjs/operators', '@angular/platform-browser', 'bpmn-js/dist/bpmn-navigated-viewer.production.min.js', 'heatmap.js-fixed/build/heatmap.js', '@valtimo/resource', 'angular-formio', 'jwt-decode', 'dropzone', 'ngx-spinner'], factory) :
4
- (global = global || self, factory((global.valtimo = global.valtimo || {}, global.valtimo.components = {}), global.ng.core, global.ng.common, global.ng.forms, global.moment, global.choicefield, global.ng.router, global.ngxLogger, global.config, global.rxjs, global.document, global.security, global.ngBootstrap, global.core$1, global.ng.common.http, global.context, global.rxjs.operators, global.ng.platformBrowser, global.BpmnJS, global.heatmap, global.resource, global.angularFormio, global.jwt_decode, global.Dropzone, global.ngxSpinner));
5
- }(this, (function (exports, i0, common, forms, momentImported, choicefield, i1, i4, i1$1, rxjs, i2, i3, ngBootstrap, core, i1$2, context, operators, platformBrowser, BpmnJS, heatmap, resource, angularFormio, jwt_decode, Dropzone, ngxSpinner) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/forms'), require('moment'), require('@valtimo/choicefield'), require('@angular/router'), require('@valtimo/config'), require('ngx-logger'), require('rxjs'), require('@valtimo/document'), require('@valtimo/security'), require('@ng-bootstrap/ng-bootstrap'), require('@ngx-translate/core'), require('@angular/common/http'), require('@valtimo/context'), require('rxjs/operators'), require('@angular/platform-browser'), require('bpmn-js/dist/bpmn-navigated-viewer.production.min.js'), require('heatmap.js-fixed/build/heatmap.js'), require('@valtimo/resource'), require('angular-formio'), require('jwt-decode'), require('dropzone'), require('ngx-spinner'), require('ng-multiselect-dropdown')) :
3
+ typeof define === 'function' && define.amd ? define('@valtimo/components', ['exports', '@angular/core', '@angular/common', '@angular/forms', 'moment', '@valtimo/choicefield', '@angular/router', '@valtimo/config', 'ngx-logger', 'rxjs', '@valtimo/document', '@valtimo/security', '@ng-bootstrap/ng-bootstrap', '@ngx-translate/core', '@angular/common/http', '@valtimo/context', 'rxjs/operators', '@angular/platform-browser', 'bpmn-js/dist/bpmn-navigated-viewer.production.min.js', 'heatmap.js-fixed/build/heatmap.js', '@valtimo/resource', 'angular-formio', 'jwt-decode', 'dropzone', 'ngx-spinner', 'ng-multiselect-dropdown'], factory) :
4
+ (global = global || self, factory((global.valtimo = global.valtimo || {}, global.valtimo.components = {}), global.ng.core, global.ng.common, global.ng.forms, global.moment, global.choicefield, global.ng.router, global.config, global.ngxLogger, global.rxjs, global.document, global.security, global.ngBootstrap, global.core$1, global.ng.common.http, global.context, global.rxjs.operators, global.ng.platformBrowser, global.BpmnJS, global.heatmap, global.resource, global.angularFormio, global.jwt_decode, global.Dropzone, global.ngxSpinner, global.ngMultiselectDropdown));
5
+ }(this, (function (exports, i0, common, forms, momentImported, choicefield, i1, i1$1, i4, rxjs, i2, i3, ngBootstrap, core, i1$2, context, operators, platformBrowser, BpmnJS, heatmap, resource, angularFormio, jwt_decode, Dropzone, ngxSpinner, ngMultiselectDropdown) { 'use strict';
6
6
 
7
7
  jwt_decode = jwt_decode && Object.prototype.hasOwnProperty.call(jwt_decode, 'default') ? jwt_decode['default'] : jwt_decode;
8
8
 
@@ -908,8 +908,8 @@
908
908
  TopbarComponent.decorators = [
909
909
  { type: i0.Component, args: [{
910
910
  selector: 'valtimo-topbar',
911
- template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<nav class=\"navbar navbar-expand fixed-top be-top-header\">\n <div class=\"container-fluid\">\n <div class=\"be-navbar-header\">\n <a class=\"navbar-brand\" [routerLink]=\"['/']\"></a>\n </div>\n <div class=\"be-right-navbar\">\n <!-- important empty div: in order to made float-right element works on mobile -->\n <div></div>\n <ul class=\"nav navbar-nav be-user-nav float-right be-icons-nav\">\n <li class=\"nav-item dropdown special\">\n <a class=\"nav-link be-toggle-right-sidebar\" href=\"#\" role=\"button\" aria-expanded=\"false\">\n <i class=\"fas fa-user-circle user-icon\"></i>\n </a>\n </li>\n </ul>\n </div>\n </div>\n</nav>\n",
912
- styles: [".user-icon{font-size:30px;padding-top:5px}"]
911
+ template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<nav class=\"navbar navbar-expand fixed-top be-top-header\">\n <div class=\"container-fluid\">\n <div class=\"be-navbar-header\">\n <a class=\"navbar-brand\" [routerLink]=\"['/']\"></a>\n </div>\n <div class=\"be-right-navbar\">\n <!-- important empty div: in order to made float-right element works on mobile -->\n <div></div>\n <ul class=\"nav navbar-nav be-user-nav float-right be-icons-nav\">\n <li class=\"nav-item dropdown special\">\n <a class=\"nav-link be-toggle-right-sidebar\" href=\"#\" role=\"button\" aria-expanded=\"false\">\n <i class=\"mdi mdi-account-circle user-icon\"></i>\n </a>\n </li>\n </ul>\n </div>\n </div>\n</nav>\n",
912
+ styles: [".user-icon{font-size:30px}.be-toggle-right-sidebar{display:flex}"]
913
913
  },] }
914
914
  ];
915
915
  TopbarComponent.ctorParameters = function () { return []; };
@@ -958,11 +958,13 @@
958
958
  * limitations under the License.
959
959
  */
960
960
  var MenuService = /** @class */ (function () {
961
- function MenuService(configService, documentService, userProviderService, logger) {
961
+ function MenuService(configService, documentService, userProviderService, logger, menuIncludeService) {
962
962
  this.configService = configService;
963
963
  this.documentService = documentService;
964
964
  this.userProviderService = userProviderService;
965
965
  this.logger = logger;
966
+ this.menuIncludeService = menuIncludeService;
967
+ this.includeFunctionObservables = {};
966
968
  this._menuItems$ = new rxjs.BehaviorSubject(undefined);
967
969
  this.menuConfig = configService.config.menu;
968
970
  }
@@ -984,6 +986,10 @@
984
986
  var _this = this;
985
987
  var menuItems = [];
986
988
  this.menuConfig.menuItems.forEach(function (menuItem) {
989
+ if (menuItem.includeFunction !== undefined) {
990
+ _this.includeFunctionObservables[menuItem.title] =
991
+ _this.menuIncludeService.getIncludeFunction(menuItem.includeFunction);
992
+ }
987
993
  menuItem.show = true;
988
994
  menuItems.push(menuItem);
989
995
  });
@@ -1055,7 +1061,7 @@
1055
1061
  };
1056
1062
  return MenuService;
1057
1063
  }());
1058
- MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(i0.ɵɵinject(i1$1.ConfigService), i0.ɵɵinject(i2.DocumentService), i0.ɵɵinject(i3.UserProviderService), i0.ɵɵinject(i4.NGXLogger)); }, token: MenuService, providedIn: "root" });
1064
+ MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(i0.ɵɵinject(i1$1.ConfigService), i0.ɵɵinject(i2.DocumentService), i0.ɵɵinject(i3.UserProviderService), i0.ɵɵinject(i4.NGXLogger), i0.ɵɵinject(i1$1.MenuIncludeService)); }, token: MenuService, providedIn: "root" });
1059
1065
  MenuService.decorators = [
1060
1066
  { type: i0.Injectable, args: [{
1061
1067
  providedIn: 'root',
@@ -1065,7 +1071,8 @@
1065
1071
  { type: i1$1.ConfigService },
1066
1072
  { type: i2.DocumentService },
1067
1073
  { type: i3.UserProviderService },
1068
- { type: i4.NGXLogger }
1074
+ { type: i4.NGXLogger },
1075
+ { type: i1$1.MenuIncludeService }
1069
1076
  ]; };
1070
1077
 
1071
1078
  /*
@@ -1117,6 +1124,8 @@
1117
1124
  this.elRef = elRef;
1118
1125
  this.renderer = renderer;
1119
1126
  this.router = router;
1127
+ this.includeFunctionObservables = {};
1128
+ this.includeFunctionObservables = this.menuService.includeFunctionObservables;
1120
1129
  }
1121
1130
  MenuComponent.prototype.ngOnInit = function () {
1122
1131
  var _this = this;
@@ -1150,8 +1159,8 @@
1150
1159
  MenuComponent.decorators = [
1151
1160
  { type: i0.Component, args: [{
1152
1161
  selector: 'valtimo-menu',
1153
- template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ul class=\"sidebar-elements\">\n <ng-container *ngFor=\"let menuItem of menuItems\">\n <li\n [class.parent]=\"menuItem.children\"\n [hidden]=\"!menuItem.show\"\n [routerLinkActive]=\"'active'\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n >\n <a *ngIf=\"menuItem.link\" [routerLink]=\"menuItem.link\" class=\"sub-item\">\n <valtimo-menu-item-text [menuItem]=\"menuItem\"></valtimo-menu-item-text>\n </a>\n <a *ngIf=\"!menuItem.link\" class=\"sub-item\">\n <valtimo-menu-item-text [menuItem]=\"menuItem\"></valtimo-menu-item-text>\n </a>\n <ng-container *ngIf=\"menuItem.children\">\n <ul class=\"sub-menu\">\n <li class=\"title\">{{ menuItem.title | translate }}</li>\n <li\n *ngFor=\"let subMenuItem of menuItem.children\"\n [routerLinkActive]=\"'active'\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n >\n <a *ngIf=\"subMenuItem.link\" [routerLink]=\"subMenuItem.link\">\n <valtimo-submenu-item-text [submenuItem]=\"subMenuItem\"></valtimo-submenu-item-text>\n </a>\n <a *ngIf=\"!subMenuItem.link\">\n <valtimo-submenu-item-text [submenuItem]=\"subMenuItem\"></valtimo-submenu-item-text>\n </a>\n </li>\n </ul>\n </ng-container>\n </li>\n </ng-container>\n</ul>\n",
1154
- styles: [".c-default{cursor:default}.sub-item{cursor:pointer}"]
1162
+ template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ul class=\"sidebar-elements\">\n <ng-container *ngFor=\"let menuItem of menuItems\">\n <li\n [class.parent]=\"menuItem.children\"\n [hidden]=\"!menuItem.show\"\n [routerLinkActive]=\"'active'\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n [ngClass]=\"{\n 'menu-item--hidden': menuItem.includeFunction !== undefined,\n 'menu-item--visible':\n menuItem.includeFunction !== undefined &&\n (includeFunctionObservables[menuItem.title] | async)\n }\"\n >\n <a *ngIf=\"menuItem.link\" [routerLink]=\"menuItem.link\" class=\"sub-item\">\n <valtimo-menu-item-text [menuItem]=\"menuItem\"></valtimo-menu-item-text>\n </a>\n <a *ngIf=\"!menuItem.link\" class=\"sub-item\">\n <valtimo-menu-item-text [menuItem]=\"menuItem\"></valtimo-menu-item-text>\n </a>\n <ng-container *ngIf=\"menuItem.children\">\n <ul class=\"sub-menu\">\n <li class=\"title\">{{ menuItem.title | translate }}</li>\n <li\n *ngFor=\"let subMenuItem of menuItem.children\"\n [routerLinkActive]=\"'active'\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n >\n <a *ngIf=\"subMenuItem.link\" [routerLink]=\"subMenuItem.link\">\n <valtimo-submenu-item-text [submenuItem]=\"subMenuItem\"></valtimo-submenu-item-text>\n </a>\n <a *ngIf=\"!subMenuItem.link\">\n <valtimo-submenu-item-text [submenuItem]=\"subMenuItem\"></valtimo-submenu-item-text>\n </a>\n </li>\n </ul>\n </ng-container>\n </li>\n </ng-container>\n</ul>\n",
1163
+ styles: [".c-default{cursor:default}.sub-item{cursor:pointer}.menu-item--hidden{display:none}.menu-item--visible{display:block}"]
1155
1164
  },] }
1156
1165
  ];
1157
1166
  MenuComponent.ctorParameters = function () { return [
@@ -2362,6 +2371,7 @@
2362
2371
  item.listItemFields = _this.fields.map(function (field) { return ({
2363
2372
  key: field.key,
2364
2373
  label: field.label,
2374
+ type: field.type || '',
2365
2375
  value: _this.resolveObject(field, item),
2366
2376
  }); });
2367
2377
  });
@@ -2426,8 +2436,8 @@
2426
2436
  ListComponent.decorators = [
2427
2437
  { type: i0.Component, args: [{
2428
2438
  selector: 'valtimo-list',
2429
- template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"Search...\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"mdi mdi-view-headline\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"mdi mdi-view-module\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n {{ listItemField.value || '-' }}\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item)\"\n ></i>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter: searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter: searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate: {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n <br />\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate: {number: (items | listFilter: searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter: searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n",
2430
- styles: ["@charset \"UTF-8\";\n/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.table{table-layout:fixed}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;height:80px;padding-left:18px;padding-right:18px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem}td:first-child,th:first-child{padding-left:25px}th.sortable{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;user-select:none}th.sortable:after{content:\" \uF0DD\";font-family:Font Awesome\\ 5 Free;margin:auto 0 auto 5px;opacity:0;position:absolute;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}"]
2439
+ template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"Search...\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"mdi mdi-view-headline\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"mdi mdi-view-module\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item)\"\n ></i>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter: searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter: searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate: {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n <br />\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate: {number: (items | listFilter: searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter: searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-more-vert\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass != null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n</ng-template>\n",
2440
+ styles: ["@charset \"UTF-8\";\n/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;height:80px;padding-left:18px;padding-right:18px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem}td:first-child,th:first-child{padding-left:25px}th.sortable{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;user-select:none}th.sortable:after{content:\" \uF0DD\";font-family:Font Awesome\\ 5 Free;margin:auto 0 auto 5px;opacity:0;position:absolute;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon{font-size:16px}"]
2431
2441
  },] }
2432
2442
  ];
2433
2443
  ListComponent.ctorParameters = function () { return [
@@ -3328,7 +3338,7 @@
3328
3338
  UploaderComponent.decorators = [
3329
3339
  { type: i0.Component, args: [{
3330
3340
  selector: 'valtimo-uploader',
3331
- template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"upload-file-container p-5\"\n (click)=\"fileInput.click()\"\n valtimoUploaderDragDrop\n (fileDropped)=\"onFileFieldChange($event)\"\n>\n <span class=\"align-middle\"><i class=\"fa fa-cloud-upload fa-4x\"></i></span>\n <input hidden type=\"file\" #fileInput (change)=\"onFileFieldChange($event.target.files)\" multiple />\n</div>\n<div *ngIf=\"showFileList\">\n <div class=\"files-list px-3 py-2\" *ngFor=\"let resource of resources\">\n <p class=\"m-0\">\n <strong>{{ resource.name }}</strong\n ><br />\n {{ resource.sizeInBytes | filesize }}\n </p>\n <button class=\"delete-file\" (click)=\"deleteResource(resource)\">\n <i class=\"fa fa-trash text-danger\"></i>\n </button>\n </div>\n</div>\n",
3341
+ template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"upload-file-container p-5\"\n (click)=\"fileInput.click()\"\n valtimoUploaderDragDrop\n (fileDropped)=\"onFileFieldChange($event)\"\n>\n <span class=\"align-middle\"><i class=\"mdi mdi-cloud-upload\"></i></span>\n <input hidden type=\"file\" #fileInput (change)=\"onFileFieldChange($event.target.files)\" multiple />\n</div>\n<div *ngIf=\"showFileList\">\n <div class=\"files-list px-3 py-2\" *ngFor=\"let resource of resources\">\n <p class=\"m-0\">\n <strong>{{ resource.name }}</strong\n ><br />\n {{ resource.sizeInBytes | filesize }}\n </p>\n <button class=\"delete-file\" (click)=\"deleteResource(resource)\">\n <i class=\"icon mdi mdi-delete text-danger\"></i>\n </button>\n </div>\n</div>\n",
3332
3342
  styles: [".upload-file-container{background-color:#fff;background-position:50%;background-repeat:no-repeat;background-size:100px;border:2px dashed #d5d8de;color:#d5d8de;margin:0 0 1rem;text-align:center}.upload-file-container i.mdi-cloud-upload{font-size:5em}.upload-file-container:hover{cursor:pointer;opacity:.8}.files-list{background:#fff;border:1px solid #bdc0c7;display:flex;font-size:1em;justify-content:space-between;margin:1rem auto;padding:5px}.files-list .delete-file{background:transparent;border:none;cursor:pointer}.files-list .delete-file i{font-size:1.5em}"]
3333
3343
  },] }
3334
3344
  ];
@@ -3795,6 +3805,7 @@
3795
3805
  var FormIoStateService = /** @class */ (function () {
3796
3806
  function FormIoStateService() {
3797
3807
  this._documentDefinitionName$ = new rxjs.BehaviorSubject(undefined);
3808
+ this._documentId$ = new rxjs.BehaviorSubject(undefined);
3798
3809
  this._currentForm$ = new rxjs.BehaviorSubject(undefined);
3799
3810
  }
3800
3811
  Object.defineProperty(FormIoStateService.prototype, "documentDefinitionName$", {
@@ -3807,6 +3818,16 @@
3807
3818
  FormIoStateService.prototype.setDocumentDefinitionName = function (documentDefinitionName) {
3808
3819
  this._documentDefinitionName$.next(documentDefinitionName);
3809
3820
  };
3821
+ Object.defineProperty(FormIoStateService.prototype, "documentId$", {
3822
+ get: function () {
3823
+ return this._documentId$.asObservable();
3824
+ },
3825
+ enumerable: false,
3826
+ configurable: true
3827
+ });
3828
+ FormIoStateService.prototype.setDocumentId = function (documentId) {
3829
+ this._documentId$.next(documentId);
3830
+ };
3810
3831
  Object.defineProperty(FormIoStateService.prototype, "currentForm$", {
3811
3832
  get: function () {
3812
3833
  return this._currentForm$.asObservable();
@@ -3823,8 +3844,11 @@
3823
3844
  });
3824
3845
  return FormIoStateService;
3825
3846
  }());
3847
+ FormIoStateService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormIoStateService_Factory() { return new FormIoStateService(); }, token: FormIoStateService, providedIn: "root" });
3826
3848
  FormIoStateService.decorators = [
3827
- { type: i0.Injectable }
3849
+ { type: i0.Injectable, args: [{
3850
+ providedIn: 'root',
3851
+ },] }
3828
3852
  ];
3829
3853
 
3830
3854
  /*
@@ -3858,6 +3882,7 @@
3858
3882
  }
3859
3883
  FormioComponent.prototype.ngOnInit = function () {
3860
3884
  var documentDefinitionName = this.route.snapshot.paramMap.get('documentDefinitionName');
3885
+ var documentId = this.route.snapshot.paramMap.get('documentId');
3861
3886
  var formDefinition = this.form;
3862
3887
  this.formDefinition = formDefinition;
3863
3888
  this.errors = [];
@@ -3867,6 +3892,9 @@
3867
3892
  if (documentDefinitionName) {
3868
3893
  this.stateService.setDocumentDefinitionName(documentDefinitionName);
3869
3894
  }
3895
+ if (documentId) {
3896
+ this.stateService.setDocumentId(documentId);
3897
+ }
3870
3898
  this.subscribeFormRefresh();
3871
3899
  this.openLanguageSubscription();
3872
3900
  };
@@ -4120,7 +4148,7 @@
4120
4148
  FormIoUploaderComponent.decorators = [
4121
4149
  { type: i0.Component, args: [{
4122
4150
  selector: 'valtimo-formio-uploader',
4123
- template: "<valtimo-dropzone\n (fileSelected)=\"fileSelected($event)\"\n [acceptedFiles]=\"null\"\n [disabled]=\"disabled\"\n [hideFilePreview]=\"true\"\n [hideTitle]=\"hideTitle\"\n [maxFileSize]=\"maxFileSize\"\n [showMaxFileSize]=\"!hideMaxFileSize\"\n [subtitle]=\"subtitle\"\n [title]=\"title\"\n [camera]=\"camera\"\n [uploading]=\"uploading$ | async\"\n></valtimo-dropzone>\n\n<div class=\"file-preview\" *ngFor=\"let resource of _value\">\n <div class=\"file-preview-name\">\n <a href=\"#\" (click)=\"downloadFile(resource)\">\n {{ resource.originalName }}\n </a>\n </div>\n <div class=\"file-preview-size\">\n <span>\n {{ resource.size | filesize }}\n </span>\n </div>\n <div class=\"file-preview-delete\" *ngIf=\"!disabled\">\n <a (click)=\"deleteFile(resource.data.resourceId)\">\n <i class=\"icon fa fa-trash\"></i>\n </a>\n </div>\n</div>\n",
4151
+ template: "<valtimo-dropzone\n (fileSelected)=\"fileSelected($event)\"\n [acceptedFiles]=\"null\"\n [disabled]=\"disabled\"\n [hideFilePreview]=\"true\"\n [hideTitle]=\"hideTitle\"\n [maxFileSize]=\"maxFileSize\"\n [showMaxFileSize]=\"!hideMaxFileSize\"\n [subtitle]=\"subtitle\"\n [title]=\"title\"\n [camera]=\"camera\"\n [uploading]=\"uploading$ | async\"\n></valtimo-dropzone>\n\n<div class=\"file-preview\" *ngFor=\"let resource of _value\">\n <div class=\"file-preview-name\">\n <a href=\"#\" (click)=\"downloadFile(resource)\">\n {{ resource.originalName }}\n </a>\n </div>\n <div class=\"file-preview-size\">\n <span>\n {{ resource.size | filesize }}\n </span>\n </div>\n <div class=\"file-preview-delete\" *ngIf=\"!disabled\">\n <a (click)=\"deleteFile(resource.data.resourceId)\">\n <i class=\"icon mdi mdi-delete\"></i>\n </a>\n </div>\n</div>\n",
4124
4152
  styles: [".progress-bar-container{padding:15px 20px}::ng-deep .formio-component-valtimo-file .btn-secondary,::ng-deep .formio-component-valtimo-file .formio-button-add-another{display:none}::ng-deep .formio-component-valtimo-file td{border:none;padding:0!important}::ng-deep .formio-component-valtimo-file .table{border:none;border-collapse:collapse;margin:10px 0}.dropzone-container{margin-bottom:12px}.file-preview{border:1px solid #dee2e6;display:flex;margin-top:-1px}.file-preview div{padding:12px 10px}.file-preview .file-preview-name{width:65%}.file-preview .file-preview-size{width:35%}.file-preview .icon{color:#a1a1a1;cursor:pointer;font-size:1.3846rem;line-height:18px}.file-preview .icon:hover{color:grey}"]
4125
4153
  },] }
4126
4154
  ];
@@ -4246,7 +4274,7 @@
4246
4274
  DropzoneComponent.decorators = [
4247
4275
  { type: i0.Component, args: [{
4248
4276
  selector: 'valtimo-dropzone',
4249
- template: "<form #dropzone [ngClass]=\"{disabled: disabled || uploading}\" class=\"dropzone dz-clickable\">\n <div class=\"dz-message\">\n <div class=\"icon\"><span class=\"mdi mdi-cloud-upload\"></span></div>\n <ng-container *ngTemplateOutlet=\"body\"></ng-container>\n <ng-container *ngIf=\"uploading\">\n <ng-container *ngTemplateOutlet=\"progressBar\"></ng-container>\n </ng-container>\n <div class=\"dropzone-mobile-trigger needsclick\"></div>\n </div>\n <button\n (click)=\"showCamera()\"\n *ngIf=\"camera\"\n type=\"button\"\n class=\"btn btn-primary px-3 webcam-button\"\n >\n <i class=\"fa fa-camera\" aria-hidden=\"true\"></i>\n </button>\n <ng-container *ngIf=\"showingCamera$ | async\">\n <ng-container *ngTemplateOutlet=\"webcam\"></ng-container>\n </ng-container>\n</form>\n\n<ng-template #body>\n <h2 *ngIf=\"!hideTitle\" class=\"mb-4 mt-2\">{{ title || ('dropzone.drop' | translate) }}</h2>\n <span *ngIf=\"subtitle\" class=\"note mb-3\">{{ subtitle }}</span>\n <span *ngIf=\"showMaxFileSize\" class=\"note mb-3 small-font\"\n >{{ 'dropzone.maxFileSize' | translate }}<b>{{ maxFileSize }}mb</b></span\n >\n <ng-container *ngTemplateOutlet=\"preview\"></ng-container>\n</ng-template>\n\n<ng-template #preview>\n <ng-container\n *ngIf=\"{\n errorMessage: errorMessage$ | async,\n externalError: externalError$ | async,\n file: file$ | async\n } as obs\"\n >\n <ng-container *ngIf=\"obs.externalError || obs.errorMessage\">\n <div class=\"alert alert-danger mt-2 mb-0\">\n <div class=\"message\">\n {{ obs.externalError || obs.errorMessage }}\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!hideFilePreview && obs.file && !obs.externalError && !obs.errorMessage\">\n <div class=\"file\">\n <i class=\"icon mdi mdi-file-text mr-2\"></i>\n <span class=\"note\">{{ obs.file.name }}</span>\n <span class=\"note file-size\">- {{ obs.file.size | filesize: 2 }}</span>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #progressBar>\n <div class=\"progress-bar-container\">\n <valtimo-progress-bar></valtimo-progress-bar>\n </div>\n</ng-template>\n\n<ng-template #webcam>\n <valtimo-webcam (imageSaved)=\"webcamImageSaved($event)\"></valtimo-webcam>\n</ng-template>\n",
4277
+ template: "<form #dropzone [ngClass]=\"{disabled: disabled || uploading}\" class=\"dropzone dz-clickable\">\n <div class=\"dz-message\">\n <div class=\"icon\"><span class=\"mdi mdi-cloud-upload\"></span></div>\n <ng-container *ngTemplateOutlet=\"body\"></ng-container>\n <ng-container *ngIf=\"uploading\">\n <ng-container *ngTemplateOutlet=\"progressBar\"></ng-container>\n </ng-container>\n <div class=\"dropzone-mobile-trigger needsclick\"></div>\n </div>\n <button\n (click)=\"showCamera()\"\n *ngIf=\"camera\"\n type=\"button\"\n class=\"btn btn-primary px-3 webcam-button\"\n >\n <i class=\"icon mdi mdi-camera\" aria-hidden=\"true\"></i>\n </button>\n <ng-container *ngIf=\"showingCamera$ | async\">\n <ng-container *ngTemplateOutlet=\"webcam\"></ng-container>\n </ng-container>\n</form>\n\n<ng-template #body>\n <h2 *ngIf=\"!hideTitle\" class=\"mb-4 mt-2\">{{ title || ('dropzone.drop' | translate) }}</h2>\n <span *ngIf=\"subtitle\" class=\"note mb-3\">{{ subtitle }}</span>\n <span *ngIf=\"showMaxFileSize\" class=\"note mb-3 small-font\"\n >{{ 'dropzone.maxFileSize' | translate }}<b>{{ maxFileSize }}mb</b></span\n >\n <ng-container *ngTemplateOutlet=\"preview\"></ng-container>\n</ng-template>\n\n<ng-template #preview>\n <ng-container\n *ngIf=\"{\n errorMessage: errorMessage$ | async,\n externalError: externalError$ | async,\n file: file$ | async\n } as obs\"\n >\n <ng-container *ngIf=\"obs.externalError || obs.errorMessage\">\n <div class=\"alert alert-danger mt-2 mb-0\">\n <div class=\"message\">\n {{ obs.externalError || obs.errorMessage }}\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!hideFilePreview && obs.file && !obs.externalError && !obs.errorMessage\">\n <div class=\"file\">\n <i class=\"icon mdi mdi-file-text mr-2\"></i>\n <span class=\"note\">{{ obs.file.name }}</span>\n <span class=\"note file-size\">- {{ obs.file.size | filesize: 2 }}</span>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #progressBar>\n <div class=\"progress-bar-container\">\n <valtimo-progress-bar></valtimo-progress-bar>\n </div>\n</ng-template>\n\n<ng-template #webcam>\n <valtimo-webcam (imageSaved)=\"webcamImageSaved($event)\"></valtimo-webcam>\n</ng-template>\n",
4250
4278
  styles: ["form.dropzone{padding:30px 20px}form.dropzone h2{font-size:2rem;text-align:center}form.dropzone.disabled{cursor:default;opacity:.7;pointer-events:none}form.dropzone.preview{border:none;padding:15px 20px}.dz-message{align-items:center;display:flex;flex-direction:column}.dropzone-mobile-trigger{cursor:pointer}.alert-light{align-items:center;display:flex}form.dropzone .mdi{background-color:transparent;border-radius:0;display:inline-block;height:auto;margin-bottom:0;padding:0;width:auto}form.dropzone .message{padding:1.385rem 2.1542rem}.file{align-items:center;display:flex;flex-direction:row;font-size:1.5rem}.small-font{color:#959595;font-size:1rem}.file-size{margin-left:5px}.progress-bar-container{bottom:0;height:auto;position:absolute;width:100%}.webcam-button{position:absolute;right:10px;top:10px}"]
4251
4279
  },] }
4252
4280
  ];
@@ -4421,8 +4449,8 @@
4421
4449
  WebcamComponent.decorators = [
4422
4450
  { type: i0.Component, args: [{
4423
4451
  selector: 'valtimo-webcam',
4424
- template: "<div\n (click)=\"close(false)\"\n *ngIf=\"{picture: picture$ | async, stream: stream$ | async} as obs\"\n [ngClass]=\"{showing: showing$ | async}\"\n class=\"webcam-overlay\"\n>\n <div (click)=\"(false); $event.stopPropagation()\" class=\"inner-container\">\n <div class=\"webcam-container modal-content\">\n <div class=\"video-container\">\n <video autoplay=\"true\" id=\"videoElement\"></video>\n <canvas id=\"canvas\"></canvas>\n <img *ngIf=\"obs.picture?.uri\" [src]=\"obs.picture?.uri\" />\n </div>\n <div class=\"button-container\">\n <div class=\"picture-btn\">\n <button\n (click)=\"captureImage()\"\n [disabled]=\"obs.picture?.file || !obs.stream\"\n class=\"btn btn-primary btn-lg\"\n >\n <i class=\"fa fa-camera\"></i>{{ 'webcam.takePicture' | translate }}\n </button>\n </div>\n <div class=\"new-btn\">\n <button (click)=\"clearImage()\" [disabled]=\"!obs.picture?.file\" class=\"btn btn-primary\">\n <i class=\"fa fa-undo\"></i>{{ 'webcam.redo' | translate }}\n </button>\n </div>\n <div class=\"save-btn\">\n <button (click)=\"close()\" [disabled]=\"!obs.picture?.file\" class=\"btn btn-primary\">\n <i class=\"fa fa-save\"></i>{{ 'webcam.save' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"modal-header\">\n <button (click)=\"close(false)\" aria-label=\"Close\" class=\"close\"><span>\u00D7</span></button>\n </div>\n </div>\n</div>\n",
4425
- styles: [".webcam-overlay{align-items:center;background-color:rgba(0,0,0,.65);display:flex;height:100%;justify-content:center;left:0;opacity:0;position:fixed;top:0;transition:opacity .15s linear;width:100%;z-index:9999}.showing{opacity:1}.webcam-container{padding:20px}.button-container{align-items:center;display:flex;height:30px;justify-content:space-evenly;margin-bottom:10px;margin-top:20px}.button-container i{margin-right:5px}.new-btn,.picture-btn,.save-btn{display:flex;justify-content:center;position:absolute}.new-btn,.save-btn{width:calc(50% - 65px)}.picture-btn{left:0;width:100%}.new-btn{left:0}.save-btn{right:0}.modal-header{color:grey;margin-top:35px;padding:0;position:absolute;right:-18px;top:0}.close{color:grey}.inner-container{position:relative}.video-container{height:495px;overflow:hidden}.video-container img,.video-container video{height:495px;position:absolute;width:660px}.video-container img{-o-object-fit:cover;object-fit:cover}#canvas{display:none}"]
4452
+ template: "<div\n (click)=\"close(false)\"\n *ngIf=\"{picture: picture$ | async, stream: stream$ | async} as obs\"\n [ngClass]=\"{showing: showing$ | async}\"\n class=\"webcam-overlay\"\n>\n <div (click)=\"(false); $event.stopPropagation()\" class=\"inner-container\">\n <div class=\"webcam-container modal-content\">\n <div class=\"video-container\">\n <video autoplay=\"true\" id=\"videoElement\"></video>\n <canvas id=\"canvas\"></canvas>\n <img *ngIf=\"obs.picture?.uri\" [src]=\"obs.picture?.uri\" />\n </div>\n <div class=\"button-container\">\n <div class=\"picture-btn\">\n <button\n (click)=\"captureImage()\"\n [disabled]=\"obs.picture?.file || !obs.stream\"\n class=\"btn btn-primary btn-lg\"\n >\n <i class=\"icon mdi mdi-camera mr-1\"></i>{{ 'webcam.takePicture' | translate }}\n </button>\n </div>\n <div class=\"new-btn\">\n <button (click)=\"clearImage()\" [disabled]=\"!obs.picture?.file\" class=\"btn btn-primary\">\n <i class=\"icon mdi mdi-redo mr-1\"></i>{{ 'webcam.redo' | translate }}\n </button>\n </div>\n <div class=\"save-btn\">\n <button (click)=\"close()\" [disabled]=\"!obs.picture?.file\" class=\"btn btn-primary\">\n <i class=\"icon mdi mdi-save mr-1\"></i>{{ 'webcam.save' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"modal-header\">\n <button (click)=\"close(false)\" aria-label=\"Close\" class=\"close\"><span>\u00D7</span></button>\n </div>\n </div>\n</div>\n",
4453
+ styles: [".webcam-overlay{align-items:center;background-color:rgba(0,0,0,.65);display:flex;height:100%;justify-content:center;left:0;opacity:0;position:fixed;top:0;transition:opacity .15s linear;width:100%;z-index:9999}.showing{opacity:1}.webcam-container{padding:20px}.button-container{align-items:center;display:flex;height:30px;justify-content:space-evenly;margin-bottom:10px;margin-top:20px}.button-container i{margin-right:5px}.new-btn,.picture-btn,.save-btn{display:flex;justify-content:center;position:absolute}.new-btn .icon,.picture-btn .icon,.save-btn .icon{background-color:unset;border-radius:unset;display:inline-block;height:unset;margin-bottom:0;padding:0;width:unset}.new-btn,.save-btn{width:calc(50% - 65px)}.picture-btn{left:0;width:100%}.new-btn{left:0}.save-btn{right:0}.modal-header{color:grey;margin-top:35px;padding:0;position:absolute;right:-18px;top:0}.close{color:grey}.inner-container{position:relative}.video-container{height:495px;overflow:hidden}.video-container img,.video-container video{height:495px;position:absolute;width:660px}.video-container img{-o-object-fit:cover;object-fit:cover}#canvas{display:none}"]
4426
4454
  },] }
4427
4455
  ];
4428
4456
  WebcamComponent.propDecorators = {
@@ -4520,11 +4548,7 @@
4520
4548
  ],
4521
4549
  declarations: [FormioComponent, FormioBuilderComponent, FormIoUploaderComponent],
4522
4550
  exports: [FormioComponent, FormioBuilderComponent, FormIoUploaderComponent],
4523
- providers: [
4524
- FormIoStateService,
4525
- FormIoDomService,
4526
- { provide: angularFormio.FormioAppConfig, useValue: ɵ0$1 },
4527
- ],
4551
+ providers: [FormIoDomService, { provide: angularFormio.FormioAppConfig, useValue: ɵ0$1 }],
4528
4552
  },] }
4529
4553
  ];
4530
4554
 
@@ -4996,6 +5020,78 @@
4996
5020
  angularFormio.registerCustomFormioComponentWithClass(COMPONENT_OPTIONS, FormIoUploaderComponent, UploaderComponent, injector);
4997
5021
  }
4998
5022
 
5023
+ var SelectComponent = angularFormio.Components.components.select;
5024
+ function registerFormioFileSelectorComponent(injector) {
5025
+ var documentService = injector.get(i2.DocumentService);
5026
+ var stateService = injector.get(FormIoStateService);
5027
+ var unavailableMessage = {
5028
+ label: 'could not retrieve documents',
5029
+ value: null,
5030
+ };
5031
+ function getDocumentResources(documentId) {
5032
+ if (!documentId) {
5033
+ return new Promise(function (resolve) {
5034
+ resolve([unavailableMessage]);
5035
+ });
5036
+ }
5037
+ return documentService
5038
+ .getDocument(documentId)
5039
+ .toPromise()
5040
+ .then(function (document) { return document.relatedFiles.map(function (relatedFile) {
5041
+ return {
5042
+ label: relatedFile.fileName,
5043
+ value: relatedFile.fileId,
5044
+ };
5045
+ }); })
5046
+ .catch(function () {
5047
+ return new Promise(function (resolve) {
5048
+ resolve([unavailableMessage]);
5049
+ });
5050
+ });
5051
+ }
5052
+ var ResourceSelectorComponent = /** @class */ (function (_super) {
5053
+ __extends(ResourceSelectorComponent, _super);
5054
+ function ResourceSelectorComponent() {
5055
+ return _super !== null && _super.apply(this, arguments) || this;
5056
+ }
5057
+ ResourceSelectorComponent.schema = function () {
5058
+ var extend = [];
5059
+ for (var _i = 0; _i < arguments.length; _i++) {
5060
+ extend[_i] = arguments[_i];
5061
+ }
5062
+ return SelectComponent.schema(Object.assign({ type: 'resource-selector', label: 'Resource selector', key: 'resource-selector', dataSrc: 'custom', dataType: 'string', valueProperty: 'value', asyncValues: true, data: {
5063
+ custom: 'values = instance.getResources()',
5064
+ } }, extend));
5065
+ };
5066
+ ResourceSelectorComponent.prototype.getResources = function () {
5067
+ return stateService.documentId$
5068
+ .pipe(operators.take(1))
5069
+ .toPromise()
5070
+ .then(function (documentId) { return getDocumentResources(documentId); });
5071
+ };
5072
+ Object.defineProperty(ResourceSelectorComponent, "builderInfo", {
5073
+ get: function () {
5074
+ return {
5075
+ title: 'Document picker',
5076
+ icon: 'th-list',
5077
+ group: 'basic',
5078
+ documentation: '/userguide/#textfield',
5079
+ weight: 0,
5080
+ schema: ResourceSelectorComponent.schema(),
5081
+ };
5082
+ },
5083
+ enumerable: false,
5084
+ configurable: true
5085
+ });
5086
+ return ResourceSelectorComponent;
5087
+ }(SelectComponent));
5088
+ angularFormio.Formio.use({
5089
+ components: {
5090
+ 'resource-selector': ResourceSelectorComponent,
5091
+ },
5092
+ });
5093
+ }
5094
+
4999
5095
  /*
5000
5096
  * Copyright 2015-2020 Ritense BV, the Netherlands.
5001
5097
  *
@@ -5028,8 +5124,8 @@
5028
5124
  SearchableDropdownSelectComponent.decorators = [
5029
5125
  { type: i0.Component, args: [{
5030
5126
  selector: 'valtimo-searchable-dropdown-select',
5031
- template: "<valtimo-searchable-dropdown\n *ngIf=\"!hasSelection; else selection\"\n [style]=\"style\"\n [items]=\"items\"\n [buttonText]=\"buttonText\"\n [searchText]=\"searchText\"\n [noResultsText]=\"noResultsText\"\n [disabled]=\"disabled\"\n [width]=\"width\"\n (itemSelected)=\"onSelect($event)\"\n>\n</valtimo-searchable-dropdown>\n\n<ng-template #selection>\n <div\n class=\"d-flex flex-row align-items-center\"\n [style.height.px]=\"style === 'button' ? 34 : null\"\n >\n <h5 class=\"selected-text\">\n {{ selectedText }} <b>{{ selectedTextValue }}</b>\n </h5>\n <button\n type=\"button\"\n class=\"close p-0 m-0 ml-2 d-flex text-danger\"\n aria-label=\"Close\"\n (click)=\"onClearSelection()\"\n [title]=\"clearSelectionButtonTitle\"\n >\n <i class=\"clear-icon fa fa-times text-danger\"></i>\n </button>\n </div>\n</ng-template>\n",
5032
- styles: [".selected-text{margin:0}.clear-icon{font-size:13px}"]
5127
+ template: "<valtimo-searchable-dropdown\n *ngIf=\"!hasSelection; else selection\"\n [style]=\"style\"\n [items]=\"items\"\n [buttonText]=\"buttonText\"\n [searchText]=\"searchText\"\n [noResultsText]=\"noResultsText\"\n [disabled]=\"disabled\"\n [width]=\"width\"\n (itemSelected)=\"onSelect($event)\"\n>\n</valtimo-searchable-dropdown>\n\n<ng-template #selection>\n <div\n class=\"d-flex flex-row align-items-center\"\n [style.height.px]=\"style === 'button' ? 34 : null\"\n >\n <h5 class=\"selected-text\">\n {{ selectedText }} <b>{{ selectedTextValue }}</b>\n </h5>\n <button\n type=\"button\"\n class=\"close p-0 m-0 ml-2 d-flex text-danger\"\n aria-label=\"Close\"\n (click)=\"onClearSelection()\"\n [title]=\"clearSelectionButtonTitle\"\n >\n <i class=\"clear-icon mdi mdi-close text-danger\"></i>\n </button>\n </div>\n</ng-template>\n",
5128
+ styles: [".selected-text{margin:0}.clear-icon{font-size:16px}"]
5033
5129
  },] }
5034
5130
  ];
5035
5131
  SearchableDropdownSelectComponent.propDecorators = {
@@ -5077,7 +5173,82 @@
5077
5173
  ];
5078
5174
 
5079
5175
  /*
5080
- * Copyright 2015-2020 Ritense BV, the Netherlands.
5176
+ * Copyright 2015-2022 Ritense BV, the Netherlands.
5177
+ *
5178
+ * Licensed under EUPL, Version 1.2 (the "License");
5179
+ * you may not use this file except in compliance with the License.
5180
+ * You may obtain a copy of the License at
5181
+ *
5182
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
5183
+ *
5184
+ * Unless required by applicable law or agreed to in writing, software
5185
+ * distributed under the License is distributed on an "AS IS" basis,
5186
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5187
+ * See the License for the specific language governing permissions and
5188
+ * limitations under the License.
5189
+ */
5190
+ var MultiselectDropdownComponent = /** @class */ (function () {
5191
+ function MultiselectDropdownComponent() {
5192
+ this.items = [];
5193
+ this.dropdownSettings = {
5194
+ singleSelection: false,
5195
+ selectAllText: 'Select All',
5196
+ unSelectAllText: 'UnSelect All',
5197
+ itemsShowLimit: 3,
5198
+ allowSearchFilter: true,
5199
+ };
5200
+ this.itemsSelected = new i0.EventEmitter();
5201
+ }
5202
+ MultiselectDropdownComponent.prototype.onItemsSelected = function () {
5203
+ this.itemsSelected.emit(this.selectedItems);
5204
+ };
5205
+ return MultiselectDropdownComponent;
5206
+ }());
5207
+ MultiselectDropdownComponent.decorators = [
5208
+ { type: i0.Component, args: [{
5209
+ selector: 'valtimo-multiselect-dropdown',
5210
+ template: "<!--\n ~ Copyright 2015-2022 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-multiselect-dropdown\n [placeholder]=\"placeHolder\"\n [data]=\"items\"\n [(ngModel)]=\"selectedItems\"\n [settings]=\"dropdownSettings\"\n (onDropDownClose)=\"onItemsSelected()\"\n></ng-multiselect-dropdown>\n",
5211
+ styles: [""]
5212
+ },] }
5213
+ ];
5214
+ MultiselectDropdownComponent.propDecorators = {
5215
+ selectedItems: [{ type: i0.Input }],
5216
+ items: [{ type: i0.Input }],
5217
+ placeHolder: [{ type: i0.Input }],
5218
+ dropdownSettings: [{ type: i0.Input }],
5219
+ itemsSelected: [{ type: i0.Output }]
5220
+ };
5221
+
5222
+ /*
5223
+ * Copyright 2015-2022 Ritense BV, the Netherlands.
5224
+ *
5225
+ * Licensed under EUPL, Version 1.2 (the "License");
5226
+ * you may not use this file except in compliance with the License.
5227
+ * You may obtain a copy of the License at
5228
+ *
5229
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
5230
+ *
5231
+ * Unless required by applicable law or agreed to in writing, software
5232
+ * distributed under the License is distributed on an "AS IS" basis,
5233
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5234
+ * See the License for the specific language governing permissions and
5235
+ * limitations under the License.
5236
+ */
5237
+ var MultiselectDropdownModule = /** @class */ (function () {
5238
+ function MultiselectDropdownModule() {
5239
+ }
5240
+ return MultiselectDropdownModule;
5241
+ }());
5242
+ MultiselectDropdownModule.decorators = [
5243
+ { type: i0.NgModule, args: [{
5244
+ declarations: [MultiselectDropdownComponent],
5245
+ imports: [common.CommonModule, forms.ReactiveFormsModule, ngMultiselectDropdown.NgMultiSelectDropDownModule, forms.FormsModule],
5246
+ exports: [MultiselectDropdownComponent],
5247
+ },] }
5248
+ ];
5249
+
5250
+ /*
5251
+ * Copyright 2015-2022 Ritense BV, the Netherlands.
5081
5252
  *
5082
5253
  * Licensed under EUPL, Version 1.2 (the "License");
5083
5254
  * you may not use this file except in compliance with the License.
@@ -5121,6 +5292,7 @@
5121
5292
  exports.FilterSidebarComponent = FilterSidebarComponent;
5122
5293
  exports.FilterSidebarModule = FilterSidebarModule;
5123
5294
  exports.FormIoModule = FormIoModule;
5295
+ exports.FormIoStateService = FormIoStateService;
5124
5296
  exports.FormIoUploaderComponent = FormIoUploaderComponent;
5125
5297
  exports.FormioBuilderComponent = FormioBuilderComponent;
5126
5298
  exports.FormioComponent = FormioComponent;
@@ -5135,6 +5307,8 @@
5135
5307
  exports.MenuService = MenuService;
5136
5308
  exports.ModalComponent = ModalComponent;
5137
5309
  exports.ModalModule = ModalModule;
5310
+ exports.MultiselectDropdownComponent = MultiselectDropdownComponent;
5311
+ exports.MultiselectDropdownModule = MultiselectDropdownModule;
5138
5312
  exports.PageHeaderComponent = PageHeaderComponent;
5139
5313
  exports.PageHeaderModule = PageHeaderModule;
5140
5314
  exports.PageTitleComponent = PageTitleComponent;
@@ -5163,6 +5337,7 @@
5163
5337
  exports.WidgetModule = WidgetModule;
5164
5338
  exports.customUploaderType = customUploaderType;
5165
5339
  exports.menuInitializer = menuInitializer;
5340
+ exports.registerFormioFileSelectorComponent = registerFormioFileSelectorComponent;
5166
5341
  exports.registerFormioUploadComponent = registerFormioUploadComponent;
5167
5342
  exports.ɵ0 = ɵ0;
5168
5343
  exports.ɵa = CamundaGeneratedFormModule;
@@ -5183,10 +5358,9 @@
5183
5358
  exports.ɵp = MenuItemTextComponent;
5184
5359
  exports.ɵq = SubmenuItemTextComponent;
5185
5360
  exports.ɵr = VersionService;
5186
- exports.ɵs = FormIoStateService;
5187
- exports.ɵt = FormIoDomService;
5188
- exports.ɵu = AppConfig;
5189
- exports.ɵv = SpinnerComponent;
5361
+ exports.ɵs = FormIoDomService;
5362
+ exports.ɵt = AppConfig;
5363
+ exports.ɵu = SpinnerComponent;
5190
5364
 
5191
5365
  Object.defineProperty(exports, '__esModule', { value: true });
5192
5366