mstate-angular 0.2.1 → 0.2.3

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 (90) hide show
  1. package/esm2022/lib/action-form/action-form.component.mjs +149 -0
  2. package/esm2022/lib/common/constant.mjs +5 -0
  3. package/esm2022/lib/common/enum.mjs +48 -0
  4. package/esm2022/lib/components/action-card/action-card.component.mjs +24 -0
  5. package/esm2022/lib/components/button/button.component.mjs +20 -0
  6. package/esm2022/lib/components/dropdown/dropdown.component.mjs +50 -0
  7. package/esm2022/lib/components/error-card/error-card.component.mjs +23 -0
  8. package/esm2022/lib/components/input-field/input-field.component.mjs +27 -0
  9. package/esm2022/lib/components/loader/loader.component.mjs +12 -0
  10. package/esm2022/lib/components/select/select.component.mjs +50 -0
  11. package/esm2022/lib/components/workflow-end-card/workflow-end-card.component.mjs +11 -0
  12. package/esm2022/lib/input-selector/input-selector.component.mjs +42 -0
  13. package/esm2022/lib/interfaces/api.interface.mjs +2 -0
  14. package/esm2022/lib/interfaces/interface.mjs +2 -0
  15. package/esm2022/lib/mstate-angular/mstate-angular.component.mjs +155 -0
  16. package/esm2022/lib/mstate-angular.helper.mjs +61 -0
  17. package/esm2022/lib/mstate-angular.module.mjs +18 -0
  18. package/esm2022/lib/mstate-angular.service.mjs +50 -0
  19. package/esm2022/mstate-angular.mjs +5 -0
  20. package/esm2022/public-api.mjs +6 -0
  21. package/fesm2022/mstate-angular.mjs +673 -0
  22. package/fesm2022/mstate-angular.mjs.map +1 -0
  23. package/index.d.ts +5 -0
  24. package/lib/action-form/action-form.component.d.ts +33 -0
  25. package/lib/common/constant.d.ts +2 -0
  26. package/lib/common/enum.d.ts +41 -0
  27. package/lib/components/action-card/action-card.component.d.ts +11 -0
  28. package/lib/components/button/button.component.d.ts +7 -0
  29. package/lib/components/dropdown/dropdown.component.d.ts +22 -0
  30. package/lib/components/error-card/error-card.component.d.ts +9 -0
  31. package/lib/components/input-field/input-field.component.d.ts +16 -0
  32. package/lib/components/loader/loader.component.d.ts +5 -0
  33. package/lib/components/select/select.component.d.ts +22 -0
  34. package/lib/components/workflow-end-card/workflow-end-card.component.d.ts +5 -0
  35. package/lib/input-selector/input-selector.component.d.ts +21 -0
  36. package/{src/lib/interfaces/api.interface.ts → lib/interfaces/api.interface.d.ts} +42 -51
  37. package/lib/interfaces/interface.d.ts +73 -0
  38. package/lib/mstate-angular/mstate-angular.component.d.ts +72 -0
  39. package/lib/mstate-angular.helper.d.ts +18 -0
  40. package/lib/mstate-angular.module.d.ts +9 -0
  41. package/lib/mstate-angular.service.d.ts +17 -0
  42. package/package.json +27 -14
  43. package/{src/public-api.ts → public-api.d.ts} +2 -6
  44. package/ng-package.json +0 -7
  45. package/src/lib/action-form/action-form.component.html +0 -13
  46. package/src/lib/action-form/action-form.component.scss +0 -0
  47. package/src/lib/action-form/action-form.component.spec.ts +0 -23
  48. package/src/lib/action-form/action-form.component.ts +0 -124
  49. package/src/lib/common/constant.ts +0 -4
  50. package/src/lib/common/enum.ts +0 -46
  51. package/src/lib/components/action-card/action-card.component.html +0 -1
  52. package/src/lib/components/action-card/action-card.component.scss +0 -0
  53. package/src/lib/components/action-card/action-card.component.spec.ts +0 -21
  54. package/src/lib/components/action-card/action-card.component.ts +0 -21
  55. package/src/lib/components/button/button.component.html +0 -3
  56. package/src/lib/components/button/button.component.scss +0 -0
  57. package/src/lib/components/button/button.component.spec.ts +0 -21
  58. package/src/lib/components/button/button.component.ts +0 -11
  59. package/src/lib/components/dropdown/dropdown.component.html +0 -10
  60. package/src/lib/components/dropdown/dropdown.component.scss +0 -0
  61. package/src/lib/components/dropdown/dropdown.component.spec.ts +0 -21
  62. package/src/lib/components/dropdown/dropdown.component.ts +0 -46
  63. package/src/lib/components/input-field/input-field.component.html +0 -9
  64. package/src/lib/components/input-field/input-field.component.scss +0 -0
  65. package/src/lib/components/input-field/input-field.component.spec.ts +0 -21
  66. package/src/lib/components/input-field/input-field.component.ts +0 -16
  67. package/src/lib/components/loader/loader.component.html +0 -1
  68. package/src/lib/components/loader/loader.component.scss +0 -0
  69. package/src/lib/components/loader/loader.component.spec.ts +0 -21
  70. package/src/lib/components/loader/loader.component.ts +0 -11
  71. package/src/lib/components/select/select.component.html +0 -10
  72. package/src/lib/components/select/select.component.scss +0 -43
  73. package/src/lib/components/select/select.component.spec.ts +0 -21
  74. package/src/lib/components/select/select.component.ts +0 -46
  75. package/src/lib/input-selector/input-selector.component.html +0 -23
  76. package/src/lib/input-selector/input-selector.component.scss +0 -0
  77. package/src/lib/input-selector/input-selector.component.spec.ts +0 -21
  78. package/src/lib/input-selector/input-selector.component.ts +0 -38
  79. package/src/lib/interfaces/interface.ts +0 -81
  80. package/src/lib/material.scss +0 -439
  81. package/src/lib/mstate-angular/mstate-angular.component.html +0 -40
  82. package/src/lib/mstate-angular/mstate-angular.component.scss +0 -36
  83. package/src/lib/mstate-angular/mstate-angular.component.spec.ts +0 -21
  84. package/src/lib/mstate-angular/mstate-angular.component.ts +0 -186
  85. package/src/lib/mstate-angular.helper.ts +0 -35
  86. package/src/lib/mstate-angular.module.ts +0 -9
  87. package/src/lib/mstate-angular.service.ts +0 -77
  88. package/tsconfig.lib.json +0 -14
  89. package/tsconfig.lib.prod.json +0 -10
  90. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,673 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, Component, Input, EventEmitter, Output, NgModule } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import * as i1 from '@angular/common/http';
