@veloceapps/sdk 6.0.0-10 → 6.0.0-101

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 (241) hide show
  1. package/README.md +10 -2
  2. package/bundles/veloceapps-sdk-cms.umd.js +1269 -798
  3. package/bundles/veloceapps-sdk-cms.umd.js.map +1 -1
  4. package/bundles/veloceapps-sdk-core.umd.js +783 -650
  5. package/bundles/veloceapps-sdk-core.umd.js.map +1 -1
  6. package/bundles/veloceapps-sdk-runtime.umd.js +216 -150
  7. package/bundles/veloceapps-sdk-runtime.umd.js.map +1 -1
  8. package/bundles/veloceapps-sdk.umd.js +582 -310
  9. package/bundles/veloceapps-sdk.umd.js.map +1 -1
  10. package/cms/cms.actions.d.ts +2 -4
  11. package/cms/components/element-children/element-children.component.d.ts +13 -3
  12. package/cms/components/element-children/element-children.module.d.ts +4 -2
  13. package/cms/components/element-drop-handle/element-drop-handle.component.d.ts +12 -0
  14. package/cms/components/element-drop-handle/element-drop-handle.module.d.ts +9 -0
  15. package/cms/components/element-renderer/element-renderer.component.d.ts +3 -3
  16. package/cms/components/preview/index.d.ts +1 -0
  17. package/cms/components/preview/preview.component.d.ts +9 -8
  18. package/cms/components/preview/preview.module.d.ts +2 -1
  19. package/cms/components/preview/preview.types.d.ts +11 -0
  20. package/cms/index.d.ts +2 -0
  21. package/cms/launcher.module.d.ts +3 -1
  22. package/cms/modules/migrations/index.d.ts +2 -0
  23. package/cms/modules/migrations/migrations.d.ts +2 -0
  24. package/cms/modules/migrations/migrations.module.d.ts +6 -0
  25. package/cms/modules/migrations/services/migrations.service.d.ts +10 -0
  26. package/cms/modules/migrations/types/migrations.types.d.ts +2 -0
  27. package/cms/modules/runtime/index.d.ts +2 -0
  28. package/cms/modules/runtime/runtime.module.d.ts +8 -0
  29. package/cms/modules/runtime/services/compilation.service.d.ts +18 -0
  30. package/cms/modules/runtime/services/runtime-editor.service.d.ts +18 -0
  31. package/cms/modules/runtime/services/runtime.service.d.ts +27 -0
  32. package/cms/modules/runtime/tokens.d.ts +3 -0
  33. package/cms/{types → modules/runtime/types}/compilation.types.d.ts +1 -1
  34. package/cms/modules/runtime/types/runtime.actions.d.ts +9 -0
  35. package/cms/services/index.d.ts +1 -1
  36. package/cms/services/integration.state.d.ts +2 -3
  37. package/cms/services/io-provider.service.d.ts +3 -3
  38. package/cms/services/resources.service.d.ts +10 -0
  39. package/cms/types/common.types.d.ts +1 -1
  40. package/cms/types/configuration.types.d.ts +1 -0
  41. package/cms/types/index.d.ts +1 -1
  42. package/cms/types/integration.types.d.ts +5 -0
  43. package/cms/utils/elements-resolver.d.ts +3 -2
  44. package/cms/utils/index.d.ts +1 -0
  45. package/cms/utils/path.utils.d.ts +0 -1
  46. package/cms/utils/ui-definition.utils.d.ts +6 -0
  47. package/cms/vendor-map.d.ts +52 -31
  48. package/core/modules/configuration/services/configuration-runtime.service.d.ts +2 -4
  49. package/core/modules/configuration/services/configuration.service.d.ts +6 -4
  50. package/core/modules/configuration/types/configuration-runtime.types.d.ts +0 -2
  51. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +3 -2
  52. package/core/modules/flow-configuration/services/flow-update.service.d.ts +3 -2
  53. package/core/services/context.service.d.ts +1 -0
  54. package/core/services/metric-calculation/metric-calculation.service.d.ts +5 -1
  55. package/core/services/quote-draft.service.d.ts +2 -2
  56. package/core/types/index.d.ts +0 -1
  57. package/core/types/ui-definition.types.d.ts +19 -4
  58. package/core/utils/index.d.ts +1 -0
  59. package/core/utils/line-item.utils.d.ts +3 -0
  60. package/core/utils/ui-definition.utils.d.ts +2 -0
  61. package/esm2015/cms/cms.actions.js +1 -6
  62. package/esm2015/cms/components/element-children/element-children.component.js +24 -8
  63. package/esm2015/cms/components/element-children/element-children.module.js +8 -6
  64. package/esm2015/cms/components/element-drop-handle/element-drop-handle.component.js +32 -0
  65. package/esm2015/cms/components/element-drop-handle/element-drop-handle.module.js +19 -0
  66. package/esm2015/cms/components/element-renderer/element-renderer.component.js +9 -9
  67. package/esm2015/cms/components/element-renderer/element-renderer.module.js +4 -4
  68. package/esm2015/cms/components/plugin.component.js +3 -3
  69. package/esm2015/cms/components/preview/index.js +2 -1
  70. package/esm2015/cms/components/preview/preview.component.js +21 -36
  71. package/esm2015/cms/components/preview/preview.module.js +7 -6
  72. package/esm2015/cms/components/preview/preview.types.js +2 -0
  73. package/esm2015/cms/directives/custom-template.directive.js +3 -3
  74. package/esm2015/cms/index.js +3 -1
  75. package/esm2015/cms/launcher.module.js +11 -10
  76. package/esm2015/cms/modules/federated/federated.component.js +3 -3
  77. package/esm2015/cms/modules/federated/federated.module.js +4 -4
  78. package/esm2015/cms/modules/migrations/index.js +3 -0
  79. package/esm2015/cms/modules/migrations/migrations.js +11 -0
  80. package/esm2015/cms/modules/migrations/migrations.module.js +15 -0
  81. package/esm2015/cms/modules/migrations/services/migrations.service.js +43 -0
  82. package/esm2015/cms/modules/migrations/types/migrations.types.js +2 -0
  83. package/esm2015/cms/modules/runtime/index.js +3 -0
  84. package/esm2015/cms/modules/runtime/runtime.module.js +32 -0
  85. package/esm2015/cms/modules/runtime/services/compilation.service.js +84 -0
  86. package/esm2015/cms/modules/runtime/services/runtime-editor.service.js +27 -0
  87. package/esm2015/cms/modules/runtime/services/runtime.service.js +74 -0
  88. package/esm2015/cms/modules/runtime/tokens.js +3 -0
  89. package/esm2015/cms/modules/runtime/types/compilation.types.js +2 -0
  90. package/esm2015/cms/modules/runtime/types/runtime.actions.js +2 -0
  91. package/esm2015/cms/plugins/configuration.plugin.js +12 -4
  92. package/esm2015/cms/plugins/io.plugin.js +3 -3
  93. package/esm2015/cms/plugins/script.plugin.js +3 -3
  94. package/esm2015/cms/services/element-context.service.js +3 -3
  95. package/esm2015/cms/services/index.js +2 -2
  96. package/esm2015/cms/services/integration.state.js +4 -4
  97. package/esm2015/cms/services/io-provider.service.js +9 -9
  98. package/esm2015/cms/services/resources.service.js +50 -0
  99. package/esm2015/cms/services/templates.service.js +3 -3
  100. package/esm2015/cms/types/common.types.js +1 -1
  101. package/esm2015/cms/types/configuration.types.js +1 -1
  102. package/esm2015/cms/types/index.js +2 -2
  103. package/esm2015/cms/types/integration.types.js +1 -1
  104. package/esm2015/cms/utils/elements-resolver.js +18 -8
  105. package/esm2015/cms/utils/index.js +2 -1
  106. package/esm2015/cms/utils/path.utils.js +2 -13
  107. package/esm2015/cms/utils/ui-definition.utils.js +82 -0
  108. package/esm2015/cms/vendor-map.js +26 -10
  109. package/esm2015/core/core.module.js +4 -4
  110. package/esm2015/core/modules/configuration/configuration.module.js +4 -4
  111. package/esm2015/core/modules/configuration/services/configuration-runtime.service.js +5 -10
  112. package/esm2015/core/modules/configuration/services/configuration.service.js +38 -34
  113. package/esm2015/core/modules/configuration/services/runtime-context.service.js +3 -3
  114. package/esm2015/core/modules/configuration/types/configuration-runtime.types.js +1 -1
  115. package/esm2015/core/modules/flow-configuration/flow-configuration.module.js +4 -4
  116. package/esm2015/core/modules/flow-configuration/services/flow-configuration.service.js +11 -10
  117. package/esm2015/core/modules/flow-configuration/services/flow-update.service.js +9 -9
  118. package/esm2015/core/services/context.service.js +7 -4
  119. package/esm2015/core/services/metric-calculation/metric-calculation.service.js +18 -9
  120. package/esm2015/core/services/product-images.service.js +3 -3
  121. package/esm2015/core/services/quote-draft.service.js +7 -7
  122. package/esm2015/core/types/index.js +1 -2
  123. package/esm2015/core/types/ui-definition.types.js +2 -2
  124. package/esm2015/core/utils/index.js +2 -1
  125. package/esm2015/core/utils/line-item.utils.js +43 -11
  126. package/esm2015/core/utils/ui-definition.utils.js +9 -0
  127. package/esm2015/runtime/components/component-preview/component-preview.component.js +4 -4
  128. package/esm2015/runtime/components/section-renderer/section-renderer.component.js +3 -3
  129. package/esm2015/runtime/components/ui-runtime/runtime.component.js +3 -3
  130. package/esm2015/runtime/components/ui-runtime-preview/runtime-preview.component.js +3 -3
  131. package/esm2015/runtime/execution/components/children-placeholder/children-placeholder.component.js +6 -6
  132. package/esm2015/runtime/execution/components/context-provider/context-provider.component.js +3 -3
  133. package/esm2015/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.js +3 -3
  134. package/esm2015/runtime/execution/components/federated/federated.component.js +3 -3
  135. package/esm2015/runtime/execution/components/velo-attribute/velo-attribute.component.js +3 -3
  136. package/esm2015/runtime/execution/components/velo-multiselect/velo-multiselect.component.js +3 -3
  137. package/esm2015/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.js +3 -3
  138. package/esm2015/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.js +3 -3
  139. package/esm2015/runtime/execution/components/velo-port-radio/velo-port-radio.component.js +3 -3
  140. package/esm2015/runtime/execution/components/velo-type/velo-type.component.js +3 -3
  141. package/esm2015/runtime/execution/directives/section-script.directive.js +3 -3
  142. package/esm2015/runtime/execution/directives/sf-query.directive.js +3 -3
  143. package/esm2015/runtime/execution/directives/velo-attribute.directive.js +3 -3
  144. package/esm2015/runtime/execution/directives/velo-port.directive.js +18 -18
  145. package/esm2015/runtime/execution/directives/vl-approval.directive.js +3 -3
  146. package/esm2015/runtime/execution/directives/vl-document-attachments.directive.js +3 -3
  147. package/esm2015/runtime/execution/directives/vl-document-templates.directive.js +3 -3
  148. package/esm2015/runtime/execution/directives/vl-quote.directive.js +4 -4
  149. package/esm2015/runtime/execution/directives/vl-ramp.directive.js +3 -3
  150. package/esm2015/runtime/execution/runtime-execution.module.js +4 -4
  151. package/esm2015/runtime/runtime.module.js +4 -4
  152. package/esm2015/runtime/services/cart.service.js +3 -3
  153. package/esm2015/runtime/services/collapsible-state.service.js +3 -3
  154. package/esm2015/runtime/services/configuration.service.js +11 -12
  155. package/esm2015/runtime/services/current-state.service.js +3 -3
  156. package/esm2015/runtime/services/form-scope.service.js +3 -3
  157. package/esm2015/runtime/services/product-model-cache.service.js +3 -3
  158. package/esm2015/runtime/services/runtime-context.service.js +3 -3
  159. package/esm2015/runtime/services/runtime-form.service.js +3 -3
  160. package/esm2015/runtime/services/runtime.service.js +4 -4
  161. package/esm2015/runtime/services/section-helper.service.js +3 -3
  162. package/esm2015/runtime/services/section-scope.service.js +3 -3
  163. package/esm2015/runtime/services/section-store.service.js +3 -3
  164. package/esm2015/runtime/services/section.service.js +6 -6
  165. package/esm2015/runtime/types/index.js +2 -1
  166. package/esm2015/runtime/types/quote-states.types.js +2 -0
  167. package/esm2015/src/components/dialog/dialog.component.js +16 -6
  168. package/esm2015/src/components/dialog/dialog.module.js +4 -4
  169. package/esm2015/src/components/dialog/dialog.types.js +1 -1
  170. package/esm2015/src/components/doc-gen/doc-gen.component.js +3 -3
  171. package/esm2015/src/components/doc-gen/doc-gen.module.js +4 -4
  172. package/esm2015/src/components/header/cart-overlay/cart-preview.component.js +3 -3
  173. package/esm2015/src/components/header/cart-overlay/cart-preview.module.js +4 -4
  174. package/esm2015/src/components/header/header.component.js +39 -13
  175. package/esm2015/src/components/header/header.module.js +4 -4
  176. package/esm2015/src/components/header/metrics/metrics.component.js +79 -67
  177. package/esm2015/src/components/header/metrics/metrics.definitions.js +1 -8
  178. package/esm2015/src/components/header/metrics/metrics.module.js +4 -4
  179. package/esm2015/src/flow-routing.module.js +18 -5
  180. package/esm2015/src/flow.component.js +3 -3
  181. package/esm2015/src/flow.module.js +4 -4
  182. package/esm2015/src/guards/context.guard.js +3 -3
  183. package/esm2015/src/guards/product-unload.guard.js +5 -5
  184. package/esm2015/src/guards/root.guard.js +3 -3
  185. package/esm2015/src/pages/assets/assets.component.js +117 -0
  186. package/esm2015/src/pages/assets/assets.module.js +20 -0
  187. package/esm2015/src/pages/catalog/catalog.component.js +6 -6
  188. package/esm2015/src/pages/catalog/catalog.module.js +4 -4
  189. package/esm2015/src/pages/debug/debug.component.js +3 -3
  190. package/esm2015/src/pages/debug/debug.module.js +4 -4
  191. package/esm2015/src/pages/empty-account/empty-account.component.js +3 -3
  192. package/esm2015/src/pages/empty-account/empty-account.module.js +4 -4
  193. package/esm2015/src/pages/legacy-product/legacy-product.component.js +4 -4
  194. package/esm2015/src/pages/legacy-product/legacy-product.module.js +4 -4
  195. package/esm2015/src/pages/product/product.component.js +5 -12
  196. package/esm2015/src/pages/product/product.module.js +4 -4
  197. package/esm2015/src/pages/record-not-found/record-not-found.component.js +3 -3
  198. package/esm2015/src/pages/record-not-found/record-not-found.module.js +4 -4
  199. package/esm2015/src/pages/remote/remote.component.js +5 -8
  200. package/esm2015/src/pages/remote/remote.module.js +4 -4
  201. package/esm2015/src/pages/shopping-cart/shopping-cart.component.js +6 -6
  202. package/esm2015/src/pages/shopping-cart/shopping-cart.module.js +4 -4
  203. package/esm2015/src/resolvers/flow.resolver.js +3 -3
  204. package/esm2015/src/resolvers/quote.resolver.js +28 -14
  205. package/esm2015/src/services/doc-gen.service.js +3 -3
  206. package/esm2015/src/services/flow-dialog.service.js +5 -4
  207. package/esm2015/src/services/flow-router.service.js +12 -4
  208. package/esm2015/src/services/flow.service.js +12 -5
  209. package/esm2015/src/types/flow-customization.types.js +1 -1
  210. package/esm2015/src/utils/flow.utils.js +3 -3
  211. package/fesm2015/veloceapps-sdk-cms.js +1073 -718
  212. package/fesm2015/veloceapps-sdk-cms.js.map +1 -1
  213. package/fesm2015/veloceapps-sdk-core.js +574 -520
  214. package/fesm2015/veloceapps-sdk-core.js.map +1 -1
  215. package/fesm2015/veloceapps-sdk-runtime.js +145 -146
  216. package/fesm2015/veloceapps-sdk-runtime.js.map +1 -1
  217. package/fesm2015/veloceapps-sdk.js +455 -264
  218. package/fesm2015/veloceapps-sdk.js.map +1 -1
  219. package/package.json +5 -3
  220. package/runtime/services/configuration.service.d.ts +2 -1
  221. package/runtime/services/runtime.service.d.ts +2 -1
  222. package/runtime/types/index.d.ts +1 -0
  223. package/src/components/dialog/dialog.types.d.ts +1 -0
  224. package/src/components/header/header.component.d.ts +10 -3
  225. package/src/components/header/metrics/metrics.component.d.ts +15 -6
  226. package/src/components/header/metrics/metrics.definitions.d.ts +0 -3
  227. package/src/flow-routing.module.d.ts +4 -3
  228. package/src/pages/assets/assets.component.d.ts +32 -0
  229. package/src/pages/assets/assets.module.d.ts +10 -0
  230. package/src/pages/product/product.component.d.ts +0 -1
  231. package/src/resolvers/quote.resolver.d.ts +5 -1
  232. package/src/services/flow-router.service.d.ts +2 -0
  233. package/src/services/flow.service.d.ts +1 -0
  234. package/src/types/flow-customization.types.d.ts +1 -0
  235. package/cms/services/dynamic-module.service.d.ts +0 -15
  236. package/cms/services/launcher.service.d.ts +0 -18
  237. package/esm2015/cms/services/dynamic-module.service.js +0 -33
  238. package/esm2015/cms/services/launcher.service.js +0 -58
  239. package/esm2015/cms/types/compilation.types.js +0 -2
  240. package/esm2015/core/types/quote-states.types.js +0 -2
  241. /package/{core → runtime}/types/quote-states.types.d.ts +0 -0
