@valtimo/components 4.16.0 → 4.19.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 -32
  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 -3
  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 -27
  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 +4 -3
  123. package/public_api.d.ts +4 -0
  124. package/valtimo-components.d.ts +3 -4
  125. package/valtimo-components.metadata.json +1 -1
@@ -4,8 +4,8 @@ import { Validators, FormControl, FormBuilder, ReactiveFormsModule, FormsModule
4
4
  import * as momentImported from 'moment';
5
5
  import { ChoicefieldService } from '@valtimo/choicefield';
6
6
  import { RouterModule, NavigationEnd, Router, ActivatedRoute, PRIMARY_OUTLET, NavigationStart } from '@angular/router';
7
+ import { ConfigService, MenuIncludeService, HttpLoaderFactory } from '@valtimo/config';
7
8
  import { NGXLogger } from 'ngx-logger';
8
- import { ConfigService, HttpLoaderFactory } from '@valtimo/config';
9
9
  import { BehaviorSubject, Observable, combineLatest, fromEvent, Subscription, Subject, timer, from } from 'rxjs';
10
10
  import { DocumentService, DocumentModule } from '@valtimo/document';
11
11
  import { UserProviderService } from '@valtimo/security';
@@ -18,10 +18,11 @@ import { Title } from '@angular/platform-browser';
18
18
  import * as BpmnJS from 'bpmn-js/dist/bpmn-navigated-viewer.production.min.js';
19
19
  import { create } from 'heatmap.js-fixed/build/heatmap.js';
20
20
  import { S3Resource, S3Service, UploadProviderService, DownloadService, ResourceModule } from '@valtimo/resource';
21
- import { Formio, FormioModule, FormioAppConfig, createCustomFormioComponent, registerCustomFormioComponentWithClass } from 'angular-formio';
21
+ import { Formio, FormioModule, FormioAppConfig, createCustomFormioComponent, registerCustomFormioComponentWithClass, Components } from 'angular-formio';
22
22
  import jwt_decode from 'jwt-decode';
23
23
  import * as Dropzone from 'dropzone';
24
24
  import { NgxSpinnerModule } from 'ngx-spinner';
25
+ import { NgMultiSelectDropDownModule } from 'ng-multiselect-dropdown';
25
26
 
26
27
  /*
27
28
  * Copyright 2015-2020 Ritense BV, the Netherlands.
@@ -862,8 +863,8 @@ class TopbarComponent {
862
863
  TopbarComponent.decorators = [
863
864
  { type: Component, args: [{
864
865
  selector: 'valtimo-topbar',
865
- 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",
866
- styles: [".user-icon{font-size:30px;padding-top:5px}"]
866
+ 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",
867
+ styles: [".user-icon{font-size:30px}.be-toggle-right-sidebar{display:flex}"]
867
868
  },] }
868
869
  ];
869
870
  TopbarComponent.ctorParameters = () => [];
@@ -909,11 +910,13 @@ TopbarModule.decorators = [
909
910
  * limitations under the License.
910
911
  */
911
912
  class MenuService {
912
- constructor(configService, documentService, userProviderService, logger) {
913
+ constructor(configService, documentService, userProviderService, logger, menuIncludeService) {
913
914
  this.configService = configService;
914
915
  this.documentService = documentService;
915
916
  this.userProviderService = userProviderService;
916
917
  this.logger = logger;
918
+ this.menuIncludeService = menuIncludeService;
919
+ this.includeFunctionObservables = {};
917
920
  this._menuItems$ = new BehaviorSubject(undefined);
918
921
  this.menuConfig = configService.config.menu;
919
922
  }
@@ -930,6 +933,10 @@ class MenuService {
930
933
  loadMenuItems() {
931
934
  let menuItems = [];
932
935
  this.menuConfig.menuItems.forEach((menuItem) => {
936
+ if (menuItem.includeFunction !== undefined) {
937
+ this.includeFunctionObservables[menuItem.title] =
938
+ this.menuIncludeService.getIncludeFunction(menuItem.includeFunction);
939
+ }
933
940
  menuItem.show = true;
934
941
  menuItems.push(menuItem);
935
942
  });
@@ -995,7 +1002,7 @@ class MenuService {
995
1002
  }
996
1003
  }
997
1004
  }
998
- MenuService.ɵprov = ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(ɵɵinject(ConfigService), ɵɵinject(DocumentService), ɵɵinject(UserProviderService), ɵɵinject(NGXLogger)); }, token: MenuService, providedIn: "root" });
1005
+ MenuService.ɵprov = ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(ɵɵinject(ConfigService), ɵɵinject(DocumentService), ɵɵinject(UserProviderService), ɵɵinject(NGXLogger), ɵɵinject(MenuIncludeService)); }, token: MenuService, providedIn: "root" });
999
1006
  MenuService.decorators = [
1000
1007
  { type: Injectable, args: [{
1001
1008
  providedIn: 'root',
@@ -1005,7 +1012,8 @@ MenuService.ctorParameters = () => [
1005
1012
  { type: ConfigService },
1006
1013
  { type: DocumentService },
1007
1014
  { type: UserProviderService },
1008
- { type: NGXLogger }
1015
+ { type: NGXLogger },
1016
+ { type: MenuIncludeService }
1009
1017
  ];
1010
1018
 
1011
1019
  /*
@@ -1054,6 +1062,8 @@ class MenuComponent {
1054
1062
  this.elRef = elRef;
1055
1063
  this.renderer = renderer;
1056
1064
  this.router = router;
1065
+ this.includeFunctionObservables = {};
1066
+ this.includeFunctionObservables = this.menuService.includeFunctionObservables;
1057
1067
  }
1058
1068
  ngOnInit() {
1059
1069
  this.openRouterSubscription();
@@ -1084,8 +1094,8 @@ class MenuComponent {
1084
1094
  MenuComponent.decorators = [
1085
1095
  { type: Component, args: [{
1086
1096
  selector: 'valtimo-menu',
1087
- 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",
1088
- styles: [".c-default{cursor:default}.sub-item{cursor:pointer}"]
1097
+ 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",
1098
+ styles: [".c-default{cursor:default}.sub-item{cursor:pointer}.menu-item--hidden{display:none}.menu-item--visible{display:block}"]
1089
1099
  },] }
1090
1100
  ];
1091
1101
  MenuComponent.ctorParameters = () => [
@@ -1970,6 +1980,7 @@ class ListComponent {
1970
1980
  item.listItemFields = this.fields.map(field => ({
1971
1981
  key: field.key,
1972
1982
  label: field.label,
1983
+ type: field.type || '',
1973
1984
  value: this.resolveObject(field, item),
1974
1985
  }));
1975
1986
  });
@@ -2032,8 +2043,8 @@ ListComponent.PAGINATION_SIZE = 'PaginationSize';
2032
2043
  ListComponent.decorators = [
2033
2044
  { type: Component, args: [{
2034
2045
  selector: 'valtimo-list',
2035
- 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",
2036
- 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}"]
2046
+ 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",
2047
+ 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}"]
2037
2048
  },] }
2038
2049
  ];
2039
2050
  ListComponent.ctorParameters = () => [
@@ -2882,7 +2893,7 @@ class UploaderComponent {
2882
2893
  UploaderComponent.decorators = [
2883
2894
  { type: Component, args: [{
2884
2895
  selector: 'valtimo-uploader',
2885
- 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",
2896
+ 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",
2886
2897
  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}"]
2887
2898
  },] }
2888
2899
  ];
@@ -3327,6 +3338,7 @@ DataListModule.decorators = [
3327
3338
  class FormIoStateService {
3328
3339
  constructor() {
3329
3340
  this._documentDefinitionName$ = new BehaviorSubject(undefined);
3341
+ this._documentId$ = new BehaviorSubject(undefined);
3330
3342
  this._currentForm$ = new BehaviorSubject(undefined);
3331
3343
  }
3332
3344
  get documentDefinitionName$() {
@@ -3335,6 +3347,12 @@ class FormIoStateService {
3335
3347
  setDocumentDefinitionName(documentDefinitionName) {
3336
3348
  this._documentDefinitionName$.next(documentDefinitionName);
3337
3349
  }
3350
+ get documentId$() {
3351
+ return this._documentId$.asObservable();
3352
+ }
3353
+ setDocumentId(documentId) {
3354
+ this._documentId$.next(documentId);
3355
+ }
3338
3356
  get currentForm$() {
3339
3357
  return this._currentForm$.asObservable();
3340
3358
  }
@@ -3342,8 +3360,11 @@ class FormIoStateService {
3342
3360
  this._currentForm$.next(form);
3343
3361
  }
3344
3362
  }
3363
+ FormIoStateService.ɵprov = ɵɵdefineInjectable({ factory: function FormIoStateService_Factory() { return new FormIoStateService(); }, token: FormIoStateService, providedIn: "root" });
3345
3364
  FormIoStateService.decorators = [
3346
- { type: Injectable }
3365
+ { type: Injectable, args: [{
3366
+ providedIn: 'root',
3367
+ },] }
3347
3368
  ];
3348
3369
 
3349
3370
  /*
@@ -3377,6 +3398,7 @@ class FormioComponent {
3377
3398
  }
3378
3399
  ngOnInit() {
3379
3400
  const documentDefinitionName = this.route.snapshot.paramMap.get('documentDefinitionName');
3401
+ const documentId = this.route.snapshot.paramMap.get('documentId');
3380
3402
  const formDefinition = this.form;
3381
3403
  this.formDefinition = formDefinition;
3382
3404
  this.errors = [];
@@ -3386,6 +3408,9 @@ class FormioComponent {
3386
3408
  if (documentDefinitionName) {
3387
3409
  this.stateService.setDocumentDefinitionName(documentDefinitionName);
3388
3410
  }
3411
+ if (documentId) {
3412
+ this.stateService.setDocumentId(documentId);
3413
+ }
3389
3414
  this.subscribeFormRefresh();
3390
3415
  this.openLanguageSubscription();
3391
3416
  }
@@ -3624,7 +3649,7 @@ class FormIoUploaderComponent {
3624
3649
  FormIoUploaderComponent.decorators = [
3625
3650
  { type: Component, args: [{
3626
3651
  selector: 'valtimo-formio-uploader',
3627
- 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",
3652
+ 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",
3628
3653
  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}"]
3629
3654
  },] }
3630
3655
  ];
@@ -3742,7 +3767,6 @@ class DropzoneComponent {
3742
3767
  this.dropzone.on('error', (file, message) => {
3743
3768
  this.clearFile();
3744
3769
  this.error$.next(message.toString());
3745
- this.fileSelected.emit();
3746
3770
  });
3747
3771
  }
3748
3772
  clearFile() {
@@ -3760,7 +3784,7 @@ class DropzoneComponent {
3760
3784
  DropzoneComponent.decorators = [
3761
3785
  { type: Component, args: [{
3762
3786
  selector: 'valtimo-dropzone',
3763
- 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",
3787
+ 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",
3764
3788
  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}"]
3765
3789
  },] }
3766
3790
  ];
@@ -3925,8 +3949,8 @@ class WebcamComponent {
3925
3949
  WebcamComponent.decorators = [
3926
3950
  { type: Component, args: [{
3927
3951
  selector: 'valtimo-webcam',
3928
- 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",
3929
- 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}"]
3952
+ 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",
3953
+ 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}"]
3930
3954
  },] }
3931
3955
  ];
3932
3956
  WebcamComponent.propDecorators = {
@@ -4015,11 +4039,7 @@ FormIoModule.decorators = [
4015
4039
  ],
4016
4040
  declarations: [FormioComponent, FormioBuilderComponent, FormIoUploaderComponent],
4017
4041
  exports: [FormioComponent, FormioBuilderComponent, FormIoUploaderComponent],
4018
- providers: [
4019
- FormIoStateService,
4020
- FormIoDomService,
4021
- { provide: FormioAppConfig, useValue: ɵ0$1 },
4022
- ],
4042
+ providers: [FormIoDomService, { provide: FormioAppConfig, useValue: ɵ0$1 }],
4023
4043
  },] }
4024
4044
  ];
4025
4045
 
@@ -4485,6 +4505,65 @@ function registerFormioUploadComponent(injector) {
4485
4505
  registerCustomFormioComponentWithClass(COMPONENT_OPTIONS, FormIoUploaderComponent, UploaderComponent, injector);
4486
4506
  }
4487
4507
 
4508
+ const SelectComponent = Components.components.select;
4509
+ function registerFormioFileSelectorComponent(injector) {
4510
+ const documentService = injector.get(DocumentService);
4511
+ const stateService = injector.get(FormIoStateService);
4512
+ const unavailableMessage = {
4513
+ label: 'could not retrieve documents',
4514
+ value: null,
4515
+ };
4516
+ function getDocumentResources(documentId) {
4517
+ if (!documentId) {
4518
+ return new Promise(resolve => {
4519
+ resolve([unavailableMessage]);
4520
+ });
4521
+ }
4522
+ return documentService
4523
+ .getDocument(documentId)
4524
+ .toPromise()
4525
+ .then(document => document.relatedFiles.map(relatedFile => {
4526
+ return {
4527
+ label: relatedFile.fileName,
4528
+ value: relatedFile.fileId,
4529
+ };
4530
+ }))
4531
+ .catch(() => {
4532
+ return new Promise(resolve => {
4533
+ resolve([unavailableMessage]);
4534
+ });
4535
+ });
4536
+ }
4537
+ class ResourceSelectorComponent extends SelectComponent {
4538
+ static schema(...extend) {
4539
+ return SelectComponent.schema(Object.assign({ type: 'resource-selector', label: 'Resource selector', key: 'resource-selector', dataSrc: 'custom', dataType: 'string', valueProperty: 'value', asyncValues: true, data: {
4540
+ custom: 'values = instance.getResources()',
4541
+ } }, extend));
4542
+ }
4543
+ getResources() {
4544
+ return stateService.documentId$
4545
+ .pipe(take(1))
4546
+ .toPromise()
4547
+ .then(documentId => getDocumentResources(documentId));
4548
+ }
4549
+ static get builderInfo() {
4550
+ return {
4551
+ title: 'Document picker',
4552
+ icon: 'th-list',
4553
+ group: 'basic',
4554
+ documentation: '/userguide/#textfield',
4555
+ weight: 0,
4556
+ schema: ResourceSelectorComponent.schema(),
4557
+ };
4558
+ }
4559
+ }
4560
+ Formio.use({
4561
+ components: {
4562
+ 'resource-selector': ResourceSelectorComponent,
4563
+ },
4564
+ });
4565
+ }
4566
+
4488
4567
  /*
4489
4568
  * Copyright 2015-2020 Ritense BV, the Netherlands.
4490
4569
  *
@@ -4516,8 +4595,8 @@ class SearchableDropdownSelectComponent {
4516
4595
  SearchableDropdownSelectComponent.decorators = [
4517
4596
  { type: Component, args: [{
4518
4597
  selector: 'valtimo-searchable-dropdown-select',
4519
- 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",
4520
- styles: [".selected-text{margin:0}.clear-icon{font-size:13px}"]
4598
+ 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",
4599
+ styles: [".selected-text{margin:0}.clear-icon{font-size:16px}"]
4521
4600
  },] }
4522
4601
  ];
4523
4602
  SearchableDropdownSelectComponent.propDecorators = {
@@ -4562,7 +4641,78 @@ SearchableDropdownSelectModule.decorators = [
4562
4641
  ];
4563
4642
 
4564
4643
  /*
4565
- * Copyright 2015-2020 Ritense BV, the Netherlands.
4644
+ * Copyright 2015-2022 Ritense BV, the Netherlands.
4645
+ *
4646
+ * Licensed under EUPL, Version 1.2 (the "License");
4647
+ * you may not use this file except in compliance with the License.
4648
+ * You may obtain a copy of the License at
4649
+ *
4650
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4651
+ *
4652
+ * Unless required by applicable law or agreed to in writing, software
4653
+ * distributed under the License is distributed on an "AS IS" basis,
4654
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4655
+ * See the License for the specific language governing permissions and
4656
+ * limitations under the License.
4657
+ */
4658
+ class MultiselectDropdownComponent {
4659
+ constructor() {
4660
+ this.items = [];
4661
+ this.dropdownSettings = {
4662
+ singleSelection: false,
4663
+ selectAllText: 'Select All',
4664
+ unSelectAllText: 'UnSelect All',
4665
+ itemsShowLimit: 3,
4666
+ allowSearchFilter: true,
4667
+ };
4668
+ this.itemsSelected = new EventEmitter();
4669
+ }
4670
+ onItemsSelected() {
4671
+ this.itemsSelected.emit(this.selectedItems);
4672
+ }
4673
+ }
4674
+ MultiselectDropdownComponent.decorators = [
4675
+ { type: Component, args: [{
4676
+ selector: 'valtimo-multiselect-dropdown',
4677
+ 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",
4678
+ styles: [""]
4679
+ },] }
4680
+ ];
4681
+ MultiselectDropdownComponent.propDecorators = {
4682
+ selectedItems: [{ type: Input }],
4683
+ items: [{ type: Input }],
4684
+ placeHolder: [{ type: Input }],
4685
+ dropdownSettings: [{ type: Input }],
4686
+ itemsSelected: [{ type: Output }]
4687
+ };
4688
+
4689
+ /*
4690
+ * Copyright 2015-2022 Ritense BV, the Netherlands.
4691
+ *
4692
+ * Licensed under EUPL, Version 1.2 (the "License");
4693
+ * you may not use this file except in compliance with the License.
4694
+ * You may obtain a copy of the License at
4695
+ *
4696
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4697
+ *
4698
+ * Unless required by applicable law or agreed to in writing, software
4699
+ * distributed under the License is distributed on an "AS IS" basis,
4700
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4701
+ * See the License for the specific language governing permissions and
4702
+ * limitations under the License.
4703
+ */
4704
+ class MultiselectDropdownModule {
4705
+ }
4706
+ MultiselectDropdownModule.decorators = [
4707
+ { type: NgModule, args: [{
4708
+ declarations: [MultiselectDropdownComponent],
4709
+ imports: [CommonModule, ReactiveFormsModule, NgMultiSelectDropDownModule, FormsModule],
4710
+ exports: [MultiselectDropdownComponent],
4711
+ },] }
4712
+ ];
4713
+
4714
+ /*
4715
+ * Copyright 2015-2022 Ritense BV, the Netherlands.
4566
4716
  *
4567
4717
  * Licensed under EUPL, Version 1.2 (the "License");
4568
4718
  * you may not use this file except in compliance with the License.
@@ -4581,5 +4731,5 @@ SearchableDropdownSelectModule.decorators = [
4581
4731
  * Generated bundle index. Do not edit.
4582
4732
  */
4583
4733
 
4584
- export { Alert, AlertComponent, AlertModule, AlertService, AlertType, AlertsOptionsImpl, BpmnJsDiagramComponent, BpmnJsDiagramModule, BreadcrumbNavigationComponent, BreadcrumbNavigationModule, CamundaFormComponent, CamundaFormModule, CardComponent, CardModule, ComponentsModule, DataListComponent, DataListModule, DropzoneComponent, DropzoneModule, FieldAutoFocusDirective, FieldAutoFocusModule, FileSizeModule, FileSizePipe, FilterSidebarComponent, FilterSidebarModule, FormIoModule, FormIoUploaderComponent, FormioBuilderComponent, FormioComponent, FormioOptionsImpl, LeftSidebarComponent, LeftSidebarModule, ListComponent, ListFilterPipe, ListModule, MenuModule, MenuRoutingModule, MenuService, ModalComponent, ModalModule, PageHeaderComponent, PageHeaderModule, PageTitleComponent, PageTitleModule, ProgressBarComponent, ProgressBarModule, RightSidebarComponent, RightSidebarModule, SearchableDropdownComponent, SearchableDropdownModule, SearchableDropdownSelectComponent, SearchableDropdownSelectModule, SpinnerModule, TimelineComponent, TimelineItemImpl, TimelineModule, TopbarComponent, TopbarModule, UploaderComponent, UploaderDragDropDirective, UploaderModule, ViewContentService, WebcamComponent, WebcamModule, WidgetComponent, WidgetModule, customUploaderType, menuInitializer, registerFormioUploadComponent, ɵ0, CamundaGeneratedFormModule as ɵa, CamundaStringFormfieldComponent as ɵb, CamundaBooleanFormfieldComponent as ɵc, CamundaDateFormfieldComponent as ɵd, CamundaFormfieldService as ɵe, CamundaFormfieldGeneratorDirective as ɵf, CamundaLongFormfieldComponent as ɵg, CamundaEnumFormfieldComponent as ɵh, CamundaTextareaFormfieldComponent as ɵi, CamundaChoicefieldFormfieldComponent as ɵj, CamundaFormfieldValidationComponent as ɵk, CamundaGeneratedFormComponent as ɵl, CamundaCustomFormModule as ɵm, CamundaCustomFormComponent as ɵn, MenuComponent as ɵo, MenuItemTextComponent as ɵp, SubmenuItemTextComponent as ɵq, VersionService as ɵr, FormIoStateService as ɵs, FormIoDomService as ɵt, AppConfig as ɵu, SpinnerComponent as ɵv };
4734
+ export { Alert, AlertComponent, AlertModule, AlertService, AlertType, AlertsOptionsImpl, BpmnJsDiagramComponent, BpmnJsDiagramModule, BreadcrumbNavigationComponent, BreadcrumbNavigationModule, CamundaFormComponent, CamundaFormModule, CardComponent, CardModule, ComponentsModule, DataListComponent, DataListModule, DropzoneComponent, DropzoneModule, FieldAutoFocusDirective, FieldAutoFocusModule, FileSizeModule, FileSizePipe, FilterSidebarComponent, FilterSidebarModule, FormIoModule, FormIoStateService, FormIoUploaderComponent, FormioBuilderComponent, FormioComponent, FormioOptionsImpl, LeftSidebarComponent, LeftSidebarModule, ListComponent, ListFilterPipe, ListModule, MenuModule, MenuRoutingModule, MenuService, ModalComponent, ModalModule, MultiselectDropdownComponent, MultiselectDropdownModule, PageHeaderComponent, PageHeaderModule, PageTitleComponent, PageTitleModule, ProgressBarComponent, ProgressBarModule, RightSidebarComponent, RightSidebarModule, SearchableDropdownComponent, SearchableDropdownModule, SearchableDropdownSelectComponent, SearchableDropdownSelectModule, SpinnerModule, TimelineComponent, TimelineItemImpl, TimelineModule, TopbarComponent, TopbarModule, UploaderComponent, UploaderDragDropDirective, UploaderModule, ViewContentService, WebcamComponent, WebcamModule, WidgetComponent, WidgetModule, customUploaderType, menuInitializer, registerFormioFileSelectorComponent, registerFormioUploadComponent, ɵ0, CamundaGeneratedFormModule as ɵa, CamundaStringFormfieldComponent as ɵb, CamundaBooleanFormfieldComponent as ɵc, CamundaDateFormfieldComponent as ɵd, CamundaFormfieldService as ɵe, CamundaFormfieldGeneratorDirective as ɵf, CamundaLongFormfieldComponent as ɵg, CamundaEnumFormfieldComponent as ɵh, CamundaTextareaFormfieldComponent as ɵi, CamundaChoicefieldFormfieldComponent as ɵj, CamundaFormfieldValidationComponent as ɵk, CamundaGeneratedFormComponent as ɵl, CamundaCustomFormModule as ɵm, CamundaCustomFormComponent as ɵn, MenuComponent as ɵo, MenuItemTextComponent as ɵp, SubmenuItemTextComponent as ɵq, VersionService as ɵr, FormIoDomService as ɵs, AppConfig as ɵt, SpinnerComponent as ɵu };
4585
4735
  //# sourceMappingURL=valtimo-components.js.map