5
+ import { HttpHeaders } from '@angular/common/http';
6
+ import axios from 'axios';
7
+ import { catchError, finalize } from 'rxjs';
8
+ import * as i3 from '@angular/forms';
9
+ import { ReactiveFormsModule, Validators } from '@angular/forms';
10
+ import * as i4 from '@ng-select/ng-select';
11
+ import { NgSelectModule } from '@ng-select/ng-select';
12
+
13
+ var Route;
14
+ (function (Route) {
15
+ Route["EXECUTE_ACTION"] = "workflow/v2/execute";
16
+ Route["GET_WORKFLOW_CONFIG"] = "workflow/config";
17
+ Route["GET_CURRENT_ACTIONS_WITHOUT_INSTANCE"] = "workflow/v2/actions";
18
+ Route["GET_CURRENT_ACTIONS_WITH_INSTANCE"] = "workflow/actions";
19
+ })(Route || (Route = {}));
20
+ var FieldType;
21
+ (function (FieldType) {
22
+ FieldType["DATE_PICKER"] = "datePicker";
23
+ FieldType["TIME_PICKER"] = "timePicker";
24
+ FieldType["INPUT_FIELD"] = "inputField";
25
+ FieldType["TEXT_AREA"] = "textArea";
26
+ FieldType["CHECKBOX"] = "checkBox";
27
+ FieldType["RADIO_LIST"] = "radioList";
28
+ FieldType["DROP_DOWN"] = "dropDown";
29
+ FieldType["SUMMARY"] = "summary";
30
+ FieldType["CONTEXT_FIELD"] = "CONTEXT_FIELD";
31
+ FieldType["CUSTOM_FIELD"] = "CUSTOM_FIELD";
32
+ })(FieldType || (FieldType = {}));
33
+ var ManualStepModule;
34
+ (function (ManualStepModule) {
35
+ ManualStepModule["CONTEXT_FIELD"] = "CONTEXT_FIELD";
36
+ ManualStepModule["CUSTOM_FIELD"] = "CUSTOM_FIELD";
37
+ ManualStepModule["USER_INPUT"] = "USER_INPUT";
38
+ })(ManualStepModule || (ManualStepModule = {}));
39
+ var Theme;
40
+ (function (Theme) {
41
+ Theme["DARK"] = "dark";
42
+ Theme["LIGHT"] = "light";
43
+ Theme["SYSTEM"] = "system";
44
+ })(Theme || (Theme = {}));
45
+ var Variable;
46
+ (function (Variable) {
47
+ Variable["WORKFLOW"] = "workflow";
48
+ Variable["TOKEN"] = "token";
49
+ Variable["INSTANCE_ID"] = "instanceID";
50
+ Variable["START"] = "start";
51
+ Variable["TRIGGER_AGAIN"] = "triggerAgain";
52
+ Variable["ERRORS"] = "errors";
53
+ })(Variable || (Variable = {}));
54
+ var ActionType;
55
+ (function (ActionType) {
56
+ ActionType["MANUAL"] = "MANUAL";
57
+ ActionType["AUTO"] = "AUTO";
58
+ ActionType["CHAINED"] = "CHAINED";
59
+ })(ActionType || (ActionType = {}));
60
+
61
+ // export const MSTATE_URL: string = 'https://dev.mstate.mobioffice.io/api';
62
+ // export const MSTATE_URL = 'http://localhost:3000/api';
63
+ const MSTATE_URL = 'https://api.mstate.mobioffice.io/api';
64
+ const TOKEN_KEY = 'secret-key';
65
+
66
+ class MstateAngularHelper {
67
+ detectChange(change, keys) {
68
+ for (const key of keys) {
69
+ if (change[key] && change[key].currentValue !== change[key].previousValue)
70
+ return true;
71
+ }
72
+ return false;
73
+ }
74
+ formatString(str = '') {
75
+ return str.toUpperCase().replace(/_/gi, ' ');
76
+ }
77
+ getObjectValue(obj, target) {
78
+ const keys = target ? target.split('.') : [];
79
+ let cur = obj;
80
+ for (const key of keys) {
81
+ cur = cur?.[key];
82
+ }
83
+ return cur;
84
+ }
85
+ checkIsStep(step) {
86
+ return step?.config !== undefined;
87
+ }
88
+ checkIsHandledStep(module) {
89
+ switch (module) {
90
+ case FieldType.CHECKBOX:
91
+ case FieldType.DROP_DOWN:
92
+ case FieldType.INPUT_FIELD:
93
+ case FieldType.RADIO_LIST:
94
+ return true;
95
+ default:
96
+ return false;
97
+ }
98
+ }
99
+ checkInputError(form, key) {
100
+ switch ((form.controls[key].status === 'INVALID' && form.controls[key].touched) ||
101
+ (form.controls[key].status === 'INVALID' && form.controls[key].dirty)) {
102
+ case true:
103
+ return {
104
+ isError: true,
105
+ message: `${key} is required`,
106
+ };
107
+ default:
108
+ return {
109
+ isError: false,
110
+ message: '',
111
+ };
112
+ }
113
+ }
114
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
115
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularHelper, providedIn: 'root' }); }
116
+ }
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularHelper, decorators: [{
118
+ type: Injectable,
119
+ args: [{
120
+ providedIn: 'root',
121
+ }]
122
+ }] });
123
+
124
+ class MstateAngularService {
125
+ getHeaders(token) {
126
+ return new HttpHeaders({
127
+ 'Content-Type': 'application/json',
128
+ [TOKEN_KEY]: token,
129
+ });
130
+ }
131
+ constructor(http, mstateHelper) {
132
+ this.http = http;
133
+ this.mstateHelper = mstateHelper;
134
+ }
135
+ executeAction(payload) {
136
+ return this.http.post(`${MSTATE_URL}/${Route.EXECUTE_ACTION}`, {
137
+ instanceID: payload.instanceID ?? '',
138
+ name: payload.workflow,
139
+ action: payload.action,
140
+ }, { headers: this.getHeaders(payload.token) });
141
+ }
142
+ getCurrentActionsWithInstanceID(payload) {
143
+ return this.http.get(`${MSTATE_URL}/${Route.GET_CURRENT_ACTIONS_WITH_INSTANCE}/${payload.instanceID}`, {
144
+ headers: this.getHeaders(payload.token),
145
+ });
146
+ }
147
+ getCurrentActionsWithoutInstanceID(payload) {
148
+ return this.http.get(`${MSTATE_URL}/${Route.GET_CURRENT_ACTIONS_WITHOUT_INSTANCE}?name=${payload.workflow}`, {
149
+ headers: this.getHeaders(payload.token),
150
+ });
151
+ }
152
+ async handleDropdownAPI(request, target) {
153
+ const response = await axios(request);
154
+ return this.mstateHelper.getObjectValue(response?.data, target) ?? [];
155
+ }
156
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularService, deps: [{ token: i1.HttpClient }, { token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
157
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularService, providedIn: 'root' }); }
158
+ }
159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularService, decorators: [{
160
+ type: Injectable,
161
+ args: [{
162
+ providedIn: 'root',
163
+ }]
164
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: MstateAngularHelper }] });
165
+
166
+ class InputFieldComponent {
167
+ constructor(mstateHelper) {
168
+ this.mstateHelper = mstateHelper;
169
+ }
170
+ checkInputError(form, key) {
171
+ return this.mstateHelper.checkInputError(form, key);
172
+ }
173
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputFieldComponent, deps: [{ token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Component }); }
174
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InputFieldComponent, isStandalone: true, selector: "mobi-office-input-field", inputs: { config: "config", mstateModel: "mstateModel" }, ngImport: i0, template: "<div\n class=\"form-group\"\n [formGroup]=\"mstateModel\"\n style=\"display: flex; flex-direction: column\"\n>\n <label>{{ config.label }}</label>\n <input\n style=\"flex: 1\"\n [required]=\"config.field.isRequired || false\"\n [type]=\"config.inputType\"\n [name]=\"config.field.keyForAPI\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n class=\"form-control\"\n />\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
175
+ }
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputFieldComponent, decorators: [{
177
+ type: Component,
178
+ args: [{ selector: 'mobi-office-input-field', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "<div\n class=\"form-group\"\n [formGroup]=\"mstateModel\"\n style=\"display: flex; flex-direction: column\"\n>\n <label>{{ config.label }}</label>\n <input\n style=\"flex: 1\"\n [required]=\"config.field.isRequired || false\"\n [type]=\"config.inputType\"\n [name]=\"config.field.keyForAPI\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n class=\"form-control\"\n />\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n" }]
179
+ }], ctorParameters: () => [{ type: MstateAngularHelper }], propDecorators: { config: [{
180
+ type: Input,
181
+ args: [{ required: true }]
182
+ }], mstateModel: [{
183
+ type: Input,
184
+ args: [{ required: true }]
185
+ }] } });
186
+
187
+ class SelectComponent {
188
+ constructor(mstateService, mstateHelper) {
189
+ this.mstateService = mstateService;
190
+ this.mstateHelper = mstateHelper;
191
+ this.list = [];
192
+ }
193
+ ngOnInit() {
194
+ const field = this.config.field ?? {};
195
+ if (field.request) {
196
+ this.mstateService
197
+ .handleDropdownAPI(field.request, field?.mapper?.target ?? '')
198
+ .then((data) => {
199
+ this.list = data;
200
+ })
201
+ .catch((e) => console.log(e));
202
+ }
203
+ else {
204
+ this.list = field.itemList ?? [];
205
+ }
206
+ }
207
+ getObjectValue(obj, target) {
208
+ return this.mstateHelper.getObjectValue(obj, target);
209
+ }
210
+ checkInputError(form, key) {
211
+ return this.mstateHelper.checkInputError(form, key);
212
+ }
213
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectComponent, deps: [{ token: MstateAngularService }, { token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Component }); }
214
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SelectComponent, isStandalone: true, selector: "mobi-office-select", inputs: { config: "config", mstateModel: "mstateModel" }, providers: [MstateAngularService], ngImport: i0, template: "<div class=\"form-group\" [formGroup]=\"mstateModel\">\n <label>{{ config.label }}</label>\n\n <ng-select\n [required]=\"config.field.isRequired || false\"\n [items]=\"list\"\n [multiple]=\"true\"\n [bindLabel]=\"this.config.field.mapper?.label ?? 'label'\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n >\n </ng-select>\n\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n", styles: [".dropdown{position:relative;width:300px}.search-input{width:100%;padding:8px;border:1px solid #ccc;border-radius:4px}.dropdown-menu{position:absolute;width:100%;max-height:150px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:4px;margin-top:5px;z-index:10}.dropdown-item{padding:8px;cursor:pointer}.dropdown-item:hover{background-color:#f0f0f0}.no-results{padding:8px;color:#888;text-align:center}.selected-option{margin-top:10px;font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "bindLabel", "bindValue", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick", "keyDownFn"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "ngmodule", type: CommonModule }] }); }
215
+ }
216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectComponent, decorators: [{
217
+ type: Component,
218
+ args: [{ selector: 'mobi-office-select', standalone: true, imports: [ReactiveFormsModule, NgSelectModule, CommonModule], providers: [MstateAngularService], template: "<div class=\"form-group\" [formGroup]=\"mstateModel\">\n <label>{{ config.label }}</label>\n\n <ng-select\n [required]=\"config.field.isRequired || false\"\n [items]=\"list\"\n [multiple]=\"true\"\n [bindLabel]=\"this.config.field.mapper?.label ?? 'label'\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n >\n </ng-select>\n\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n", styles: [".dropdown{position:relative;width:300px}.search-input{width:100%;padding:8px;border:1px solid #ccc;border-radius:4px}.dropdown-menu{position:absolute;width:100%;max-height:150px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:4px;margin-top:5px;z-index:10}.dropdown-item{padding:8px;cursor:pointer}.dropdown-item:hover{background-color:#f0f0f0}.no-results{padding:8px;color:#888;text-align:center}.selected-option{margin-top:10px;font-weight:700}\n"] }]
219
+ }], ctorParameters: () => [{ type: MstateAngularService }, { type: MstateAngularHelper }], propDecorators: { config: [{
220
+ type: Input,
221
+ args: [{ required: true }]
222
+ }], mstateModel: [{
223
+ type: Input,
224
+ args: [{ required: true }]
225
+ }] } });
226
+
227
+ class DropdownComponent {
228
+ constructor(mstateService, mstateHelper) {
229
+ this.mstateService = mstateService;
230
+ this.mstateHelper = mstateHelper;
231
+ this.list = [];
232
+ }
233
+ ngOnInit() {
234
+ const field = this.config.field ?? {};
235
+ if (field.request) {
236
+ this.mstateService
237
+ .handleDropdownAPI(field.request, field?.mapper?.target ?? '')
238
+ .then((data) => {
239
+ this.list = data;
240
+ })
241
+ .catch((e) => console.log(e));
242
+ }
243
+ else {
244
+ this.list = field.itemList ?? [];
245
+ }
246
+ }
247
+ getObjectValue(obj, target) {
248
+ return this.mstateHelper.getObjectValue(obj, target);
249
+ }
250
+ checkInputError(form, key) {
251
+ return this.mstateHelper.checkInputError(form, key);
252
+ }
253
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownComponent, deps: [{ token: MstateAngularService }, { token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Component }); }
254
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DropdownComponent, isStandalone: true, selector: "mobi-office-dropdown", inputs: { config: "config", mstateModel: "mstateModel" }, providers: [MstateAngularService], ngImport: i0, template: "<div class=\"form-group\" [formGroup]=\"mstateModel\">\n <label>{{ config.label }}</label>\n\n <ng-select\n [items]=\"list\"\n [multiple]=\"false\"\n [bindLabel]=\"this.config.field.mapper?.label ?? 'label'\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n [required]=\"config.field.isRequired || false\"\n >\n </ng-select>\n\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "bindLabel", "bindValue", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick", "keyDownFn"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "ngmodule", type: CommonModule }] }); }
255
+ }
256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownComponent, decorators: [{
257
+ type: Component,
258
+ args: [{ selector: 'mobi-office-dropdown', standalone: true, imports: [ReactiveFormsModule, NgSelectModule, CommonModule], providers: [MstateAngularService], template: "<div class=\"form-group\" [formGroup]=\"mstateModel\">\n <label>{{ config.label }}</label>\n\n <ng-select\n [items]=\"list\"\n [multiple]=\"false\"\n [bindLabel]=\"this.config.field.mapper?.label ?? 'label'\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n [required]=\"config.field.isRequired || false\"\n >\n </ng-select>\n\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n" }]
259
+ }], ctorParameters: () => [{ type: MstateAngularService }, { type: MstateAngularHelper }], propDecorators: { config: [{
260
+ type: Input,
261
+ args: [{ required: true }]
262
+ }], mstateModel: [{
263
+ type: Input,
264
+ args: [{ required: true }]
265
+ }] } });
266
+
267
+ class InputSelectorComponent {
268
+ constructor(mstateHelper) {
269
+ this.mstateHelper = mstateHelper;
270
+ this.FieldType = FieldType;
271
+ }
272
+ ngOnInit() {
273
+ this.config = this.mstateHelper.checkIsStep(this.step)
274
+ ? this.step?.config?.data
275
+ : this.step;
276
+ }
277
+ checkInputError(form, key) {
278
+ return this.mstateHelper.checkInputError(form, key);
279
+ }
280
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputSelectorComponent, deps: [{ token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Component }); }
281
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InputSelectorComponent, isStandalone: true, selector: "mobi-office-input-selector", inputs: { step: "step", mstateModel: "mstateModel" }, providers: [MstateAngularHelper, MstateAngularService], ngImport: i0, template: "@switch (config.fieldType) { @case (FieldType.INPUT_FIELD) {\n<mobi-office-input-field [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.TEXT_AREA) {\n<mobi-office-input-field [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.DROP_DOWN) {\n<mobi-office-dropdown [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.RADIO_LIST) {\n<mobi-office-dropdown [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.CHECKBOX) {\n<mobi-office-select [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @default { } }\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: InputFieldComponent, selector: "mobi-office-input-field", inputs: ["config", "mstateModel"] }, { kind: "component", type: SelectComponent, selector: "mobi-office-select", inputs: ["config", "mstateModel"] }, { kind: "component", type: DropdownComponent, selector: "mobi-office-dropdown", inputs: ["config", "mstateModel"] }] }); }
282
+ }
283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputSelectorComponent, decorators: [{
284
+ type: Component,
285
+ args: [{ selector: 'mobi-office-input-selector', standalone: true, imports: [
286
+ CommonModule,
287
+ InputFieldComponent,
288
+ SelectComponent,
289
+ DropdownComponent,
290
+ ], providers: [MstateAngularHelper, MstateAngularService], template: "@switch (config.fieldType) { @case (FieldType.INPUT_FIELD) {\n<mobi-office-input-field [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.TEXT_AREA) {\n<mobi-office-input-field [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.DROP_DOWN) {\n<mobi-office-dropdown [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.RADIO_LIST) {\n<mobi-office-dropdown [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.CHECKBOX) {\n<mobi-office-select [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @default { } }\n" }]
291
+ }], ctorParameters: () => [{ type: MstateAngularHelper }], propDecorators: { step: [{
292
+ type: Input,
293
+ args: [{ required: true }]
294
+ }], mstateModel: [{
295
+ type: Input,
296
+ args: [{ required: true }]
297
+ }] } });
298
+
299
+ class ButtonComponent {
300
+ constructor() {
301
+ this.type = 'submit';
302
+ this.onClick = () => { };
303
+ }
304
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
305
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ButtonComponent, isStandalone: true, selector: "mobi-office-button", inputs: { type: "type", onClick: "onClick" }, ngImport: i0, template: "<button [type]=\"type\" (click)=\"onClick()\" class=\"btn\">\n <ng-content></ng-content>\n</button>\n", styles: [".btn{width:100%;display:flex;align-items:center;justify-content:center;background-color:#007bff;color:#fff;border:1px solid #007bff;padding:10px 20px;font-size:16px;border-radius:4px;text-align:center;cursor:pointer;transition:all .3s ease}.btn:hover{background-color:#0056b3;border-color:#0056b3}.btn:focus{outline:none;box-shadow:0 0 0 .2rem #007bff40}.btn:active{background-color:#004085;border-color:#036}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
306
+ }
307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, decorators: [{
308
+ type: Component,
309
+ args: [{ selector: 'mobi-office-button', standalone: true, imports: [CommonModule], template: "<button [type]=\"type\" (click)=\"onClick()\" class=\"btn\">\n <ng-content></ng-content>\n</button>\n", styles: [".btn{width:100%;display:flex;align-items:center;justify-content:center;background-color:#007bff;color:#fff;border:1px solid #007bff;padding:10px 20px;font-size:16px;border-radius:4px;text-align:center;cursor:pointer;transition:all .3s ease}.btn:hover{background-color:#0056b3;border-color:#0056b3}.btn:focus{outline:none;box-shadow:0 0 0 .2rem #007bff40}.btn:active{background-color:#004085;border-color:#036}\n"] }]
310
+ }], propDecorators: { type: [{
311
+ type: Input
312
+ }], onClick: [{
313
+ type: Input
314
+ }] } });
315
+
316
+ class LoaderComponent {
317
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
318
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LoaderComponent, isStandalone: true, selector: "mobi-office-loader", ngImport: i0, template: "<span>Loading...</span>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
319
+ }
320
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoaderComponent, decorators: [{
321
+ type: Component,
322
+ args: [{ selector: 'mobi-office-loader', standalone: true, imports: [CommonModule], template: "<span>Loading...</span>\n" }]
323
+ }] });
324
+
325
+ class ActionFormComponent {
326
+ constructor(fb, mstateAngularService, mstateHelper) {
327
+ this.fb = fb;
328
+ this.mstateAngularService = mstateAngularService;
329
+ this.mstateHelper = mstateHelper;
330
+ this.token = '';
331
+ this.workflow = '';
332
+ this.config = {
333
+ name: '',
334
+ type: ActionType.MANUAL,
335
+ steps: [],
336
+ };
337
+ this.onExecuteAction = new EventEmitter();
338
+ this.isLoading = false;
339
+ this.nonUserInputField = {};
340
+ this.handleStepConfigFilter = () => {
341
+ const keyForAPISet = new Set();
342
+ this.config.steps = this.config?.steps?.filter((stepConfig) => {
343
+ const step = stepConfig;
344
+ switch (step?.module) {
345
+ case ManualStepModule.CUSTOM_FIELD: {
346
+ if (this.updateCustomFieldValue) {
347
+ this.nonUserInputField[step?.context?.as] =
348
+ this.updateCustomFieldValue(step?.context?.key);
349
+ }
350
+ return true;
351
+ }
352
+ case ManualStepModule.CONTEXT_FIELD:
353
+ this.nonUserInputField[step?.context?.as] = step?.context?.value;
354
+ return true;
355
+ default: {
356
+ const isDuplicate = keyForAPISet.has(step?.field?.keyForAPI);
357
+ keyForAPISet.add(step?.field?.keyForAPI);
358
+ return isDuplicate === false;
359
+ }
360
+ }
361
+ });
362
+ };
363
+ }
364
+ ngOnInit() {
365
+ if (Boolean(this.config?.steps?.length) === false) {
366
+ this.handleExecuteAction();
367
+ return;
368
+ }
369
+ this.assignFormBuilder();
370
+ this.handleStepConfigFilter();
371
+ }
372
+ //#region handlers
373
+ handleExecuteAction() {
374
+ if (this.form.status === 'VALID') {
375
+ this.isLoading = true;
376
+ this.mstateAngularService
377
+ .executeAction({
378
+ action: {
379
+ name: this.config.name,
380
+ payload: {
381
+ ...this.form.value,
382
+ ...this.nonUserInputField,
383
+ },
384
+ },
385
+ token: this.token,
386
+ workflow: this.workflow,
387
+ })
388
+ .pipe(catchError((e) => {
389
+ this.onExecuteAction.emit({
390
+ value: {},
391
+ errors: e.error?.errors ?? [],
392
+ });
393
+ throw e;
394
+ }), finalize(() => {
395
+ this.isLoading = false;
396
+ }))
397
+ .subscribe((data) => {
398
+ this.onExecuteAction.emit({
399
+ value: data.data,
400
+ errors: [],
401
+ });
402
+ if (this.onSuccess) {
403
+ this.onSuccess(this.config.name);
404
+ }
405
+ });
406
+ }
407
+ else {
408
+ this.markAllAsTouched(this.form);
409
+ }
410
+ }
411
+ markAllAsTouched(formGroup) {
412
+ Object.keys(formGroup.controls).forEach((key) => {
413
+ const control = formGroup.get(key);
414
+ if (control?.markAsTouched) {
415
+ control?.markAsTouched();
416
+ }
417
+ });
418
+ }
419
+ assignFormBuilder() {
420
+ const validators = this.config.steps.reduce((acc, data) => Object.assign(acc, this.mstateHelper.checkIsStep(data) === false &&
421
+ this.mstateHelper.checkIsHandledStep(data.fieldType)
422
+ ? {
423
+ [data?.field?.keyForAPI]: [
424
+ data?.field.multiple ? [] : '',
425
+ data?.field?.isRequired ? [Validators.required] : undefined,
426
+ ],
427
+ }
428
+ : {}), {});
429
+ this.form = this.fb.group(validators);
430
+ }
431
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionFormComponent, deps: [{ token: i3.FormBuilder }, { token: MstateAngularService }, { token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Component }); }
432
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ActionFormComponent, isStandalone: true, selector: "lib-action-form", inputs: { token: "token", workflow: "workflow", config: "config", updateCustomFieldValue: "updateCustomFieldValue", instanceID: "instanceID", onSuccess: "onSuccess" }, outputs: { onExecuteAction: "onExecuteAction" }, providers: [MstateAngularService, MstateAngularHelper], ngImport: i0, template: "<div>\r\n <p style=\"font-size: 2rem; text-align: center\">\r\n {{ config.meta?.title ?? config.name }}\r\n </p>\r\n\r\n <form [formGroup]=\"form\" (ngSubmit)=\"handleExecuteAction()\">\r\n @for (step of config.steps; track $index) {\r\n <mobi-office-input-selector [step]=\"step\" [mstateModel]=\"form\" />\r\n }\r\n\r\n <div style=\"margin-top: 10px\">\r\n <mobi-office-button type=\"submit\">\r\n @if (isLoading) {\r\n <mobi-office-loader></mobi-office-loader>\r\n } @else {\r\n Submit\r\n }\r\n </mobi-office-button>\r\n </div>\r\n </form>\r\n</div>\r\n", styles: ["form{display:flex;flex-direction:column}label{margin-bottom:5px}\n"], dependencies: [{ kind: "component", type: InputSelectorComponent, selector: "mobi-office-input-selector", inputs: ["step", "mstateModel"] }, { kind: "component", type: ButtonComponent, selector: "mobi-office-button", inputs: ["type", "onClick"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: LoaderComponent, selector: "mobi-office-loader" }] }); }
433
+ }
434
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionFormComponent, decorators: [{
435
+ type: Component,
436
+ args: [{ selector: 'lib-action-form', standalone: true, imports: [
437
+ InputSelectorComponent,
438
+ ButtonComponent,
439
+ ReactiveFormsModule,
440
+ LoaderComponent,
441
+ ], providers: [MstateAngularService, MstateAngularHelper], template: "<div>\r\n <p style=\"font-size: 2rem; text-align: center\">\r\n {{ config.meta?.title ?? config.name }}\r\n </p>\r\n\r\n <form [formGroup]=\"form\" (ngSubmit)=\"handleExecuteAction()\">\r\n @for (step of config.steps; track $index) {\r\n <mobi-office-input-selector [step]=\"step\" [mstateModel]=\"form\" />\r\n }\r\n\r\n <div style=\"margin-top: 10px\">\r\n <mobi-office-button type=\"submit\">\r\n @if (isLoading) {\r\n <mobi-office-loader></mobi-office-loader>\r\n } @else {\r\n Submit\r\n }\r\n </mobi-office-button>\r\n </div>\r\n </form>\r\n</div>\r\n", styles: ["form{display:flex;flex-direction:column}label{margin-bottom:5px}\n"] }]
442
+ }], ctorParameters: () => [{ type: i3.FormBuilder }, { type: MstateAngularService }, { type: MstateAngularHelper }], propDecorators: { token: [{
443
+ type: Input,
444
+ args: [{ required: true }]
445
+ }], workflow: [{
446
+ type: Input,
447
+ args: [{ required: true }]
448
+ }], config: [{
449
+ type: Input,
450
+ args: [{ required: true }]
451
+ }], onExecuteAction: [{
452
+ type: Output
453
+ }], updateCustomFieldValue: [{
454
+ type: Input
455
+ }], instanceID: [{
456
+ type: Input
457
+ }], onSuccess: [{
458
+ type: Input
459
+ }] } });
460
+
461
+ class ActionCardComponent {
462
+ constructor() {
463
+ this.executeAction = new EventEmitter();
464
+ }
465
+ triggerExecuteAction() {
466
+ this.executeAction.emit(this.config);
467
+ }
468
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
469
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ActionCardComponent, isStandalone: true, selector: "mobi-office-action-card", inputs: { config: "config" }, outputs: { executeAction: "executeAction" }, ngImport: i0, template: "<div class=\"card\">\n <div class=\"img\"></div>\n <div class=\"card-action\">\n <mobi-office-button (click)=\"triggerExecuteAction()\">\n perform\n </mobi-office-button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ButtonComponent, selector: "mobi-office-button", inputs: ["type", "onClick"] }] }); }
470
+ }
471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionCardComponent, decorators: [{
472
+ type: Component,
473
+ args: [{ selector: 'mobi-office-action-card', standalone: true, imports: [CommonModule, ButtonComponent], template: "<div class=\"card\">\n <div class=\"img\"></div>\n <div class=\"card-action\">\n <mobi-office-button (click)=\"triggerExecuteAction()\">\n perform\n </mobi-office-button>\n </div>\n</div>\n" }]
474
+ }], propDecorators: { config: [{
475
+ type: Input,
476
+ args: [{ required: true }]
477
+ }], executeAction: [{
478
+ type: Output
479
+ }] } });
480
+
481
+ class ErrorCardComponent {
482
+ constructor() {
483
+ this.retry = new EventEmitter();
484
+ }
485
+ handleRetryError() {
486
+ this.retry.emit();
487
+ }
488
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ErrorCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
489
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ErrorCardComponent, isStandalone: true, selector: "lib-error-card", inputs: { errors: "errors" }, outputs: { retry: "retry" }, ngImport: i0, template: "<div class=\"error\">\r\n <p style=\"font-size: 2rem; text-align: center\">Error</p>\r\n\r\n @for (message of errors; track message) {\r\n <small>\r\n {{ message }}\r\n </small>\r\n }\r\n <mobi-office-button (click)=\"handleRetryError()\">Retry</mobi-office-button>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: ButtonComponent, selector: "mobi-office-button", inputs: ["type", "onClick"] }] }); }
490
+ }
491
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ErrorCardComponent, decorators: [{
492
+ type: Component,
493
+ args: [{ selector: 'lib-error-card', standalone: true, imports: [ButtonComponent], template: "<div class=\"error\">\r\n <p style=\"font-size: 2rem; text-align: center\">Error</p>\r\n\r\n @for (message of errors; track message) {\r\n <small>\r\n {{ message }}\r\n </small>\r\n }\r\n <mobi-office-button (click)=\"handleRetryError()\">Retry</mobi-office-button>\r\n</div>\r\n" }]
494
+ }], propDecorators: { errors: [{
495
+ type: Input,
496
+ args: [{ required: true }]
497
+ }], retry: [{
498
+ type: Output
499
+ }] } });
500
+
501
+ class WorkflowEndCardComponent {
502
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WorkflowEndCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
503
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: WorkflowEndCardComponent, isStandalone: true, selector: "lib-workflow-end-card", ngImport: i0, template: "<p>Workflow Ended</p>\r\n", styles: [""] }); }
504
+ }
505
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WorkflowEndCardComponent, decorators: [{
506
+ type: Component,
507
+ args: [{ selector: 'lib-workflow-end-card', standalone: true, imports: [], template: "<p>Workflow Ended</p>\r\n" }]
508
+ }] });
509
+
510
+ class MstateAngularComponent {
511
+ constructor(mstateAngularHelper, mstateAngularService) {
512
+ this.mstateAngularHelper = mstateAngularHelper;
513
+ this.mstateAngularService = mstateAngularService;
514
+ this.token = '';
515
+ this.workflow = '';
516
+ /**
517
+ * @type {boolean}
518
+ * @default true
519
+ * @description Trigger if to start workflow.
520
+ */
521
+ this.start = true;
522
+ //#region Variables & Events
523
+ this.isLoading = true;
524
+ this.errors = [];
525
+ this.errorMessages = [];
526
+ this.allowedActions = [];
527
+ }
528
+ ngOnInit() {
529
+ if (this.start)
530
+ this.setAllowedActions();
531
+ }
532
+ ngOnChanges(changes) {
533
+ if (this.mstateAngularHelper.detectChange(changes, [Variable.START])) {
534
+ if (this.start)
535
+ this.setAllowedActions();
536
+ }
537
+ }
538
+ //#endregion
539
+ //#region Handlers
540
+ setAllowedActions() {
541
+ this.isLoading = true;
542
+ if (this.instanceID) {
543
+ this.mstateAngularService
544
+ .getCurrentActionsWithInstanceID({
545
+ instanceID: this.instanceID,
546
+ token: this.token,
547
+ })
548
+ .pipe(catchError((err) => {
549
+ this.handleError({}, err.error?.errors);
550
+ throw err;
551
+ }), finalize(() => {
552
+ this.isLoading = false;
553
+ }))
554
+ .subscribe((data) => {
555
+ this.allowedActions = Object.values(data.data);
556
+ });
557
+ }
558
+ else {
559
+ this.mstateAngularService
560
+ .getCurrentActionsWithoutInstanceID({
561
+ workflow: this.workflow,
562
+ token: this.token,
563
+ })
564
+ .pipe(catchError((err) => {
565
+ this.handleError({}, err.error?.errors);
566
+ throw err;
567
+ }), finalize(() => {
568
+ this.isLoading = false;
569
+ }))
570
+ .subscribe((data) => {
571
+ this.allowedActions = Object.values(data.data);
572
+ });
573
+ }
574
+ }
575
+ handleExecuteAction(response) {
576
+ const { value, errors = [] } = response;
577
+ if (errors?.length) {
578
+ this.handleError(value, errors);
579
+ }
580
+ else {
581
+ this.allowedActions = value.actions;
582
+ }
583
+ if (value?.instanceID &&
584
+ value?.instanceID !== this.instanceID &&
585
+ !errors?.length) {
586
+ this.instanceID = value?.instanceID;
587
+ if (this.onInstanceChange) {
588
+ this.onInstanceChange(value?.instanceID);
589
+ }
590
+ }
591
+ }
592
+ handleActionExecution(config) {
593
+ this.allowedActions = [config];
594
+ }
595
+ handleRetryAction() {
596
+ if (this.allowedActions.length === 0) {
597
+ if (this.start)
598
+ this.setAllowedActions();
599
+ }
600
+ this.errors = [];
601
+ this.errorMessages = [];
602
+ }
603
+ handleError(value, errors) {
604
+ this.errors = errors;
605
+ value.instanceID = errors[0]
606
+ ?.split("instanceID='")
607
+ ?.pop()
608
+ ?.replace("'", '');
609
+ this.errorMessages = this.errors.filter((e) => typeof e === 'string');
610
+ if (this.onError) {
611
+ this.onError(this.errors);
612
+ }
613
+ }
614
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularComponent, deps: [{ token: MstateAngularHelper }, { token: MstateAngularService }], target: i0.ɵɵFactoryTarget.Component }); }
615
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MstateAngularComponent, isStandalone: true, selector: "mstate-angular", inputs: { token: "token", workflow: "workflow", instanceID: "instanceID", start: "start", theme: "theme", who: "who", onInstanceChange: "onInstanceChange", onSuccess: "onSuccess", onError: "onError", handleCustomField: "handleCustomField" }, providers: [MstateAngularHelper, MstateAngularService], usesOnChanges: true, ngImport: i0, template: "<div class=\"mstate-angular\">\n <img\n src=\"https://firebasestorage.googleapis.com/v0/b/mobioffice-dev.appspot.com/o/companies_logo%2Flogo.png?alt=media&token=e5f238f0-c373-4c76-9168-37fbe7da1de0\"\n alt=\"logo\"\n width=\"100%\"\n class=\"logo\"\n />\n\n @if (isLoading) {\n <mobi-office-loader />\n } @else if (errorMessages.length) {\n <lib-error-card [errors]=\"errorMessages\" (retry)=\"handleRetryAction()\" />\n } @else {\n @switch (allowedActions.length) {\n @case (0) {\n <lib-workflow-end-card />\n }\n @case (1) {\n <lib-action-form\n [workflow]=\"workflow\"\n [token]=\"token\"\n [instanceID]=\"instanceID\"\n [config]=\"allowedActions[0]\"\n (onExecuteAction)=\"handleExecuteAction($event)\"\n [updateCustomFieldValue]=\"handleCustomField\"\n [onSuccess]=\"onSuccess\"\n ></lib-action-form>\n }\n @default {\n @for (item of allowedActions; track $index) {\n <mobi-office-action-card\n [config]=\"item\"\n (executeAction)=\"handleActionExecution($event)\"\n />\n }\n }\n }\n }\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap\";.mstate-angular *{font-family:Poppins,serif}.mstate-angular ::ng-deep small{color:red}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container:after{background-image:linear-gradient(to right,rgba(0,0,0,.42) 0%,rgba(0,0,0,.42) 33%,transparent 0%);background-size:4px 1px;background-repeat:repeat-x}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-value{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-placeholder{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-arrow-wrapper .ng-arrow,.mstate-angular .ng-select.ng-select-disabled .ng-clear-wrapper{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container:after{border-color:#3f51b5;border-width:2px}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container.ng-appearance-outline:after,.mstate-angular .ng-select.ng-select-focused .ng-select-container.ng-appearance-outline:hover:after{border-color:#3f51b5;border-width:2px}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container .ng-value-container .ng-placeholder{display:none}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container .ng-arrow-wrapper .ng-arrow{color:#3f51b5}.mstate-angular ::ng-deep .ng-select .ng-has-value .ng-placeholder,.mstate-angular .ng-select.ng-select-filtered .ng-select-container .ng-placeholder{display:initial}.mstate-angular ::ng-deep .ng-select .ng-has-value .ng-placeholder,.mstate-angular .ng-select.ng-select-opened .ng-placeholder{display:none}.mstate-angular ::ng-deep .ng-select .ng-select-container{color:#000000de;align-items:center;min-height:45px;padding-bottom:3px;padding-inline:.5rem}.mstate-angular ::ng-deep .ng-select .ng-select-container:after{content:\"\";bottom:0;left:0;right:0;position:absolute;transition:border-color .3s cubic-bezier(.55,0,.55,.2)}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline{padding:0 .5em;min-height:60px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline:after{border:solid 1px rgba(0,0,0,.12);border-radius:5px;height:calc(100% - .5em);pointer-events:none;transition:border-color .3s cubic-bezier(.25,.8,.25,1)}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline:hover:after{border-color:#000000de;border-width:2px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline .ng-placeholder{padding:0 .25em;background-color:#fff;z-index:1}.mstate-angular ::ng-deep .ng-select-container{border:1px solid #ced4da;border-radius:5px;padding-left:5px}.mstate-angular ::ng-deep .ng-input input{height:100%;font-size:14px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline .ng-value{padding-left:.25em}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container{align-items:stretch;padding:.4375em 0}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-placeholder{position:absolute;color:#0000008a;transform-origin:left 0;transition:transform .4s cubic-bezier(.25,.8,.25,1),color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1)}.mstate-angular ::ng-deep [dir=rtl] .ng-select .ng-select-container .ng-value-container .ng-placeholder{transform-origin:right 0}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input{bottom:.4375em}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container.ng-appearance-outline .ng-arrow-wrapper{bottom:17px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container.ng-appearance-outline .ng-clear-wrapper{bottom:14px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-arrow-wrapper{align-self:flex-end;bottom:9px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-clear-wrapper{align-self:flex-end;bottom:7px}.mstate-angular ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled .ng-select-container .ng-value-container .ng-value{background-color:#0000001f;color:#00000042}.mstate-angular ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled .ng-appearance-outline:after,.mstate-angular .ng-select.ng-select-multiple.ng-select-disabled .ng-appearance-outline:hover:after{background-image:none;border:dotted 1px rgba(0,0,0,.12)}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline.ng-has-value .ng-arrow-wrapper,.mstate-angular .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline.ng-has-value .ng-clear-wrapper{border-top:none}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline .ng-arrow-wrapper{top:0}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline .ng-clear-wrapper{top:4px}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:#3f51b5;border-radius:2px;color:#fff;padding:2px .75em;margin:.4375em .4375em 5px}.mstate-angular ::ng-deep [dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin:0 0 .4375em .4375em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#0000001f;color:#00000042}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:14px;font-weight:500}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{color:#ffffff8a;padding-right:5px}.mstate-angular ::ng-deep [dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{padding-left:5px;padding-right:0}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{color:#ffffffde}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{line-height:1.375em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value{align-items:center}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-value-container{padding-bottom:0;padding-top:.1875em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-clear-wrapper,.mstate-angular .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-arrow-wrapper{border-top:.84375em solid rgba(0,0,0,0)}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper{color:#0000008a}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper:hover{color:#000000de}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper:focus{color:#000000de;outline:none}.mstate-angular ::ng-deep .ng-select .ng-arrow-wrapper{bottom:2px}.mstate-angular ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;margin:0 4px;color:#0000008a}.mstate-angular ::ng-deep .ng-select .ng-spinner-zone{top:3px}.mstate-angular ::ng-deep .ng-dropdown-panel{background:#fff;left:0}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-top{bottom:calc(100% - .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-right{left:100%;top:calc(0% + .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f;margin-left:4px}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-bottom{top:100%;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-left{left:calc(-100% - 4px);top:calc(0% + .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.multiple .ng-option.selected{background:#fff}.mstate-angular ::ng-deep .ng-dropdown-panel.multiple .ng-option.marked{background:#0000000a}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-header{padding:0 16px;line-height:3em;min-height:3em}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid rgba(0,0,0,.12);padding:0 16px;line-height:3em;min-height:3em}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;cursor:pointer;line-height:3em;height:3em;padding:0 16px;color:#0000008a;font-weight:500}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background:#0000000a}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{background:#0000001f;color:#3f51b5}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{line-height:3em;min-height:3em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 16px;text-decoration:none;position:relative;color:#000000de;text-align:left}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{text-align:right}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background:#0000000a;color:#000000de}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background:#0000001f;color:#3f51b5}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#00000061}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:32px}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:32px;padding-left:0}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-right:5px;font-size:80%;font-weight:400;color:#00000061}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}.mstate-angular .logo{width:70%;margin:auto;max-width:300px;margin-block:12px;display:flex}.mstate-angular ::ng-deep .form-control{display:block;min-height:35px;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;outline:none;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.mstate-angular ::ng-deep .form-group{padding-block:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ActionFormComponent, selector: "lib-action-form", inputs: ["token", "workflow", "config", "updateCustomFieldValue", "instanceID", "onSuccess"], outputs: ["onExecuteAction"] }, { kind: "component", type: ActionCardComponent, selector: "mobi-office-action-card", inputs: ["config"], outputs: ["executeAction"] }, { kind: "component", type: LoaderComponent, selector: "mobi-office-loader" }, { kind: "component", type: ErrorCardComponent, selector: "lib-error-card", inputs: ["errors"], outputs: ["retry"] }, { kind: "component", type: WorkflowEndCardComponent, selector: "lib-workflow-end-card" }] }); }
616
+ }
617
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularComponent, decorators: [{
618
+ type: Component,
619
+ args: [{ selector: 'mstate-angular', standalone: true, imports: [
620
+ CommonModule,
621
+ ActionFormComponent,
622
+ ActionCardComponent,
623
+ LoaderComponent,
624
+ ErrorCardComponent,
625
+ WorkflowEndCardComponent,
626
+ ], providers: [MstateAngularHelper, MstateAngularService], template: "<div class=\"mstate-angular\">\n <img\n src=\"https://firebasestorage.googleapis.com/v0/b/mobioffice-dev.appspot.com/o/companies_logo%2Flogo.png?alt=media&token=e5f238f0-c373-4c76-9168-37fbe7da1de0\"\n alt=\"logo\"\n width=\"100%\"\n class=\"logo\"\n />\n\n @if (isLoading) {\n <mobi-office-loader />\n } @else if (errorMessages.length) {\n <lib-error-card [errors]=\"errorMessages\" (retry)=\"handleRetryAction()\" />\n } @else {\n @switch (allowedActions.length) {\n @case (0) {\n <lib-workflow-end-card />\n }\n @case (1) {\n <lib-action-form\n [workflow]=\"workflow\"\n [token]=\"token\"\n [instanceID]=\"instanceID\"\n [config]=\"allowedActions[0]\"\n (onExecuteAction)=\"handleExecuteAction($event)\"\n [updateCustomFieldValue]=\"handleCustomField\"\n [onSuccess]=\"onSuccess\"\n ></lib-action-form>\n }\n @default {\n @for (item of allowedActions; track $index) {\n <mobi-office-action-card\n [config]=\"item\"\n (executeAction)=\"handleActionExecution($event)\"\n />\n }\n }\n }\n }\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap\";.mstate-angular *{font-family:Poppins,serif}.mstate-angular ::ng-deep small{color:red}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container:after{background-image:linear-gradient(to right,rgba(0,0,0,.42) 0%,rgba(0,0,0,.42) 33%,transparent 0%);background-size:4px 1px;background-repeat:repeat-x}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-value{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-placeholder{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-arrow-wrapper .ng-arrow,.mstate-angular .ng-select.ng-select-disabled .ng-clear-wrapper{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container:after{border-color:#3f51b5;border-width:2px}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container.ng-appearance-outline:after,.mstate-angular .ng-select.ng-select-focused .ng-select-container.ng-appearance-outline:hover:after{border-color:#3f51b5;border-width:2px}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container .ng-value-container .ng-placeholder{display:none}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container .ng-arrow-wrapper .ng-arrow{color:#3f51b5}.mstate-angular ::ng-deep .ng-select .ng-has-value .ng-placeholder,.mstate-angular .ng-select.ng-select-filtered .ng-select-container .ng-placeholder{display:initial}.mstate-angular ::ng-deep .ng-select .ng-has-value .ng-placeholder,.mstate-angular .ng-select.ng-select-opened .ng-placeholder{display:none}.mstate-angular ::ng-deep .ng-select .ng-select-container{color:#000000de;align-items:center;min-height:45px;padding-bottom:3px;padding-inline:.5rem}.mstate-angular ::ng-deep .ng-select .ng-select-container:after{content:\"\";bottom:0;left:0;right:0;position:absolute;transition:border-color .3s cubic-bezier(.55,0,.55,.2)}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline{padding:0 .5em;min-height:60px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline:after{border:solid 1px rgba(0,0,0,.12);border-radius:5px;height:calc(100% - .5em);pointer-events:none;transition:border-color .3s cubic-bezier(.25,.8,.25,1)}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline:hover:after{border-color:#000000de;border-width:2px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline .ng-placeholder{padding:0 .25em;background-color:#fff;z-index:1}.mstate-angular ::ng-deep .ng-select-container{border:1px solid #ced4da;border-radius:5px;padding-left:5px}.mstate-angular ::ng-deep .ng-input input{height:100%;font-size:14px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline .ng-value{padding-left:.25em}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container{align-items:stretch;padding:.4375em 0}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-placeholder{position:absolute;color:#0000008a;transform-origin:left 0;transition:transform .4s cubic-bezier(.25,.8,.25,1),color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1)}.mstate-angular ::ng-deep [dir=rtl] .ng-select .ng-select-container .ng-value-container .ng-placeholder{transform-origin:right 0}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input{bottom:.4375em}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container.ng-appearance-outline .ng-arrow-wrapper{bottom:17px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container.ng-appearance-outline .ng-clear-wrapper{bottom:14px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-arrow-wrapper{align-self:flex-end;bottom:9px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-clear-wrapper{align-self:flex-end;bottom:7px}.mstate-angular ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled .ng-select-container .ng-value-container .ng-value{background-color:#0000001f;color:#00000042}.mstate-angular ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled .ng-appearance-outline:after,.mstate-angular .ng-select.ng-select-multiple.ng-select-disabled .ng-appearance-outline:hover:after{background-image:none;border:dotted 1px rgba(0,0,0,.12)}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline.ng-has-value .ng-arrow-wrapper,.mstate-angular .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline.ng-has-value .ng-clear-wrapper{border-top:none}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline .ng-arrow-wrapper{top:0}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline .ng-clear-wrapper{top:4px}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:#3f51b5;border-radius:2px;color:#fff;padding:2px .75em;margin:.4375em .4375em 5px}.mstate-angular ::ng-deep [dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin:0 0 .4375em .4375em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#0000001f;color:#00000042}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:14px;font-weight:500}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{color:#ffffff8a;padding-right:5px}.mstate-angular ::ng-deep [dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{padding-left:5px;padding-right:0}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{color:#ffffffde}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{line-height:1.375em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value{align-items:center}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-value-container{padding-bottom:0;padding-top:.1875em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-clear-wrapper,.mstate-angular .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-arrow-wrapper{border-top:.84375em solid rgba(0,0,0,0)}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper{color:#0000008a}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper:hover{color:#000000de}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper:focus{color:#000000de;outline:none}.mstate-angular ::ng-deep .ng-select .ng-arrow-wrapper{bottom:2px}.mstate-angular ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;margin:0 4px;color:#0000008a}.mstate-angular ::ng-deep .ng-select .ng-spinner-zone{top:3px}.mstate-angular ::ng-deep .ng-dropdown-panel{background:#fff;left:0}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-top{bottom:calc(100% - .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-right{left:100%;top:calc(0% + .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f;margin-left:4px}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-bottom{top:100%;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-left{left:calc(-100% - 4px);top:calc(0% + .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.multiple .ng-option.selected{background:#fff}.mstate-angular ::ng-deep .ng-dropdown-panel.multiple .ng-option.marked{background:#0000000a}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-header{padding:0 16px;line-height:3em;min-height:3em}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid rgba(0,0,0,.12);padding:0 16px;line-height:3em;min-height:3em}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;cursor:pointer;line-height:3em;height:3em;padding:0 16px;color:#0000008a;font-weight:500}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background:#0000000a}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{background:#0000001f;color:#3f51b5}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{line-height:3em;min-height:3em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 16px;text-decoration:none;position:relative;color:#000000de;text-align:left}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{text-align:right}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background:#0000000a;color:#000000de}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background:#0000001f;color:#3f51b5}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#00000061}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:32px}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:32px;padding-left:0}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-right:5px;font-size:80%;font-weight:400;color:#00000061}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}.mstate-angular .logo{width:70%;margin:auto;max-width:300px;margin-block:12px;display:flex}.mstate-angular ::ng-deep .form-control{display:block;min-height:35px;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;outline:none;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.mstate-angular ::ng-deep .form-group{padding-block:8px}\n"] }]
627
+ }], ctorParameters: () => [{ type: MstateAngularHelper }, { type: MstateAngularService }], propDecorators: { token: [{
628
+ type: Input,
629
+ args: [{ required: true }]
630
+ }], workflow: [{
631
+ type: Input,
632
+ args: [{ required: true }]
633
+ }], instanceID: [{
634
+ type: Input
635
+ }], start: [{
636
+ type: Input
637
+ }], theme: [{
638
+ type: Input
639
+ }], who: [{
640
+ type: Input
641
+ }], onInstanceChange: [{
642
+ type: Input
643
+ }], onSuccess: [{
644
+ type: Input
645
+ }], onError: [{
646
+ type: Input
647
+ }], handleCustomField: [{
648
+ type: Input
649
+ }] } });
650
+
651
+ class MstateAngularModule {
652
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
653
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularModule, imports: [CommonModule, MstateAngularComponent, ReactiveFormsModule], exports: [MstateAngularComponent] }); }
654
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularModule, imports: [CommonModule, MstateAngularComponent, ReactiveFormsModule] }); }
655
+ }
656
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularModule, decorators: [{
657
+ type: NgModule,
658
+ args: [{
659
+ imports: [CommonModule, MstateAngularComponent, ReactiveFormsModule], // Import other necessary modules like CommonModule
660
+ exports: [MstateAngularComponent], // Export the pipe so it can be used externally
661
+ }]
662
+ }] });
663
+
664
+ /*
665
+ * Public API Surface of mstate-angular
666
+ */
667
+
668
+ /**
669
+ * Generated bundle index. Do not edit.
670
+ */
671
+
672
+ export { MstateAngularComponent, MstateAngularModule };
673
+ //# sourceMappingURL=mstate-angular.mjs.map