@@ -1,26 +1,29 @@
1
1
  import { __decorate, __param, __awaiter, __rest } from 'tslib';
2
2
  import * as i0 from '@angular/core';
3
- import { InjectionToken, Component, ChangeDetectionStrategy, Inject, Injector, Injectable, Directive, ViewContainerRef, SkipSelf, ViewChild, Input, NgModule, ViewEncapsulation } from '@angular/core';
3
+ import { InjectionToken, Component, ChangeDetectionStrategy, Inject, Injector, Injectable, ViewContainerRef, SkipSelf, ViewChild, Input, ViewEncapsulation, NgModule, Directive } from '@angular/core';
4
4
  import * as rxjs from 'rxjs';
5
- import { BehaviorSubject, Subject, takeUntil, map, filter, from, tap, of, switchMap, forkJoin, catchError } from 'rxjs';
5
+ import { BehaviorSubject, Subject, of, map, tap, switchMap, startWith, distinctUntilChanged, filter, ReplaySubject, noop, take, Observable, takeUntil, forkJoin, catchError, combineLatest, from } from 'rxjs';
6
6
  import * as lodash from 'lodash';
7
- import { compact, flatten, isArray, pull, set, kebabCase } from 'lodash';
7
+ import { compact, isArray, pull, flatten, set, kebabCase, cloneDeep } from 'lodash';
8
+ import { applyPatch } from 'rfc6902';
9
+ import * as i2 from '@veloceapps/sdk/core';
10
+ import { ConfigurationService, LineItemWorker, generateLineItem, getAttributeValue, QuoteDraftService, FlowConfigurationService, ProductImagesService, ContextService, lineItemUtils, SdkCoreModule, UI_DEFINITION_VERSION } from '@veloceapps/sdk/core';
11
+ import * as i3 from 'primeng/api';
12
+ import * as i1 from '@veloceapps/components';
13
+ import { LetDirectiveModule, LoaderModule, ToastService, ToastType } from '@veloceapps/components';
14
+ import { UUID, isDefined, Operator, Predicate, parseJsonSafely, CoreModule } from '@veloceapps/core';
8
15
  import * as i7 from '@angular/common';
9
- import { DOCUMENT, CommonModule } from '@angular/common';
10
- import { UUID, CoreModule } from '@veloceapps/core';
16
+ import { CommonModule, DOCUMENT } from '@angular/common';
17
+ import * as i2$1 from 'ngx-drag-drop';
18
+ import { DndModule } from 'ngx-drag-drop';
19
+ import { SalesforceApiService, QuoteApiService, DocumentTemplatesApiService, DocumentAttachmentApiService, RampApiService, CatalogApiService, DeltaApiService, PicklistsApiService, PriceApiService, ShoppingCartSettingsApiService, ConfigurationSettingsApiService, GuidedSellingApiService, ApiModule } from '@veloceapps/api';
20
+ import { DialogService } from 'primeng/dynamicdialog';
11
21
  import { DragDropModule } from '@angular/cdk/drag-drop';
12
22
  import { ScrollingModule } from '@angular/cdk/scrolling';
13
23
  import * as angularForms from '@angular/forms';
14
24
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
15
- import * as i2 from '@veloceapps/sdk/core';
16
- import { ConfigurationService, LineItemWorker, generateLineItem, getAttributeValue, QuoteDraftService, FlowConfigurationService, ProductImagesService, lineItemUtils, SdkCoreModule } from '@veloceapps/sdk/core';
17
- import * as i1 from '@veloceapps/components';
18
- import { LoaderModule } from '@veloceapps/components';
19
25
  import { transform } from '@babel/standalone';
20
- import { SalesforceApiService, QuoteApiService, DocumentTemplatesApiService, DocumentAttachmentApiService, RampApiService, CatalogApiService, DeltaApiService, PicklistsApiService, PriceApiService, ShoppingCartSettingsApiService, ApiModule } from '@veloceapps/api';
21
26
  import * as rxjsOperators from 'rxjs/operators';
22
- import * as i3 from 'primeng/api';
23
- import { DialogService } from 'primeng/dynamicdialog';
24
27
 
25
28
  var FlowAction;
26
29
  (function (FlowAction) {
@@ -33,7 +36,6 @@ var FlowAction;
33
36
  FlowAction["FLOW_SWITCH_OBJECT"] = "FLOW_SWITCH_OBJECT";
34
37
  FlowAction["REMOTE_APPLY"] = "REMOTE_APPLY";
35
38
  FlowAction["REMOTE_CANCEL"] = "REMOTE_CANCEL";
36
- FlowAction["SET_DEFAULT_METRICS"] = "SET_DEFAULT_METRICS";
37
39
  })(FlowAction || (FlowAction = {}));
38
40
  const ConfigureProductAction = ({ lineItemId, productId, }) => ({
39
41
  type: FlowAction.FLOW_CONFIGURE_PRODUCT,
@@ -64,10 +66,6 @@ const SwitchObjectAction = (payload) => ({
64
66
  type: FlowAction.FLOW_SWITCH_OBJECT,
65
67
  payload,
66
68
  });
67
- const SetDefaultMetrics = (metrics) => ({
68
- type: FlowAction.SET_DEFAULT_METRICS,
69
- payload: { metrics },
70
- });
71
69
 
72
70
  var cmsActions = /*#__PURE__*/Object.freeze({
73
71
  __proto__: null,
@@ -80,8 +78,7 @@ var cmsActions = /*#__PURE__*/Object.freeze({
80
78
  CloseDocGenAction: CloseDocGenAction,
81
79
  RemoteApplyAction: RemoteApplyAction,
82
80
  RemoteCancelAction: RemoteCancelAction,
83
- SwitchObjectAction: SwitchObjectAction,
84
- SetDefaultMetrics: SetDefaultMetrics
81
+ SwitchObjectAction: SwitchObjectAction
85
82
  });
86
83
 
87
84
  const DEFAULT_PLUGINS_TOKEN = new InjectionToken('DEFAULT_PLUGINS_TOKEN');
@@ -156,6 +153,88 @@ ElementComponent = __decorate([
156
153
  __param(0, Inject(Injector))
157
154
  ], ElementComponent);
158
155
 
156
+ function getElementUniqueName(collection, name, comparator) {
157
+ let result = '';
158
+ let index = 0;
159
+ while (!result) {
160
+ const candidate = name + (index ? ` (${index})` : '');
161
+ const exists = collection.some(comparator(candidate));
162
+ if (!exists) {
163
+ result = candidate;
164
+ }
165
+ else {
166
+ index++;
167
+ }
168
+ }
169
+ return result;
170
+ }
171
+ const insertElementAt = (source, target, parentPath, index) => {
172
+ const result = [...source];
173
+ const name = getElementUniqueName(result, target.name, (name) => (el) => el.name === name);
174
+ const path = parentPath ? `${parentPath}/${name}` : name;
175
+ result.splice(index, 0, Object.assign(Object.assign({}, target), { path, name }));
176
+ return result;
177
+ };
178
+ const insertElement = (source, target, path, index) => {
179
+ if (!path) {
180
+ return insertElementAt(source, target, '', index);
181
+ }
182
+ return source.map(element => {
183
+ var _a;
184
+ if (element.path === path) {
185
+ return Object.assign(Object.assign({}, element), { children: insertElementAt(element.children, target, element.path, index) });
186
+ }
187
+ else if ((_a = element.path) === null || _a === void 0 ? void 0 : _a.startsWith(path)) {
188
+ return Object.assign(Object.assign({}, element), { children: insertElement(element.children, target, path, index) });
189
+ }
190
+ else {
191
+ return element;
192
+ }
193
+ });
194
+ };
195
+ const removeElement = (source, path) => {
196
+ return source.reduce((trunk, element) => {
197
+ if (path === element.path) {
198
+ return trunk;
199
+ }
200
+ if (element.path) {
201
+ if (path.startsWith(element.path)) {
202
+ trunk.push(Object.assign(Object.assign({}, element), { children: removeElement(element.children, path) }));
203
+ }
204
+ else {
205
+ trunk.push(element);
206
+ }
207
+ }
208
+ return trunk;
209
+ }, []);
210
+ };
211
+ const findElementByPath = (source, path) => {
212
+ for (const el of source) {
213
+ if (el.path === path) {
214
+ return el;
215
+ }
216
+ if (el.path && path.startsWith(el.path)) {
217
+ const found = findElementByPath(el.children, path);
218
+ if (found) {
219
+ return found;
220
+ }
221
+ }
222
+ }
223
+ return;
224
+ };
225
+ const findElementByModule = (elements, module, elementName) => {
226
+ for (const el of elements) {
227
+ if (el.module === module && el.name === elementName) {
228
+ return el;
229
+ }
230
+ const child = findElementByModule(el.children, module, elementName);
231
+ if (child) {
232
+ return child;
233
+ }
234
+ }
235
+ return;
236
+ };
237
+
159
238
  const parseBoundPath = (path) => {
160
239
  var _a, _b;
161
240
  const regexp = new RegExp(`(?:\\/)(?:\\w+)(?:\\/)(?:ports|attributes)(?:\\/)(?:\\w+)|(?:\\/)(?:\\w+)`, 'g');
@@ -188,18 +267,6 @@ const parsePath = (path) => {
188
267
  variable,
189
268
  };
190
269
  };
191
- const findElementByModule = (elements, module, elementName) => {
192
- for (const el of elements) {
193
- if (el.module === module && el.name === elementName) {
194
- return el;
195
- }
196
- const child = findElementByModule(el.children, module, elementName);
197
- if (child) {
198
- return child;
199
- }
200
- }
201
- return;
202
- };
203
270
  const getAbsolutePath = (elements, subject, path) => {
204
271
  var _a, _b, _c;
205
272
  if (path.module) {
@@ -222,40 +289,79 @@ const getAbsolutePath = (elements, subject, path) => {
222
289
  return subjectSegments.join('/');
223
290
  };
224
291
 
225
- class DynamicModuleService {
226
- constructor() {
227
- this._elementsTree = [];
228
- this._componentFactories = [];
229
- }
230
- set componentFactories(data) {
231
- this._componentFactories = data;
232
- }
233
- get componentFactories() {
234
- return this._componentFactories;
292
+ const CMS_COMPILATION_SERVICE = new InjectionToken('VENDOR_MAP');
293
+
294
+ class RuntimeService {
295
+ constructor(injector) {
296
+ this.injector = injector;
297
+ this.modules = [];
298
+ this.componentFactories = {};
299
+ this.applicationTree = [];
300
+ this.isInitialized$ = new BehaviorSubject(false);
301
+ this.updated$ = new Subject();
302
+ this.compilationService = this.injector.get(CMS_COMPILATION_SERVICE);
303
+ }
304
+ initialize$(uiDefinition, config) {
305
+ this.config = config;
306
+ if (!uiDefinition) {
307
+ return of([]);
308
+ }
309
+ return this.compilationService.compileUIDefinition$(uiDefinition).pipe(map(result => {
310
+ this.applicationTree = result.elements;
311
+ this.addComponentFactories(result.module.componentFactories);
312
+ return result.elements;
313
+ }), tap(() => this.isInitialized$.next(true)));
314
+ }
315
+ applyPatch$(patch) {
316
+ let observable$ = of(undefined);
317
+ patch.forEach(operation => {
318
+ switch (operation.op) {
319
+ case 'add': {
320
+ observable$ = observable$.pipe(switchMap(() => this.addElement$(operation)));
321
+ break;
322
+ }
323
+ case 'remove': {
324
+ observable$ = observable$.pipe(map(() => this.deleteElement(operation)));
325
+ break;
326
+ }
327
+ default:
328
+ observable$ = of();
329
+ }
330
+ });
331
+ return observable$.pipe(tap(() => this.updated$.next()));
235
332
  }
236
- getComponentFactory(element) {
237
- return this.componentFactories.find(f => f.componentType.path === element.path);
333
+ getCompiledElement$(path) {
334
+ return this.updated$.pipe(startWith(undefined), map(() => findElementByPath(this.applicationTree, path)), distinctUntilChanged());
238
335
  }
239
- get elementsTree() {
240
- return this._elementsTree;
336
+ clear() {
337
+ this.compilationService.clearModuleCache(this.modules);
338
+ this.modules = [];
339
+ this.applicationTree = [];
340
+ this.componentFactories = {};
341
+ this.isInitialized$.next(false);
342
+ }
343
+ addElement$(operation) {
344
+ return this.compilationService.compileElement$(operation.value).pipe(map(result => {
345
+ this.addComponentFactories(result.module.componentFactories);
346
+ applyPatch(this.applicationTree, [Object.assign(Object.assign({}, operation), { value: result.elements[0] })]);
347
+ }));
241
348
  }
242
- set elementsTree(tree) {
243
- this._elementsTree = tree;
349
+ deleteElement(operation) {
350
+ applyPatch(this.applicationTree, [operation]);
244
351
  }
245
- clear() {
246
- this._elementsTree = [];
247
- this.componentFactories = [];
352
+ addComponentFactories(list) {
353
+ list.forEach(item => (this.componentFactories[item.componentType.path] = item));
248
354
  }
249
355
  }
250
- DynamicModuleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DynamicModuleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
251
- DynamicModuleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DynamicModuleService });
252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DynamicModuleService, decorators: [{
356
+ RuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
357
+ RuntimeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeService });
358
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeService, decorators: [{
253
359
  type: Injectable
254
- }] });
360
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
255
361
 
256
362
  class IOProviderService {
257
- constructor(dynamicModuleService) {
258
- this.dynamicModuleService = dynamicModuleService;
363
+ constructor(runtimeService) {
364
+ this.runtimeService = runtimeService;
259
365
  this.inputs = {};
260
366
  }
261
367
  connect(el, name, target) {
@@ -275,7 +381,7 @@ class IOProviderService {
275
381
  const pathIsValue = elPath.segments.length === 1 && elPath.segments[0].startsWith('"') && elPath.segments[0].endsWith('"');
276
382
  const finalName = (_b = elPath.variable) !== null && _b !== void 0 ? _b : name;
277
383
  const value = pathIsValue ? new BehaviorSubject(elPath.segments[0].slice(1, -1)) : undefined;
278
- const absolutePath = !pathIsValue ? getAbsolutePath(this.dynamicModuleService.elementsTree, el, elPath) : el.path;
384
+ const absolutePath = !pathIsValue ? getAbsolutePath(this.runtimeService.applicationTree, el, elPath) : el.path;
279
385
  return this.createSubjectSafe(absolutePath !== null && absolutePath !== void 0 ? absolutePath : '', finalName, value);
280
386
  }
281
387
  createSubjectSafe(path, name, subject) {
@@ -293,11 +399,11 @@ class IOProviderService {
293
399
  return this.inputs[path][name];
294
400
  }
295
401
  }
296
- IOProviderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IOProviderService, deps: [{ token: DynamicModuleService }], target: i0.ɵɵFactoryTarget.Injectable });
297
- IOProviderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IOProviderService });
298
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IOProviderService, decorators: [{
402
+ IOProviderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IOProviderService, deps: [{ token: RuntimeService }], target: i0.ɵɵFactoryTarget.Injectable });
403
+ IOProviderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IOProviderService });
404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IOProviderService, decorators: [{
299
405
  type: Injectable
300
- }], ctorParameters: function () { return [{ type: DynamicModuleService }]; } });
406
+ }], ctorParameters: function () { return [{ type: RuntimeService }]; } });
301
407
 
302
408
  class TemplatesService {
303
409
  constructor() {
@@ -321,312 +427,120 @@ class TemplatesService {
321
427
  }
322
428
  }
323
429
  }
324
- TemplatesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TemplatesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
325
- TemplatesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TemplatesService });
326
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TemplatesService, decorators: [{
430
+ TemplatesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TemplatesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
431
+ TemplatesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TemplatesService });
432
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TemplatesService, decorators: [{
327
433
  type: Injectable
328
434
  }] });
329
435
 
330
- class IOPlugin {
331
- constructor(host) {
332
- var _a, _b;
333
- this.host = host;
334
- const elementMetadata = this.host.injector.get(ELEMENT_METADATA);
335
- const inputProvider = this.host.injector.get(IOProviderService);
336
- const inputs = Object.entries((_a = elementMetadata.inputs) !== null && _a !== void 0 ? _a : {});
337
- const outputs = Object.entries((_b = elementMetadata.outputs) !== null && _b !== void 0 ? _b : {});
338
- inputs.forEach(([key, path]) => {
339
- var _a;
340
- if (path && typeof path !== 'string') {
341
- console.error(`The value of '${key}' input should be a string`);
342
- }
343
- if (((_a = elementMetadata.outputs) === null || _a === void 0 ? void 0 : _a[key]) !== undefined) {
344
- console.warn(`'${key}' appears both in inputs and outputs. To prevent inconsistent behavior please keep them unique `);
345
- }
346
- this.host[key] = inputProvider.connect(elementMetadata, key, path);
347
- });
348
- outputs.forEach(([key, path]) => {
349
- if (path && typeof path !== 'string') {
350
- console.error(`The value of '${key}' output should be a string`);
351
- }
352
- this.host[key] = inputProvider.provide(elementMetadata, key, path);
353
- });
436
+ const InitAction = { type: 'INIT' };
437
+ const ClearAction = { type: 'CLEAR' };
438
+ class IntegrationState {
439
+ constructor() {
440
+ this.stateSubj$ = new BehaviorSubject({});
441
+ this.action$ = new BehaviorSubject(InitAction);
442
+ }
443
+ get state$() {
444
+ return this.stateSubj$.asObservable();
445
+ }
446
+ get state() {
447
+ return this.stateSubj$.getValue();
448
+ }
449
+ patchState(update) {
450
+ this.stateSubj$.next(Object.assign(Object.assign({}, this.stateSubj$.getValue()), update));
451
+ }
452
+ dispatch(action) {
453
+ this.action$.next(action);
454
+ }
455
+ listen$(actionType) {
456
+ return this.action$.pipe(filter(action => action.type === actionType), map(action => action.payload));
457
+ }
458
+ listenAll$() {
459
+ return this.action$.asObservable();
460
+ }
461
+ clear() {
462
+ this.stateSubj$.next({});
463
+ this.action$.next(ClearAction);
354
464
  }
355
465
  }
356
- IOPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IOPlugin, deps: [{ token: ElementComponent }], target: i0.ɵɵFactoryTarget.Directive });
357
- IOPlugindir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.15", type: IOPlugin, ngImport: i0 });
358
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IOPlugin, decorators: [{
359
- type: Directive
360
- }], ctorParameters: function () { return [{ type: ElementComponent }]; } });
466
+ IntegrationState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IntegrationState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
467
+ IntegrationStateprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IntegrationState, providedIn: 'root' });
468
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IntegrationState, decorators: [{
469
+ type: Injectable,
470
+ args: [{ providedIn: 'root' }]
471
+ }] });
361
472
 
362
- class ScriptPlugin {
363
- constructor(host) {
364
- this.host = host;
365
- this.normalizeImports = (script, elementPath) => {
366
- const regexp = new RegExp(`import([ \\n\\t]*(?:[^ \\n\\t\\{\\}]+[ \\n\\t]*,?)?(?:[ \\n\\t]*\\{(?:[ \\n\\t]*[^ \\n\\t"'\\{\\}]+[ \\n\\t]*,?)+\\})?[ \\n\\t]*)from[ \\n\\t]*(['"])([^'"\\n]+)(?:['"]);`, 'g');
367
- const result = script.replace(regexp, (match, g1, g2, src) => {
368
- const imports = g1
369
- .trim()
370
- .slice(1, -1)
371
- .split(',')
372
- .map(item => item.trim());
373
- imports.forEach(item => {
374
- var _a;
375
- if (!((_a = this.vendorMap[src]) === null || _a === void 0 ? void 0 : _a[item])) {
376
- throw new Error(`Failed to import ${item} from '${src}' in ${elementPath}/script.ts`);
377
- }
378
- });
379
- return `const ${g1} = vendor['${src}'];`;
380
- });
381
- return result;
382
- };
383
- this.document = this.host.injector.get(DOCUMENT);
384
- this.vendorMap = this.host.injector.get(VENDOR_MAP);
385
- const elementMetadata = this.host.injector.get(ELEMENT_METADATA);
386
- const sharedElementMetadata = this.host.injector.get(SHARED_ELEMENT_METADATA);
387
- this.addScript(sharedElementMetadata);
388
- this.addScript(elementMetadata);
473
+ class ResourcesService {
474
+ constructor() {
475
+ this.scripts = new Map();
476
+ this.loaded$ = new ReplaySubject();
389
477
  }
390
- addScript(metadata) {
391
- var _a;
392
- if (!(metadata === null || metadata === void 0 ? void 0 : metadata.script)) {
393
- return;
394
- }
395
- const id = btoa(UUID.UUID());
396
- const script = this.document.createElement('script');
397
- script.type = `text/javascript`;
398
- let scriptContent = this.normalizeImports(metadata.script, (_a = metadata.path) !== null && _a !== void 0 ? _a : metadata.name);
399
- const classMatch = /export class (\S+)/.exec(scriptContent);
400
- const className = classMatch === null || classMatch === void 0 ? void 0 : classMatch[1];
401
- if (!classMatch || !className) {
402
- console.error("Script doesn't have exported class");
403
- return;
478
+ loadScript(url) {
479
+ const loaded = this.scripts.get(url);
480
+ if (loaded === true) {
481
+ return of(noop());
404
482
  }
405
- scriptContent = scriptContent.replace(classMatch[0], `class ${className}`);
406
- script.text = `var ${id} = function(vendor) {${scriptContent}
407
- return ${className}; };`;
408
- this.document.body.appendChild(script);
409
- const ScriptClass = window[id](this.vendorMap);
410
- if (ScriptClass instanceof Object) {
411
- this.host.registerPlugin(new ScriptClass(this.host));
483
+ if (loaded == null) {
484
+ this.scripts.set(url, false);
485
+ const script = document.createElement('script');
486
+ script.src = url;
487
+ script.onload = () => {
488
+ this.scripts.set(url, true);
489
+ this.loaded$.next();
490
+ };
491
+ document.body.appendChild(script);
412
492
  }
413
- this.document.body.removeChild(script);
493
+ return this.loaded$.pipe(filter(() => this.scripts.get(url) === true), take(1));
494
+ }
495
+ loadStyles(url) {
496
+ var _a, _b;
497
+ const previewEl = document.querySelector('vl-cms-preview');
498
+ const rootEl = (_b = (_a = previewEl === null || previewEl === void 0 ? void 0 : previewEl.shadowRoot) !== null && _a !== void 0 ? _a : previewEl) !== null && _b !== void 0 ? _b : document.body;
499
+ return new Observable(subscriber => {
500
+ const link = document.createElement('link');
501
+ link.rel = 'stylesheet';
502
+ link.type = 'text/css';
503
+ link.href = url;
504
+ link.media = 'all';
505
+ link.onload = () => {
506
+ subscriber.next();
507
+ subscriber.complete();
508
+ };
509
+ rootEl.appendChild(link);
510
+ });
414
511
  }
415
512
  }
416
- ScriptPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ScriptPlugin, deps: [{ token: ElementComponent }], target: i0.ɵɵFactoryTarget.Directive });
417
- ScriptPlugindir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.15", type: ScriptPlugin, ngImport: i0 });
418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ScriptPlugin, decorators: [{
419
- type: Directive
420
- }], ctorParameters: function () { return [{ type: ElementComponent }]; } });
513
+ ResourcesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ResourcesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
514
+ ResourcesServiceprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ResourcesService, providedIn: 'root' });
515
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ResourcesService, decorators: [{
516
+ type: Injectable,
517
+ args: [{ providedIn: 'root' }]
518
+ }] });
421
519
 
422
- /*
423
- * ScriptPlugin must always be the last plugin in the list to make sure user code is running after all pre-initializers.
424
- */
425
- const CONFIG = {
426
- CUSTOM: {
427
- component: ElementComponent,
428
- plugins: [IOPlugin, ScriptPlugin],
429
- },
430
- CONTAINER: {
431
- component: ElementComponent,
432
- defaultTemplate: '<element-children></element-children>',
433
- plugins: [ScriptPlugin],
434
- },
435
- SERVICE: {
436
- component: ElementComponent,
437
- plugins: [IOPlugin, ScriptPlugin],
438
- suppressTemplate: true,
439
- suppressStyles: true,
440
- },
441
- REFERENCE: {
442
- component: ElementComponent,
443
- plugins: [IOPlugin, ScriptPlugin],
444
- suppressTemplate: true,
445
- },
446
- };
520
+ class ElementContextService {
521
+ }
522
+ ElementContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
523
+ ElementContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementContextService });
524
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementContextService, decorators: [{
525
+ type: Injectable
526
+ }] });
447
527
 
448
- const EXPORTED_CLASS_REGEX = /export class (\S+)/;
449
- const METADATA_DECORATOR_REGEX = /@ElementDefinition\(([\s\S]+)\)(\n|\r\n|.)*export class/g;
450
- class UiBuildError extends Error {
451
- constructor(message, affectedMetadata) {
452
- super(message);
453
- this.name = this.constructor.name;
454
- this.affectedMetadata = affectedMetadata;
528
+ class ElementRendererComponent {
529
+ constructor(parentInjector, runtimeService, elementContext, ioProviderService, configurationService, elementRef, cdr) {
530
+ this.parentInjector = parentInjector;
531
+ this.runtimeService = runtimeService;
532
+ this.elementContext = elementContext;
533
+ this.ioProviderService = ioProviderService;
534
+ this.configurationService = configurationService;
535
+ this.elementRef = elementRef;
536
+ this.cdr = cdr;
537
+ this.refs = {};
538
+ this.destroy$ = new Subject();
455
539
  }
456
- }
457
- const elementToMetadata = (el, parentPath) => {
458
- var _a;
459
- const script = el.script && window.atob(el.script);
460
- const template = el.template && window.atob(el.template);
461
- const styles = el.styles && window.atob(el.styles);
462
- const exportedClassName = script && ((_a = EXPORTED_CLASS_REGEX.exec(script)) !== null && _a !== void 0 ? _a : [])[1];
463
- if (!exportedClassName) {
464
- throw new Error("Script doesn't have exported class");
465
- }
466
- const elementMetadata = extractElementMetadata(script || '');
467
- const path = (parentPath ? parentPath + '/' : '') + elementMetadata.name;
468
- return Object.assign(Object.assign({}, elementMetadata), { path, script: script === null || script === void 0 ? void 0 : script.replace(METADATA_DECORATOR_REGEX, 'export class'), template,
469
- styles, children: el.children.map(child => elementToMetadata(child, path)) });
470
- };
471
- const metadataToElement = (metadata, recursive = true) => {
472
- const elMetadata = {
473
- name: metadata.name,
474
- isShared: metadata.isShared,
475
- type: metadata.type,
476
- model: metadata.model,
477
- module: metadata.module,
478
- reference: metadata.reference,
479
- inputs: metadata.inputs,
480
- outputs: metadata.outputs,
481
- children: metadata.children.map(({ name }) => name),
482
- configuredStyles: metadata.configuredStyles,
483
- };
484
- const normalizedElMetadata = normalizeElementMetadata(elMetadata);
485
- if (!metadata.script || !EXPORTED_CLASS_REGEX.test(metadata.script)) {
486
- throw new UiBuildError(`'${metadata.name}' component script is missing an exported class`, metadata);
487
- }
488
- const script = metadata.script &&
489
- window.btoa(metadata.script.replace(EXPORTED_CLASS_REGEX, `@ElementDefinition(${stringifyElementMetadata(normalizedElMetadata)})\nexport class Script`));
490
- const template = metadata.template && window.btoa(metadata.template);
491
- const styles = metadata.styles && window.btoa(metadata.styles);
492
- return {
493
- script,
494
- template,
495
- styles,
496
- children: recursive ? metadata.children.map(meta => metadataToElement(meta)) : [],
497
- };
498
- };
499
- const normalizeElementMetadata = (elementMetadata) => {
500
- var _a, _b, _c, _d;
501
- const metadata = Object.assign({}, elementMetadata);
502
- // model
503
- const { lineItem, path } = (_a = metadata.model) !== null && _a !== void 0 ? _a : {};
504
- const model = lineItem ? { lineItem } : path ? { path } : undefined;
505
- if (model) {
506
- metadata.model = model;
507
- }
508
- else {
509
- delete metadata.model;
510
- }
511
- // module
512
- if (!metadata.module) {
513
- delete metadata.module;
514
- }
515
- // reference
516
- if (!metadata.reference) {
517
- delete metadata.reference;
518
- }
519
- // inputs
520
- const inputs = Object.entries((_b = metadata.inputs) !== null && _b !== void 0 ? _b : {}).reduce((acc, [key, value]) => {
521
- return Object.assign(Object.assign({}, acc), { [key]: value || null });
522
- }, {});
523
- if (inputs && Object.keys(inputs).length > 0) {
524
- metadata.inputs = inputs;
525
- }
526
- else {
527
- delete metadata.inputs;
528
- }
529
- // outputs
530
- const outputs = Object.entries((_c = metadata.outputs) !== null && _c !== void 0 ? _c : {}).reduce((acc, [key, value]) => {
531
- return Object.assign(Object.assign({}, acc), { [key]: value || null });
532
- }, {});
533
- if (outputs && Object.keys(outputs).length > 0) {
534
- metadata.outputs = outputs;
535
- }
536
- else {
537
- delete metadata.outputs;
538
- }
539
- // children
540
- if (!((_d = metadata.children) === null || _d === void 0 ? void 0 : _d.length)) {
541
- delete metadata.children;
542
- }
543
- // isShared
544
- if (!metadata.isShared) {
545
- delete metadata.isShared;
546
- }
547
- // configuredStyles
548
- if (!metadata.configuredStyles) {
549
- delete metadata.configuredStyles;
550
- }
551
- return metadata;
552
- };
553
- const extractElementMetadata = (script) => {
554
- var _a;
555
- const metadataString = ((_a = METADATA_DECORATOR_REGEX.exec(script)) !== null && _a !== void 0 ? _a : [])[1];
556
- // need to reset regex last index to prevent null result for next execution
557
- METADATA_DECORATOR_REGEX.lastIndex = 0;
558
- return new Function(`return ${metadataString}`)();
559
- };
560
- const extendElementMetadata = (script, extend) => {
561
- var _a;
562
- const metadataString = ((_a = METADATA_DECORATOR_REGEX.exec(script)) !== null && _a !== void 0 ? _a : [])[1];
563
- // need to reset regex last index to prevent null result for next execution
564
- METADATA_DECORATOR_REGEX.lastIndex = 0;
565
- if (!metadataString) {
566
- return script;
567
- }
568
- const updated = Object.assign(Object.assign({}, new Function(`return ${metadataString}`)()), extend);
569
- return script.replace(metadataString, stringifyElementMetadata(updated));
570
- };
571
- const getElementConfig = (type) => {
572
- return CONFIG[type];
573
- };
574
- const doesElementSupportIO = (type) => {
575
- var _a, _b;
576
- return (_b = (_a = getElementConfig(type).plugins) === null || _a === void 0 ? void 0 : _a.includes(IOPlugin)) !== null && _b !== void 0 ? _b : false;
577
- };
578
- function stringifyElementMetadata(elementMetadata) {
579
- const cleaned = JSON.stringify(elementMetadata, null, 2);
580
- return cleaned.replace(/^[\t ]*"[^:\n\r]+(?<!\\)":/gm, function (match) {
581
- return match.replace(/"/g, '');
582
- });
583
- }
584
- const isValidScript = (script) => {
585
- var _a;
586
- if (!script) {
587
- return false;
588
- }
589
- const exportedClassName = script && ((_a = EXPORTED_CLASS_REGEX.exec(script)) !== null && _a !== void 0 ? _a : [])[1];
590
- if (!exportedClassName) {
591
- return false;
592
- }
593
- const meta = extractElementMetadata(script);
594
- if (!meta.name || !meta.type) {
595
- return false;
596
- }
597
- return true;
598
- };
599
- function flattenElements(elements) {
600
- return flatten(elements.map(el => [el, ...flattenElements(el.children)]));
601
- }
602
- function isSharedElement(el) {
603
- return Boolean(el.isShared) && el.type !== 'REFERENCE';
604
- }
605
-
606
- class ElementContextService {
607
- }
608
- ElementContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
609
- ElementContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementContextService });
610
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementContextService, decorators: [{
611
- type: Injectable
612
- }] });
613
-
614
- class ElementRendererComponent {
615
- constructor(parentInjector, dynamicModuleService, elementContext, ioProviderService, configurationService, elementRef, cdr) {
616
- this.parentInjector = parentInjector;
617
- this.dynamicModuleService = dynamicModuleService;
618
- this.elementContext = elementContext;
619
- this.ioProviderService = ioProviderService;
620
- this.configurationService = configurationService;
621
- this.elementRef = elementRef;
622
- this.cdr = cdr;
623
- this.refs = {};
624
- this.destroy$ = new Subject();
625
- }
626
- ngOnInit() {
627
- this.elementContext.metadata = this.meta;
628
- this.factory = this.dynamicModuleService.getComponentFactory(this.meta);
629
- this.createComponents();
540
+ ngOnInit() {
541
+ this.elementContext.metadata = this.meta;
542
+ this.factory = this.meta.path ? this.runtimeService.componentFactories[this.meta.path] : undefined;
543
+ this.createComponents();
630
544
  }
631
545
  ngOnDestroy() {
632
546
  this.destroyComponents();
@@ -749,9 +663,9 @@ class ElementRendererComponent {
749
663
  this.refs = {};
750
664
  }
751
665
  }
752
- ElementRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementRendererComponent, deps: [{ token: i0.Injector, skipSelf: true }, { token: DynamicModuleService }, { token: ElementContextService }, { token: IOProviderService }, { token: i2.ConfigurationService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
753
- ElementRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: ElementRendererComponent, selector: "vl-cms-element-renderer", inputs: { meta: "meta" }, providers: [ElementContextService], viewQueries: [{ propertyName: "el", first: true, predicate: ["el"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-template #el></ng-template>\n", styles: [":host{display:contents}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
754
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementRendererComponent, decorators: [{
666
+ ElementRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementRendererComponent, deps: [{ token: i0.Injector, skipSelf: true }, { token: RuntimeService }, { token: ElementContextService }, { token: IOProviderService }, { token: i2.ConfigurationService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
667
+ ElementRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ElementRendererComponent, selector: "vl-cms-element-renderer", inputs: { meta: "meta" }, providers: [ElementContextService], viewQueries: [{ propertyName: "el", first: true, predicate: ["el"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-template #el></ng-template>\n", styles: [":host{display:contents}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
668
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementRendererComponent, decorators: [{
755
669
  type: Component,
756
670
  args: [{
757
671
  selector: 'vl-cms-element-renderer',
@@ -762,184 +676,536 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
762
676
  }]
763
677
  }], ctorParameters: function () { return [{ type: i0.Injector, decorators: [{
764
678
  type: SkipSelf
765
- }] }, { type: DynamicModuleService }, { type: ElementContextService }, { type: IOProviderService }, { type: i2.ConfigurationService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { el: [{
679
+ }] }, { type: RuntimeService }, { type: ElementContextService }, { type: IOProviderService }, { type: i2.ConfigurationService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { el: [{
766
680
  type: ViewChild,
767
681
  args: ['el', { read: ViewContainerRef, static: true }]
768
682
  }], meta: [{
769
683
  type: Input
770
684
  }] } });
771
685
 
772
- class ElementChildrenComponent {
773
- constructor(elementContext) {
774
- this.elementContext = elementContext;
775
- this.metadata = this.elementContext.metadata;
686
+ class PreviewComponent {
687
+ constructor(runtimeService, configurationService, messageService, configurationRuntimeService, integrationState, cdr) {
688
+ this.runtimeService = runtimeService;
689
+ this.configurationService = configurationService;
690
+ this.messageService = messageService;
691
+ this.configurationRuntimeService = configurationRuntimeService;
692
+ this.integrationState = integrationState;
693
+ this.cdr = cdr;
694
+ this.state$ = new BehaviorSubject({ loading: true, failure: false });
695
+ this.elements = [];
696
+ this.destroy$ = new Subject();
697
+ this.runtimeService.updated$.pipe(takeUntil(this.destroy$)).subscribe(() => this.cdr.detectChanges());
698
+ }
699
+ ngOnInit() {
700
+ var _a;
701
+ if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.clearStateOnInit) {
702
+ this.integrationState.clear();
703
+ }
704
+ this.startPreview();
705
+ }
706
+ ngOnDestroy() {
707
+ this.destroy$.next();
708
+ this.destroy$.complete();
709
+ this.configurationService.reset();
710
+ this.runtimeService.clear();
711
+ }
712
+ initializeConfiguration$() {
713
+ const isAlreadyInitialized = this.configurationRuntimeService.isInitialized;
714
+ if (!this.uiDefinition || this.uiDefinition.type !== 'CONFIGURATION' || isAlreadyInitialized) {
715
+ return of({});
716
+ }
717
+ if (!this.modelId) {
718
+ console.warn(`No modelId is given for uiDefinition with '${this.uiDefinition.type}' type`);
719
+ return of({});
720
+ }
721
+ // If still not initialized - init configuration in Test mode
722
+ return this.configurationRuntimeService
723
+ .initTestMode(this.modelId, this.uiDefinition)
724
+ .pipe(switchMap(() => this.configurationService.configure()));
725
+ }
726
+ startPreview() {
727
+ if (!this.uiDefinition) {
728
+ return;
729
+ }
730
+ forkJoin([this.runtimeService.initialize$(this.uiDefinition, this.config), this.initializeConfiguration$()])
731
+ .pipe(tap(([elements]) => {
732
+ this.elements = elements;
733
+ this.state$.next({ loading: false, failure: false });
734
+ }), catchError(error => {
735
+ var _a, _b;
736
+ console.error(error);
737
+ if (!((_b = (_a = this.uiDefinition) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.suppressToastMessages)) {
738
+ this.messageService.add({ severity: 'error', summary: error });
739
+ }
740
+ this.state$.next({ loading: false, failure: true });
741
+ return of();
742
+ }), takeUntil(this.destroy$))
743
+ .subscribe();
776
744
  }
777
745
  }
778
- ElementChildrenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementChildrenComponent, deps: [{ token: ElementContextService }], target: i0.ɵɵFactoryTarget.Component });
779
- ElementChildrenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: ElementChildrenComponent, selector: "element-children", ngImport: i0, template: "<ng-container *ngIf=\"metadata?.children.length\">\n <ng-container *ngFor=\"let child of metadata.children\">\n <vl-cms-element-renderer [meta]=\"child\"></vl-cms-element-renderer>\n </ng-container>\n</ng-container>\n", styles: [":host{display:contents}\n"], components: [{ type: ElementRendererComponent, selector: "vl-cms-element-renderer", inputs: ["meta"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
780
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementChildrenComponent, decorators: [{
746
+ PreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PreviewComponent, deps: [{ token: RuntimeService }, { token: i2.ConfigurationService }, { token: i3.MessageService }, { token: i2.ConfigurationRuntimeService }, { token: IntegrationState }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
747
+ PreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PreviewComponent, selector: "vl-cms-preview", inputs: { modelId: "modelId", uiDefinition: "uiDefinition", config: "config" }, providers: [IOProviderService, TemplatesService], ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-element-renderer *ngFor=\"let el of elements\" [meta]=\"el\"></vl-cms-element-renderer>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [":host{flex-grow:1;display:flex;flex-direction:column;height:100%}\n"], components: [{ type: i1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: ElementRendererComponent, selector: "vl-cms-element-renderer", inputs: ["meta"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom });
748
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PreviewComponent, decorators: [{
781
749
  type: Component,
782
750
  args: [{
783
- // eslint-disable-next-line @angular-eslint/component-selector
784
- selector: 'element-children',
785
- templateUrl: 'element-children.component.html',
786
- styleUrls: ['./element-children.component.scss'],
751
+ selector: 'vl-cms-preview',
752
+ templateUrl: './preview.component.html',
753
+ styleUrls: ['./preview.component.scss'],
787
754
  changeDetection: ChangeDetectionStrategy.OnPush,
755
+ providers: [IOProviderService, TemplatesService],
756
+ // use shadow DOM to prevent UI from being affected by global styles
757
+ encapsulation: ViewEncapsulation.ShadowDom,
788
758
  }]
789
- }], ctorParameters: function () { return [{ type: ElementContextService }]; } });
759
+ }], ctorParameters: function () { return [{ type: RuntimeService }, { type: i2.ConfigurationService }, { type: i3.MessageService }, { type: i2.ConfigurationRuntimeService }, { type: IntegrationState }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { modelId: [{
760
+ type: Input
761
+ }], uiDefinition: [{
762
+ type: Input
763
+ }], config: [{
764
+ type: Input
765
+ }] } });
790
766
 
791
- // eslint-disable-next-line @angular-eslint/directive-selector
792
- class CustomTemplateDirective {
793
- constructor(templateRef, templatesService) {
794
- this.templateRef = templateRef;
795
- this.templatesService = templatesService;
767
+ class RuntimeEditorService {
768
+ constructor(runtimeService) {
769
+ this.runtimeService = runtimeService;
770
+ this.editorModeSubj$ = new BehaviorSubject(false);
771
+ this.dragMode$ = new BehaviorSubject(false);
772
+ this.elementDropped$ = new ReplaySubject();
773
+ this.elementDeleted$ = new ReplaySubject();
774
+ this.editorMode$ = this.editorModeSubj$.asObservable();
775
+ this.runtimeService.isInitialized$.subscribe(() => { var _a; return this.editorModeSubj$.next(Boolean((_a = this.runtimeService.config) === null || _a === void 0 ? void 0 : _a.uiBuilderMode)); });
796
776
  }
797
- ngAfterViewInit() {
798
- if (!this.customTemplate) {
799
- return;
800
- }
801
- this.templatesService.register(this.customTemplate, this.templateRef);
777
+ applyPatch$(patch) {
778
+ return this.runtimeService.applyPatch$(patch);
779
+ }
780
+ toggleEditorMode() {
781
+ this.editorModeSubj$.next(!this.editorModeSubj$.value);
802
782
  }
803
783
  }
804
- CustomTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: CustomTemplateDirective, deps: [{ token: i0.TemplateRef }, { token: TemplatesService }], target: i0.ɵɵFactoryTarget.Directive });
805
- CustomTemplateDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.15", type: CustomTemplateDirective, selector: "[customTemplate]", inputs: { customTemplate: "customTemplate" }, ngImport: i0 });
806
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: CustomTemplateDirective, decorators: [{
807
- type: Directive,
808
- args: [{ selector: '[customTemplate]' }]
809
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: TemplatesService }]; }, propDecorators: { customTemplate: [{
784
+ RuntimeEditorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeEditorService, deps: [{ token: RuntimeService }], target: i0.ɵɵFactoryTarget.Injectable });
785
+ RuntimeEditorServiceprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeEditorService });
786
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeEditorService, decorators: [{
787
+ type: Injectable
788
+ }], ctorParameters: function () { return [{ type: RuntimeService }]; } });
789
+
790
+ class ElementDropHandleComponent {
791
+ constructor(runtimeService) {
792
+ this.runtimeService = runtimeService;
793
+ }
794
+ handleDrop(e) {
795
+ this.runtimeService.elementDropped$.next({
796
+ element: e.data,
797
+ index: this.index,
798
+ path: this.parentPath,
799
+ });
800
+ }
801
+ }
802
+ ElementDropHandleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementDropHandleComponent, deps: [{ token: RuntimeEditorService }], target: i0.ɵɵFactoryTarget.Component });
803
+ ElementDropHandleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ElementDropHandleComponent, selector: "vl-element-drop-handle", inputs: { index: "index", parentPath: "parentPath" }, ngImport: i0, template: "<div class=\"container\" dndDropzone (dndDrop)=\"handleDrop($event)\">\n <div class=\"handle\"></div>\n</div>\n", styles: [":host{width:0;position:relative}.container{width:40px;height:100%;position:absolute;transform:translate(-50%);display:flex;justify-content:center;align-items:center}.handle{display:none;background:red;height:calc(100% - 10px);width:2px;pointer-events:none}.container.dndDragover .handle{display:block}\n"], directives: [{ type: i2$1.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
804
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementDropHandleComponent, decorators: [{
805
+ type: Component,
806
+ args: [{
807
+ selector: 'vl-element-drop-handle',
808
+ templateUrl: './element-drop-handle.component.html',
809
+ styleUrls: ['./element-drop-handle.component.scss'],
810
+ changeDetection: ChangeDetectionStrategy.OnPush,
811
+ }]
812
+ }], ctorParameters: function () { return [{ type: RuntimeEditorService }]; }, propDecorators: { index: [{
813
+ type: Input
814
+ }], parentPath: [{
810
815
  type: Input
811
816
  }] } });
812
817
 
813
- const defaultOptions = {
814
- suppressLoading: false,
815
- loadingLabel: 'LOADING',
816
- };
818
+ class ElementDropHandleModule {
819
+ }
820
+ ElementDropHandleModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementDropHandleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
821
+ ElementDropHandleModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementDropHandleModule, declarations: [ElementDropHandleComponent], imports: [CommonModule, DndModule], exports: [ElementDropHandleComponent] });
822
+ ElementDropHandleModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementDropHandleModule, imports: [[CommonModule, DndModule]] });
823
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementDropHandleModule, decorators: [{
824
+ type: NgModule,
825
+ args: [{
826
+ declarations: [ElementDropHandleComponent],
827
+ imports: [CommonModule, DndModule],
828
+ exports: [ElementDropHandleComponent],
829
+ }]
830
+ }] });
817
831
 
818
- const moduleMap = {};
819
- function loadRemoteEntry(remoteEntry) {
820
- return new Promise((resolve, reject) => {
821
- if (moduleMap[remoteEntry]) {
822
- resolve();
823
- return;
824
- }
825
- const script = document.createElement('script');
826
- script.src = remoteEntry;
827
- script.onerror = reject;
828
- script.onload = () => {
829
- moduleMap[remoteEntry] = true;
830
- resolve(); // window is the global namespace
831
- };
832
- document.body.append(script);
833
- });
834
- }
835
- function lookupExposedModule(remoteName, exposedModule) {
836
- return __awaiter(this, void 0, void 0, function* () {
837
- // Initializes the share scope. This fills it with known provided modules from this build and all remotes
838
- yield __webpack_init_sharing__('default');
839
- const container = window[remoteName]; // or get the container somewhere else
840
- // Initialize the container, it may provide shared modules
841
- yield container.init(__webpack_share_scopes__.default);
842
- const factory = yield container.get(exposedModule);
843
- const Module = factory();
844
- return Module;
845
- });
846
- }
847
- function loadRemoteModule(remoteEntry, remoteName, exposedModule) {
848
- return __awaiter(this, void 0, void 0, function* () {
849
- yield loadRemoteEntry(remoteEntry);
850
- return yield lookupExposedModule(remoteName, exposedModule);
851
- });
832
+ class ElementRendererModule {
852
833
  }
834
+ ElementRendererModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementRendererModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
835
+ ElementRendererModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementRendererModule, declarations: [ElementRendererComponent], exports: [ElementRendererComponent] });
836
+ ElementRendererModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementRendererModule });
837
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementRendererModule, decorators: [{
838
+ type: NgModule,
839
+ args: [{
840
+ declarations: [ElementRendererComponent],
841
+ exports: [ElementRendererComponent],
842
+ }]
843
+ }] });
853
844
 
854
- class FederatedComponent {
855
- constructor(injector, compiler, appRef, renderer) {
856
- this.injector = injector;
857
- this.compiler = compiler;
858
- this.appRef = appRef;
859
- this.renderer = renderer;
860
- this.isLoading$ = new BehaviorSubject(false);
861
- // configs
862
- this.suppressLoading = defaultOptions.suppressLoading;
863
- this.loadingLabel = defaultOptions.loadingLabel;
864
- }
865
- ngOnChanges(changes) {
866
- var _a, _b, _c, _d;
867
- if (changes.data && this.instance) {
868
- this.instance.data = this.data;
869
- }
870
- if (changes.options) {
871
- this.suppressLoading = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.suppressLoading) !== null && _b !== void 0 ? _b : defaultOptions.suppressLoading;
872
- this.loadingLabel = (_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.loadingLabel) !== null && _d !== void 0 ? _d : defaultOptions.loadingLabel;
873
- }
874
- }
875
- ngOnInit() {
876
- this.isLoading$.next(true);
845
+ class ElementChildrenComponent {
846
+ constructor(elementContext, runtimeService, runtimeEditorService, cdr) {
847
+ var _a, _b;
848
+ this.elementContext = elementContext;
849
+ this.runtimeService = runtimeService;
850
+ this.runtimeEditorService = runtimeEditorService;
851
+ this.cdr = cdr;
852
+ this.destroyed$ = new Subject();
853
+ const path = (_b = (_a = this.elementContext) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.path;
854
+ this.metadata$ = path ? this.runtimeService.getCompiledElement$(path) : of(undefined);
855
+ this.dragMode$ = combineLatest([this.runtimeEditorService.editorMode$, this.runtimeEditorService.dragMode$]).pipe(map(flags => flags.every(Boolean)));
856
+ this.runtimeService.updated$.pipe(takeUntil(this.destroyed$)).subscribe(() => this.cdr.detectChanges());
877
857
  }
878
- ngAfterViewInit() {
879
- var _a, _b, _c, _d, _e, _f;
880
- const remoteEntry = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.remoteEntry) !== null && _b !== void 0 ? _b : this.remoteEntry;
881
- const remoteName = (_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.remoteName) !== null && _d !== void 0 ? _d : this.remoteName;
882
- const exposedModule = (_f = (_e = this.options) === null || _e === void 0 ? void 0 : _e.exposedModule) !== null && _f !== void 0 ? _f : this.exposedModule;
883
- if (!remoteEntry || !remoteName || !exposedModule) {
884
- return;
885
- }
886
- loadRemoteModule(remoteEntry, remoteName, exposedModule).then(federated => {
887
- this.compiler.compileModuleAsync(federated[exposedModule]).then(moduleFactory => {
888
- var _a, _b, _c;
889
- const rootModuleRef = moduleFactory.create(this.injector);
890
- const rootComponentFactory = rootModuleRef.componentFactoryResolver.resolveComponentFactory(federated[exposedModule].rootComponent);
891
- const node = document.createElement('div');
892
- const { instance, hostView } = rootComponentFactory.create(this.injector, [], node);
893
- this.instance = instance;
894
- this.instance.data = this.data;
895
- this.renderer.appendChild((_a = this.moduleHostRef) === null || _a === void 0 ? void 0 : _a.nativeElement, node);
896
- this.appRef.attachView(hostView);
897
- (_c = (_b = this.options) === null || _b === void 0 ? void 0 : _b.onReady) === null || _c === void 0 ? void 0 : _c.call(_b);
898
- this.isLoading$.next(false);
899
- });
900
- });
858
+ ngOnDestroy() {
859
+ this.destroyed$.next();
860
+ this.destroyed$.complete();
901
861
  }
902
862
  }
903
- FederatedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FederatedComponent, deps: [{ token: i0.Injector }, { token: i0.Compiler }, { token: i0.ApplicationRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
904
- FederatedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: FederatedComponent, selector: "veloce-host-federated", inputs: { remoteEntry: "remoteEntry", remoteName: "remoteName", exposedModule: "exposedModule", data: "data", options: "options" }, viewQueries: [{ propertyName: "moduleHostRef", first: true, predicate: ["moduleHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #moduleHost></div>\n\n<vl-loader *ngIf=\"!suppressLoading && (isLoading$ | async)\" [label]=\"loadingLabel\"></vl-loader>\n", styles: [":host{display:block}div{height:100%}\n"], components: [{ type: i1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
905
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FederatedComponent, decorators: [{
863
+ ElementChildrenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementChildrenComponent, deps: [{ token: ElementContextService }, { token: RuntimeService }, { token: RuntimeEditorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
864
+ ElementChildrenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ElementChildrenComponent, selector: "element-children", ngImport: i0, template: "<ng-container *ngIf=\"metadata$ | async as metadata\">\n <vl-element-drop-handle *ngIf=\"dragMode$ | async\" [index]=\"0\" [parentPath]=\"metadata.path\"></vl-element-drop-handle>\n <ng-container *ngFor=\"let child of metadata.children; let i = index\">\n <vl-cms-element-renderer [meta]=\"child\"></vl-cms-element-renderer>\n <vl-element-drop-handle\n *ngIf=\"dragMode$ | async\"\n [index]=\"i + 1\"\n [parentPath]=\"metadata.path\"\n ></vl-element-drop-handle>\n </ng-container>\n</ng-container>\n", styles: [":host{display:contents}\n"], components: [{ type: ElementDropHandleComponent, selector: "vl-element-drop-handle", inputs: ["index", "parentPath"] }, { type: ElementRendererComponent, selector: "vl-cms-element-renderer", inputs: ["meta"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementChildrenComponent, decorators: [{
906
866
  type: Component,
907
867
  args: [{
908
868
  // eslint-disable-next-line @angular-eslint/component-selector
909
- selector: 'veloce-host-federated',
910
- templateUrl: './federated.component.html',
911
- styleUrls: ['./federated.component.scss'],
869
+ selector: 'element-children',
870
+ templateUrl: 'element-children.component.html',
871
+ styleUrls: ['./element-children.component.scss'],
912
872
  changeDetection: ChangeDetectionStrategy.OnPush,
913
873
  }]
914
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.Compiler }, { type: i0.ApplicationRef }, { type: i0.Renderer2 }]; }, propDecorators: { moduleHostRef: [{
915
- type: ViewChild,
916
- args: ['moduleHost', { static: false }]
917
- }], remoteEntry: [{
918
- type: Input
919
- }], remoteName: [{
920
- type: Input
921
- }], exposedModule: [{
922
- type: Input
923
- }], data: [{
924
- type: Input
925
- }], options: [{
926
- type: Input
927
- }] } });
874
+ }], ctorParameters: function () { return [{ type: ElementContextService }, { type: RuntimeService }, { type: RuntimeEditorService }, { type: i0.ChangeDetectorRef }]; } });
928
875
 
929
- class FederatedModule {
876
+ class ElementChildrenModule {
930
877
  }
931
- FederatedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FederatedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
932
- FederatedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FederatedModule, declarations: [FederatedComponent], imports: [CommonModule, LoaderModule], exports: [FederatedComponent] });
933
- FederatedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FederatedModule, imports: [[CommonModule, LoaderModule]] });
934
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FederatedModule, decorators: [{
878
+ ElementChildrenModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementChildrenModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
879
+ ElementChildrenModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementChildrenModule, declarations: [ElementChildrenComponent], imports: [LetDirectiveModule, ElementRendererModule, ElementDropHandleModule], exports: [ElementChildrenComponent] });
880
+ ElementChildrenModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementChildrenModule, imports: [[LetDirectiveModule, ElementRendererModule, ElementDropHandleModule]] });
881
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementChildrenModule, decorators: [{
935
882
  type: NgModule,
936
883
  args: [{
937
- declarations: [FederatedComponent],
938
- imports: [CommonModule, LoaderModule],
939
- exports: [FederatedComponent],
884
+ declarations: [ElementChildrenComponent],
885
+ imports: [LetDirectiveModule, ElementRendererModule, ElementDropHandleModule],
886
+ exports: [ElementChildrenComponent],
940
887
  }]
941
888
  }] });
942
889
 
890
+ class PreviewModule {
891
+ }
892
+ PreviewModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PreviewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
893
+ PreviewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PreviewModule, declarations: [PreviewComponent], imports: [CommonModule, LoaderModule, ElementRendererModule, ElementChildrenModule, ElementDropHandleModule], exports: [PreviewComponent] });
894
+ PreviewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PreviewModule, providers: [IntegrationState], imports: [[CommonModule, LoaderModule, ElementRendererModule, ElementChildrenModule, ElementDropHandleModule]] });
895
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PreviewModule, decorators: [{
896
+ type: NgModule,
897
+ args: [{
898
+ declarations: [PreviewComponent],
899
+ imports: [CommonModule, LoaderModule, ElementRendererModule, ElementChildrenModule, ElementDropHandleModule],
900
+ providers: [IntegrationState],
901
+ exports: [PreviewComponent],
902
+ }]
903
+ }] });
904
+
905
+ function ElementDefinition(definition) {
906
+ return function (constructor) {
907
+ return constructor;
908
+ };
909
+ }
910
+
911
+ // eslint-disable-next-line @angular-eslint/directive-selector
912
+ class CustomTemplateDirective {
913
+ constructor(templateRef, templatesService) {
914
+ this.templateRef = templateRef;
915
+ this.templatesService = templatesService;
916
+ }
917
+ ngAfterViewInit() {
918
+ if (!this.customTemplate) {
919
+ return;
920
+ }
921
+ this.templatesService.register(this.customTemplate, this.templateRef);
922
+ }
923
+ }
924
+ CustomTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomTemplateDirective, deps: [{ token: i0.TemplateRef }, { token: TemplatesService }], target: i0.ɵɵFactoryTarget.Directive });
925
+ CustomTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: CustomTemplateDirective, selector: "[customTemplate]", inputs: { customTemplate: "customTemplate" }, ngImport: i0 });
926
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomTemplateDirective, decorators: [{
927
+ type: Directive,
928
+ args: [{ selector: '[customTemplate]' }]
929
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: TemplatesService }]; }, propDecorators: { customTemplate: [{
930
+ type: Input
931
+ }] } });
932
+
933
+ class IOPlugin {
934
+ constructor(host) {
935
+ var _a, _b;
936
+ this.host = host;
937
+ const elementMetadata = this.host.injector.get(ELEMENT_METADATA);
938
+ const inputProvider = this.host.injector.get(IOProviderService);
939
+ const inputs = Object.entries((_a = elementMetadata.inputs) !== null && _a !== void 0 ? _a : {});
940
+ const outputs = Object.entries((_b = elementMetadata.outputs) !== null && _b !== void 0 ? _b : {});
941
+ inputs.forEach(([key, path]) => {
942
+ var _a;
943
+ if (path && typeof path !== 'string') {
944
+ console.error(`The value of '${key}' input should be a string`);
945
+ }
946
+ if (((_a = elementMetadata.outputs) === null || _a === void 0 ? void 0 : _a[key]) !== undefined) {
947
+ console.warn(`'${key}' appears both in inputs and outputs. To prevent inconsistent behavior please keep them unique `);
948
+ }
949
+ this.host[key] = inputProvider.connect(elementMetadata, key, path);
950
+ });
951
+ outputs.forEach(([key, path]) => {
952
+ if (path && typeof path !== 'string') {
953
+ console.error(`The value of '${key}' output should be a string`);
954
+ }
955
+ this.host[key] = inputProvider.provide(elementMetadata, key, path);
956
+ });
957
+ }
958
+ }
959
+ IOPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IOPlugin, deps: [{ token: ElementComponent }], target: i0.ɵɵFactoryTarget.Directive });
960
+ IOPlugin.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: IOPlugin, ngImport: i0 });
961
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IOPlugin, decorators: [{
962
+ type: Directive
963
+ }], ctorParameters: function () { return [{ type: ElementComponent }]; } });
964
+
965
+ class ScriptPlugin {
966
+ constructor(host) {
967
+ this.host = host;
968
+ this.normalizeImports = (script, elementPath) => {
969
+ const regexp = new RegExp(`import([ \\n\\t]*(?:[^ \\n\\t\\{\\}]+[ \\n\\t]*,?)?(?:[ \\n\\t]*\\{(?:[ \\n\\t]*[^ \\n\\t"'\\{\\}]+[ \\n\\t]*,?)+\\})?[ \\n\\t]*)from[ \\n\\t]*(['"])([^'"\\n]+)(?:['"]);`, 'g');
970
+ const result = script.replace(regexp, (match, g1, g2, src) => {
971
+ const imports = g1
972
+ .trim()
973
+ .slice(1, -1)
974
+ .split(',')
975
+ .map(item => item.trim());
976
+ imports.forEach(item => {
977
+ var _a;
978
+ if (!((_a = this.vendorMap[src]) === null || _a === void 0 ? void 0 : _a[item])) {
979
+ throw new Error(`Failed to import ${item} from '${src}' in ${elementPath}/script.ts`);
980
+ }
981
+ });
982
+ return `const ${g1} = vendor['${src}'];`;
983
+ });
984
+ return result;
985
+ };
986
+ this.document = this.host.injector.get(DOCUMENT);
987
+ this.vendorMap = this.host.injector.get(VENDOR_MAP);
988
+ const elementMetadata = this.host.injector.get(ELEMENT_METADATA);
989
+ const sharedElementMetadata = this.host.injector.get(SHARED_ELEMENT_METADATA);
990
+ this.addScript(sharedElementMetadata);
991
+ this.addScript(elementMetadata);
992
+ }
993
+ addScript(metadata) {
994
+ var _a;
995
+ if (!(metadata === null || metadata === void 0 ? void 0 : metadata.script)) {
996
+ return;
997
+ }
998
+ const id = btoa(UUID.UUID());
999
+ const script = this.document.createElement('script');
1000
+ script.type = `text/javascript`;
1001
+ let scriptContent = this.normalizeImports(metadata.script, (_a = metadata.path) !== null && _a !== void 0 ? _a : metadata.name);
1002
+ const classMatch = /export class (\S+)/.exec(scriptContent);
1003
+ const className = classMatch === null || classMatch === void 0 ? void 0 : classMatch[1];
1004
+ if (!classMatch || !className) {
1005
+ console.error("Script doesn't have exported class");
1006
+ return;
1007
+ }
1008
+ scriptContent = scriptContent.replace(classMatch[0], `class ${className}`);
1009
+ script.text = `var ${id} = function(vendor) {${scriptContent}
1010
+ return ${className}; };`;
1011
+ this.document.body.appendChild(script);
1012
+ const ScriptClass = window[id](this.vendorMap);
1013
+ if (ScriptClass instanceof Object) {
1014
+ this.host.registerPlugin(new ScriptClass(this.host));
1015
+ }
1016
+ this.document.body.removeChild(script);
1017
+ }
1018
+ }
1019
+ ScriptPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScriptPlugin, deps: [{ token: ElementComponent }], target: i0.ɵɵFactoryTarget.Directive });
1020
+ ScriptPlugin.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: ScriptPlugin, ngImport: i0 });
1021
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScriptPlugin, decorators: [{
1022
+ type: Directive
1023
+ }], ctorParameters: function () { return [{ type: ElementComponent }]; } });
1024
+
1025
+ /*
1026
+ * ScriptPlugin must always be the last plugin in the list to make sure user code is running after all pre-initializers.
1027
+ */
1028
+ const CONFIG = {
1029
+ CUSTOM: {
1030
+ component: ElementComponent,
1031
+ plugins: [IOPlugin, ScriptPlugin],
1032
+ },
1033
+ CONTAINER: {
1034
+ component: ElementComponent,
1035
+ defaultTemplate: '<element-children></element-children>',
1036
+ plugins: [ScriptPlugin],
1037
+ },
1038
+ SERVICE: {
1039
+ component: ElementComponent,
1040
+ plugins: [IOPlugin, ScriptPlugin],
1041
+ suppressTemplate: true,
1042
+ suppressStyles: true,
1043
+ },
1044
+ REFERENCE: {
1045
+ component: ElementComponent,
1046
+ plugins: [IOPlugin, ScriptPlugin],
1047
+ suppressTemplate: true,
1048
+ },
1049
+ };
1050
+
1051
+ const EXPORTED_CLASS_REGEX = /export class (\S+)/;
1052
+ const METADATA_DECORATOR_REGEX = /@ElementDefinition\(([\s\S]+)\)(\n|\r\n|.)*export class/g;
1053
+ class UiBuildError extends Error {
1054
+ constructor(message, affectedMetadata) {
1055
+ super(message);
1056
+ this.name = this.constructor.name;
1057
+ this.affectedMetadata = affectedMetadata;
1058
+ }
1059
+ }
1060
+ const elementToMetadata = (el, parentPath) => {
1061
+ var _a;
1062
+ const script = el.script && window.atob(el.script);
1063
+ const template = el.template && window.atob(el.template);
1064
+ const styles = el.styles && window.atob(el.styles);
1065
+ const exportedClassName = script && ((_a = EXPORTED_CLASS_REGEX.exec(script)) !== null && _a !== void 0 ? _a : [])[1];
1066
+ if (!exportedClassName) {
1067
+ throw new Error("Script doesn't have exported class");
1068
+ }
1069
+ const elementMetadata = extractElementMetadata(script || '');
1070
+ const path = (parentPath ? parentPath + '/' : '') + elementMetadata.name;
1071
+ return Object.assign(Object.assign({}, elementMetadata), { path, script: script === null || script === void 0 ? void 0 : script.replace(METADATA_DECORATOR_REGEX, 'export class'), template,
1072
+ styles, children: el.children.map(child => elementToMetadata(child, path)) });
1073
+ };
1074
+ const metadataToElement = (metadata, recursive = true) => {
1075
+ const elMetadata = {
1076
+ name: metadata.name,
1077
+ isShared: metadata.isShared,
1078
+ type: metadata.type,
1079
+ model: metadata.model,
1080
+ module: metadata.module,
1081
+ reference: metadata.reference,
1082
+ inputs: metadata.inputs,
1083
+ outputs: metadata.outputs,
1084
+ children: metadata.children.map(({ name }) => name),
1085
+ configuredStyles: metadata.configuredStyles,
1086
+ };
1087
+ const normalizedElMetadata = normalizeElementMetadata(elMetadata);
1088
+ if (!metadata.script || !EXPORTED_CLASS_REGEX.test(metadata.script)) {
1089
+ throw new UiBuildError(`'${metadata.name}' component script is missing an exported class`, metadata);
1090
+ }
1091
+ const script = metadata.script &&
1092
+ window.btoa(metadata.script.replace(EXPORTED_CLASS_REGEX, `@ElementDefinition(${stringifyElementMetadata(normalizedElMetadata)})\nexport class Script`));
1093
+ const template = metadata.template && window.btoa(metadata.template);
1094
+ const styles = metadata.styles && window.btoa(metadata.styles);
1095
+ return {
1096
+ script,
1097
+ template,
1098
+ styles,
1099
+ children: recursive ? metadata.children.map(meta => metadataToElement(meta)) : [],
1100
+ };
1101
+ };
1102
+ const normalizeElementMetadata = (elementMetadata) => {
1103
+ var _a, _b, _c, _d;
1104
+ const metadata = Object.assign({}, elementMetadata);
1105
+ // model
1106
+ const { lineItem, path } = (_a = metadata.model) !== null && _a !== void 0 ? _a : {};
1107
+ const model = lineItem ? { lineItem } : path ? { path } : undefined;
1108
+ if (model) {
1109
+ metadata.model = model;
1110
+ }
1111
+ else {
1112
+ delete metadata.model;
1113
+ }
1114
+ // module
1115
+ if (!metadata.module) {
1116
+ delete metadata.module;
1117
+ }
1118
+ // reference
1119
+ if (!metadata.reference) {
1120
+ delete metadata.reference;
1121
+ }
1122
+ // inputs
1123
+ const inputs = Object.entries((_b = metadata.inputs) !== null && _b !== void 0 ? _b : {}).reduce((acc, [key, value]) => {
1124
+ return Object.assign(Object.assign({}, acc), { [key]: value || null });
1125
+ }, {});
1126
+ if (inputs && Object.keys(inputs).length > 0) {
1127
+ metadata.inputs = inputs;
1128
+ }
1129
+ else {
1130
+ delete metadata.inputs;
1131
+ }
1132
+ // outputs
1133
+ const outputs = Object.entries((_c = metadata.outputs) !== null && _c !== void 0 ? _c : {}).reduce((acc, [key, value]) => {
1134
+ return Object.assign(Object.assign({}, acc), { [key]: value || null });
1135
+ }, {});
1136
+ if (outputs && Object.keys(outputs).length > 0) {
1137
+ metadata.outputs = outputs;
1138
+ }
1139
+ else {
1140
+ delete metadata.outputs;
1141
+ }
1142
+ // children
1143
+ if (!((_d = metadata.children) === null || _d === void 0 ? void 0 : _d.length)) {
1144
+ delete metadata.children;
1145
+ }
1146
+ // isShared
1147
+ if (!metadata.isShared) {
1148
+ delete metadata.isShared;
1149
+ }
1150
+ // configuredStyles
1151
+ if (!metadata.configuredStyles) {
1152
+ delete metadata.configuredStyles;
1153
+ }
1154
+ return metadata;
1155
+ };
1156
+ const extractElementMetadata = (script) => {
1157
+ var _a;
1158
+ const metadataString = ((_a = METADATA_DECORATOR_REGEX.exec(script)) !== null && _a !== void 0 ? _a : [])[1];
1159
+ // need to reset regex last index to prevent null result for next execution
1160
+ METADATA_DECORATOR_REGEX.lastIndex = 0;
1161
+ return new Function(`return ${metadataString}`)();
1162
+ };
1163
+ const extendElementMetadata = (script, extend) => {
1164
+ var _a;
1165
+ const metadataString = ((_a = METADATA_DECORATOR_REGEX.exec(script)) !== null && _a !== void 0 ? _a : [])[1];
1166
+ // need to reset regex last index to prevent null result for next execution
1167
+ METADATA_DECORATOR_REGEX.lastIndex = 0;
1168
+ if (!metadataString) {
1169
+ return script;
1170
+ }
1171
+ const updated = Object.assign(Object.assign({}, new Function(`return ${metadataString}`)()), extend);
1172
+ return script.replace(metadataString, stringifyElementMetadata(updated));
1173
+ };
1174
+ const getElementConfig = (type) => {
1175
+ return CONFIG[type];
1176
+ };
1177
+ const doesElementSupportIO = (type) => {
1178
+ var _a, _b;
1179
+ return (_b = (_a = getElementConfig(type).plugins) === null || _a === void 0 ? void 0 : _a.includes(IOPlugin)) !== null && _b !== void 0 ? _b : false;
1180
+ };
1181
+ function stringifyElementMetadata(elementMetadata) {
1182
+ const cleaned = JSON.stringify(elementMetadata, null, 2);
1183
+ return cleaned.replace(/^[\t ]*"[^:\n\r]+(?<!\\)":/gm, function (match) {
1184
+ return match.replace(/"/g, '');
1185
+ });
1186
+ }
1187
+ const isValidScript = (script) => {
1188
+ var _a;
1189
+ if (!script) {
1190
+ return false;
1191
+ }
1192
+ const exportedClassName = script && ((_a = EXPORTED_CLASS_REGEX.exec(script)) !== null && _a !== void 0 ? _a : [])[1];
1193
+ if (!exportedClassName) {
1194
+ return false;
1195
+ }
1196
+ const meta = extractElementMetadata(script);
1197
+ if (!meta.name || !meta.type) {
1198
+ return false;
1199
+ }
1200
+ return true;
1201
+ };
1202
+ function flattenElements(elements) {
1203
+ return flatten(elements.map(el => [el, ...flattenElements(el.children)]));
1204
+ }
1205
+ function isSharedElement(el) {
1206
+ return Boolean(el.isShared) && el.type !== 'REFERENCE';
1207
+ }
1208
+
943
1209
  class ConfigurationPlugin {
944
1210
  constructor(host) {
945
1211
  var _a, _b;
@@ -981,7 +1247,15 @@ class ConfigurationPlugin {
981
1247
  }
982
1248
  this.configurationService.patch(new LineItemWorker(rootLineItem).remove(this.modelSnapshot.id).li);
983
1249
  };
1250
+ const updateQty = (qty) => {
1251
+ const rootLineItem = this.configurationService.getSnapshot();
1252
+ if (!rootLineItem || !this.modelSnapshot) {
1253
+ return;
1254
+ }
1255
+ this.configurationService.patch(new LineItemWorker(rootLineItem).replace(Object.assign(Object.assign({}, this.modelSnapshot), { qty })).li);
1256
+ };
984
1257
  this.typeHost.remove = remove;
1258
+ this.typeHost.updateQty = updateQty;
985
1259
  }
986
1260
  registerPort(name) {
987
1261
  const model$ = this.host.model$;
@@ -1013,75 +1287,40 @@ class ConfigurationPlugin {
1013
1287
  }
1014
1288
  this.configurationService.patch(new LineItemWorker(this.modelSnapshot).patchAttribute([{ name, value }]).li);
1015
1289
  };
1016
- this.attributeHost.value$ = value$;
1017
- this.attributeHost.patch = patch;
1018
- }
1019
- get attributeHost() {
1020
- return this.host;
1021
- }
1022
- get typeHost() {
1023
- return this.host;
1024
- }
1025
- get portHost() {
1026
- return this.host;
1027
- }
1028
- }
1029
- ConfigurationPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ConfigurationPlugin, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
1030
- ConfigurationPlugin.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.15", type: ConfigurationPlugin, ngImport: i0 });
1031
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ConfigurationPlugin, decorators: [{
1032
- type: Directive
1033
- }], ctorParameters: function () { return [{ type: undefined }]; } });
1034
-
1035
- const DEFAULT_PLUGINS = {
1036
- CONFIGURATION: [ConfigurationPlugin],
1037
- DEFAULT: [],
1038
- };
1039
-
1040
- const InitAction = { type: 'INIT' };
1041
- const ClearAction = { type: 'CLEAR' };
1042
- class IntegrationState {
1043
- constructor() {
1044
- this.stateSubj$ = new BehaviorSubject({});
1045
- this.action$ = new BehaviorSubject(InitAction);
1046
- }
1047
- get state$() {
1048
- return this.stateSubj$.asObservable();
1049
- }
1050
- get state() {
1051
- return this.stateSubj$.getValue();
1052
- }
1053
- patchState(update) {
1054
- this.stateSubj$.next(Object.assign(Object.assign({}, this.stateSubj$.getValue()), update));
1055
- }
1056
- dispatch(action) {
1057
- this.action$.next(action);
1290
+ this.attributeHost.value$ = value$;
1291
+ this.attributeHost.patch = patch;
1058
1292
  }
1059
- listen$(actionType) {
1060
- return this.action$.pipe(filter(action => action.type === actionType), map(action => action.payload));
1293
+ get attributeHost() {
1294
+ return this.host;
1061
1295
  }
1062
- listenAll$() {
1063
- return this.action$.asObservable();
1296
+ get typeHost() {
1297
+ return this.host;
1064
1298
  }
1065
- clear() {
1066
- this.stateSubj$.next({});
1067
- this.action$.next(ClearAction);
1299
+ get portHost() {
1300
+ return this.host;
1068
1301
  }
1069
1302
  }
1070
- IntegrationState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IntegrationState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1071
- IntegrationStateprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IntegrationState, providedIn: 'root' });
1072
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IntegrationState, decorators: [{
1073
- type: Injectable,
1074
- args: [{ providedIn: 'root' }]
1075
- }] });
1303
+ ConfigurationPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationPlugin, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
1304
+ ConfigurationPlugindir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: ConfigurationPlugin, ngImport: i0 });
1305
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationPlugin, decorators: [{
1306
+ type: Directive
1307
+ }], ctorParameters: function () { return [{ type: undefined }]; } });
1308
+
1309
+ const DEFAULT_PLUGINS = {
1310
+ CONFIGURATION: [ConfigurationPlugin],
1311
+ DEFAULT: [],
1312
+ };
1076
1313
 
1077
1314
  const VELOCE_LIBS = {
1078
- '@veloceapps/sdk/core': Object.assign({ ConfigurationService,
1079
- QuoteDraftService,
1080
- FlowConfigurationService,
1081
- LineItemWorker,
1082
- ProductImagesService }, lineItemUtils),
1083
- '@veloceapps/sdk/cms': Object.assign(Object.assign(Object.assign({}, cmsInjectionTokens), cmsActions), { TemplatesService,
1084
- IntegrationState }),
1315
+ '@veloceapps/core': {
1316
+ isDefined,
1317
+ Operator,
1318
+ Predicate,
1319
+ parseJsonSafely,
1320
+ },
1321
+ '@veloceapps/components': {
1322
+ ToastService,
1323
+ },
1085
1324
  '@veloceapps/api': {
1086
1325
  SalesforceApiService,
1087
1326
  QuoteApiService,
@@ -1093,23 +1332,45 @@ const VELOCE_LIBS = {
1093
1332
  PicklistsApiService,
1094
1333
  PriceApiService,
1095
1334
  ShoppingCartSettingsApiService,
1335
+ ConfigurationSettingsApiService,
1336
+ GuidedSellingApiService,
1096
1337
  },
1338
+ '@veloceapps/sdk/core': Object.assign({ ConfigurationService,
1339
+ QuoteDraftService,
1340
+ FlowConfigurationService,
1341
+ LineItemWorker,
1342
+ ProductImagesService,
1343
+ ContextService }, lineItemUtils),
1344
+ '@veloceapps/sdk/cms': Object.assign(Object.assign(Object.assign({}, cmsInjectionTokens), cmsActions), { TemplatesService,
1345
+ IntegrationState,
1346
+ ResourcesService }),
1097
1347
  };
1098
1348
  const VELOCE_LIBS_BACKWARDS_COMPATIBLE = Object.entries(VELOCE_LIBS).reduce((trunk, [key, value]) => (Object.assign(Object.assign({}, trunk), { [key.replace('@veloceapps/', '@veloce/')]: value })), {});
1099
1349
  const vendorMap = Object.assign(Object.assign(Object.assign({}, VELOCE_LIBS), VELOCE_LIBS_BACKWARDS_COMPATIBLE), { '@angular/core': i0, '@angular/forms': angularForms, rxjs: rxjs, 'rxjs/operators': rxjsOperators, lodash: lodash });
1100
1350
 
1101
1351
  class ElementsResolver {
1102
- constructor(uiDef, elements) {
1352
+ constructor(uiDef, elements, sharedElements = []) {
1103
1353
  this.uiDef = uiDef;
1104
1354
  this.renderableElements = [];
1105
1355
  this.sharedElements = [];
1106
1356
  const transpiledElements = this.transpileScripts(elements);
1107
- this.sharedElements = this.flattenElements(transpiledElements).filter(el => this.isSharedElement(el));
1108
- this.elements = transpiledElements.map(el => this.processElementMetadata(el)).filter(Boolean);
1357
+ const transpiledSharedElements = this.transpileScripts(sharedElements);
1358
+ this.sharedElements = this.flattenElements(transpiledElements)
1359
+ .filter(el => this.isSharedElement(el))
1360
+ .concat(transpiledSharedElements);
1361
+ this.elements = transpiledElements.map(el => this.processElementMetadata(el)).filter(isDefined);
1362
+ this.renderableElements = this.getRenderableElements(this.elements);
1363
+ }
1364
+ addElement(element) {
1365
+ if (element.isShared) {
1366
+ return;
1367
+ }
1368
+ const transpiledElements = this.transpileScripts([element]);
1369
+ this.elements = transpiledElements.map(el => this.processElementMetadata(el)).filter(isDefined);
1109
1370
  this.renderableElements = this.getRenderableElements(this.elements);
1110
1371
  }
1111
1372
  getNgComponents() {
1112
- return this.renderableElements.map(el => this.resolveElement(el)).filter(Boolean);
1373
+ return this.renderableElements.map(el => this.resolveElement(el)).filter(isDefined);
1113
1374
  }
1114
1375
  transpile(el) {
1115
1376
  var _a;
@@ -1176,9 +1437,7 @@ class ElementsResolver {
1176
1437
  }
1177
1438
  finalElement.template = this.resolveElementTemplate(finalElement);
1178
1439
  finalElement.styles = this.resolveElementStyles(finalElement);
1179
- return Object.assign(Object.assign({}, finalElement), { children: finalElement.children
1180
- .map(child => this.processElementMetadata(child))
1181
- .filter(Boolean) });
1440
+ return Object.assign(Object.assign({}, finalElement), { children: finalElement.children.map(child => this.processElementMetadata(child)).filter(isDefined) });
1182
1441
  }
1183
1442
  getSharedChildren(children, parentPath) {
1184
1443
  return children.map(c => {
@@ -1238,202 +1497,298 @@ class ElementsResolver {
1238
1497
  }
1239
1498
  }
1240
1499
 
1241
- class LauncherService {
1242
- constructor(compiler, dynamicModuleService) {
1243
- this.compiler = compiler;
1244
- this.dynamicModuleService = dynamicModuleService;
1245
- }
1246
- compileModule(uiDef, elements) {
1247
- const elementsResolver = new ElementsResolver(uiDef, elements);
1248
- this.dynamicModuleService.elementsTree = elementsResolver.elements;
1249
- this.module = this.getModule(elementsResolver.getNgComponents());
1250
- return from(this.compiler.compileModuleAndAllComponentsAsync(this.module)).pipe(tap(m => {
1251
- this.dynamicModuleService.componentFactories = m.componentFactories;
1252
- this.moduleInstance = m;
1253
- }), map(m => ({ module: m, elements: elementsResolver.elements })));
1254
- }
1255
- destroy() {
1256
- if (this.moduleInstance) {
1257
- this.dynamicModuleService.clear();
1258
- this.moduleInstance = undefined;
1259
- }
1260
- if (this.module) {
1261
- this.compiler.clearCacheFor(this.module);
1262
- this.module = undefined;
1500
+ const defaultOptions = {
1501
+ suppressLoading: false,
1502
+ loadingLabel: 'LOADING',
1503
+ };
1504
+
1505
+ const moduleMap = {};
1506
+ function loadRemoteEntry(remoteEntry) {
1507
+ return new Promise((resolve, reject) => {
1508
+ if (moduleMap[remoteEntry]) {
1509
+ resolve();
1510
+ return;
1263
1511
  }
1264
- }
1265
- getModule(components) {
1266
- const staticComponents = [ElementChildrenComponent, ElementRendererComponent, CustomTemplateDirective];
1267
- let DynamicModule = class DynamicModule {
1512
+ const script = document.createElement('script');
1513
+ script.src = remoteEntry;
1514
+ script.onerror = reject;
1515
+ script.onload = () => {
1516
+ moduleMap[remoteEntry] = true;
1517
+ resolve(); // window is the global namespace
1268
1518
  };
1269
- DynamicModule = __decorate([
1270
- NgModule({
1271
- imports: [CommonModule, FormsModule, ReactiveFormsModule, FederatedModule, DragDropModule, ScrollingModule],
1272
- declarations: [...staticComponents, ...components],
1273
- jit: true,
1274
- })
1275
- ], DynamicModule);
1276
- return DynamicModule;
1277
- }
1519
+ document.body.append(script);
1520
+ });
1521
+ }
1522
+ function lookupExposedModule(remoteName, exposedModule) {
1523
+ return __awaiter(this, void 0, void 0, function* () {
1524
+ // Initializes the share scope. This fills it with known provided modules from this build and all remotes
1525
+ yield __webpack_init_sharing__('default');
1526
+ const container = window[remoteName]; // or get the container somewhere else
1527
+ // Initialize the container, it may provide shared modules
1528
+ yield container.init(__webpack_share_scopes__.default);
1529
+ const factory = yield container.get(exposedModule);
1530
+ const Module = factory();
1531
+ return Module;
1532
+ });
1533
+ }
1534
+ function loadRemoteModule(remoteEntry, remoteName, exposedModule) {
1535
+ return __awaiter(this, void 0, void 0, function* () {
1536
+ yield loadRemoteEntry(remoteEntry);
1537
+ return yield lookupExposedModule(remoteName, exposedModule);
1538
+ });
1278
1539
  }
1279
- LauncherService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LauncherService, deps: [{ token: i0.Compiler }, { token: DynamicModuleService }], target: i0.ɵɵFactoryTarget.Injectable });
1280
- LauncherService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LauncherService });
1281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LauncherService, decorators: [{
1282
- type: Injectable
1283
- }], ctorParameters: function () { return [{ type: i0.Compiler }, { type: DynamicModuleService }]; } });
1284
1540
 
1285
- class PreviewComponent {
1286
- constructor(launcherService, configurationService, messageService, runtimeService, integrationState) {
1287
- this.launcherService = launcherService;
1288
- this.configurationService = configurationService;
1289
- this.messageService = messageService;
1290
- this.runtimeService = runtimeService;
1291
- this.integrationState = integrationState;
1292
- this.clearState = false;
1293
- this.state$ = new BehaviorSubject({ loading: true, failure: false });
1294
- this.elements = [];
1295
- this.destroy$ = new Subject();
1296
- }
1297
- ngOnInit() {
1298
- if (this.clearState) {
1299
- this.integrationState.clear();
1300
- }
1301
- this.startPreview();
1302
- }
1303
- ngOnDestroy() {
1304
- this.destroy$.next();
1305
- this.destroy$.complete();
1306
- this.configurationService.reset();
1541
+ class FederatedComponent {
1542
+ constructor(injector, compiler, appRef, renderer) {
1543
+ this.injector = injector;
1544
+ this.compiler = compiler;
1545
+ this.appRef = appRef;
1546
+ this.renderer = renderer;
1547
+ this.isLoading$ = new BehaviorSubject(false);
1548
+ // configs
1549
+ this.suppressLoading = defaultOptions.suppressLoading;
1550
+ this.loadingLabel = defaultOptions.loadingLabel;
1307
1551
  }
1308
- initializeConfiguration$() {
1309
- const isAlreadyInitialized = this.runtimeService.isInitialized;
1310
- if (!this.uiDefinition || this.uiDefinition.type !== 'CONFIGURATION' || isAlreadyInitialized) {
1311
- return of({});
1552
+ ngOnChanges(changes) {
1553
+ var _a, _b, _c, _d;
1554
+ if (changes.data && this.instance) {
1555
+ this.instance.data = this.data;
1312
1556
  }
1313
- if (!this.modelId) {
1314
- console.warn(`No modelId is given for uiDefinition with '${this.uiDefinition.type}' type`);
1315
- return of({});
1557
+ if (changes.options) {
1558
+ this.suppressLoading = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.suppressLoading) !== null && _b !== void 0 ? _b : defaultOptions.suppressLoading;
1559
+ this.loadingLabel = (_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.loadingLabel) !== null && _d !== void 0 ? _d : defaultOptions.loadingLabel;
1316
1560
  }
1317
- // If still not initialized - init configuration in Test mode
1318
- return this.runtimeService
1319
- .initTestMode(this.modelId, this.uiDefinition)
1320
- .pipe(switchMap(() => this.configurationService.configure()));
1321
1561
  }
1322
- elementToMetadataSafe(elements) {
1323
- var _a, _b;
1324
- try {
1325
- return elements.map(element => elementToMetadata(element));
1326
- }
1327
- catch (e) {
1328
- console.error(e);
1329
- if (!((_b = (_a = this.uiDefinition) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.suppressToastMessages)) {
1330
- this.messageService.add({ severity: 'error', summary: String(e) });
1331
- }
1332
- return [];
1333
- }
1562
+ ngOnInit() {
1563
+ this.isLoading$.next(true);
1334
1564
  }
1335
- startPreview() {
1336
- if (!this.uiDefinition) {
1565
+ ngAfterViewInit() {
1566
+ var _a, _b, _c, _d, _e, _f;
1567
+ const remoteEntry = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.remoteEntry) !== null && _b !== void 0 ? _b : this.remoteEntry;
1568
+ const remoteName = (_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.remoteName) !== null && _d !== void 0 ? _d : this.remoteName;
1569
+ const exposedModule = (_f = (_e = this.options) === null || _e === void 0 ? void 0 : _e.exposedModule) !== null && _f !== void 0 ? _f : this.exposedModule;
1570
+ if (!remoteEntry || !remoteName || !exposedModule) {
1337
1571
  return;
1338
1572
  }
1339
- const _a = this.uiDefinition, { children } = _a, uiDefinitionMeta = __rest(_a, ["children"]);
1340
- const elements = this.elementToMetadataSafe(children);
1341
- const compilation$ = this.launcherService.compileModule(uiDefinitionMeta, elements);
1342
- forkJoin([compilation$, this.initializeConfiguration$()])
1343
- .pipe(tap(([result]) => {
1344
- this.elements = result.elements;
1345
- this.state$.next({ loading: false, failure: false });
1346
- }), catchError(error => {
1347
- var _a, _b;
1348
- console.error(error);
1349
- if (!((_b = (_a = this.uiDefinition) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.suppressToastMessages)) {
1350
- this.messageService.add({ severity: 'error', summary: error });
1351
- }
1352
- this.state$.next({ loading: false, failure: true });
1353
- return of();
1354
- }), takeUntil(this.destroy$))
1355
- .subscribe();
1573
+ loadRemoteModule(remoteEntry, remoteName, exposedModule).then(federated => {
1574
+ this.compiler.compileModuleAsync(federated[exposedModule]).then(moduleFactory => {
1575
+ var _a, _b, _c;
1576
+ const rootModuleRef = moduleFactory.create(this.injector);
1577
+ const rootComponentFactory = rootModuleRef.componentFactoryResolver.resolveComponentFactory(federated[exposedModule].rootComponent);
1578
+ const node = document.createElement('div');
1579
+ const { instance, hostView } = rootComponentFactory.create(this.injector, [], node);
1580
+ this.instance = instance;
1581
+ this.instance.data = this.data;
1582
+ this.renderer.appendChild((_a = this.moduleHostRef) === null || _a === void 0 ? void 0 : _a.nativeElement, node);
1583
+ this.appRef.attachView(hostView);
1584
+ (_c = (_b = this.options) === null || _b === void 0 ? void 0 : _b.onReady) === null || _c === void 0 ? void 0 : _c.call(_b);
1585
+ this.isLoading$.next(false);
1586
+ });
1587
+ });
1356
1588
  }
1357
1589
  }
1358
- PreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreviewComponent, deps: [{ token: LauncherService }, { token: i2.ConfigurationService }, { token: i3.MessageService }, { token: i2.ConfigurationRuntimeService }, { token: IntegrationState }], target: i0.ɵɵFactoryTarget.Component });
1359
- PreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: PreviewComponent, selector: "vl-cms-preview", inputs: { modelId: "modelId", uiDefinition: "uiDefinition", clearState: "clearState" }, providers: [IOProviderService, TemplatesService], ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-element-renderer *ngFor=\"let el of elements\" [meta]=\"el\"></vl-cms-element-renderer>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [":host{flex-grow:1;display:flex;flex-direction:column;height:100%}\n"], components: [{ type: i1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: ElementRendererComponent, selector: "vl-cms-element-renderer", inputs: ["meta"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom });
1360
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreviewComponent, decorators: [{
1590
+ FederatedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FederatedComponent, deps: [{ token: i0.Injector }, { token: i0.Compiler }, { token: i0.ApplicationRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
1591
+ FederatedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FederatedComponent, selector: "veloce-host-federated", inputs: { remoteEntry: "remoteEntry", remoteName: "remoteName", exposedModule: "exposedModule", data: "data", options: "options" }, viewQueries: [{ propertyName: "moduleHostRef", first: true, predicate: ["moduleHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #moduleHost></div>\n\n<vl-loader *ngIf=\"!suppressLoading && (isLoading$ | async)\" [label]=\"loadingLabel\"></vl-loader>\n", styles: [":host{display:block}div{height:100%}\n"], components: [{ type: i1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1592
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FederatedComponent, decorators: [{
1361
1593
  type: Component,
1362
1594
  args: [{
1363
- selector: 'vl-cms-preview',
1364
- templateUrl: './preview.component.html',
1365
- styleUrls: ['./preview.component.scss'],
1595
+ // eslint-disable-next-line @angular-eslint/component-selector
1596
+ selector: 'veloce-host-federated',
1597
+ templateUrl: './federated.component.html',
1598
+ styleUrls: ['./federated.component.scss'],
1366
1599
  changeDetection: ChangeDetectionStrategy.OnPush,
1367
- providers: [IOProviderService, TemplatesService],
1368
- // use shadow DOM to prevent UI from being affected by global styles
1369
- encapsulation: ViewEncapsulation.ShadowDom,
1370
1600
  }]
1371
- }], ctorParameters: function () { return [{ type: LauncherService }, { type: i2.ConfigurationService }, { type: i3.MessageService }, { type: i2.ConfigurationRuntimeService }, { type: IntegrationState }]; }, propDecorators: { modelId: [{
1601
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.Compiler }, { type: i0.ApplicationRef }, { type: i0.Renderer2 }]; }, propDecorators: { moduleHostRef: [{
1602
+ type: ViewChild,
1603
+ args: ['moduleHost', { static: false }]
1604
+ }], remoteEntry: [{
1372
1605
  type: Input
1373
- }], uiDefinition: [{
1606
+ }], remoteName: [{
1607
+ type: Input
1608
+ }], exposedModule: [{
1609
+ type: Input
1610
+ }], data: [{
1374
1611
  type: Input
1375
- }], clearState: [{
1612
+ }], options: [{
1376
1613
  type: Input
1377
1614
  }] } });
1378
1615
 
1379
- class ElementRendererModule {
1616
+ class FederatedModule {
1380
1617
  }
1381
- ElementRendererModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementRendererModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1382
- ElementRendererModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementRendererModule, declarations: [ElementRendererComponent], exports: [ElementRendererComponent] });
1383
- ElementRendererModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementRendererModule });
1384
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementRendererModule, decorators: [{
1618
+ FederatedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FederatedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1619
+ FederatedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FederatedModule, declarations: [FederatedComponent], imports: [CommonModule, LoaderModule], exports: [FederatedComponent] });
1620
+ FederatedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FederatedModule, imports: [[CommonModule, LoaderModule]] });
1621
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FederatedModule, decorators: [{
1385
1622
  type: NgModule,
1386
1623
  args: [{
1387
- declarations: [ElementRendererComponent],
1388
- exports: [ElementRendererComponent],
1624
+ declarations: [FederatedComponent],
1625
+ imports: [CommonModule, LoaderModule],
1626
+ exports: [FederatedComponent],
1389
1627
  }]
1390
1628
  }] });
1391
1629
 
1392
- class ElementChildrenModule {
1630
+ class CompilationService {
1631
+ constructor(compiler) {
1632
+ this.compiler = compiler;
1633
+ }
1634
+ compileUIDefinition$(uiDefinition) {
1635
+ return of([]).pipe(switchMap(() => {
1636
+ const { children, pages, components } = uiDefinition, uiDefinitionMeta = __rest(uiDefinition, ["children", "pages", "components"]);
1637
+ this.uiDefinitionMeta = uiDefinitionMeta;
1638
+ const elements = [...(children !== null && children !== void 0 ? children : []), ...(pages !== null && pages !== void 0 ? pages : [])];
1639
+ const sharedElements = components !== null && components !== void 0 ? components : [];
1640
+ const metadata = elements.map(element => elementToMetadata(element));
1641
+ const sharedMetadata = sharedElements.map(element => elementToMetadata(element));
1642
+ this.elementsResolver = new ElementsResolver(uiDefinition, metadata, sharedMetadata);
1643
+ const module = this.getModule(this.elementsResolver.getNgComponents());
1644
+ return combineLatest([
1645
+ from(this.compiler.compileModuleAndAllComponentsAsync(module)),
1646
+ of(this.elementsResolver),
1647
+ ]);
1648
+ }), map(([module, elementsResolver]) => ({ module, elements: elementsResolver.elements })));
1649
+ }
1650
+ compileElement$(element) {
1651
+ if (!this.uiDefinitionMeta) {
1652
+ throw 'No UI Definition context';
1653
+ }
1654
+ return of(this.uiDefinitionMeta).pipe(switchMap(uiDefinition => {
1655
+ var _a;
1656
+ const elementsResolver = (_a = this.elementsResolver) !== null && _a !== void 0 ? _a : new ElementsResolver(uiDefinition, []);
1657
+ elementsResolver.addElement(element);
1658
+ const module = this.getModule(elementsResolver.getNgComponents());
1659
+ return combineLatest([from(this.compiler.compileModuleAndAllComponentsAsync(module)), of(elementsResolver)]);
1660
+ }), map(([module, elementsResolver]) => ({ module, elements: elementsResolver.elements })));
1661
+ }
1662
+ clearModuleCache(modules) {
1663
+ modules.forEach(module => this.compiler.clearCacheFor(module));
1664
+ this.uiDefinitionMeta = undefined;
1665
+ }
1666
+ getModule(components) {
1667
+ const staticComponents = [
1668
+ ElementChildrenComponent,
1669
+ ElementRendererComponent,
1670
+ ElementDropHandleComponent,
1671
+ CustomTemplateDirective,
1672
+ ];
1673
+ let DynamicModule = class DynamicModule {
1674
+ };
1675
+ DynamicModule = __decorate([
1676
+ NgModule({
1677
+ imports: [
1678
+ CommonModule,
1679
+ FormsModule,
1680
+ ReactiveFormsModule,
1681
+ FederatedModule,
1682
+ DragDropModule,
1683
+ DndModule,
1684
+ ScrollingModule,
1685
+ ],
1686
+ declarations: [...staticComponents, ...components],
1687
+ jit: true,
1688
+ })
1689
+ ], DynamicModule);
1690
+ return DynamicModule;
1691
+ }
1692
+ }
1693
+ CompilationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CompilationService, deps: [{ token: i0.Compiler }], target: i0.ɵɵFactoryTarget.Injectable });
1694
+ CompilationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CompilationService });
1695
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CompilationService, decorators: [{
1696
+ type: Injectable
1697
+ }], ctorParameters: function () { return [{ type: i0.Compiler }]; } });
1698
+
1699
+ class RuntimeModule {
1393
1700
  }
1394
- ElementChildrenModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementChildrenModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1395
- ElementChildrenModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementChildrenModule, declarations: [ElementChildrenComponent], imports: [ElementRendererModule], exports: [ElementChildrenComponent] });
1396
- ElementChildrenModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementChildrenModule, imports: [[ElementRendererModule]] });
1397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ElementChildrenModule, decorators: [{
1701
+ RuntimeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1702
+ RuntimeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeModule, imports: [CommonModule, CoreModule] });
1703
+ RuntimeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeModule, providers: [
1704
+ DialogService,
1705
+ RuntimeService,
1706
+ RuntimeEditorService,
1707
+ { provide: CMS_COMPILATION_SERVICE, useClass: CompilationService },
1708
+ ], imports: [[CommonModule, CoreModule]] });
1709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeModule, decorators: [{
1398
1710
  type: NgModule,
1399
1711
  args: [{
1400
- declarations: [ElementChildrenComponent],
1401
- imports: [ElementRendererModule],
1402
- exports: [ElementChildrenComponent],
1712
+ imports: [CommonModule, CoreModule],
1713
+ providers: [
1714
+ DialogService,
1715
+ RuntimeService,
1716
+ RuntimeEditorService,
1717
+ { provide: CMS_COMPILATION_SERVICE, useClass: CompilationService },
1718
+ ],
1403
1719
  }]
1404
1720
  }] });
1405
1721
 
1406
- class PreviewModule {
1722
+ class LauncherModule {
1407
1723
  }
1408
- PreviewModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreviewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1409
- PreviewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreviewModule, declarations: [PreviewComponent], imports: [CommonModule, LoaderModule, ElementRendererModule, ElementChildrenModule], exports: [PreviewComponent] });
1410
- PreviewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreviewModule, providers: [IntegrationState], imports: [[CommonModule, LoaderModule, ElementRendererModule, ElementChildrenModule]] });
1411
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreviewModule, decorators: [{
1724
+ LauncherModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LauncherModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1725
+ LauncherModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LauncherModule, imports: [CommonModule, CoreModule, ApiModule, SdkCoreModule, RuntimeModule, PreviewModule], exports: [PreviewModule] });
1726
+ LauncherModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LauncherModule, providers: [IntegrationState, DialogService, ResourcesService], imports: [[CommonModule, CoreModule, ApiModule, SdkCoreModule, RuntimeModule, PreviewModule], PreviewModule] });
1727
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LauncherModule, decorators: [{
1412
1728
  type: NgModule,
1413
1729
  args: [{
1414
- declarations: [PreviewComponent],
1415
- imports: [CommonModule, LoaderModule, ElementRendererModule, ElementChildrenModule],
1416
- providers: [IntegrationState],
1417
- exports: [PreviewComponent],
1730
+ imports: [CommonModule, CoreModule, ApiModule, SdkCoreModule, RuntimeModule, PreviewModule],
1731
+ providers: [IntegrationState, DialogService, ResourcesService],
1732
+ exports: [PreviewModule],
1418
1733
  }]
1419
1734
  }] });
1420
1735
 
1421
- function ElementDefinition(definition) {
1422
- return function (constructor) {
1423
- return constructor;
1424
- };
1736
+ const migrations = {
1737
+ 2: () => {
1738
+ throw 'Migration from Legacy UI definition is not possible';
1739
+ },
1740
+ 3: uiDef => {
1741
+ var _a;
1742
+ const children = (_a = uiDef.children) !== null && _a !== void 0 ? _a : [];
1743
+ return Object.assign(Object.assign({}, uiDef), { children: undefined, pages: children, version: 3 });
1744
+ },
1745
+ };
1746
+
1747
+ class MigrationsService {
1748
+ constructor(toastService) {
1749
+ this.toastService = toastService;
1750
+ }
1751
+ migrateUIDefinition(uiDef) {
1752
+ const currentVersion = uiDef.version;
1753
+ const targetVersion = UI_DEFINITION_VERSION;
1754
+ const migrateVersions = Object.keys(migrations)
1755
+ .reduce((acc, version) => {
1756
+ const v = Number(version);
1757
+ if (v > currentVersion && v <= targetVersion) {
1758
+ acc.push(v);
1759
+ }
1760
+ return acc;
1761
+ }, [])
1762
+ .sort();
1763
+ try {
1764
+ let result = cloneDeep(uiDef);
1765
+ for (const version of migrateVersions) {
1766
+ result = migrations[version](result);
1767
+ }
1768
+ return result;
1769
+ }
1770
+ catch (e) {
1771
+ this.toastService.add({ summary: String(e), severity: ToastType.error });
1772
+ return;
1773
+ }
1774
+ }
1425
1775
  }
1776
+ MigrationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MigrationsService, deps: [{ token: i1.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
1777
+ MigrationsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MigrationsService, providedIn: 'root' });
1778
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MigrationsService, decorators: [{
1779
+ type: Injectable,
1780
+ args: [{ providedIn: 'root' }]
1781
+ }], ctorParameters: function () { return [{ type: i1.ToastService }]; } });
1426
1782
 
1427
- class LauncherModule {
1783
+ class MigrationsModule {
1428
1784
  }
1429
- LauncherModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LauncherModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1430
- LauncherModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LauncherModule, imports: [CommonModule, CoreModule, ApiModule, SdkCoreModule] });
1431
- LauncherModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LauncherModule, providers: [LauncherService, IntegrationState, DynamicModuleService, DialogService], imports: [[CommonModule, CoreModule, ApiModule, SdkCoreModule]] });
1432
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LauncherModule, decorators: [{
1785
+ MigrationsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MigrationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1786
+ MigrationsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MigrationsModule });
1787
+ MigrationsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MigrationsModule, providers: [MigrationsService] });
1788
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MigrationsModule, decorators: [{
1433
1789
  type: NgModule,
1434
1790
  args: [{
1435
- imports: [CommonModule, CoreModule, ApiModule, SdkCoreModule],
1436
- providers: [LauncherService, IntegrationState, DynamicModuleService, DialogService],
1791
+ providers: [MigrationsService],
1437
1792
  }]
1438
1793
  }] });
1439
1794
 
@@ -1441,5 +1796,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
1441
1796
  * Generated bundle index. Do not edit.
1442
1797
  */
1443
1798
 
1444
- export { ApplyProductConfigurationAction, CloseDocGenAction, ConfigureProductAction, DEFAULT_PLUGINS_TOKEN, ELEMENT_CONFIG, ELEMENT_METADATA, ElementComponent, ElementDefinition, ElementsResolver, FlowAction, IntegrationState, LauncherModule, LauncherService, NavigateBackAction, NavigateToCatalogAction, OpenDocGenAction, PreviewComponent, PreviewModule, RemoteApplyAction, RemoteCancelAction, SHARED_ELEMENT_METADATA, SetDefaultMetrics, SwitchObjectAction, TemplatesService, UI_DEFINITION_METADATA, UiBuildError, VENDOR_MAP, doesElementSupportIO, elementToMetadata, extendElementMetadata, extractElementMetadata, findElementByModule, flattenElements, getAbsolutePath, getElementConfig, isSharedElement, isValidScript, metadataToElement, normalizeElementMetadata, parseBoundPath, parsePath, stringifyElementMetadata };
1799
+ export { ApplyProductConfigurationAction, CloseDocGenAction, ConfigureProductAction, DEFAULT_PLUGINS_TOKEN, ELEMENT_CONFIG, ELEMENT_METADATA, ElementComponent, ElementDefinition, ElementsResolver, FlowAction, IntegrationState, LauncherModule, MigrationsModule, MigrationsService, NavigateBackAction, NavigateToCatalogAction, OpenDocGenAction, PreviewComponent, PreviewModule, RemoteApplyAction, RemoteCancelAction, ResourcesService, RuntimeEditorService, RuntimeModule, SHARED_ELEMENT_METADATA, SwitchObjectAction, TemplatesService, UI_DEFINITION_METADATA, UiBuildError, VENDOR_MAP, doesElementSupportIO, elementToMetadata, extendElementMetadata, extractElementMetadata, findElementByModule, findElementByPath, flattenElements, getAbsolutePath, getElementConfig, getElementUniqueName, insertElement, isSharedElement, isValidScript, metadataToElement, normalizeElementMetadata, parseBoundPath, parsePath, removeElement, stringifyElementMetadata };
1445
1800
  //# sourceMappingURL=veloceapps-sdk-cms.js.map