@o3r/components 12.1.10 → 12.1.12

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.
@@ -153,10 +153,10 @@ class PlaceholderRulesEngineActionHandler {
153
153
  }));
154
154
  this.placeholdersActions$.next(templates);
155
155
  }
156
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRulesEngineActionHandler, deps: [{ token: i1.Store }, { token: i2.LoggerService }, { token: i0.Injector }, { token: i3.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
157
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRulesEngineActionHandler }); }
156
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRulesEngineActionHandler, deps: [{ token: i1.Store }, { token: i2.LoggerService }, { token: i0.Injector }, { token: i3.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
157
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRulesEngineActionHandler }); }
158
158
  }
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRulesEngineActionHandler, decorators: [{
159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRulesEngineActionHandler, decorators: [{
160
160
  type: Injectable
161
161
  }], ctorParameters: () => [{ type: i1.Store }, { type: i2.LoggerService }, { type: i0.Injector }, { type: i3.LocalizationService, decorators: [{
162
162
  type: Optional
@@ -262,10 +262,10 @@ class PlaceholderTemplateResponseEffect {
262
262
  })))
263
263
  : of({ renderedTemplate: template, unknownTypeFound });
264
264
  }
265
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderTemplateResponseEffect, deps: [{ token: i1$1.Actions }, { token: i1.Store }, { token: i3$1.RulesEngineRunnerService, optional: true }, { token: i4.DynamicContentService, optional: true }, { token: i3.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
266
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderTemplateResponseEffect }); }
265
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderTemplateResponseEffect, deps: [{ token: i1$1.Actions }, { token: i1.Store }, { token: i3$1.RulesEngineRunnerService, optional: true }, { token: i4.DynamicContentService, optional: true }, { token: i3.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
266
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderTemplateResponseEffect }); }
267
267
  }
268
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderTemplateResponseEffect, decorators: [{
268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderTemplateResponseEffect, decorators: [{
269
269
  type: Injectable
270
270
  }], ctorParameters: () => [{ type: i1$1.Actions }, { type: i1.Store }, { type: i3$1.RulesEngineRunnerService, decorators: [{
271
271
  type: Optional
@@ -276,16 +276,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
276
276
  }] }] });
277
277
 
278
278
  class PlaceholderRulesEngineActionModule {
279
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRulesEngineActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
280
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRulesEngineActionModule, imports: [i1$1.EffectsFeatureModule, PlaceholderRequestStoreModule,
279
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRulesEngineActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
280
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRulesEngineActionModule, imports: [i1$1.EffectsFeatureModule, PlaceholderRequestStoreModule,
281
281
  PlaceholderTemplateStoreModule] }); }
282
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRulesEngineActionModule, providers: [
282
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRulesEngineActionModule, providers: [
283
283
  PlaceholderRulesEngineActionHandler
284
284
  ], imports: [EffectsModule.forFeature([PlaceholderTemplateResponseEffect]),
285
285
  PlaceholderRequestStoreModule,
286
286
  PlaceholderTemplateStoreModule] }); }
287
287
  }
288
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRulesEngineActionModule, decorators: [{
288
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRulesEngineActionModule, decorators: [{
289
289
  type: NgModule,
290
290
  args: [{
291
291
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"o3r-components-rules-engine.mjs","sources":["../../src/rules-engine/placeholder.interfaces.ts","../../src/rules-engine/placeholder.action-handler.ts","../../src/rules-engine/placeholder.rules-engine.effect.ts","../../src/rules-engine/placeholder.rules-engine.module.ts","../../src/rules-engine/o3r-components-rules-engine.ts"],"sourcesContent":["import type {\n RulesEngineAction,\n} from '@o3r/core';\n\n/** ActionUpdatePlaceholderBlock */\nexport const RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE = 'UPDATE_PLACEHOLDER';\n\n/**\n * Content of action that updates a placeholder\n */\nexport interface ActionUpdatePlaceholderBlock extends RulesEngineAction {\n actionType: typeof RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE;\n placeholderId: string;\n value: string;\n priority?: number;\n}\n","import {\n Injectable,\n Injector,\n Optional,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n select,\n Store,\n} from '@ngrx/store';\nimport type {\n RulesEngineActionHandler,\n} from '@o3r/core';\nimport {\n DynamicContentService,\n} from '@o3r/dynamic-content';\nimport {\n LocalizationService,\n} from '@o3r/localization';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n combineLatest,\n distinctUntilChanged,\n firstValueFrom,\n map,\n of,\n startWith,\n Subject,\n withLatestFrom,\n} from 'rxjs';\nimport {\n ActionUpdatePlaceholderBlock,\n RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE,\n} from './placeholder.interfaces';\nimport {\n deletePlaceholderTemplateEntity,\n PlaceholderRequestReply,\n PlaceholderTemplateStore,\n selectPlaceholderRequestEntities,\n selectPlaceholderTemplateEntities,\n setPlaceholderRequestEntityFromUrl,\n setPlaceholderTemplateEntity,\n updatePlaceholderRequestEntity,\n} from '@o3r/components';\n\n/**\n * Service to handle async PlaceholderTemplate actions\n */\n@Injectable()\nexport class PlaceholderRulesEngineActionHandler implements RulesEngineActionHandler<ActionUpdatePlaceholderBlock> {\n protected placeholdersActions$: Subject<{ placeholderId: string; templateUrl: string; priority: number }[]> = new Subject();\n\n /** @inheritdoc */\n public readonly supportingActions = [RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE] as const;\n\n constructor(\n store: Store<PlaceholderTemplateStore>,\n private readonly logger: LoggerService,\n private readonly injector: Injector,\n @Optional() translateService?: LocalizationService\n ) {\n const lang$ = translateService\n ? translateService.getTranslateService().onLangChange.pipe(\n map(({ lang }) => lang),\n startWith(translateService.getCurrentLanguage()),\n distinctUntilChanged()\n )\n : of(null);\n\n const filteredActions$ = combineLatest([\n lang$,\n this.placeholdersActions$.pipe(\n distinctUntilChanged((prev, next) => JSON.stringify(prev) === JSON.stringify(next))\n )\n ]).pipe(\n withLatestFrom(\n combineLatest([store.pipe(select(selectPlaceholderTemplateEntities)), store.pipe(select(selectPlaceholderRequestEntities))])\n ),\n map(([langAndTemplatesUrls, storedPlaceholdersAndRequests]) => {\n const [lang, placeholderActions] = langAndTemplatesUrls;\n const storedPlaceholders = storedPlaceholdersAndRequests[0] || {};\n const storedPlaceholderRequests = storedPlaceholdersAndRequests[1] || {};\n const placeholderNewRequests: { rawUrl: string; resolvedUrl: string }[] = [];\n // Stores all raw Urls used from the current engine execution\n const usedUrls: Record<string, boolean> = {};\n // Get all Urls that needs to be resolved from current rules engine output\n const placeholdersTemplates = placeholderActions.reduce((acc, placeholderAction) => {\n const placeholdersTemplateUrl = {\n rawUrl: placeholderAction.templateUrl,\n priority: placeholderAction.priority\n };\n if (acc[placeholderAction.placeholderId]) {\n acc[placeholderAction.placeholderId].push(placeholdersTemplateUrl);\n } else {\n acc[placeholderAction.placeholderId] = [placeholdersTemplateUrl];\n }\n const resolvedUrl = this.resolveUrlWithLang(placeholderAction.templateUrl, lang);\n // Filters duplicates and resolved urls that are already in the store\n if (!usedUrls[placeholderAction.templateUrl] && (!storedPlaceholderRequests[placeholderAction.templateUrl]\n || storedPlaceholderRequests[placeholderAction.templateUrl]!.resolvedUrl !== resolvedUrl)) {\n placeholderNewRequests.push({\n rawUrl: placeholderAction.templateUrl,\n resolvedUrl: this.resolveUrlWithLang(placeholderAction.templateUrl, lang)\n });\n }\n usedUrls[placeholderAction.templateUrl] = true;\n return acc;\n }, {} as { [key: string]: { rawUrl: string; priority: number }[] });\n // Urls not used anymore and not already disabled\n const placeholderRequestsToDisable: string[] = [];\n // Urls used that were disabled\n const placeholderRequestsToEnable: string[] = [];\n Object.keys(storedPlaceholderRequests).forEach((storedPlaceholderRequestRawUrl) => {\n const usedFromEngineIteration = usedUrls[storedPlaceholderRequestRawUrl];\n const usedFromStore = (storedPlaceholderRequests && storedPlaceholderRequests[storedPlaceholderRequestRawUrl]) ? storedPlaceholderRequests[storedPlaceholderRequestRawUrl].used : false;\n if (!usedFromEngineIteration && usedFromStore) {\n placeholderRequestsToDisable.push(storedPlaceholderRequestRawUrl);\n } else if (usedFromEngineIteration && !usedFromStore) {\n placeholderRequestsToEnable.push(storedPlaceholderRequestRawUrl);\n }\n });\n // Placeholder that are no longer filled by the current engine execution output will be cleared\n const placeholdersTemplatesToBeCleanedUp = Object.keys(storedPlaceholders)\n .filter((placeholderId) => !placeholdersTemplates[placeholderId]);\n\n const placeholdersTemplatesToBeSet = Object.keys(placeholdersTemplates).reduce((changedPlaceholderTemplates, placeholderTemplateId) => {\n // Caching if the placeholder template already exists with the same urls\n if (!storedPlaceholders[placeholderTemplateId]\n || !(JSON.stringify(storedPlaceholders[placeholderTemplateId].urlsWithPriority) === JSON.stringify(placeholdersTemplates[placeholderTemplateId]))) {\n changedPlaceholderTemplates.push({\n id: placeholderTemplateId,\n urlsWithPriority: placeholdersTemplates[placeholderTemplateId]\n });\n }\n return changedPlaceholderTemplates;\n }, [] as { id: string; urlsWithPriority: { rawUrl: string; priority: number }[] }[]);\n return {\n placeholdersTemplatesToBeCleanedUp,\n placeholderRequestsToDisable,\n placeholderRequestsToEnable,\n placeholdersTemplatesToBeSet,\n placeholderNewRequests\n };\n })\n );\n filteredActions$.pipe(takeUntilDestroyed()).subscribe((placeholdersUpdates) => {\n placeholdersUpdates.placeholdersTemplatesToBeCleanedUp.forEach((placeholderId) =>\n store.dispatch(deletePlaceholderTemplateEntity({\n id: placeholderId\n }))\n );\n placeholdersUpdates.placeholdersTemplatesToBeSet.forEach((placeholdersTemplateToBeSet) => {\n store.dispatch(setPlaceholderTemplateEntity({ entity: placeholdersTemplateToBeSet }));\n });\n placeholdersUpdates.placeholderRequestsToDisable.forEach((placeholderRequestToDisable) => {\n store.dispatch(updatePlaceholderRequestEntity({ entity: { id: placeholderRequestToDisable, used: false } }));\n });\n placeholdersUpdates.placeholderRequestsToEnable.forEach((placeholderRequestToEnable) => {\n store.dispatch(updatePlaceholderRequestEntity({ entity: { id: placeholderRequestToEnable, used: true } }));\n });\n placeholdersUpdates.placeholderNewRequests.forEach((placeholderNewRequest) => {\n store.dispatch(setPlaceholderRequestEntityFromUrl({\n resolvedUrl: placeholderNewRequest.resolvedUrl,\n id: placeholderNewRequest.rawUrl,\n call: this.retrieveTemplate(placeholderNewRequest.resolvedUrl)\n }));\n });\n });\n }\n\n /**\n * Localize the url, replacing the language marker\n * @param url\n * @param language\n */\n protected resolveUrlWithLang(url: string, language: string | null): string {\n if (!language && url.includes('[LANGUAGE]')) {\n this.logger.warn(`Missing language when trying to resolve ${url}`);\n }\n return language ? url.replace(/\\[LANGUAGE]/g, language) : url;\n }\n\n /**\n * Retrieve template as json from a given url\n * @param url\n */\n protected async retrieveTemplate(url: string): Promise<PlaceholderRequestReply> {\n const resolvedUrl$ = this.injector.get(DynamicContentService, null, { optional: true })?.getContentPathStream(url) || of(url);\n const fullUrl = await firstValueFrom(resolvedUrl$);\n return fetch(fullUrl).then((response) => response.json());\n }\n\n /** @inheritdoc */\n public executeActions(actions: ActionUpdatePlaceholderBlock[]) {\n const templates = actions.map((action) => ({\n placeholderId: action.placeholderId,\n templateUrl: action.value,\n priority: action.priority || 0\n }));\n\n this.placeholdersActions$.next(templates);\n }\n}\n","import {\n Injectable,\n Optional,\n} from '@angular/core';\nimport {\n Actions,\n createEffect,\n ofType,\n} from '@ngrx/effects';\nimport {\n Store,\n} from '@ngrx/store';\nimport {\n fromApiEffectSwitchMapById,\n} from '@o3r/core';\nimport {\n DynamicContentService,\n} from '@o3r/dynamic-content';\nimport {\n LocalizationService,\n} from '@o3r/localization';\nimport {\n RulesEngineRunnerService,\n} from '@o3r/rules-engine';\nimport {\n JSONPath,\n} from 'jsonpath-plus';\nimport {\n combineLatest,\n EMPTY,\n Observable,\n of,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n map,\n switchMap,\n take,\n} from 'rxjs/operators';\nimport {\n cancelPlaceholderRequest,\n failPlaceholderRequestEntity,\n type PlaceholderRequestStore,\n type PlaceholderVariable,\n selectPlaceholderRequestEntityUsage,\n setPlaceholderRequestEntityFromUrl,\n updatePlaceholderRequestEntity,\n} from '@o3r/components';\n\n/**\n * Service to handle async PlaceholderTemplate actions\n */\n@Injectable()\nexport class PlaceholderTemplateResponseEffect {\n /**\n * Set the PlaceholderRequest entity with the reply content, dispatch failPlaceholderRequestEntity if it catches a failure\n * Handles the rendering of the HTML content from the template and creates the combine latest from facts list if needed\n * Disables unused templates refresh if used is false in the store\n */\n public setPlaceholderRequestEntityFromUrl$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setPlaceholderRequestEntityFromUrl),\n fromApiEffectSwitchMapById(\n (templateResponse, action) => {\n const facts = templateResponse.vars ? Object.entries(templateResponse.vars).filter(([, variable]) => variable.type === 'fact') : [];\n const factsStreamsList = this.rulesEngineService\n ? facts.map(([varName, fact]) =>\n this.rulesEngineService!.engine.retrieveOrCreateFactStream(fact.value).pipe(\n map((factValue) => ({\n varName,\n factName: fact.value,\n // eslint-disable-next-line new-cap -- naming convention imposed by jsonpath-plus\n factValue: (fact.path && factValue) ? JSONPath({ wrap: false, json: factValue, path: fact.path }) : factValue\n })),\n distinctUntilChanged((previous, current) => previous.factValue === current.factValue)\n ))\n : [];\n\n const factsStreamsList$ = factsStreamsList.length > 0 ? combineLatest(factsStreamsList) : of([]);\n return combineLatest([factsStreamsList$, this.store.select(selectPlaceholderRequestEntityUsage(action.id)).pipe(distinctUntilChanged())]).pipe(\n switchMap(([factsUsedInTemplate, placeholderRequestUsage]) => {\n if (!placeholderRequestUsage) {\n return EMPTY;\n }\n return this.getRenderedHTML$(templateResponse.template, templateResponse.vars, factsUsedInTemplate).pipe(\n map(({ renderedTemplate, unknownTypeFound }) =>\n // Update instead of set because used already set by the update from url action\n updatePlaceholderRequestEntity({\n entity: {\n ...templateResponse,\n resolvedUrl: action.resolvedUrl,\n id: action.id,\n renderedTemplate,\n unknownTypeFound\n },\n requestId: action.requestId\n })\n )\n );\n }));\n },\n (error, action) => of(failPlaceholderRequestEntity({ ids: [action.id], error, requestId: action.requestId })),\n (requestIdPayload, action) => cancelPlaceholderRequest({ ...requestIdPayload, id: action.id })\n )\n )\n );\n\n constructor(\n private readonly actions$: Actions,\n private readonly store: Store<PlaceholderRequestStore>,\n @Optional() private readonly rulesEngineService: RulesEngineRunnerService | null,\n @Optional() private readonly dynamicContentService: DynamicContentService | null,\n @Optional() private readonly translationService: LocalizationService | null) {}\n\n /**\n * Renders the html template, replacing facts and urls and localizationKeys\n * @param template\n * @param vars\n * @param facts\n */\n private getRenderedHTML$(template?: string, vars?: Record<string, PlaceholderVariable>, facts?: { varName: string; factName: string; factValue: any }[]) {\n let unknownTypeFound = false;\n const factMapFromVars = (facts || []).reduce((mapping: { [key: string]: any }, fact) => {\n mapping[fact.varName] = fact.factValue;\n return mapping;\n }, {});\n const replacements$: Observable<{ ejsVar: RegExp; value: string } | null>[] = [];\n if (vars && template) {\n for (const varName in vars) {\n if (Object.prototype.hasOwnProperty.call(vars, varName)) {\n const ejsVar = new RegExp(`<%=\\\\s*${varName}\\\\s*%>`, 'g');\n switch (vars[varName].type) {\n case 'relativeUrl': {\n replacements$.push(\n this.dynamicContentService?.getMediaPathStream(vars[varName].value).pipe(\n take(1),\n map((value: string) => ({ ejsVar, value }))\n ) || of({ ejsVar, value: vars[varName].value })\n );\n break;\n }\n case 'fullUrl': {\n template = template.replace(ejsVar, vars[varName].value);\n break;\n }\n case 'fact': {\n template = template.replace(ejsVar, factMapFromVars[varName] ?? '');\n break;\n }\n case 'localisation': {\n const linkedParams = (Object.entries(vars[varName].parameters || {})).reduce((acc: { [key: string]: any }, [paramKey, paramValue]) => {\n acc[paramKey] = factMapFromVars[paramValue];\n return acc;\n }, {});\n replacements$.push(\n this.translationService\n ? this.translationService.translate(vars[varName].value, linkedParams).pipe(\n map((value) => (value ? { ejsVar, value } : null))\n )\n : of(null)\n );\n break;\n }\n default : {\n unknownTypeFound = true;\n break;\n }\n }\n }\n }\n }\n return replacements$.length > 0 && !!template\n ? combineLatest(replacements$).pipe(\n map((replacements) => ({\n renderedTemplate: replacements.reduce(\n (acc, replacement) =>\n replacement ? acc.replace(replacement.ejsVar, replacement.value) : acc,\n template\n ),\n unknownTypeFound\n }))\n )\n : of({ renderedTemplate: template, unknownTypeFound });\n }\n}\n","import {\n NgModule,\n} from '@angular/core';\nimport {\n EffectsModule,\n} from '@ngrx/effects';\nimport {\n PlaceholderRulesEngineActionHandler,\n} from './placeholder.action-handler';\nimport {\n PlaceholderTemplateResponseEffect,\n} from './placeholder.rules-engine.effect';\nimport {\n PlaceholderRequestStoreModule,\n PlaceholderTemplateStoreModule,\n} from '@o3r/components';\n\n@NgModule({\n imports: [\n EffectsModule.forFeature([PlaceholderTemplateResponseEffect]),\n PlaceholderRequestStoreModule,\n PlaceholderTemplateStoreModule\n ],\n providers: [\n PlaceholderRulesEngineActionHandler\n ]\n})\nexport class PlaceholderRulesEngineActionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["map","distinctUntilChanged","i1","i2","i3","i5"],"mappings":"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"}
1
+ {"version":3,"file":"o3r-components-rules-engine.mjs","sources":["../../src/rules-engine/placeholder.interfaces.ts","../../src/rules-engine/placeholder.action-handler.ts","../../src/rules-engine/placeholder.rules-engine.effect.ts","../../src/rules-engine/placeholder.rules-engine.module.ts","../../src/rules-engine/o3r-components-rules-engine.ts"],"sourcesContent":["import type {\n RulesEngineAction,\n} from '@o3r/core';\n\n/** ActionUpdatePlaceholderBlock */\nexport const RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE = 'UPDATE_PLACEHOLDER';\n\n/**\n * Content of action that updates a placeholder\n */\nexport interface ActionUpdatePlaceholderBlock extends RulesEngineAction {\n actionType: typeof RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE;\n placeholderId: string;\n value: string;\n priority?: number;\n}\n","import {\n Injectable,\n Injector,\n Optional,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n select,\n Store,\n} from '@ngrx/store';\nimport type {\n RulesEngineActionHandler,\n} from '@o3r/core';\nimport {\n DynamicContentService,\n} from '@o3r/dynamic-content';\nimport {\n LocalizationService,\n} from '@o3r/localization';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n combineLatest,\n distinctUntilChanged,\n firstValueFrom,\n map,\n of,\n startWith,\n Subject,\n withLatestFrom,\n} from 'rxjs';\nimport {\n ActionUpdatePlaceholderBlock,\n RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE,\n} from './placeholder.interfaces';\nimport {\n deletePlaceholderTemplateEntity,\n PlaceholderRequestReply,\n PlaceholderTemplateStore,\n selectPlaceholderRequestEntities,\n selectPlaceholderTemplateEntities,\n setPlaceholderRequestEntityFromUrl,\n setPlaceholderTemplateEntity,\n updatePlaceholderRequestEntity,\n} from '@o3r/components';\n\n/**\n * Service to handle async PlaceholderTemplate actions\n */\n@Injectable()\nexport class PlaceholderRulesEngineActionHandler implements RulesEngineActionHandler<ActionUpdatePlaceholderBlock> {\n protected placeholdersActions$: Subject<{ placeholderId: string; templateUrl: string; priority: number }[]> = new Subject();\n\n /** @inheritdoc */\n public readonly supportingActions = [RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE] as const;\n\n constructor(\n store: Store<PlaceholderTemplateStore>,\n private readonly logger: LoggerService,\n private readonly injector: Injector,\n @Optional() translateService?: LocalizationService\n ) {\n const lang$ = translateService\n ? translateService.getTranslateService().onLangChange.pipe(\n map(({ lang }) => lang),\n startWith(translateService.getCurrentLanguage()),\n distinctUntilChanged()\n )\n : of(null);\n\n const filteredActions$ = combineLatest([\n lang$,\n this.placeholdersActions$.pipe(\n distinctUntilChanged((prev, next) => JSON.stringify(prev) === JSON.stringify(next))\n )\n ]).pipe(\n withLatestFrom(\n combineLatest([store.pipe(select(selectPlaceholderTemplateEntities)), store.pipe(select(selectPlaceholderRequestEntities))])\n ),\n map(([langAndTemplatesUrls, storedPlaceholdersAndRequests]) => {\n const [lang, placeholderActions] = langAndTemplatesUrls;\n const storedPlaceholders = storedPlaceholdersAndRequests[0] || {};\n const storedPlaceholderRequests = storedPlaceholdersAndRequests[1] || {};\n const placeholderNewRequests: { rawUrl: string; resolvedUrl: string }[] = [];\n // Stores all raw Urls used from the current engine execution\n const usedUrls: Record<string, boolean> = {};\n // Get all Urls that needs to be resolved from current rules engine output\n const placeholdersTemplates = placeholderActions.reduce((acc, placeholderAction) => {\n const placeholdersTemplateUrl = {\n rawUrl: placeholderAction.templateUrl,\n priority: placeholderAction.priority\n };\n if (acc[placeholderAction.placeholderId]) {\n acc[placeholderAction.placeholderId].push(placeholdersTemplateUrl);\n } else {\n acc[placeholderAction.placeholderId] = [placeholdersTemplateUrl];\n }\n const resolvedUrl = this.resolveUrlWithLang(placeholderAction.templateUrl, lang);\n // Filters duplicates and resolved urls that are already in the store\n if (!usedUrls[placeholderAction.templateUrl] && (!storedPlaceholderRequests[placeholderAction.templateUrl]\n || storedPlaceholderRequests[placeholderAction.templateUrl]!.resolvedUrl !== resolvedUrl)) {\n placeholderNewRequests.push({\n rawUrl: placeholderAction.templateUrl,\n resolvedUrl: this.resolveUrlWithLang(placeholderAction.templateUrl, lang)\n });\n }\n usedUrls[placeholderAction.templateUrl] = true;\n return acc;\n }, {} as { [key: string]: { rawUrl: string; priority: number }[] });\n // Urls not used anymore and not already disabled\n const placeholderRequestsToDisable: string[] = [];\n // Urls used that were disabled\n const placeholderRequestsToEnable: string[] = [];\n Object.keys(storedPlaceholderRequests).forEach((storedPlaceholderRequestRawUrl) => {\n const usedFromEngineIteration = usedUrls[storedPlaceholderRequestRawUrl];\n const usedFromStore = (storedPlaceholderRequests && storedPlaceholderRequests[storedPlaceholderRequestRawUrl]) ? storedPlaceholderRequests[storedPlaceholderRequestRawUrl].used : false;\n if (!usedFromEngineIteration && usedFromStore) {\n placeholderRequestsToDisable.push(storedPlaceholderRequestRawUrl);\n } else if (usedFromEngineIteration && !usedFromStore) {\n placeholderRequestsToEnable.push(storedPlaceholderRequestRawUrl);\n }\n });\n // Placeholder that are no longer filled by the current engine execution output will be cleared\n const placeholdersTemplatesToBeCleanedUp = Object.keys(storedPlaceholders)\n .filter((placeholderId) => !placeholdersTemplates[placeholderId]);\n\n const placeholdersTemplatesToBeSet = Object.keys(placeholdersTemplates).reduce((changedPlaceholderTemplates, placeholderTemplateId) => {\n // Caching if the placeholder template already exists with the same urls\n if (!storedPlaceholders[placeholderTemplateId]\n || !(JSON.stringify(storedPlaceholders[placeholderTemplateId].urlsWithPriority) === JSON.stringify(placeholdersTemplates[placeholderTemplateId]))) {\n changedPlaceholderTemplates.push({\n id: placeholderTemplateId,\n urlsWithPriority: placeholdersTemplates[placeholderTemplateId]\n });\n }\n return changedPlaceholderTemplates;\n }, [] as { id: string; urlsWithPriority: { rawUrl: string; priority: number }[] }[]);\n return {\n placeholdersTemplatesToBeCleanedUp,\n placeholderRequestsToDisable,\n placeholderRequestsToEnable,\n placeholdersTemplatesToBeSet,\n placeholderNewRequests\n };\n })\n );\n filteredActions$.pipe(takeUntilDestroyed()).subscribe((placeholdersUpdates) => {\n placeholdersUpdates.placeholdersTemplatesToBeCleanedUp.forEach((placeholderId) =>\n store.dispatch(deletePlaceholderTemplateEntity({\n id: placeholderId\n }))\n );\n placeholdersUpdates.placeholdersTemplatesToBeSet.forEach((placeholdersTemplateToBeSet) => {\n store.dispatch(setPlaceholderTemplateEntity({ entity: placeholdersTemplateToBeSet }));\n });\n placeholdersUpdates.placeholderRequestsToDisable.forEach((placeholderRequestToDisable) => {\n store.dispatch(updatePlaceholderRequestEntity({ entity: { id: placeholderRequestToDisable, used: false } }));\n });\n placeholdersUpdates.placeholderRequestsToEnable.forEach((placeholderRequestToEnable) => {\n store.dispatch(updatePlaceholderRequestEntity({ entity: { id: placeholderRequestToEnable, used: true } }));\n });\n placeholdersUpdates.placeholderNewRequests.forEach((placeholderNewRequest) => {\n store.dispatch(setPlaceholderRequestEntityFromUrl({\n resolvedUrl: placeholderNewRequest.resolvedUrl,\n id: placeholderNewRequest.rawUrl,\n call: this.retrieveTemplate(placeholderNewRequest.resolvedUrl)\n }));\n });\n });\n }\n\n /**\n * Localize the url, replacing the language marker\n * @param url\n * @param language\n */\n protected resolveUrlWithLang(url: string, language: string | null): string {\n if (!language && url.includes('[LANGUAGE]')) {\n this.logger.warn(`Missing language when trying to resolve ${url}`);\n }\n return language ? url.replace(/\\[LANGUAGE]/g, language) : url;\n }\n\n /**\n * Retrieve template as json from a given url\n * @param url\n */\n protected async retrieveTemplate(url: string): Promise<PlaceholderRequestReply> {\n const resolvedUrl$ = this.injector.get(DynamicContentService, null, { optional: true })?.getContentPathStream(url) || of(url);\n const fullUrl = await firstValueFrom(resolvedUrl$);\n return fetch(fullUrl).then((response) => response.json());\n }\n\n /** @inheritdoc */\n public executeActions(actions: ActionUpdatePlaceholderBlock[]) {\n const templates = actions.map((action) => ({\n placeholderId: action.placeholderId,\n templateUrl: action.value,\n priority: action.priority || 0\n }));\n\n this.placeholdersActions$.next(templates);\n }\n}\n","import {\n Injectable,\n Optional,\n} from '@angular/core';\nimport {\n Actions,\n createEffect,\n ofType,\n} from '@ngrx/effects';\nimport {\n Store,\n} from '@ngrx/store';\nimport {\n fromApiEffectSwitchMapById,\n} from '@o3r/core';\nimport {\n DynamicContentService,\n} from '@o3r/dynamic-content';\nimport {\n LocalizationService,\n} from '@o3r/localization';\nimport {\n RulesEngineRunnerService,\n} from '@o3r/rules-engine';\nimport {\n JSONPath,\n} from 'jsonpath-plus';\nimport {\n combineLatest,\n EMPTY,\n Observable,\n of,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n map,\n switchMap,\n take,\n} from 'rxjs/operators';\nimport {\n cancelPlaceholderRequest,\n failPlaceholderRequestEntity,\n type PlaceholderRequestStore,\n type PlaceholderVariable,\n selectPlaceholderRequestEntityUsage,\n setPlaceholderRequestEntityFromUrl,\n updatePlaceholderRequestEntity,\n} from '@o3r/components';\n\n/**\n * Service to handle async PlaceholderTemplate actions\n */\n@Injectable()\nexport class PlaceholderTemplateResponseEffect {\n /**\n * Set the PlaceholderRequest entity with the reply content, dispatch failPlaceholderRequestEntity if it catches a failure\n * Handles the rendering of the HTML content from the template and creates the combine latest from facts list if needed\n * Disables unused templates refresh if used is false in the store\n */\n public setPlaceholderRequestEntityFromUrl$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setPlaceholderRequestEntityFromUrl),\n fromApiEffectSwitchMapById(\n (templateResponse, action) => {\n const facts = templateResponse.vars ? Object.entries(templateResponse.vars).filter(([, variable]) => variable.type === 'fact') : [];\n const factsStreamsList = this.rulesEngineService\n ? facts.map(([varName, fact]) =>\n this.rulesEngineService!.engine.retrieveOrCreateFactStream(fact.value).pipe(\n map((factValue) => ({\n varName,\n factName: fact.value,\n // eslint-disable-next-line new-cap -- naming convention imposed by jsonpath-plus\n factValue: (fact.path && factValue) ? JSONPath({ wrap: false, json: factValue, path: fact.path }) : factValue\n })),\n distinctUntilChanged((previous, current) => previous.factValue === current.factValue)\n ))\n : [];\n\n const factsStreamsList$ = factsStreamsList.length > 0 ? combineLatest(factsStreamsList) : of([]);\n return combineLatest([factsStreamsList$, this.store.select(selectPlaceholderRequestEntityUsage(action.id)).pipe(distinctUntilChanged())]).pipe(\n switchMap(([factsUsedInTemplate, placeholderRequestUsage]) => {\n if (!placeholderRequestUsage) {\n return EMPTY;\n }\n return this.getRenderedHTML$(templateResponse.template, templateResponse.vars, factsUsedInTemplate).pipe(\n map(({ renderedTemplate, unknownTypeFound }) =>\n // Update instead of set because used already set by the update from url action\n updatePlaceholderRequestEntity({\n entity: {\n ...templateResponse,\n resolvedUrl: action.resolvedUrl,\n id: action.id,\n renderedTemplate,\n unknownTypeFound\n },\n requestId: action.requestId\n })\n )\n );\n }));\n },\n (error, action) => of(failPlaceholderRequestEntity({ ids: [action.id], error, requestId: action.requestId })),\n (requestIdPayload, action) => cancelPlaceholderRequest({ ...requestIdPayload, id: action.id })\n )\n )\n );\n\n constructor(\n private readonly actions$: Actions,\n private readonly store: Store<PlaceholderRequestStore>,\n @Optional() private readonly rulesEngineService: RulesEngineRunnerService | null,\n @Optional() private readonly dynamicContentService: DynamicContentService | null,\n @Optional() private readonly translationService: LocalizationService | null) {}\n\n /**\n * Renders the html template, replacing facts and urls and localizationKeys\n * @param template\n * @param vars\n * @param facts\n */\n private getRenderedHTML$(template?: string, vars?: Record<string, PlaceholderVariable>, facts?: { varName: string; factName: string; factValue: any }[]) {\n let unknownTypeFound = false;\n const factMapFromVars = (facts || []).reduce((mapping: { [key: string]: any }, fact) => {\n mapping[fact.varName] = fact.factValue;\n return mapping;\n }, {});\n const replacements$: Observable<{ ejsVar: RegExp; value: string } | null>[] = [];\n if (vars && template) {\n for (const varName in vars) {\n if (Object.prototype.hasOwnProperty.call(vars, varName)) {\n const ejsVar = new RegExp(`<%=\\\\s*${varName}\\\\s*%>`, 'g');\n switch (vars[varName].type) {\n case 'relativeUrl': {\n replacements$.push(\n this.dynamicContentService?.getMediaPathStream(vars[varName].value).pipe(\n take(1),\n map((value: string) => ({ ejsVar, value }))\n ) || of({ ejsVar, value: vars[varName].value })\n );\n break;\n }\n case 'fullUrl': {\n template = template.replace(ejsVar, vars[varName].value);\n break;\n }\n case 'fact': {\n template = template.replace(ejsVar, factMapFromVars[varName] ?? '');\n break;\n }\n case 'localisation': {\n const linkedParams = (Object.entries(vars[varName].parameters || {})).reduce((acc: { [key: string]: any }, [paramKey, paramValue]) => {\n acc[paramKey] = factMapFromVars[paramValue];\n return acc;\n }, {});\n replacements$.push(\n this.translationService\n ? this.translationService.translate(vars[varName].value, linkedParams).pipe(\n map((value) => (value ? { ejsVar, value } : null))\n )\n : of(null)\n );\n break;\n }\n default : {\n unknownTypeFound = true;\n break;\n }\n }\n }\n }\n }\n return replacements$.length > 0 && !!template\n ? combineLatest(replacements$).pipe(\n map((replacements) => ({\n renderedTemplate: replacements.reduce(\n (acc, replacement) =>\n replacement ? acc.replace(replacement.ejsVar, replacement.value) : acc,\n template\n ),\n unknownTypeFound\n }))\n )\n : of({ renderedTemplate: template, unknownTypeFound });\n }\n}\n","import {\n NgModule,\n} from '@angular/core';\nimport {\n EffectsModule,\n} from '@ngrx/effects';\nimport {\n PlaceholderRulesEngineActionHandler,\n} from './placeholder.action-handler';\nimport {\n PlaceholderTemplateResponseEffect,\n} from './placeholder.rules-engine.effect';\nimport {\n PlaceholderRequestStoreModule,\n PlaceholderTemplateStoreModule,\n} from '@o3r/components';\n\n@NgModule({\n imports: [\n EffectsModule.forFeature([PlaceholderTemplateResponseEffect]),\n PlaceholderRequestStoreModule,\n PlaceholderTemplateStoreModule\n ],\n providers: [\n PlaceholderRulesEngineActionHandler\n ]\n})\nexport class PlaceholderRulesEngineActionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["map","distinctUntilChanged","i1","i2","i3","i5"],"mappings":"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"}
@@ -157,13 +157,13 @@ class PlaceholderRequestStoreModule {
157
157
  ]
158
158
  };
159
159
  }
160
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRequestStoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
161
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRequestStoreModule, imports: [i1.StoreFeatureModule] }); }
162
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRequestStoreModule, providers: [
160
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRequestStoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
161
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRequestStoreModule, imports: [i1.StoreFeatureModule] }); }
162
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRequestStoreModule, providers: [
163
163
  { provide: PLACEHOLDER_REQUEST_REDUCER_TOKEN, useFactory: getDefaultplaceholderRequestReducer }
164
164
  ], imports: [StoreModule.forFeature(PLACEHOLDER_REQUEST_STORE_NAME, PLACEHOLDER_REQUEST_REDUCER_TOKEN)] }); }
165
165
  }
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderRequestStoreModule, decorators: [{
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderRequestStoreModule, decorators: [{
167
167
  type: NgModule,
168
168
  args: [{
169
169
  imports: [
@@ -268,13 +268,13 @@ class PlaceholderTemplateStoreModule {
268
268
  ]
269
269
  };
270
270
  }
271
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderTemplateStoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
272
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderTemplateStoreModule, imports: [i1.StoreFeatureModule] }); }
273
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderTemplateStoreModule, providers: [
271
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderTemplateStoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
272
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderTemplateStoreModule, imports: [i1.StoreFeatureModule] }); }
273
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderTemplateStoreModule, providers: [
274
274
  { provide: PLACEHOLDER_TEMPLATE_REDUCER_TOKEN, useFactory: getDefaultPlaceholderTemplateReducer }
275
275
  ], imports: [StoreModule.forFeature(PLACEHOLDER_TEMPLATE_STORE_NAME, PLACEHOLDER_TEMPLATE_REDUCER_TOKEN)] }); }
276
276
  }
277
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderTemplateStoreModule, decorators: [{
277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderTemplateStoreModule, decorators: [{
278
278
  type: NgModule,
279
279
  args: [{
280
280
  imports: [
@@ -734,10 +734,10 @@ class ComponentsDevtoolsMessageService {
734
734
  this.inspectorService.otterLikeComponentInfoToBeSent$
735
735
  .pipe(takeUntilDestroyed(this.destroyRef), filter((info) => !!info)).subscribe((info) => this.sendMessage('selectedComponentInfo', info));
736
736
  }
737
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ComponentsDevtoolsMessageService, deps: [{ token: i1$1.LoggerService }, { token: i1.Store }, { token: OTTER_COMPONENTS_DEVTOOLS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
738
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ComponentsDevtoolsMessageService, providedIn: 'root' }); }
737
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ComponentsDevtoolsMessageService, deps: [{ token: i1$1.LoggerService }, { token: i1.Store }, { token: OTTER_COMPONENTS_DEVTOOLS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
738
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ComponentsDevtoolsMessageService, providedIn: 'root' }); }
739
739
  }
740
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ComponentsDevtoolsMessageService, decorators: [{
740
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ComponentsDevtoolsMessageService, decorators: [{
741
741
  type: Injectable,
742
742
  args: [{
743
743
  providedIn: 'root'
@@ -763,16 +763,16 @@ class ComponentsDevtoolsModule {
763
763
  ]
764
764
  };
765
765
  }
766
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ComponentsDevtoolsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
767
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: ComponentsDevtoolsModule, imports: [StoreModule,
766
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ComponentsDevtoolsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
767
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: ComponentsDevtoolsModule, imports: [StoreModule,
768
768
  PlaceholderTemplateStoreModule] }); }
769
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ComponentsDevtoolsModule, providers: [
769
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ComponentsDevtoolsModule, providers: [
770
770
  { provide: OTTER_COMPONENTS_DEVTOOLS_OPTIONS, useValue: OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS },
771
771
  ComponentsDevtoolsMessageService
772
772
  ], imports: [StoreModule,
773
773
  PlaceholderTemplateStoreModule] }); }
774
774
  }
775
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ComponentsDevtoolsModule, decorators: [{
775
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ComponentsDevtoolsModule, decorators: [{
776
776
  type: NgModule,
777
777
  args: [{
778
778
  imports: [
@@ -899,8 +899,8 @@ class C11nDirective {
899
899
  this.componentRef.destroy();
900
900
  }
901
901
  }
902
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.KeyValueDiffers }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
903
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.1", type: C11nDirective, isStandalone: false, selector: "[c11n]", inputs: { component: "component", config: "config", formControl: "formControl", inputs: "inputs", outputs: "outputs" }, providers: [
902
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.KeyValueDiffers }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
903
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: C11nDirective, isStandalone: false, selector: "[c11n]", inputs: { component: "component", config: "config", formControl: "formControl", inputs: "inputs", outputs: "outputs" }, providers: [
904
904
  {
905
905
  provide: NG_VALUE_ACCESSOR,
906
906
  useExisting: forwardRef((() => C11nDirective)),
@@ -913,7 +913,7 @@ class C11nDirective {
913
913
  }
914
914
  ], usesOnChanges: true, ngImport: i0 }); }
915
915
  }
916
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nDirective, decorators: [{
916
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nDirective, decorators: [{
917
917
  type: Directive,
918
918
  args: [{
919
919
  selector: '[c11n]',
@@ -982,10 +982,10 @@ class C11nService {
982
982
  return typeof presenterConfig === 'string' && presenterConfig !== '' ? (this.presentersMap.get(presenterConfig) || defaultPres) : defaultPres;
983
983
  }));
984
984
  }
985
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nService, deps: [{ token: C11N_PRESENTERS_MAP_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
986
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nService }); }
985
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nService, deps: [{ token: C11N_PRESENTERS_MAP_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
986
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nService }); }
987
987
  }
988
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nService, decorators: [{
988
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nService, decorators: [{
989
989
  type: Injectable
990
990
  }], ctorParameters: () => [{ type: Map, decorators: [{
991
991
  type: Inject,
@@ -994,10 +994,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
994
994
 
995
995
  /** C11n directive mock */
996
996
  class MockC11nDirective {
997
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: MockC11nDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
998
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.1", type: MockC11nDirective, isStandalone: false, selector: "[c11n]", inputs: { config: "config", component: "component", inputs: "inputs", outputs: "outputs" }, ngImport: i0 }); }
997
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MockC11nDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
998
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: MockC11nDirective, isStandalone: false, selector: "[c11n]", inputs: { config: "config", component: "component", inputs: "inputs", outputs: "outputs" }, ngImport: i0 }); }
999
999
  }
1000
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: MockC11nDirective, decorators: [{
1000
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MockC11nDirective, decorators: [{
1001
1001
  type: Directive,
1002
1002
  args: [{
1003
1003
  selector: '[c11n]',
@@ -1012,21 +1012,21 @@ class C11nMockService {
1012
1012
  getPresenter(_defaultPres, _presKey) {
1013
1013
  return (source) => source.pipe(mapTo(null));
1014
1014
  }
1015
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nMockService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1016
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nMockService }); }
1015
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nMockService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1016
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nMockService }); }
1017
1017
  }
1018
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nMockService, decorators: [{
1018
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nMockService, decorators: [{
1019
1019
  type: Injectable
1020
1020
  }] });
1021
1021
  /**
1022
1022
  * The purpose of this module is to be imported in the unit tests of the components which are using c11n directive
1023
1023
  */
1024
1024
  class C11nMockModule {
1025
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nMockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1026
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: C11nMockModule, declarations: [MockC11nDirective], exports: [MockC11nDirective] }); }
1027
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nMockModule, providers: [{ provide: C11nService, useClass: C11nMockService }] }); }
1025
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nMockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1026
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: C11nMockModule, declarations: [MockC11nDirective], exports: [MockC11nDirective] }); }
1027
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nMockModule, providers: [{ provide: C11nService, useClass: C11nMockService }] }); }
1028
1028
  }
1029
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nMockModule, decorators: [{
1029
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nMockModule, decorators: [{
1030
1030
  type: NgModule,
1031
1031
  args: [{
1032
1032
  declarations: [MockC11nDirective],
@@ -1065,11 +1065,11 @@ class C11nModule {
1065
1065
  }]
1066
1066
  };
1067
1067
  }
1068
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1069
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: C11nModule, declarations: [C11nDirective], exports: [C11nDirective] }); }
1070
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nModule }); }
1068
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1069
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: C11nModule, declarations: [C11nDirective], exports: [C11nDirective] }); }
1070
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nModule }); }
1071
1071
  }
1072
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: C11nModule, decorators: [{
1072
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: C11nModule, decorators: [{
1073
1073
  type: NgModule,
1074
1074
  args: [{
1075
1075
  declarations: [C11nDirective],
@@ -1083,10 +1083,10 @@ class O3rCapitalizePipe {
1083
1083
  const firstLetter = val && val.charAt(0);
1084
1084
  return firstLetter ? firstLetter.toUpperCase() + val.slice(1) : value;
1085
1085
  }
1086
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: O3rCapitalizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1087
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: O3rCapitalizePipe, isStandalone: true, name: "o3rCapitalize" }); }
1086
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: O3rCapitalizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1087
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: O3rCapitalizePipe, isStandalone: true, name: "o3rCapitalize" }); }
1088
1088
  }
1089
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: O3rCapitalizePipe, decorators: [{
1089
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: O3rCapitalizePipe, decorators: [{
1090
1090
  type: Pipe,
1091
1091
  args: [{ name: 'o3rCapitalize' }]
1092
1092
  }] });
@@ -1166,10 +1166,10 @@ class O3rDurationPipe {
1166
1166
  return result.replace(matchedPatternToReplace, padded);
1167
1167
  }, pattern);
1168
1168
  }
1169
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: O3rDurationPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1170
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: O3rDurationPipe, isStandalone: true, name: "o3rDuration" }); }
1169
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: O3rDurationPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1170
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: O3rDurationPipe, isStandalone: true, name: "o3rDuration" }); }
1171
1171
  }
1172
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: O3rDurationPipe, decorators: [{
1172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: O3rDurationPipe, decorators: [{
1173
1173
  type: Pipe,
1174
1174
  args: [{ name: 'o3rDuration' }]
1175
1175
  }] });
@@ -1178,10 +1178,10 @@ class O3rKeepWhiteSpacePipe {
1178
1178
  transform(value) {
1179
1179
  return value.replace(/\s/g, '&nbsp;');
1180
1180
  }
1181
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: O3rKeepWhiteSpacePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1182
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: O3rKeepWhiteSpacePipe, isStandalone: true, name: "o3rKeepWhiteSpace" }); }
1181
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: O3rKeepWhiteSpacePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1182
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: O3rKeepWhiteSpacePipe, isStandalone: true, name: "o3rKeepWhiteSpace" }); }
1183
1183
  }
1184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: O3rKeepWhiteSpacePipe, decorators: [{
1184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: O3rKeepWhiteSpacePipe, decorators: [{
1185
1185
  type: Pipe,
1186
1186
  args: [{ name: 'o3rKeepWhiteSpace' }]
1187
1187
  }] });
@@ -1197,10 +1197,10 @@ class O3rReplaceWithBoldPipe {
1197
1197
  return value;
1198
1198
  }
1199
1199
  }
1200
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: O3rReplaceWithBoldPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1201
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: O3rReplaceWithBoldPipe, isStandalone: true, name: "o3rReplaceWithBold" }); }
1200
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: O3rReplaceWithBoldPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1201
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: O3rReplaceWithBoldPipe, isStandalone: true, name: "o3rReplaceWithBold" }); }
1202
1202
  }
1203
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: O3rReplaceWithBoldPipe, decorators: [{
1203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: O3rReplaceWithBoldPipe, decorators: [{
1204
1204
  type: Pipe,
1205
1205
  args: [{ name: 'o3rReplaceWithBold' }]
1206
1206
  }] });
@@ -1266,10 +1266,10 @@ class PlaceholderComponent {
1266
1266
  this.messages$.complete();
1267
1267
  this.afterViewInit$.complete();
1268
1268
  }
1269
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderComponent, deps: [{ token: i1.Store }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1270
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: PlaceholderComponent, isStandalone: false, selector: "o3r-placeholder", inputs: { id: "id" }, host: { properties: { "class.debug": "mode() === 'debug'" } }, ngImport: i0, template: "<ng-template #projection>\n <ng-content></ng-content>\n</ng-template>\n@switch (mode()) {\n @case ('debug') {\n <span class=\"placehoder-id\">{{ id$ | async }}</span>\n }\n @case ('pending') {\n <ng-container *ngTemplateOutlet=\"projection\" />\n }\n @case ('normal') {\n @if (isPending) {\n <ng-container *ngTemplateOutlet=\"projection\" />\n } @else {\n <div [innerHTML]=\"template\"></div>\n }\n }\n}\n", styles: [".debug{padding:15px;text-align:center;border:2px dashed var(--o3r-placeholder-debug-color, #a65c27);border-radius:10px;width:100%;background:var(--o3r-placeholder-background, #fff2ea);border-style:dashed;color:var(--o3r-placeholder-debug-color, #a65c27);font-size:larger}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1269
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderComponent, deps: [{ token: i1.Store }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1270
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: PlaceholderComponent, isStandalone: false, selector: "o3r-placeholder", inputs: { id: "id" }, host: { properties: { "class.debug": "mode() === 'debug'" } }, ngImport: i0, template: "<ng-template #projection>\n <ng-content></ng-content>\n</ng-template>\n@switch (mode()) {\n @case ('debug') {\n <span class=\"placehoder-id\">{{ id$ | async }}</span>\n }\n @case ('pending') {\n <ng-container *ngTemplateOutlet=\"projection\" />\n }\n @case ('normal') {\n @if (isPending) {\n <ng-container *ngTemplateOutlet=\"projection\" />\n } @else {\n <div [innerHTML]=\"template\"></div>\n }\n }\n}\n", styles: [".debug{padding:15px;text-align:center;border:2px dashed var(--o3r-placeholder-debug-color, #a65c27);border-radius:10px;width:100%;background:var(--o3r-placeholder-background, #fff2ea);border-style:dashed;color:var(--o3r-placeholder-debug-color, #a65c27);font-size:larger}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1271
1271
  }
1272
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderComponent, decorators: [{
1272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderComponent, decorators: [{
1273
1273
  type: Component,
1274
1274
  args: [{ selector: 'o3r-placeholder', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
1275
1275
  '[class.debug]': `mode() === 'debug'`
@@ -1279,17 +1279,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
1279
1279
  }] } });
1280
1280
 
1281
1281
  class PlaceholderModule {
1282
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1283
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderModule, declarations: [PlaceholderComponent], imports: [CommonModule,
1282
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1283
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderModule, declarations: [PlaceholderComponent], imports: [CommonModule,
1284
1284
  StoreModule,
1285
1285
  PlaceholderTemplateStoreModule,
1286
1286
  PlaceholderRequestStoreModule], exports: [PlaceholderComponent] }); }
1287
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderModule, imports: [CommonModule,
1287
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderModule, imports: [CommonModule,
1288
1288
  StoreModule,
1289
1289
  PlaceholderTemplateStoreModule,
1290
1290
  PlaceholderRequestStoreModule] }); }
1291
1291
  }
1292
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PlaceholderModule, decorators: [{
1292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlaceholderModule, decorators: [{
1293
1293
  type: NgModule,
1294
1294
  args: [{
1295
1295
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"o3r-components.mjs","sources":["../../src/core/rendering/helpers.ts","../../src/devkit/components-devkit.interface.ts","../../src/stores/placeholder-request/placeholder-request.actions.ts","../../src/stores/placeholder-request/placeholder-request.reducer.ts","../../src/stores/placeholder-request/placeholder-request.state.ts","../../src/stores/placeholder-request/placeholder-request.module.ts","../../src/stores/placeholder-request/placeholder-request.selectors.ts","../../src/stores/placeholder-request/placeholder-request.sync.ts","../../src/stores/placeholder-template/placeholder-template.actions.ts","../../src/stores/placeholder-template/placeholder-template.reducer.ts","../../src/stores/placeholder-template/placeholder-template.state.ts","../../src/stores/placeholder-template/placeholder-template.module.ts","../../src/stores/placeholder-template/placeholder-template.selectors.ts","../../src/stores/placeholder-template/placeholder-template.sync.ts","../../src/devkit/components-devtools.token.ts","../../src/devkit/inspector/otter-inspector.helpers.ts","../../src/devkit/inspector/otter-inspector.service.ts","../../src/devkit/components-devtools.message.service.ts","../../src/devkit/components-devtools.module.ts","../../src/tools/component-replacement/c11n.directive.ts","../../src/tools/component-replacement/c11n.helpers.ts","../../src/tools/component-replacement/c11n.token.ts","../../src/tools/component-replacement/c11n.service.ts","../../src/tools/component-replacement/c11n.mock.module.ts","../../src/tools/component-replacement/c11n.module.ts","../../src/tools/pipes/capitalize/capitalize.pipe.ts","../../src/tools/pipes/duration/duration.model.ts","../../src/tools/pipes/duration/duration.pipe.ts","../../src/tools/pipes/keep-white-space/keep-white-space.pipe.ts","../../src/tools/pipes/replace-with-bold/replace-with-bold.pipe.ts","../../src/tools/placeholder/placeholder.component.ts","../../src/tools/placeholder/placeholder.template.html","../../src/tools/placeholder/placeholder.module.ts","../../src/o3r-components.ts"],"sourcesContent":["import {\n animationFrameScheduler,\n from,\n Observable,\n observeOn,\n of,\n} from 'rxjs';\nimport {\n bufferCount,\n concatMap,\n delay,\n mergeMap,\n scan,\n tap,\n} from 'rxjs/operators';\n\n/**\n * Buffers and emits data for lazy/progressive rendering of big lists\n * That could solve issues with long-running tasks when trying to render an array\n * of similar components.\n * @param delayMs Delay between data emits\n * @param concurrency Amount of elements that should be emitted at once\n */\nexport function lazyArray<T>(delayMs = 0, concurrency = 2) {\n let isFirstEmission = true;\n return (source$: Observable<T[]>) => {\n return source$.pipe(\n mergeMap((items) => {\n if (!isFirstEmission) {\n return of(items);\n }\n\n const items$ = from(items);\n\n return items$.pipe(\n bufferCount(concurrency),\n concatMap((value, index) => {\n return of(value).pipe(\n observeOn(animationFrameScheduler),\n delay(index * delayMs)\n );\n }),\n scan((acc: T[], steps: T[]) => {\n return [...acc, ...steps];\n }, []),\n tap((scannedItems: T[]) => {\n const scanDidComplete = scannedItems.length === items.length;\n\n if (scanDidComplete) {\n isFirstEmission = false;\n }\n })\n );\n })\n );\n };\n}\n","import type {\n ConnectContentMessage,\n DevtoolsCommonOptions,\n MessageDataTypes,\n OtterMessageContent,\n RequestMessagesContentMessage,\n} from '@o3r/core';\nimport type {\n PlaceholderMode,\n} from '../stores';\nimport {\n OtterLikeComponentInfo,\n} from './inspector';\n\n/**\n * Component Devtools options\n */\nexport interface ComponentsDevtoolsServiceOptions extends DevtoolsCommonOptions {\n}\n\n/**\n * Message to give the selected component information\n */\nexport interface SelectedComponentInfoMessage extends OtterLikeComponentInfo, OtterMessageContent<'selectedComponentInfo'> {\n}\n\n/**\n * Message to toggle the inspector\n */\nexport interface ToggleInspectorMessage extends OtterMessageContent<'toggleInspector'> {\n /** Is the inspector running */\n isRunning: boolean;\n}\n\n/**\n * Message to toggle the placeholder mode\n */\nexport interface PlaceholderModeMessage extends OtterMessageContent<'placeholderMode'> {\n /** Placeholder mode */\n mode: PlaceholderMode;\n}\n\n/**\n * Message to know the component selection availability\n */\nexport interface IsComponentSelectionAvailableMessage extends OtterMessageContent<'isComponentSelectionAvailable'> {\n available: boolean;\n}\n\ntype ComponentsMessageContents =\n | IsComponentSelectionAvailableMessage\n | SelectedComponentInfoMessage\n | ToggleInspectorMessage\n | PlaceholderModeMessage;\n\n/** List of possible DataTypes for Components messages */\nexport type ComponentsMessageDataTypes = MessageDataTypes<ComponentsMessageContents>;\n\n/** List of all messages for Components purpose */\nexport type AvailableComponentsMessageContents =\n | ComponentsMessageContents\n | ConnectContentMessage\n | RequestMessagesContentMessage<ComponentsMessageDataTypes>;\n\n/**\n * Determine if the given message is a Components message\n * @param message message to check\n */\nexport const isComponentsMessage = (message: any): message is AvailableComponentsMessageContents => {\n return message && (\n message.dataType === 'requestMessages'\n || message.dataType === 'connect'\n || message.dataType === 'selectedComponentInfo'\n || message.dataType === 'isComponentSelectionAvailable'\n || message.dataType === 'placeholderMode'\n || message.dataType === 'toggleInspector'\n );\n};\n","import {\n createAction,\n props,\n} from '@ngrx/store';\nimport {\n asyncProps,\n AsyncRequest,\n FailAsyncStoreItemEntitiesActionPayload,\n FromApiActionPayload,\n UpdateAsyncStoreItemEntityActionPayloadWithId,\n UpdateEntityActionPayloadWithId,\n} from '@o3r/core';\nimport {\n PlaceholderRequestModel,\n PlaceholderRequestReply,\n} from './placeholder-request.state';\n\nconst ACTION_FAIL_ENTITIES = '[PlaceholderRequest] fail entities';\nconst ACTION_SET_ENTITY_FROM_URL = '[PlaceholderRequest] set entity from url';\nconst ACTION_CANCEL_REQUEST = '[PlaceholderRequest] cancel request';\nconst ACTION_UPDATE_ENTITY = '[PlaceholderRequest] update entity';\nconst ACTION_UPDATE_ENTITY_SYNC = '[PlaceholderRequest] update entity sync';\n\n/** Action to cancel a Request ID registered in the store. Can happen from effect based on a switchMap for instance */\nexport const cancelPlaceholderRequest = createAction(ACTION_CANCEL_REQUEST, props<AsyncRequest & { id: string }>());\n\n/** Action to update failureStatus for PlaceholderRequestModels */\nexport const failPlaceholderRequestEntity = createAction(ACTION_FAIL_ENTITIES, props<FailAsyncStoreItemEntitiesActionPayload<any>>());\n\n/** Action to update an entity */\nexport const updatePlaceholderRequestEntity = createAction(ACTION_UPDATE_ENTITY, props<UpdateAsyncStoreItemEntityActionPayloadWithId<PlaceholderRequestModel>>());\n\n/** Action to update an entity without impact on request id */\nexport const updatePlaceholderRequestEntitySync = createAction(ACTION_UPDATE_ENTITY_SYNC, props<UpdateEntityActionPayloadWithId<PlaceholderRequestModel>>());\n\n/** Action to update PlaceholderRequest with known IDs, will create the entity with only the url, the call will be created in the effect */\nexport const setPlaceholderRequestEntityFromUrl = createAction(ACTION_SET_ENTITY_FROM_URL, asyncProps<FromApiActionPayload<PlaceholderRequestReply> & { resolvedUrl: string; id: string }>());\n","import {\n createEntityAdapter,\n} from '@ngrx/entity';\nimport {\n ActionCreator,\n createReducer,\n on,\n ReducerTypes,\n} from '@ngrx/store';\nimport {\n asyncStoreItemAdapter,\n createEntityAsyncRequestAdapter,\n} from '@o3r/core';\nimport * as actions from './placeholder-request.actions';\nimport {\n PlaceholderRequestModel,\n PlaceholderRequestState,\n PlaceholderRequestStateDetails,\n} from './placeholder-request.state';\n\n/**\n * PlaceholderRequest Store adapter\n */\nexport const placeholderRequestAdapter = createEntityAsyncRequestAdapter(createEntityAdapter<PlaceholderRequestModel>({\n selectId: (model) => model.id\n}));\n\n/**\n * PlaceholderRequest Store initial value\n */\nexport const placeholderRequestInitialState: PlaceholderRequestState = placeholderRequestAdapter.getInitialState<PlaceholderRequestStateDetails>({\n requestIds: []\n});\n\n/**\n * Reducers of Placeholder request store that handles the call to the placeholder template URL\n */\nexport const placeholderRequestReducerFeatures: ReducerTypes<PlaceholderRequestState, ActionCreator[]>[] = [\n on(actions.cancelPlaceholderRequest, (state, action) => {\n const id = action.id;\n if (!id || !state.entities[id]) {\n return state;\n }\n return placeholderRequestAdapter.updateOne({\n id: action.id,\n changes: asyncStoreItemAdapter.resolveRequest(state.entities[id], action.requestId)\n }, asyncStoreItemAdapter.resolveRequest(state, action.requestId));\n }),\n on(actions.updatePlaceholderRequestEntity, (state, action) => {\n const currentEntity = state.entities[action.entity.id]!;\n const newEntity = asyncStoreItemAdapter.resolveRequest({ ...action.entity, ...asyncStoreItemAdapter.extractAsyncStoreItem(currentEntity) }, action.requestId);\n return placeholderRequestAdapter.updateOne({\n id: newEntity.id,\n changes: newEntity\n }, asyncStoreItemAdapter.resolveRequest(state, action.requestId));\n }),\n on(actions.updatePlaceholderRequestEntitySync, (state, action) => {\n return placeholderRequestAdapter.updateOne({\n id: action.entity.id,\n changes: {\n ...action.entity\n }\n }, state);\n }),\n on(actions.setPlaceholderRequestEntityFromUrl, (state, payload) => {\n const currentEntity = state.entities[payload.id];\n // Nothing to update if resolved URLs already match\n if (currentEntity && currentEntity.resolvedUrl === payload.resolvedUrl) {\n return state;\n }\n let newEntity = {\n id: payload.id,\n resolvedUrl: payload.resolvedUrl,\n used: true\n };\n if (currentEntity) {\n newEntity = { ...asyncStoreItemAdapter.extractAsyncStoreItem(currentEntity), ...newEntity };\n }\n return placeholderRequestAdapter.addOne(\n asyncStoreItemAdapter.addRequest(\n asyncStoreItemAdapter.initialize(newEntity),\n payload.requestId),\n asyncStoreItemAdapter.addRequest(state, payload.requestId)\n );\n }),\n on(actions.failPlaceholderRequestEntity, (state, payload) => {\n return placeholderRequestAdapter.failRequestMany(asyncStoreItemAdapter.resolveRequest(state, payload.requestId), payload && payload.ids, payload.requestId);\n })\n];\n\n/**\n * PlaceholderRequest Store reducer\n */\nexport const placeholderRequestReducer = createReducer(\n placeholderRequestInitialState,\n ...placeholderRequestReducerFeatures\n);\n","import {\n EntityState,\n} from '@ngrx/entity';\nimport {\n AsyncStoreItem,\n} from '@o3r/core';\n\n/**\n * Variable model from the placeholder reply\n */\nexport interface PlaceholderVariable {\n type: 'fact' | 'fullUrl' | 'relativeUrl' | 'localisation';\n value: string;\n parameters?: Record<string, string>;\n path?: string;\n}\n\n/**\n * Raw JSON template coming back from the CMS or any other source\n */\nexport interface PlaceholderRequestReply {\n template?: string;\n vars?: Record<string, PlaceholderVariable>;\n}\n\n/**\n * PlaceholderRequest model\n */\nexport interface PlaceholderRequestModel extends AsyncStoreItem, PlaceholderRequestReply {\n /** Raw URL that is not localized, ex: my_url/[LANGUAGE]/my_placeholder.json */\n id: string;\n /** Resolved URL that is localized, ex: my_url/en-GB/my_placeholder.json */\n resolvedUrl: string;\n /** Rendered template associated to the resolved URL, can be dynamic */\n renderedTemplate?: string;\n /** Unknown type found in the reply */\n unknownTypeFound?: boolean;\n\n /** A mechanism to cache previous request results for a given language. This boolean disables the dynamic rendering when it is set to false */\n used?: boolean;\n}\n\n/**\n * PlaceholderRequest state details\n */\nexport interface PlaceholderRequestStateDetails extends AsyncStoreItem {}\n\n/**\n * PlaceholderRequest store state\n */\nexport interface PlaceholderRequestState extends EntityState<PlaceholderRequestModel>, PlaceholderRequestStateDetails {\n}\n\n/**\n * Name of the PlaceholderRequest Store\n */\nexport const PLACEHOLDER_REQUEST_STORE_NAME = 'placeholderRequest';\n\n/**\n * PlaceholderRequest Store Interface\n */\nexport interface PlaceholderRequestStore {\n /** PlaceholderRequest state */\n [PLACEHOLDER_REQUEST_STORE_NAME]: PlaceholderRequestState;\n}\n","import {\n InjectionToken,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n Action,\n ActionReducer,\n StoreModule,\n} from '@ngrx/store';\nimport {\n placeholderRequestReducer,\n} from './placeholder-request.reducer';\nimport {\n PLACEHOLDER_REQUEST_STORE_NAME,\n PlaceholderRequestState,\n} from './placeholder-request.state';\n\n/** Token of the PlaceholderRequest reducer */\nexport const PLACEHOLDER_REQUEST_REDUCER_TOKEN = new InjectionToken<ActionReducer<PlaceholderRequestState, Action>>('Feature PlaceholderRequest Reducer');\n\n/** Provide default reducer for PlaceholderRequest store */\nexport function getDefaultplaceholderRequestReducer() {\n return placeholderRequestReducer;\n}\n\n@NgModule({\n imports: [\n StoreModule.forFeature(PLACEHOLDER_REQUEST_STORE_NAME, PLACEHOLDER_REQUEST_REDUCER_TOKEN)\n ],\n providers: [\n { provide: PLACEHOLDER_REQUEST_REDUCER_TOKEN, useFactory: getDefaultplaceholderRequestReducer }\n ]\n})\nexport class PlaceholderRequestStoreModule {\n public static forRoot<T extends PlaceholderRequestState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<PlaceholderRequestStoreModule> {\n return {\n ngModule: PlaceholderRequestStoreModule,\n providers: [\n { provide: PLACEHOLDER_REQUEST_REDUCER_TOKEN, useFactory: reducerFactory }\n ]\n };\n }\n}\n","import {\n createFeatureSelector,\n createSelector,\n} from '@ngrx/store';\nimport {\n placeholderRequestAdapter,\n} from './placeholder-request.reducer';\nimport {\n PLACEHOLDER_REQUEST_STORE_NAME,\n PlaceholderRequestState,\n} from './placeholder-request.state';\n\nexport const selectPlaceholderRequestState = createFeatureSelector<PlaceholderRequestState>(PLACEHOLDER_REQUEST_STORE_NAME);\n\nconst { selectEntities } = placeholderRequestAdapter.getSelectors();\n\n/** Select the dictionary of PlaceholderRequest entities */\nexport const selectPlaceholderRequestEntities = createSelector(selectPlaceholderRequestState, (state) => state && selectEntities(state));\n\n/**\n * Select a specific PlaceholderRequest entity using a raw url as id\n * @param rawUrl\n */\nexport const selectPlaceholderRequestEntityUsage = (rawUrl: string) => createSelector(\n selectPlaceholderRequestState,\n (state) => {\n return state?.entities[rawUrl] ? state.entities[rawUrl].used : undefined;\n });\n","import {\n asyncEntitySerializer,\n Serializer,\n} from '@o3r/core';\nimport {\n placeholderRequestAdapter,\n placeholderRequestInitialState,\n} from './placeholder-request.reducer';\nimport {\n PlaceholderRequestModel,\n PlaceholderRequestState,\n} from './placeholder-request.state';\n\nexport const placeholderRequestStorageSerializer = asyncEntitySerializer;\n\nexport const placeholderRequestStorageDeserializer = (rawObject: any) => {\n if (!rawObject || !rawObject.ids) {\n return placeholderRequestInitialState;\n }\n const storeObject = placeholderRequestAdapter.getInitialState(rawObject);\n for (const id of rawObject.ids) {\n storeObject.entities[id] = rawObject.entities[id] as PlaceholderRequestModel;\n }\n return storeObject;\n};\n\nexport const placeholderRequestStorageSync: Readonly<Serializer<PlaceholderRequestState>> = {\n serialize: placeholderRequestStorageSerializer,\n deserialize: placeholderRequestStorageDeserializer\n} as const;\n","import {\n createAction,\n props,\n} from '@ngrx/store';\nimport {\n SetEntityActionPayload,\n} from '@o3r/core';\nimport {\n type PlaceholderMode,\n PlaceholderTemplateModel,\n} from './placeholder-template.state';\n\nconst ACTION_DELETE_ENTITY = '[PlaceholderTemplate] delete entity';\nconst ACTION_SET_ENTITY = '[PlaceholderTemplate] set entity';\nconst ACTION_TOGGLE_MODE = '[PlaceholderTemplate] toggle mode';\n\n/** Action to delete a specific entity */\nexport const deletePlaceholderTemplateEntity = createAction(ACTION_DELETE_ENTITY, props<{ id: string }>());\n\n/** Action to clear all placeholderTemplate and fill the store with the payload */\nexport const setPlaceholderTemplateEntity = createAction(ACTION_SET_ENTITY, props<SetEntityActionPayload<PlaceholderTemplateModel>>());\n\nexport const togglePlaceholderModeTemplate = createAction(ACTION_TOGGLE_MODE, props<{ mode: PlaceholderMode }>());\n","import {\n createEntityAdapter,\n} from '@ngrx/entity';\nimport {\n ActionCreator,\n createReducer,\n on,\n ReducerTypes,\n} from '@ngrx/store';\nimport * as actions from './placeholder-template.actions';\nimport {\n PlaceholderTemplateModel,\n PlaceholderTemplateState,\n} from './placeholder-template.state';\n\n/**\n * PlaceholderTemplate Store adapter\n */\nexport const placeholderTemplateAdapter = createEntityAdapter<PlaceholderTemplateModel>({\n selectId: (model) => model.id\n});\n\n/**\n * PlaceholderTemplate Store initial value\n */\nexport const placeholderTemplateInitialState: PlaceholderTemplateState = placeholderTemplateAdapter.getInitialState({\n mode: 'normal'\n});\n\n/**\n * List of basic actions for PlaceholderTemplate Store\n */\nexport const placeholderTemplateReducerFeatures: ReducerTypes<PlaceholderTemplateState, ActionCreator[]>[] = [\n on(actions.setPlaceholderTemplateEntity, (state, payload) =>\n placeholderTemplateAdapter.addOne(payload.entity, placeholderTemplateAdapter.removeOne(payload.entity.id, state))),\n on(actions.deletePlaceholderTemplateEntity, (state, payload) => {\n const id = payload.id;\n if (!id || !state.entities[id]) {\n return state;\n }\n return placeholderTemplateAdapter.removeOne(id, state);\n }),\n on(actions.togglePlaceholderModeTemplate, (state, payload) => {\n return {\n ...state,\n mode: payload.mode\n };\n })\n];\n\n/**\n * PlaceholderTemplate Store reducer\n */\nexport const placeholderTemplateReducer = createReducer(\n placeholderTemplateInitialState,\n ...placeholderTemplateReducerFeatures\n);\n","import {\n EntityState,\n} from '@ngrx/entity';\n\n/**\n * PlaceholderTemplate model\n */\nexport interface PlaceholderTemplateModel {\n /** Placeholder id that is unique*/\n id: string;\n /** Urls to the templates to be fetched, and priority for rendering order */\n urlsWithPriority: { rawUrl: string; priority: number }[];\n}\n\n/** Possible placeholder mode */\nexport type PlaceholderMode = 'normal' | 'debug' | 'pending';\n\n/**\n * PlaceholderTemplate store state\n */\nexport interface PlaceholderTemplateState extends EntityState<PlaceholderTemplateModel> {\n mode: PlaceholderMode;\n}\n\n/**\n * Name of the PlaceholderTemplate Store\n */\nexport const PLACEHOLDER_TEMPLATE_STORE_NAME = 'placeholderTemplate';\n\n/**\n * PlaceholderTemplate Store Interface\n */\nexport interface PlaceholderTemplateStore {\n /** PlaceholderTemplate state */\n [PLACEHOLDER_TEMPLATE_STORE_NAME]: PlaceholderTemplateState;\n}\n","import {\n InjectionToken,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n Action,\n ActionReducer,\n StoreModule,\n} from '@ngrx/store';\nimport {\n placeholderTemplateReducer,\n} from './placeholder-template.reducer';\nimport {\n PLACEHOLDER_TEMPLATE_STORE_NAME,\n PlaceholderTemplateState,\n} from './placeholder-template.state';\n\n/** Token of the PlaceholderTemplate reducer */\nexport const PLACEHOLDER_TEMPLATE_REDUCER_TOKEN = new InjectionToken<ActionReducer<PlaceholderTemplateState, Action>>('Feature PlaceholderTemplate Reducer');\n\n/** Provide default reducer for PlaceholderTemplate store */\nexport function getDefaultPlaceholderTemplateReducer() {\n return placeholderTemplateReducer;\n}\n\n@NgModule({\n imports: [\n StoreModule.forFeature(PLACEHOLDER_TEMPLATE_STORE_NAME, PLACEHOLDER_TEMPLATE_REDUCER_TOKEN)\n ],\n providers: [\n { provide: PLACEHOLDER_TEMPLATE_REDUCER_TOKEN, useFactory: getDefaultPlaceholderTemplateReducer }\n ]\n})\nexport class PlaceholderTemplateStoreModule {\n public static forRoot<T extends PlaceholderTemplateState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<PlaceholderTemplateStoreModule> {\n return {\n ngModule: PlaceholderTemplateStoreModule,\n providers: [\n { provide: PLACEHOLDER_TEMPLATE_REDUCER_TOKEN, useFactory: reducerFactory }\n ]\n };\n }\n}\n","import {\n createFeatureSelector,\n createSelector,\n} from '@ngrx/store';\nimport {\n selectPlaceholderRequestState,\n} from '../placeholder-request';\nimport {\n placeholderTemplateAdapter,\n} from './placeholder-template.reducer';\nimport {\n PLACEHOLDER_TEMPLATE_STORE_NAME,\n PlaceholderTemplateState,\n} from './placeholder-template.state';\n\nconst { selectEntities } = placeholderTemplateAdapter.getSelectors();\n\nexport const selectPlaceholderTemplateState = createFeatureSelector<PlaceholderTemplateState>(PLACEHOLDER_TEMPLATE_STORE_NAME);\n\n/** Select the dictionary of PlaceholderTemplate entities */\nexport const selectPlaceholderTemplateEntities = createSelector(selectPlaceholderTemplateState, (state) => state && selectEntities(state));\n\n/**\n * Select a specific PlaceholderTemplate\n * @param placeholderId\n */\nexport const selectPlaceholderTemplateEntity = (placeholderId: string) =>\n createSelector(selectPlaceholderTemplateState, (state) => state?.entities[placeholderId]);\n\n/**\n * Select the ordered rendered placeholder template full data (url, priority etc.) for a given placeholderId\n * Return undefined if the placeholder is not found\n * Returns {orderedRenderedTemplates: undefined, isPending: true} if any of the request is still pending\n * @param placeholderId\n */\nexport const selectSortedTemplates = (placeholderId: string) => createSelector(\n selectPlaceholderTemplateEntity(placeholderId),\n selectPlaceholderRequestState,\n (placeholderTemplate, placeholderRequestState) => {\n if (!placeholderTemplate || !placeholderRequestState) {\n return;\n }\n // The isPending will be considered true if any of the Url is still pending\n let isPending: boolean | undefined = false;\n const templates: { rawUrl: string; priority: number; renderedTemplate?: string; resolvedUrl: string }[] = [];\n placeholderTemplate.urlsWithPriority.forEach((urlWithPriority) => {\n const placeholderRequest = placeholderRequestState.entities[urlWithPriority.rawUrl];\n if (placeholderRequest) {\n // If one of the items is pending, we will wait to display all contents at the same time\n isPending = isPending || placeholderRequest.isPending;\n // Templates in failure will be ignored from the list\n if (!placeholderRequest.isFailure) {\n templates.push({\n rawUrl: urlWithPriority.rawUrl,\n resolvedUrl: placeholderRequest.resolvedUrl,\n priority: urlWithPriority.priority,\n renderedTemplate: placeholderRequest.renderedTemplate\n });\n }\n }\n });\n // No need to perform sorting if still pending\n if (isPending) {\n return { orderedTemplates: undefined, isPending };\n }\n // Sort templates by priority\n const orderedTemplates = templates.sort((template1, template2) => {\n return (template2.priority - template1.priority) || 1;\n }).filter((templateData) => !!templateData.renderedTemplate);\n\n return { orderedTemplates, isPending };\n });\n\n/**\n * Select the ordered rendered templates for a given placeholderId\n * Return undefined if the placeholder is not found\n * Returns {orderedRenderedTemplates: undefined, isPending: true} if any of the request is still pending\n * @param placeholderId\n * @deprecated Please use {@link selectSortedTemplates} instead\n */\nexport const selectPlaceholderRenderedTemplates = (placeholderId: string) => createSelector(\n selectSortedTemplates(placeholderId),\n (placeholderData) => {\n if (!placeholderData) {\n return;\n }\n return {\n orderedRenderedTemplates: placeholderData.orderedTemplates?.map((placeholder) => placeholder.renderedTemplate),\n isPending: placeholderData.isPending\n };\n });\n\nexport const selectPlaceholderTemplateMode = createSelector(selectPlaceholderTemplateState, (state) => state.mode);\n","import {\n Serializer,\n} from '@o3r/core';\nimport {\n placeholderTemplateAdapter,\n placeholderTemplateInitialState,\n} from './placeholder-template.reducer';\nimport {\n PlaceholderTemplateModel,\n PlaceholderTemplateState,\n} from './placeholder-template.state';\n\nexport const placeholderTemplateStorageDeserializer = (rawObject: any) => {\n if (!rawObject || !rawObject.ids) {\n return placeholderTemplateInitialState;\n }\n const storeObject = placeholderTemplateAdapter.getInitialState(rawObject);\n for (const id of rawObject.ids) {\n storeObject.entities[id] = rawObject.entities[id] as PlaceholderTemplateModel;\n }\n return storeObject;\n};\n\nexport const placeholderTemplateStorageSync: Readonly<Serializer<PlaceholderTemplateState>> = {\n deserialize: placeholderTemplateStorageDeserializer\n} as const;\n","import {\n InjectionToken,\n} from '@angular/core';\nimport {\n ComponentsDevtoolsServiceOptions,\n} from './components-devkit.interface';\n\nexport const OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS: Readonly<ComponentsDevtoolsServiceOptions> = {\n isActivatedOnBootstrap: false\n} as const;\n\nexport const OTTER_COMPONENTS_DEVTOOLS_OPTIONS = new InjectionToken<ComponentsDevtoolsServiceOptions>('Otter Components Devtools options');\n","import {\n otterComponentInfoPropertyName,\n} from '@o3r/core';\n\nexport interface OtterLikeComponentInfo {\n /** Container information */\n container?: OtterLikeComponentInfo;\n /** Configuration ID */\n configId?: string;\n /** Component name */\n componentName: string;\n /** Component translation */\n translations?: Record<string, string[]>;\n /** Component analytics */\n analytics?: Record<string, string[]>;\n}\n\n/**\n * Otter inspector css class\n */\nexport const INSPECTOR_CLASS = 'otter-devtools-inspector';\n\n/**\n * Determine if a node is an Otter container\n * @param node Element to check\n * @returns true if the node is an Otter container\n */\nexport const isContainer = (node: Element | undefined | null): node is Element => {\n return !!node?.tagName.toLowerCase().endsWith('cont');\n};\n\n/**\n * Determine the config id of a component instance\n * @param instance component instance\n * @returns the config id of the component instance\n */\nexport const getConfigId = (instance: any) => {\n return instance[otterComponentInfoPropertyName]?.configId;\n};\n\n/**\n * Recursive method to determin the translations of a node\n * @param node HTMLElement to check\n * @param rec recursive method\n * @returns the trasnslations associated to their component name\n */\nexport function getTranslationsRec(node: Element | null, rec: typeof getTranslationsRec): Record<string, string[]> | undefined {\n const angularDevTools = (window as any).ng;\n const o3rInfoProperty: typeof otterComponentInfoPropertyName = '__otter-info__';\n if (!node || !angularDevTools) {\n return;\n }\n const component = angularDevTools.getComponent(node);\n const subTranslations: (Record<string, string[]> | undefined)[] = Array.from(node.children).map((child) => rec(child, rec));\n const translations: Record<string, string[]> = {};\n subTranslations.forEach((s) => {\n Object.entries(s || {}).forEach(([k, v]) => {\n if (v.length > 0) {\n translations[k] = v;\n }\n });\n });\n if (component) {\n const componentName: string = component.constructor.name;\n const componentTranslations = Object.values<string>(component[o3rInfoProperty]?.translations || {}).filter((t) => typeof t === 'string');\n if (componentTranslations.length > 0) {\n translations[componentName] = componentTranslations;\n }\n }\n return Object.keys(translations).length > 0 ? translations : undefined;\n}\n\n/**\n * Determine the translations of a node\n * @param node HTMLElement to check\n * @returns the translations associated to their component name\n */\nexport const getTranslations = (node: Element | null): Record<string, string[]> | undefined => getTranslationsRec(node, getTranslations);\n\n/**\n * Recursive method to determine the analytics of a node\n * @param node Element to check\n * @param rec recursive method\n * @returns the analytics associated to their component name\n */\nexport function getAnalyticEventsRec(node: Element | null, rec: typeof getAnalyticEventsRec): Record<string, string[]> | undefined {\n const angularDevTools = (window as any).ng;\n const o3rInfoProperty: typeof otterComponentInfoPropertyName = '__otter-info__';\n if (!node || !angularDevTools) {\n return;\n }\n const component = angularDevTools.getComponent(node);\n const subEvents = Array.from(node.children).map((child) => rec(child, rec));\n const events: Record<string, string[]> = {};\n subEvents.forEach((s) => {\n Object.entries(s || {}).forEach(([k, v]) => {\n if (v.length > 0) {\n events[k] = v;\n }\n });\n });\n if (component && component[o3rInfoProperty]) {\n const componentName: string = component.constructor.name;\n const componentEvents: string[] = Object.values<any>(component.analyticsEvents || {}).map((eventConstructor) => eventConstructor.name);\n if (componentEvents.length > 0) {\n events[componentName] = componentEvents;\n }\n }\n return Object.keys(events).length > 0 ? events : undefined;\n}\n\n/**\n * Determine the analytics of a node\n * @param node Element to check\n * @returns the analytics associated to their component name\n */\nexport const getAnalyticEvents = (node: Element | null): Record<string, string[]> | undefined => getAnalyticEventsRec(node, getAnalyticEvents);\n\n/**\n * Determine all info from an Otter component\n * @param componentClassInstance component instance\n * @param host HTML element hosting the component\n * @returns all info from an Otter component\n */\nexport const getOtterLikeComponentInfo = (componentClassInstance: any, host: Element): OtterLikeComponentInfo => {\n const configId = getConfigId(componentClassInstance);\n const translations = getTranslations(host);\n const analytics = getAnalyticEvents(host);\n return {\n // Cannot use anymore `constructor.name` else all components are named `_a`\n componentName: componentClassInstance.constructor.ɵcmp?.debugInfo?.className || componentClassInstance.constructor.name,\n configId,\n translations,\n analytics\n };\n};\n","import {\n BehaviorSubject,\n Observable,\n} from 'rxjs';\nimport {\n Ng,\n} from './ng';\nimport {\n getOtterLikeComponentInfo,\n INSPECTOR_CLASS,\n isContainer,\n OtterLikeComponentInfo,\n} from './otter-inspector.helpers';\n\ninterface ComponentInfo extends OtterLikeComponentInfo {\n component: any;\n host: Element;\n}\n\n/**\n * Service to handle the custom inspector for the Otter Devtools Chrome extension.\n */\nexport class OtterInspectorService {\n private readonly angularDevTools: Ng | undefined;\n private readonly elementMouseOverCallback = this.elementMouseOver.bind(this);\n private readonly elementClickCallback = this.elementClick.bind(this);\n private readonly cancelEventCallback = this.cancelEvent.bind(this);\n private selectedComponent: ComponentInfo | undefined;\n private inspectorDiv: HTMLDivElement | null = null;\n private readonly otterLikeComponentInfoToBeSent = new BehaviorSubject<OtterLikeComponentInfo | undefined>(undefined);\n\n /**\n * Stream of component info to be sent to the extension app.\n */\n public otterLikeComponentInfoToBeSent$: Observable<OtterLikeComponentInfo | undefined> = this.otterLikeComponentInfoToBeSent.asObservable();\n\n constructor() {\n this.angularDevTools = (window as any).ng as Ng | undefined;\n }\n\n private startInspecting() {\n window.addEventListener('mouseover', this.elementMouseOverCallback, true);\n window.addEventListener('click', this.elementClickCallback, true);\n window.addEventListener('mouseout', this.cancelEventCallback, true);\n }\n\n private elementClick(e: MouseEvent) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n if (!this.selectedComponent || !this.angularDevTools) {\n return;\n }\n const parentElement = this.selectedComponent.host.parentElement;\n const parent = parentElement && (this.angularDevTools.getComponent(parentElement) || this.angularDevTools.getOwningComponent(parentElement));\n const parentHost = parent && this.angularDevTools.getHostElement(parent);\n const container = isContainer(parentHost)\n ? getOtterLikeComponentInfo(parent, parentHost)\n : undefined;\n\n const { component, host, ...infoToBeSent } = this.selectedComponent;\n\n this.otterLikeComponentInfoToBeSent.next({\n ...infoToBeSent,\n container\n });\n }\n\n private isOtterLikeComponent(info: OtterLikeComponentInfo) {\n const hasConfigId = !!info.configId;\n const hasTranslations = !!info.translations?.length;\n const hasAnalytics = Object.keys(info.analytics || {}).length > 0;\n return hasConfigId || hasTranslations || hasAnalytics;\n }\n\n private findComponentInfo(node: Element): ComponentInfo | undefined {\n if (!this.angularDevTools) {\n return;\n }\n let componentClassInstance = this.angularDevTools.getComponent(node) || this.angularDevTools.getOwningComponent(node);\n let o3rLikeComponentInfo: OtterLikeComponentInfo;\n let isO3rLike: boolean;\n if (!componentClassInstance) {\n return;\n }\n do {\n o3rLikeComponentInfo = getOtterLikeComponentInfo(componentClassInstance, this.angularDevTools.getHostElement(componentClassInstance));\n isO3rLike = this.isOtterLikeComponent(o3rLikeComponentInfo);\n if (!isO3rLike) {\n componentClassInstance = this.angularDevTools.getOwningComponent(componentClassInstance);\n }\n } while (!isO3rLike && componentClassInstance);\n if (isO3rLike) {\n return {\n component: componentClassInstance,\n host: this.angularDevTools.getHostElement(componentClassInstance),\n ...o3rLikeComponentInfo\n };\n }\n }\n\n private elementMouseOver(e: MouseEvent) {\n this.cancelEvent(e);\n\n const el = e.target as Element | undefined;\n\n if (el) {\n const selectedComponent = this.findComponentInfo(el);\n if (selectedComponent?.host !== this.selectedComponent?.host) {\n this.unHighlight();\n this.highlight(selectedComponent);\n }\n }\n }\n\n private highlight(selectedComponent: ComponentInfo | undefined) {\n this.selectedComponent = selectedComponent;\n if (this.selectedComponent?.host && this.inspectorDiv) {\n const rect = this.selectedComponent.host.getBoundingClientRect();\n this.inspectorDiv.style.width = `${rect.width}px`;\n this.inspectorDiv.style.height = `${rect.height}px`;\n this.inspectorDiv.style.top = `${rect.top}px`;\n this.inspectorDiv.style.left = `${rect.left}px`;\n this.inspectorDiv.firstChild!.textContent = `<${this.selectedComponent.componentName}>`;\n }\n }\n\n private unHighlight() {\n if (this.selectedComponent?.host && this.inspectorDiv) {\n this.inspectorDiv.style.width = '0';\n this.inspectorDiv.style.height = '0';\n this.inspectorDiv.style.top = '0';\n this.inspectorDiv.style.left = '0';\n }\n this.selectedComponent = undefined;\n }\n\n private cancelEvent(e: MouseEvent): void {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n\n /**\n * Prepare the inspector div and add it to the DOM.\n */\n public prepareInspector() {\n if (this.inspectorDiv) {\n return;\n }\n const inspectorCss = document.createElement('style');\n inspectorCss.textContent = `\n .${INSPECTOR_CLASS} {\n z-index: 9999999;\n width: 0;\n height: 0;\n background: rgba(104, 182, 255, 0.35);\n position: fixed;\n left: 0;\n top: 0;\n pointer-events: none;\n }\n\n .${INSPECTOR_CLASS} > span {\n bottom: -25px;\n position: absolute;\n right: 10px;\n background: rgba(104, 182, 255, 0.9);;\n padding: 5px;\n border-radius: 5px;\n color: white;\n }`;\n\n const inspectorDiv = document.createElement('div');\n const inspectorSpan = document.createElement('span');\n inspectorDiv.append(inspectorSpan);\n inspectorDiv.classList.add(INSPECTOR_CLASS);\n\n document.head.append(inspectorCss);\n document.body.append(inspectorDiv);\n this.inspectorDiv = inspectorDiv;\n }\n\n /**\n * Toggle the inspector.\n * @param isRunning true if the inspector is running\n */\n public toggleInspector(isRunning: boolean) {\n if (isRunning) {\n this.startInspecting();\n } else {\n this.stopInspecting();\n }\n }\n\n public stopInspecting() {\n this.unHighlight();\n window.removeEventListener('mouseover', this.elementMouseOverCallback, true);\n window.removeEventListener('click', this.elementClickCallback, true);\n window.removeEventListener('mouseout', this.cancelEventCallback, true);\n }\n}\n","import {\n DestroyRef,\n inject,\n Inject,\n Injectable,\n Optional,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n Store,\n} from '@ngrx/store';\nimport {\n DevtoolsServiceInterface,\n filterMessageContent,\n sendOtterMessage,\n} from '@o3r/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n firstValueFrom,\n fromEvent,\n} from 'rxjs';\nimport {\n filter,\n} from 'rxjs/operators';\nimport {\n type PlaceholderTemplateState,\n togglePlaceholderModeTemplate,\n} from '../stores';\nimport {\n AvailableComponentsMessageContents,\n ComponentsDevtoolsServiceOptions,\n ComponentsMessageDataTypes,\n isComponentsMessage,\n} from './components-devkit.interface';\nimport {\n OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS,\n OTTER_COMPONENTS_DEVTOOLS_OPTIONS,\n} from './components-devtools.token';\nimport {\n OtterInspectorService,\n OtterLikeComponentInfo,\n} from './inspector';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ComponentsDevtoolsMessageService implements DevtoolsServiceInterface {\n private readonly options: ComponentsDevtoolsServiceOptions;\n private readonly inspectorService: OtterInspectorService;\n private readonly sendMessage = sendOtterMessage<AvailableComponentsMessageContents>;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor(\n private readonly logger: LoggerService,\n private readonly store: Store<PlaceholderTemplateState>,\n @Optional() @Inject(OTTER_COMPONENTS_DEVTOOLS_OPTIONS) options?: ComponentsDevtoolsServiceOptions\n ) {\n this.options = {\n ...OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS,\n ...options\n };\n\n this.inspectorService = new OtterInspectorService();\n if (this.options.isActivatedOnBootstrap) {\n this.activate();\n }\n }\n\n /**\n * Function to connect the plugin to the Otter DevTools extension\n */\n private async connectPlugin() {\n this.logger.debug('Otter DevTools is plugged to components service of the application');\n const selectComponentInfo = await firstValueFrom(this.inspectorService.otterLikeComponentInfoToBeSent$);\n if (selectComponentInfo) {\n await this.sendCurrentSelectedComponent();\n }\n }\n\n private async sendCurrentSelectedComponent() {\n const selectComponentInfo = await firstValueFrom(this.inspectorService.otterLikeComponentInfoToBeSent$);\n if (selectComponentInfo) {\n this.sendMessage('selectedComponentInfo', selectComponentInfo);\n }\n }\n\n private sendIsComponentSelectionAvailable() {\n this.sendMessage('isComponentSelectionAvailable', { available: !!(window as any).ng });\n }\n\n /**\n * Function to trigger a re-send a requested messages to the Otter Chrome DevTools extension\n * @param only restricted list of messages to re-send\n */\n private handleReEmitRequest(only?: ComponentsMessageDataTypes[]) {\n if (!only) {\n void this.sendCurrentSelectedComponent();\n this.sendIsComponentSelectionAvailable();\n return;\n }\n if (only.includes('selectedComponentInfo')) {\n void this.sendCurrentSelectedComponent();\n }\n if (only.includes('isComponentSelectionAvailable')) {\n this.sendIsComponentSelectionAvailable();\n }\n }\n\n /**\n * Function to handle the incoming messages from Otter Chrome DevTools extension\n * @param message message coming from the Otter Chrome DevTools extension\n */\n private async handleEvents(message: AvailableComponentsMessageContents) {\n this.logger.debug('Message handling by the components service', message);\n\n switch (message.dataType) {\n case 'connect': {\n await this.connectPlugin();\n break;\n }\n case 'requestMessages': {\n this.handleReEmitRequest(message.only);\n break;\n }\n case 'toggleInspector': {\n this.inspectorService.toggleInspector(message.isRunning);\n break;\n }\n case 'placeholderMode': {\n this.store.dispatch(togglePlaceholderModeTemplate({ mode: message.mode }));\n break;\n }\n default: {\n this.logger.warn('Message ignored by the components service', message);\n }\n }\n }\n\n /** @inheritDoc */\n public activate() {\n fromEvent(window, 'message').pipe(takeUntilDestroyed(this.destroyRef), filterMessageContent(isComponentsMessage)).subscribe((e) => this.handleEvents(e));\n\n this.inspectorService.prepareInspector();\n this.inspectorService.otterLikeComponentInfoToBeSent$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((info): info is OtterLikeComponentInfo => !!info)\n ).subscribe(\n (info) => this.sendMessage('selectedComponentInfo', info)\n );\n }\n}\n","import {\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n StoreModule,\n} from '@ngrx/store';\nimport {\n PlaceholderTemplateStoreModule,\n} from '../stores/placeholder-template/placeholder-template.module';\nimport type {\n ComponentsDevtoolsServiceOptions,\n} from './components-devkit.interface';\nimport {\n ComponentsDevtoolsMessageService,\n} from './components-devtools.message.service';\nimport {\n OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS,\n OTTER_COMPONENTS_DEVTOOLS_OPTIONS,\n} from './components-devtools.token';\n\n@NgModule({\n imports: [\n StoreModule,\n PlaceholderTemplateStoreModule\n ],\n providers: [\n { provide: OTTER_COMPONENTS_DEVTOOLS_OPTIONS, useValue: OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS },\n ComponentsDevtoolsMessageService\n ]\n})\nexport class ComponentsDevtoolsModule {\n /**\n * Initialize Otter Devtools\n * @param options\n */\n public static instrument(options: Partial<ComponentsDevtoolsServiceOptions>): ModuleWithProviders<ComponentsDevtoolsModule> {\n return {\n ngModule: ComponentsDevtoolsModule,\n providers: [\n { provide: OTTER_COMPONENTS_DEVTOOLS_OPTIONS, useValue: { ...OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS, ...options }, multi: false },\n ComponentsDevtoolsMessageService\n ]\n };\n }\n}\n","import {\n ComponentRef,\n Directive,\n forwardRef,\n Injector,\n Input,\n KeyValueChangeRecord,\n KeyValueDiffer,\n KeyValueDiffers,\n OnChanges,\n OnDestroy,\n SimpleChange,\n SimpleChanges,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n} from '@angular/forms';\nimport type {\n BaseContextOutput,\n Configuration,\n Context,\n ContextInput,\n Functionify,\n} from '@o3r/core';\nimport {\n Subscription,\n} from 'rxjs';\n\n@Directive({\n selector: '[c11n]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => C11nDirective),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => C11nDirective),\n multi: true\n }\n ],\n standalone: false\n})\nexport class C11nDirective<\n D extends Configuration = Configuration,\n I extends ContextInput = ContextInput,\n O extends BaseContextOutput = BaseContextOutput,\n T extends Context<I, O> = Context<I, O>> implements OnChanges, OnDestroy {\n /** The component information passed to the directive */\n @Input() public component!: Type<T>;\n\n /** The information related to configuration */\n @Input() public config?: D;\n\n /** Formcontrol */\n @Input() public formControl?: FormControl;\n\n /** The input setter */\n @Input() public set inputs(value: { [K in keyof I]: I[K] }) {\n this._inputs = value;\n if (!this.differInputs && value) {\n // eslint-disable-next-line unicorn/no-array-callback-reference -- KeyValueDiffers.find is not an array function\n this.differInputs = this.differsService.find(value).create();\n }\n }\n\n /** The input getter */\n public get inputs(): { [K in keyof I]: I[K] } {\n return this._inputs;\n }\n\n /** The information related to output */\n @Input() public outputs?: Functionify<O>;\n\n /** The component reference */\n public componentRef!: ComponentRef<T>;\n\n private componentSubscriptions: Subscription[] = [];\n\n private _inputs!: { [K in keyof I]: I[K] };\n\n private differInputs!: KeyValueDiffer<string, any>;\n\n /** Set of inputs when the component was created. */\n private readonly uninitializedInputs = new Set<string>();\n\n constructor(public viewContainerRef: ViewContainerRef,\n private readonly differsService: KeyValueDiffers,\n private readonly injector: Injector) {}\n\n /**\n * Type guard for component implementing CVA\n * @param _cmp Component instance\n */\n private componentImplementsCva(_cmp: T): _cmp is T & ControlValueAccessor {\n return !!this.formControl;\n }\n\n private updateInputs(record: KeyValueChangeRecord<string, any>, inputChanges: SimpleChanges) {\n const recordKey = record.key;\n const isFirstChange = this.uninitializedInputs.has(recordKey);\n this.uninitializedInputs.delete(recordKey);\n inputChanges[recordKey] = new SimpleChange(record.previousValue, record.currentValue, isFirstChange);\n }\n\n /**\n * called when data-bound property change\n * @param changes The changes that occur\n */\n public ngOnChanges(changes: SimpleChanges) {\n const inputChanges: SimpleChanges = {};\n\n if (changes.component && changes.component.currentValue) {\n if (this.componentRef) {\n this.componentSubscriptions.forEach((s) => s.unsubscribe());\n this.componentSubscriptions = [];\n this.componentRef.destroy();\n }\n\n const ngControl = !!this.formControl && this.injector.get(NgControl);\n\n this.viewContainerRef.clear();\n this.componentRef = this.viewContainerRef.createComponent<T>(changes.component.currentValue);\n Object.keys(this.componentRef.instance)\n .filter((prop) => !(this.outputs && Object.keys(this.outputs).includes(prop)))\n .forEach((prop) => {\n this.uninitializedInputs.add(prop);\n });\n\n if (ngControl && this.componentImplementsCva(this.componentRef.instance)) {\n ngControl.valueAccessor = this.componentRef.instance;\n }\n\n // Initialize outputs\n if (this.outputs) {\n const subscriptions = Object.keys(this.outputs).map((outputName) => this.componentRef.instance[outputName].subscribe((val: any) => this.outputs![outputName](val)));\n this.componentSubscriptions.push(...subscriptions);\n }\n\n // In case of async component change keep the inputs\n if (!changes.inputs && this.inputs) {\n Object.keys(this.inputs).forEach((inputName) => {\n const currentInputValue = this.inputs[inputName];\n inputChanges[inputName] = new SimpleChange(undefined, currentInputValue, true);\n this.uninitializedInputs.delete(inputName);\n });\n }\n // In case of lazy loaded component keep the config\n if (!changes.config && this.config) {\n inputChanges.config = new SimpleChange(this.componentRef.instance.config, this.config, true);\n this.uninitializedInputs.delete('config');\n }\n }\n\n if (this.componentRef && this.differInputs) {\n const changesInInputs = this.differInputs.diff(this.inputs);\n if (changesInInputs) {\n changesInInputs.forEachAddedItem((record) => this.updateInputs(record, inputChanges));\n changesInInputs.forEachChangedItem((record) => this.updateInputs(record, inputChanges));\n changesInInputs.forEachRemovedItem((record) => this.updateInputs(record, inputChanges));\n }\n }\n\n if (this.componentRef && changes.config) {\n inputChanges.config = new SimpleChange(this.componentRef.instance.config, changes.config.currentValue, this.uninitializedInputs.has('config'));\n this.uninitializedInputs.delete('config');\n }\n\n if (this.componentRef && Object.keys(inputChanges).length > 0) {\n Object.entries(inputChanges).forEach(([inputName, value]) => {\n this.componentRef.setInput(inputName, value.currentValue);\n });\n }\n }\n\n /**\n * returns validation errors from component instance if validate method exists else returns null\n * @param control Form control\n */\n public validate(control: AbstractControl) {\n if (!this.componentRef?.instance.validate) {\n return null;\n }\n return this.componentRef.instance.validate(control);\n }\n\n /**\n * ngOnDestroy\n */\n public ngOnDestroy() {\n this.componentSubscriptions.forEach((s) => s.unsubscribe());\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n }\n}\n","import type {\n Type,\n} from '@angular/core';\nimport type {\n Context,\n} from '@o3r/core';\n\n/** Interface for grouping the arrays needed for custom component registration */\nexport interface EntryCustomComponents {\n\n /** Array of custom presenters */\n customComponents: Type<any>[];\n\n /** Array of custom presenter modules */\n customComponentsModules: Type<any>[];\n}\n\n/**\n * Register a custom component\n * @param customComponentsMap an object containing the already registered custom component\n * @param customComponentKey\n * @param customComponent\n */\nexport function registerCustomComponent<T extends Context>(\n customComponentsMap: Map<string, Type<T>>, customComponentKey: string, customComponent: Type<T>) {\n customComponentsMap.set(customComponentKey, customComponent);\n return customComponentsMap;\n}\n","import {\n InjectionToken,\n} from '@angular/core';\n\n/** The C11n injection token */\nexport const C11N_PRESENTERS_MAP_TOKEN: InjectionToken<string> = new InjectionToken('C11n injection token');\n\n/** Function used to register custom components */\nexport const C11N_REGISTER_FUNC_TOKEN: InjectionToken<string> = new InjectionToken('C11n register presenters token');\n","import {\n Inject,\n Injectable,\n Type,\n} from '@angular/core';\nimport type {\n Configuration,\n Context,\n} from '@o3r/core';\nimport {\n Observable,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n map,\n} from 'rxjs/operators';\nimport {\n C11N_PRESENTERS_MAP_TOKEN,\n} from './c11n.token';\n\n@Injectable()\nexport class C11nService {\n private readonly presentersMap: Map<string, any>;\n\n constructor(@Inject(C11N_PRESENTERS_MAP_TOKEN) presentersMap: Map<string, any>) {\n this.presentersMap = presentersMap;\n }\n\n /**\n * Add a presenter\n * @param presKey The presenter key to set\n * @param presenter The new presenter\n */\n public addPresenter<T extends Context>(presKey: string, presenter: Type<T>) {\n this.presentersMap.set(presKey, presenter);\n }\n\n /**\n * Operator to retrieve the presenter based on a given presKey\n * @param defaultPres The default presenter\n * @param presKey The presenter key to retrieve\n */\n public getPresenter<T extends Context>(defaultPres: Type<T>, presKey = 'customPresKey') {\n return (source: Observable<Configuration>): Observable<Type<T>> =>\n source.pipe(\n distinctUntilChanged((p, q) => p[presKey] === q[presKey]),\n map((config) => {\n const presenterConfig = config[presKey];\n return typeof presenterConfig === 'string' && presenterConfig !== '' ? (this.presentersMap.get(presenterConfig) || defaultPres) : defaultPres;\n })\n );\n }\n}\n","import {\n Directive,\n Injectable,\n NgModule,\n} from '@angular/core';\nimport {\n Observable,\n} from 'rxjs';\nimport {\n mapTo,\n} from 'rxjs/operators';\nimport {\n C11nService,\n} from './c11n.service';\n\n/** C11n directive mock */\n@Directive({\n selector: '[c11n]',\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property -- mocked directive\n inputs: ['config', 'component', 'inputs', 'outputs'],\n standalone: false\n})\nexport class MockC11nDirective {}\n\n/** C11n service mock */\n@Injectable()\nexport class C11nMockService {\n public addPresenter(_presKey: string, _presType: any) {}\n public getPresenter(_defaultPres: any, _presKey: string) {\n return (source: Observable<any>) => source.pipe(mapTo(null));\n }\n}\n\n/**\n * The purpose of this module is to be imported in the unit tests of the components which are using c11n directive\n */\n@NgModule({\n declarations: [MockC11nDirective],\n exports: [MockC11nDirective],\n providers: [{ provide: C11nService, useClass: C11nMockService }]\n})\nexport class C11nMockModule {}\n","import {\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n C11nDirective,\n} from './c11n.directive';\nimport {\n C11nService,\n} from './c11n.service';\nimport {\n C11N_REGISTER_FUNC_TOKEN,\n} from './c11n.token';\n\n/**\n * Customization service factory\n * @param config -> registerCompFunc - a function which returns the map of custom components which will be injected in c11n service\n * @param config.registerCompFunc\n */\nexport function createC11nService(config: { registerCompFunc: () => Map<string, any> }) {\n if (!config) {\n return new C11nService(new Map());\n }\n const custoComp = config.registerCompFunc();\n return new C11nService(custoComp);\n}\n\n@NgModule({\n declarations: [C11nDirective],\n exports: [C11nDirective]\n})\nexport class C11nModule {\n /**\n * Get the module with providers for the root component\n * @param config -> registerCompFunc - a function which returns the map of custom components which will be injected in c11n service\n * @param config.registerCompFunc\n */\n public static forRoot(config: { registerCompFunc: () => Map<string, any> }): ModuleWithProviders<C11nModule> {\n return {\n ngModule: C11nModule,\n providers: [{\n provide: C11N_REGISTER_FUNC_TOKEN,\n useValue: config\n },\n {\n provide: C11nService, useFactory: createC11nService, deps: [C11N_REGISTER_FUNC_TOKEN]\n }]\n };\n }\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\n@Pipe({ name: 'o3rCapitalize' })\nexport class O3rCapitalizePipe implements PipeTransform {\n public transform(value?: any) {\n const val: string | undefined = value && value.toString && value.toString();\n const firstLetter: string | undefined = val && val.charAt(0);\n return firstLetter ? firstLetter.toUpperCase() + val!.slice(1) : value;\n }\n}\n","/** Time object to format duration */\nexport interface TimeUnit {\n /** character defining the time unit */\n formatCharacter: string;\n /** divider to get the time unit value */\n divider: number;\n /**\n * modulo for the time unit\n * If not provided, it will either use the immediately higher unit time divider\n * or Number.MAX_SAFE_INTEGER for the highest one\n */\n modulo?: number;\n}\n\n/** const array of ordered measurement unit time from the highest unit to the lowest (days to seconds) */\nexport const defaultTimeUnits: TimeUnit[] = [\n {\n formatCharacter: 'd',\n divider: 3600 * 24\n },\n {\n formatCharacter: 'h',\n divider: 3600\n },\n {\n formatCharacter: 'm',\n divider: 60\n },\n {\n formatCharacter: 's',\n divider: 1\n }\n];\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport {\n defaultTimeUnits,\n TimeUnit,\n} from './duration.model';\n\n/**\n * Pad a number with zeroes\n * @param num\n * @param digits\n */\nfunction padNum(num: number, digits: number) {\n let strNum = String(num);\n while (strNum.length < digits) {\n strNum = '0' + strNum;\n }\n return strNum;\n}\n\n/**\n * Converts a duration in seconds into the HH:mm format\n */\n@Pipe({ name: 'o3rDuration' })\nexport class O3rDurationPipe implements PipeTransform {\n /**\n * Converts a duration in seconds into the HH:mm format\n * @param value the value in seconds\n * @param pattern the desired output format.\n * The pattern takes into account static format characters surrounded by braces\n * {d} for days, {h} for hours, {m} for minutes and {s} for seconds.\n * It accepts a double unit time in case a padding is wanted {dd} outputs 05 for instance\n * Should respect the following pattern `/(\\{h+\\})|(\\{m+\\})/` (ex: `'{h}h{m}m'` outputs `0h2m`, `'{h}H{mm}'` `0H02` etc.)\n * @param timeUnits the units time to be used in this transformation. This can be used for custom units in the pattern like\n * {\n * formatCharacter: 'w',\n * divider: 3600 * 24 * 7\n * }\n * The above defines a week for {w}\n */\n public transform(value?: number, pattern = '{h}:{mm}', timeUnits: TimeUnit[] = defaultTimeUnits) {\n const val = value || 0;\n let modulo = Number.MAX_SAFE_INTEGER;\n\n const matches = timeUnits.reduce<{\n textMatch: string;\n timeUnit: TimeUnit;\n }[]>((result, unit) => {\n const regexp = new RegExp('({' + unit.formatCharacter + '+})', 'g');\n const match = regexp.exec(pattern);\n if (!match) {\n return result;\n }\n return result.concat({\n textMatch: match[0],\n timeUnit: unit\n });\n }, []);\n\n return matches.reduce((result, match) => {\n const matchedPatternToReplace = match.textMatch;\n const unit = match.timeUnit;\n const unitTimeValue = Math.floor(val % (unit.modulo || modulo) / unit.divider);\n const unitMatchLength = (matchedPatternToReplace.match(new RegExp(unit.formatCharacter, 'g')) || []).length;\n const padded = padNum(unitTimeValue, unitMatchLength);\n modulo = unitTimeValue > 0 ? unit.divider : modulo;\n return result.replace(matchedPatternToReplace, padded);\n }, pattern);\n }\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\n@Pipe({ name: 'o3rKeepWhiteSpace' })\nexport class O3rKeepWhiteSpacePipe implements PipeTransform {\n public transform(value: string): string {\n return value.replace(/\\s/g, '&nbsp;');\n }\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\nconst escapeRegExp = (str: string) => str.replace(/[$()*+./?[\\\\\\]^{|}-]/g, '\\\\$&');\n\n@Pipe({ name: 'o3rReplaceWithBold' })\nexport class O3rReplaceWithBoldPipe implements PipeTransform {\n public transform(value: string, inputText: string): string {\n if (inputText) {\n const regexp = new RegExp(escapeRegExp(inputText.trim()), 'gi');\n return value.replace(regexp, (match) => `<strong>${match}</strong>`);\n } else {\n return value;\n }\n }\n}\n","import {\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n Input,\n OnDestroy,\n OnInit,\n type Signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n Store,\n} from '@ngrx/store';\nimport {\n sendOtterMessage,\n} from '@o3r/core';\nimport {\n BehaviorSubject,\n ReplaySubject,\n sample,\n Subject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n switchMap,\n} from 'rxjs/operators';\nimport {\n type PlaceholderMode,\n PlaceholderTemplateStore,\n selectPlaceholderTemplateMode,\n selectSortedTemplates,\n} from '../../stores/placeholder-template';\nimport {\n PlaceholderLoadingStatus,\n PlaceholderLoadingStatusMessage,\n} from './placeholder.interface';\n\n/**\n * Placeholder component that is bind to the PlaceholderTemplateStore to display a template based on its ID\n * A loading indication can be provided via projection\n * @example\n * <o3r-placeholder id=\"my-template-id\">Is loading ...</o3r-placeholder>\n */\n@Component({\n selector: 'o3r-placeholder',\n templateUrl: './placeholder.template.html',\n styleUrl: './placeholder.style.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.debug]': `mode() === 'debug'`\n },\n standalone: false\n})\nexport class PlaceholderComponent implements OnInit, OnDestroy, AfterViewChecked {\n public readonly id$ = new BehaviorSubject<string | undefined>(undefined);\n\n private readonly afterViewInit$ = new Subject<void>();\n\n private readonly messages$ = new ReplaySubject<PlaceholderLoadingStatus>(1);\n\n /** Determine if the placeholder content is pending */\n public isPending?: boolean;\n\n /** Generated HTML template */\n public template?: string;\n\n public mode: Signal<PlaceholderMode>;\n\n private readonly destroyRef = inject(DestroyRef);\n\n /** template identify */\n @Input()\n public set id(value: string) {\n this.id$.next(value);\n }\n\n constructor(private readonly store: Store<PlaceholderTemplateStore>, private readonly cd: ChangeDetectorRef) {\n this.mode = this.store.selectSignal(selectPlaceholderTemplateMode);\n }\n\n /** @inheritdoc */\n public ngOnInit() {\n this.id$.pipe(\n filter((id): id is string => !!id),\n distinctUntilChanged(),\n switchMap((id: string) =>\n this.store.select(selectSortedTemplates(id)).pipe(\n map((placeholders) => ({\n id,\n orderedTemplates: placeholders?.orderedTemplates,\n isPending: placeholders?.isPending\n })),\n distinctUntilChanged((previous, current) =>\n previous.id === current.id\n && previous.isPending === current.isPending\n && previous.orderedTemplates?.map((placeholder) => placeholder.renderedTemplate).join('')\n === current.orderedTemplates?.map((placeholder) => placeholder.renderedTemplate).join('')\n )\n )\n )\n ).subscribe(({ id, orderedTemplates, isPending }) => {\n this.isPending = isPending;\n this.template = orderedTemplates?.length\n // Concatenates the list of templates\n ? orderedTemplates.map((placeholder) => placeholder.renderedTemplate).join('')\n : undefined;\n if (this.isPending === false) {\n this.messages$.next({\n templateIds: this.isPending ? [] : (orderedTemplates || []).map((placeholder) => placeholder.resolvedUrl),\n placeholderId: id\n });\n }\n this.cd.markForCheck();\n });\n this.messages$.pipe(\n takeUntilDestroyed(this.destroyRef),\n sample(this.afterViewInit$),\n distinctUntilChanged((previous, current) => JSON.stringify(current) === JSON.stringify(previous))\n ).subscribe({\n next: (data) =>\n sendOtterMessage<PlaceholderLoadingStatusMessage>('placeholder-loading-status', data, false),\n complete: () =>\n sendOtterMessage<PlaceholderLoadingStatusMessage>('placeholder-loading-status', {\n placeholderId: this.id$.value,\n templateIds: []\n }, false)\n });\n }\n\n public ngAfterViewChecked() {\n // Make sure the view is rendered before posting the status\n this.afterViewInit$.next();\n }\n\n /** @inheritdoc */\n public ngOnDestroy() {\n this.id$.complete();\n this.messages$.complete();\n this.afterViewInit$.complete();\n }\n}\n","<ng-template #projection>\n <ng-content></ng-content>\n</ng-template>\n@switch (mode()) {\n @case ('debug') {\n <span class=\"placehoder-id\">{{ id$ | async }}</span>\n }\n @case ('pending') {\n <ng-container *ngTemplateOutlet=\"projection\" />\n }\n @case ('normal') {\n @if (isPending) {\n <ng-container *ngTemplateOutlet=\"projection\" />\n } @else {\n <div [innerHTML]=\"template\"></div>\n }\n }\n}\n","import {\n CommonModule,\n} from '@angular/common';\nimport {\n NgModule,\n} from '@angular/core';\nimport {\n StoreModule,\n} from '@ngrx/store';\nimport {\n PlaceholderRequestStoreModule,\n} from '../../stores/placeholder-request/index';\nimport {\n PlaceholderTemplateStoreModule,\n} from '../../stores/placeholder-template/index';\nimport {\n PlaceholderComponent,\n} from './placeholder.component';\n\n@NgModule({\n imports: [\n CommonModule,\n StoreModule,\n PlaceholderTemplateStoreModule,\n PlaceholderRequestStoreModule\n ],\n declarations: [PlaceholderComponent],\n exports: [PlaceholderComponent]\n})\nexport class PlaceholderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["actions.cancelPlaceholderRequest","actions.updatePlaceholderRequestEntity","actions.updatePlaceholderRequestEntitySync","actions.setPlaceholderRequestEntityFromUrl","actions.failPlaceholderRequestEntity","selectEntities","actions.setPlaceholderTemplateEntity","actions.deletePlaceholderTemplateEntity","actions.togglePlaceholderModeTemplate"],"mappings":"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"}
1
+ {"version":3,"file":"o3r-components.mjs","sources":["../../src/core/rendering/helpers.ts","../../src/devkit/components-devkit.interface.ts","../../src/stores/placeholder-request/placeholder-request.actions.ts","../../src/stores/placeholder-request/placeholder-request.reducer.ts","../../src/stores/placeholder-request/placeholder-request.state.ts","../../src/stores/placeholder-request/placeholder-request.module.ts","../../src/stores/placeholder-request/placeholder-request.selectors.ts","../../src/stores/placeholder-request/placeholder-request.sync.ts","../../src/stores/placeholder-template/placeholder-template.actions.ts","../../src/stores/placeholder-template/placeholder-template.reducer.ts","../../src/stores/placeholder-template/placeholder-template.state.ts","../../src/stores/placeholder-template/placeholder-template.module.ts","../../src/stores/placeholder-template/placeholder-template.selectors.ts","../../src/stores/placeholder-template/placeholder-template.sync.ts","../../src/devkit/components-devtools.token.ts","../../src/devkit/inspector/otter-inspector.helpers.ts","../../src/devkit/inspector/otter-inspector.service.ts","../../src/devkit/components-devtools.message.service.ts","../../src/devkit/components-devtools.module.ts","../../src/tools/component-replacement/c11n.directive.ts","../../src/tools/component-replacement/c11n.helpers.ts","../../src/tools/component-replacement/c11n.token.ts","../../src/tools/component-replacement/c11n.service.ts","../../src/tools/component-replacement/c11n.mock.module.ts","../../src/tools/component-replacement/c11n.module.ts","../../src/tools/pipes/capitalize/capitalize.pipe.ts","../../src/tools/pipes/duration/duration.model.ts","../../src/tools/pipes/duration/duration.pipe.ts","../../src/tools/pipes/keep-white-space/keep-white-space.pipe.ts","../../src/tools/pipes/replace-with-bold/replace-with-bold.pipe.ts","../../src/tools/placeholder/placeholder.component.ts","../../src/tools/placeholder/placeholder.template.html","../../src/tools/placeholder/placeholder.module.ts","../../src/o3r-components.ts"],"sourcesContent":["import {\n animationFrameScheduler,\n from,\n Observable,\n observeOn,\n of,\n} from 'rxjs';\nimport {\n bufferCount,\n concatMap,\n delay,\n mergeMap,\n scan,\n tap,\n} from 'rxjs/operators';\n\n/**\n * Buffers and emits data for lazy/progressive rendering of big lists\n * That could solve issues with long-running tasks when trying to render an array\n * of similar components.\n * @param delayMs Delay between data emits\n * @param concurrency Amount of elements that should be emitted at once\n */\nexport function lazyArray<T>(delayMs = 0, concurrency = 2) {\n let isFirstEmission = true;\n return (source$: Observable<T[]>) => {\n return source$.pipe(\n mergeMap((items) => {\n if (!isFirstEmission) {\n return of(items);\n }\n\n const items$ = from(items);\n\n return items$.pipe(\n bufferCount(concurrency),\n concatMap((value, index) => {\n return of(value).pipe(\n observeOn(animationFrameScheduler),\n delay(index * delayMs)\n );\n }),\n scan((acc: T[], steps: T[]) => {\n return [...acc, ...steps];\n }, []),\n tap((scannedItems: T[]) => {\n const scanDidComplete = scannedItems.length === items.length;\n\n if (scanDidComplete) {\n isFirstEmission = false;\n }\n })\n );\n })\n );\n };\n}\n","import type {\n ConnectContentMessage,\n DevtoolsCommonOptions,\n MessageDataTypes,\n OtterMessageContent,\n RequestMessagesContentMessage,\n} from '@o3r/core';\nimport type {\n PlaceholderMode,\n} from '../stores';\nimport {\n OtterLikeComponentInfo,\n} from './inspector';\n\n/**\n * Component Devtools options\n */\nexport interface ComponentsDevtoolsServiceOptions extends DevtoolsCommonOptions {\n}\n\n/**\n * Message to give the selected component information\n */\nexport interface SelectedComponentInfoMessage extends OtterLikeComponentInfo, OtterMessageContent<'selectedComponentInfo'> {\n}\n\n/**\n * Message to toggle the inspector\n */\nexport interface ToggleInspectorMessage extends OtterMessageContent<'toggleInspector'> {\n /** Is the inspector running */\n isRunning: boolean;\n}\n\n/**\n * Message to toggle the placeholder mode\n */\nexport interface PlaceholderModeMessage extends OtterMessageContent<'placeholderMode'> {\n /** Placeholder mode */\n mode: PlaceholderMode;\n}\n\n/**\n * Message to know the component selection availability\n */\nexport interface IsComponentSelectionAvailableMessage extends OtterMessageContent<'isComponentSelectionAvailable'> {\n available: boolean;\n}\n\ntype ComponentsMessageContents =\n | IsComponentSelectionAvailableMessage\n | SelectedComponentInfoMessage\n | ToggleInspectorMessage\n | PlaceholderModeMessage;\n\n/** List of possible DataTypes for Components messages */\nexport type ComponentsMessageDataTypes = MessageDataTypes<ComponentsMessageContents>;\n\n/** List of all messages for Components purpose */\nexport type AvailableComponentsMessageContents =\n | ComponentsMessageContents\n | ConnectContentMessage\n | RequestMessagesContentMessage<ComponentsMessageDataTypes>;\n\n/**\n * Determine if the given message is a Components message\n * @param message message to check\n */\nexport const isComponentsMessage = (message: any): message is AvailableComponentsMessageContents => {\n return message && (\n message.dataType === 'requestMessages'\n || message.dataType === 'connect'\n || message.dataType === 'selectedComponentInfo'\n || message.dataType === 'isComponentSelectionAvailable'\n || message.dataType === 'placeholderMode'\n || message.dataType === 'toggleInspector'\n );\n};\n","import {\n createAction,\n props,\n} from '@ngrx/store';\nimport {\n asyncProps,\n AsyncRequest,\n FailAsyncStoreItemEntitiesActionPayload,\n FromApiActionPayload,\n UpdateAsyncStoreItemEntityActionPayloadWithId,\n UpdateEntityActionPayloadWithId,\n} from '@o3r/core';\nimport {\n PlaceholderRequestModel,\n PlaceholderRequestReply,\n} from './placeholder-request.state';\n\nconst ACTION_FAIL_ENTITIES = '[PlaceholderRequest] fail entities';\nconst ACTION_SET_ENTITY_FROM_URL = '[PlaceholderRequest] set entity from url';\nconst ACTION_CANCEL_REQUEST = '[PlaceholderRequest] cancel request';\nconst ACTION_UPDATE_ENTITY = '[PlaceholderRequest] update entity';\nconst ACTION_UPDATE_ENTITY_SYNC = '[PlaceholderRequest] update entity sync';\n\n/** Action to cancel a Request ID registered in the store. Can happen from effect based on a switchMap for instance */\nexport const cancelPlaceholderRequest = createAction(ACTION_CANCEL_REQUEST, props<AsyncRequest & { id: string }>());\n\n/** Action to update failureStatus for PlaceholderRequestModels */\nexport const failPlaceholderRequestEntity = createAction(ACTION_FAIL_ENTITIES, props<FailAsyncStoreItemEntitiesActionPayload<any>>());\n\n/** Action to update an entity */\nexport const updatePlaceholderRequestEntity = createAction(ACTION_UPDATE_ENTITY, props<UpdateAsyncStoreItemEntityActionPayloadWithId<PlaceholderRequestModel>>());\n\n/** Action to update an entity without impact on request id */\nexport const updatePlaceholderRequestEntitySync = createAction(ACTION_UPDATE_ENTITY_SYNC, props<UpdateEntityActionPayloadWithId<PlaceholderRequestModel>>());\n\n/** Action to update PlaceholderRequest with known IDs, will create the entity with only the url, the call will be created in the effect */\nexport const setPlaceholderRequestEntityFromUrl = createAction(ACTION_SET_ENTITY_FROM_URL, asyncProps<FromApiActionPayload<PlaceholderRequestReply> & { resolvedUrl: string; id: string }>());\n","import {\n createEntityAdapter,\n} from '@ngrx/entity';\nimport {\n ActionCreator,\n createReducer,\n on,\n ReducerTypes,\n} from '@ngrx/store';\nimport {\n asyncStoreItemAdapter,\n createEntityAsyncRequestAdapter,\n} from '@o3r/core';\nimport * as actions from './placeholder-request.actions';\nimport {\n PlaceholderRequestModel,\n PlaceholderRequestState,\n PlaceholderRequestStateDetails,\n} from './placeholder-request.state';\n\n/**\n * PlaceholderRequest Store adapter\n */\nexport const placeholderRequestAdapter = createEntityAsyncRequestAdapter(createEntityAdapter<PlaceholderRequestModel>({\n selectId: (model) => model.id\n}));\n\n/**\n * PlaceholderRequest Store initial value\n */\nexport const placeholderRequestInitialState: PlaceholderRequestState = placeholderRequestAdapter.getInitialState<PlaceholderRequestStateDetails>({\n requestIds: []\n});\n\n/**\n * Reducers of Placeholder request store that handles the call to the placeholder template URL\n */\nexport const placeholderRequestReducerFeatures: ReducerTypes<PlaceholderRequestState, ActionCreator[]>[] = [\n on(actions.cancelPlaceholderRequest, (state, action) => {\n const id = action.id;\n if (!id || !state.entities[id]) {\n return state;\n }\n return placeholderRequestAdapter.updateOne({\n id: action.id,\n changes: asyncStoreItemAdapter.resolveRequest(state.entities[id], action.requestId)\n }, asyncStoreItemAdapter.resolveRequest(state, action.requestId));\n }),\n on(actions.updatePlaceholderRequestEntity, (state, action) => {\n const currentEntity = state.entities[action.entity.id]!;\n const newEntity = asyncStoreItemAdapter.resolveRequest({ ...action.entity, ...asyncStoreItemAdapter.extractAsyncStoreItem(currentEntity) }, action.requestId);\n return placeholderRequestAdapter.updateOne({\n id: newEntity.id,\n changes: newEntity\n }, asyncStoreItemAdapter.resolveRequest(state, action.requestId));\n }),\n on(actions.updatePlaceholderRequestEntitySync, (state, action) => {\n return placeholderRequestAdapter.updateOne({\n id: action.entity.id,\n changes: {\n ...action.entity\n }\n }, state);\n }),\n on(actions.setPlaceholderRequestEntityFromUrl, (state, payload) => {\n const currentEntity = state.entities[payload.id];\n // Nothing to update if resolved URLs already match\n if (currentEntity && currentEntity.resolvedUrl === payload.resolvedUrl) {\n return state;\n }\n let newEntity = {\n id: payload.id,\n resolvedUrl: payload.resolvedUrl,\n used: true\n };\n if (currentEntity) {\n newEntity = { ...asyncStoreItemAdapter.extractAsyncStoreItem(currentEntity), ...newEntity };\n }\n return placeholderRequestAdapter.addOne(\n asyncStoreItemAdapter.addRequest(\n asyncStoreItemAdapter.initialize(newEntity),\n payload.requestId),\n asyncStoreItemAdapter.addRequest(state, payload.requestId)\n );\n }),\n on(actions.failPlaceholderRequestEntity, (state, payload) => {\n return placeholderRequestAdapter.failRequestMany(asyncStoreItemAdapter.resolveRequest(state, payload.requestId), payload && payload.ids, payload.requestId);\n })\n];\n\n/**\n * PlaceholderRequest Store reducer\n */\nexport const placeholderRequestReducer = createReducer(\n placeholderRequestInitialState,\n ...placeholderRequestReducerFeatures\n);\n","import {\n EntityState,\n} from '@ngrx/entity';\nimport {\n AsyncStoreItem,\n} from '@o3r/core';\n\n/**\n * Variable model from the placeholder reply\n */\nexport interface PlaceholderVariable {\n type: 'fact' | 'fullUrl' | 'relativeUrl' | 'localisation';\n value: string;\n parameters?: Record<string, string>;\n path?: string;\n}\n\n/**\n * Raw JSON template coming back from the CMS or any other source\n */\nexport interface PlaceholderRequestReply {\n template?: string;\n vars?: Record<string, PlaceholderVariable>;\n}\n\n/**\n * PlaceholderRequest model\n */\nexport interface PlaceholderRequestModel extends AsyncStoreItem, PlaceholderRequestReply {\n /** Raw URL that is not localized, ex: my_url/[LANGUAGE]/my_placeholder.json */\n id: string;\n /** Resolved URL that is localized, ex: my_url/en-GB/my_placeholder.json */\n resolvedUrl: string;\n /** Rendered template associated to the resolved URL, can be dynamic */\n renderedTemplate?: string;\n /** Unknown type found in the reply */\n unknownTypeFound?: boolean;\n\n /** A mechanism to cache previous request results for a given language. This boolean disables the dynamic rendering when it is set to false */\n used?: boolean;\n}\n\n/**\n * PlaceholderRequest state details\n */\nexport interface PlaceholderRequestStateDetails extends AsyncStoreItem {}\n\n/**\n * PlaceholderRequest store state\n */\nexport interface PlaceholderRequestState extends EntityState<PlaceholderRequestModel>, PlaceholderRequestStateDetails {\n}\n\n/**\n * Name of the PlaceholderRequest Store\n */\nexport const PLACEHOLDER_REQUEST_STORE_NAME = 'placeholderRequest';\n\n/**\n * PlaceholderRequest Store Interface\n */\nexport interface PlaceholderRequestStore {\n /** PlaceholderRequest state */\n [PLACEHOLDER_REQUEST_STORE_NAME]: PlaceholderRequestState;\n}\n","import {\n InjectionToken,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n Action,\n ActionReducer,\n StoreModule,\n} from '@ngrx/store';\nimport {\n placeholderRequestReducer,\n} from './placeholder-request.reducer';\nimport {\n PLACEHOLDER_REQUEST_STORE_NAME,\n PlaceholderRequestState,\n} from './placeholder-request.state';\n\n/** Token of the PlaceholderRequest reducer */\nexport const PLACEHOLDER_REQUEST_REDUCER_TOKEN = new InjectionToken<ActionReducer<PlaceholderRequestState, Action>>('Feature PlaceholderRequest Reducer');\n\n/** Provide default reducer for PlaceholderRequest store */\nexport function getDefaultplaceholderRequestReducer() {\n return placeholderRequestReducer;\n}\n\n@NgModule({\n imports: [\n StoreModule.forFeature(PLACEHOLDER_REQUEST_STORE_NAME, PLACEHOLDER_REQUEST_REDUCER_TOKEN)\n ],\n providers: [\n { provide: PLACEHOLDER_REQUEST_REDUCER_TOKEN, useFactory: getDefaultplaceholderRequestReducer }\n ]\n})\nexport class PlaceholderRequestStoreModule {\n public static forRoot<T extends PlaceholderRequestState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<PlaceholderRequestStoreModule> {\n return {\n ngModule: PlaceholderRequestStoreModule,\n providers: [\n { provide: PLACEHOLDER_REQUEST_REDUCER_TOKEN, useFactory: reducerFactory }\n ]\n };\n }\n}\n","import {\n createFeatureSelector,\n createSelector,\n} from '@ngrx/store';\nimport {\n placeholderRequestAdapter,\n} from './placeholder-request.reducer';\nimport {\n PLACEHOLDER_REQUEST_STORE_NAME,\n PlaceholderRequestState,\n} from './placeholder-request.state';\n\nexport const selectPlaceholderRequestState = createFeatureSelector<PlaceholderRequestState>(PLACEHOLDER_REQUEST_STORE_NAME);\n\nconst { selectEntities } = placeholderRequestAdapter.getSelectors();\n\n/** Select the dictionary of PlaceholderRequest entities */\nexport const selectPlaceholderRequestEntities = createSelector(selectPlaceholderRequestState, (state) => state && selectEntities(state));\n\n/**\n * Select a specific PlaceholderRequest entity using a raw url as id\n * @param rawUrl\n */\nexport const selectPlaceholderRequestEntityUsage = (rawUrl: string) => createSelector(\n selectPlaceholderRequestState,\n (state) => {\n return state?.entities[rawUrl] ? state.entities[rawUrl].used : undefined;\n });\n","import {\n asyncEntitySerializer,\n Serializer,\n} from '@o3r/core';\nimport {\n placeholderRequestAdapter,\n placeholderRequestInitialState,\n} from './placeholder-request.reducer';\nimport {\n PlaceholderRequestModel,\n PlaceholderRequestState,\n} from './placeholder-request.state';\n\nexport const placeholderRequestStorageSerializer = asyncEntitySerializer;\n\nexport const placeholderRequestStorageDeserializer = (rawObject: any) => {\n if (!rawObject || !rawObject.ids) {\n return placeholderRequestInitialState;\n }\n const storeObject = placeholderRequestAdapter.getInitialState(rawObject);\n for (const id of rawObject.ids) {\n storeObject.entities[id] = rawObject.entities[id] as PlaceholderRequestModel;\n }\n return storeObject;\n};\n\nexport const placeholderRequestStorageSync: Readonly<Serializer<PlaceholderRequestState>> = {\n serialize: placeholderRequestStorageSerializer,\n deserialize: placeholderRequestStorageDeserializer\n} as const;\n","import {\n createAction,\n props,\n} from '@ngrx/store';\nimport {\n SetEntityActionPayload,\n} from '@o3r/core';\nimport {\n type PlaceholderMode,\n PlaceholderTemplateModel,\n} from './placeholder-template.state';\n\nconst ACTION_DELETE_ENTITY = '[PlaceholderTemplate] delete entity';\nconst ACTION_SET_ENTITY = '[PlaceholderTemplate] set entity';\nconst ACTION_TOGGLE_MODE = '[PlaceholderTemplate] toggle mode';\n\n/** Action to delete a specific entity */\nexport const deletePlaceholderTemplateEntity = createAction(ACTION_DELETE_ENTITY, props<{ id: string }>());\n\n/** Action to clear all placeholderTemplate and fill the store with the payload */\nexport const setPlaceholderTemplateEntity = createAction(ACTION_SET_ENTITY, props<SetEntityActionPayload<PlaceholderTemplateModel>>());\n\nexport const togglePlaceholderModeTemplate = createAction(ACTION_TOGGLE_MODE, props<{ mode: PlaceholderMode }>());\n","import {\n createEntityAdapter,\n} from '@ngrx/entity';\nimport {\n ActionCreator,\n createReducer,\n on,\n ReducerTypes,\n} from '@ngrx/store';\nimport * as actions from './placeholder-template.actions';\nimport {\n PlaceholderTemplateModel,\n PlaceholderTemplateState,\n} from './placeholder-template.state';\n\n/**\n * PlaceholderTemplate Store adapter\n */\nexport const placeholderTemplateAdapter = createEntityAdapter<PlaceholderTemplateModel>({\n selectId: (model) => model.id\n});\n\n/**\n * PlaceholderTemplate Store initial value\n */\nexport const placeholderTemplateInitialState: PlaceholderTemplateState = placeholderTemplateAdapter.getInitialState({\n mode: 'normal'\n});\n\n/**\n * List of basic actions for PlaceholderTemplate Store\n */\nexport const placeholderTemplateReducerFeatures: ReducerTypes<PlaceholderTemplateState, ActionCreator[]>[] = [\n on(actions.setPlaceholderTemplateEntity, (state, payload) =>\n placeholderTemplateAdapter.addOne(payload.entity, placeholderTemplateAdapter.removeOne(payload.entity.id, state))),\n on(actions.deletePlaceholderTemplateEntity, (state, payload) => {\n const id = payload.id;\n if (!id || !state.entities[id]) {\n return state;\n }\n return placeholderTemplateAdapter.removeOne(id, state);\n }),\n on(actions.togglePlaceholderModeTemplate, (state, payload) => {\n return {\n ...state,\n mode: payload.mode\n };\n })\n];\n\n/**\n * PlaceholderTemplate Store reducer\n */\nexport const placeholderTemplateReducer = createReducer(\n placeholderTemplateInitialState,\n ...placeholderTemplateReducerFeatures\n);\n","import {\n EntityState,\n} from '@ngrx/entity';\n\n/**\n * PlaceholderTemplate model\n */\nexport interface PlaceholderTemplateModel {\n /** Placeholder id that is unique*/\n id: string;\n /** Urls to the templates to be fetched, and priority for rendering order */\n urlsWithPriority: { rawUrl: string; priority: number }[];\n}\n\n/** Possible placeholder mode */\nexport type PlaceholderMode = 'normal' | 'debug' | 'pending';\n\n/**\n * PlaceholderTemplate store state\n */\nexport interface PlaceholderTemplateState extends EntityState<PlaceholderTemplateModel> {\n mode: PlaceholderMode;\n}\n\n/**\n * Name of the PlaceholderTemplate Store\n */\nexport const PLACEHOLDER_TEMPLATE_STORE_NAME = 'placeholderTemplate';\n\n/**\n * PlaceholderTemplate Store Interface\n */\nexport interface PlaceholderTemplateStore {\n /** PlaceholderTemplate state */\n [PLACEHOLDER_TEMPLATE_STORE_NAME]: PlaceholderTemplateState;\n}\n","import {\n InjectionToken,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n Action,\n ActionReducer,\n StoreModule,\n} from '@ngrx/store';\nimport {\n placeholderTemplateReducer,\n} from './placeholder-template.reducer';\nimport {\n PLACEHOLDER_TEMPLATE_STORE_NAME,\n PlaceholderTemplateState,\n} from './placeholder-template.state';\n\n/** Token of the PlaceholderTemplate reducer */\nexport const PLACEHOLDER_TEMPLATE_REDUCER_TOKEN = new InjectionToken<ActionReducer<PlaceholderTemplateState, Action>>('Feature PlaceholderTemplate Reducer');\n\n/** Provide default reducer for PlaceholderTemplate store */\nexport function getDefaultPlaceholderTemplateReducer() {\n return placeholderTemplateReducer;\n}\n\n@NgModule({\n imports: [\n StoreModule.forFeature(PLACEHOLDER_TEMPLATE_STORE_NAME, PLACEHOLDER_TEMPLATE_REDUCER_TOKEN)\n ],\n providers: [\n { provide: PLACEHOLDER_TEMPLATE_REDUCER_TOKEN, useFactory: getDefaultPlaceholderTemplateReducer }\n ]\n})\nexport class PlaceholderTemplateStoreModule {\n public static forRoot<T extends PlaceholderTemplateState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<PlaceholderTemplateStoreModule> {\n return {\n ngModule: PlaceholderTemplateStoreModule,\n providers: [\n { provide: PLACEHOLDER_TEMPLATE_REDUCER_TOKEN, useFactory: reducerFactory }\n ]\n };\n }\n}\n","import {\n createFeatureSelector,\n createSelector,\n} from '@ngrx/store';\nimport {\n selectPlaceholderRequestState,\n} from '../placeholder-request';\nimport {\n placeholderTemplateAdapter,\n} from './placeholder-template.reducer';\nimport {\n PLACEHOLDER_TEMPLATE_STORE_NAME,\n PlaceholderTemplateState,\n} from './placeholder-template.state';\n\nconst { selectEntities } = placeholderTemplateAdapter.getSelectors();\n\nexport const selectPlaceholderTemplateState = createFeatureSelector<PlaceholderTemplateState>(PLACEHOLDER_TEMPLATE_STORE_NAME);\n\n/** Select the dictionary of PlaceholderTemplate entities */\nexport const selectPlaceholderTemplateEntities = createSelector(selectPlaceholderTemplateState, (state) => state && selectEntities(state));\n\n/**\n * Select a specific PlaceholderTemplate\n * @param placeholderId\n */\nexport const selectPlaceholderTemplateEntity = (placeholderId: string) =>\n createSelector(selectPlaceholderTemplateState, (state) => state?.entities[placeholderId]);\n\n/**\n * Select the ordered rendered placeholder template full data (url, priority etc.) for a given placeholderId\n * Return undefined if the placeholder is not found\n * Returns {orderedRenderedTemplates: undefined, isPending: true} if any of the request is still pending\n * @param placeholderId\n */\nexport const selectSortedTemplates = (placeholderId: string) => createSelector(\n selectPlaceholderTemplateEntity(placeholderId),\n selectPlaceholderRequestState,\n (placeholderTemplate, placeholderRequestState) => {\n if (!placeholderTemplate || !placeholderRequestState) {\n return;\n }\n // The isPending will be considered true if any of the Url is still pending\n let isPending: boolean | undefined = false;\n const templates: { rawUrl: string; priority: number; renderedTemplate?: string; resolvedUrl: string }[] = [];\n placeholderTemplate.urlsWithPriority.forEach((urlWithPriority) => {\n const placeholderRequest = placeholderRequestState.entities[urlWithPriority.rawUrl];\n if (placeholderRequest) {\n // If one of the items is pending, we will wait to display all contents at the same time\n isPending = isPending || placeholderRequest.isPending;\n // Templates in failure will be ignored from the list\n if (!placeholderRequest.isFailure) {\n templates.push({\n rawUrl: urlWithPriority.rawUrl,\n resolvedUrl: placeholderRequest.resolvedUrl,\n priority: urlWithPriority.priority,\n renderedTemplate: placeholderRequest.renderedTemplate\n });\n }\n }\n });\n // No need to perform sorting if still pending\n if (isPending) {\n return { orderedTemplates: undefined, isPending };\n }\n // Sort templates by priority\n const orderedTemplates = templates.sort((template1, template2) => {\n return (template2.priority - template1.priority) || 1;\n }).filter((templateData) => !!templateData.renderedTemplate);\n\n return { orderedTemplates, isPending };\n });\n\n/**\n * Select the ordered rendered templates for a given placeholderId\n * Return undefined if the placeholder is not found\n * Returns {orderedRenderedTemplates: undefined, isPending: true} if any of the request is still pending\n * @param placeholderId\n * @deprecated Please use {@link selectSortedTemplates} instead\n */\nexport const selectPlaceholderRenderedTemplates = (placeholderId: string) => createSelector(\n selectSortedTemplates(placeholderId),\n (placeholderData) => {\n if (!placeholderData) {\n return;\n }\n return {\n orderedRenderedTemplates: placeholderData.orderedTemplates?.map((placeholder) => placeholder.renderedTemplate),\n isPending: placeholderData.isPending\n };\n });\n\nexport const selectPlaceholderTemplateMode = createSelector(selectPlaceholderTemplateState, (state) => state.mode);\n","import {\n Serializer,\n} from '@o3r/core';\nimport {\n placeholderTemplateAdapter,\n placeholderTemplateInitialState,\n} from './placeholder-template.reducer';\nimport {\n PlaceholderTemplateModel,\n PlaceholderTemplateState,\n} from './placeholder-template.state';\n\nexport const placeholderTemplateStorageDeserializer = (rawObject: any) => {\n if (!rawObject || !rawObject.ids) {\n return placeholderTemplateInitialState;\n }\n const storeObject = placeholderTemplateAdapter.getInitialState(rawObject);\n for (const id of rawObject.ids) {\n storeObject.entities[id] = rawObject.entities[id] as PlaceholderTemplateModel;\n }\n return storeObject;\n};\n\nexport const placeholderTemplateStorageSync: Readonly<Serializer<PlaceholderTemplateState>> = {\n deserialize: placeholderTemplateStorageDeserializer\n} as const;\n","import {\n InjectionToken,\n} from '@angular/core';\nimport {\n ComponentsDevtoolsServiceOptions,\n} from './components-devkit.interface';\n\nexport const OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS: Readonly<ComponentsDevtoolsServiceOptions> = {\n isActivatedOnBootstrap: false\n} as const;\n\nexport const OTTER_COMPONENTS_DEVTOOLS_OPTIONS = new InjectionToken<ComponentsDevtoolsServiceOptions>('Otter Components Devtools options');\n","import {\n otterComponentInfoPropertyName,\n} from '@o3r/core';\n\nexport interface OtterLikeComponentInfo {\n /** Container information */\n container?: OtterLikeComponentInfo;\n /** Configuration ID */\n configId?: string;\n /** Component name */\n componentName: string;\n /** Component translation */\n translations?: Record<string, string[]>;\n /** Component analytics */\n analytics?: Record<string, string[]>;\n}\n\n/**\n * Otter inspector css class\n */\nexport const INSPECTOR_CLASS = 'otter-devtools-inspector';\n\n/**\n * Determine if a node is an Otter container\n * @param node Element to check\n * @returns true if the node is an Otter container\n */\nexport const isContainer = (node: Element | undefined | null): node is Element => {\n return !!node?.tagName.toLowerCase().endsWith('cont');\n};\n\n/**\n * Determine the config id of a component instance\n * @param instance component instance\n * @returns the config id of the component instance\n */\nexport const getConfigId = (instance: any) => {\n return instance[otterComponentInfoPropertyName]?.configId;\n};\n\n/**\n * Recursive method to determin the translations of a node\n * @param node HTMLElement to check\n * @param rec recursive method\n * @returns the trasnslations associated to their component name\n */\nexport function getTranslationsRec(node: Element | null, rec: typeof getTranslationsRec): Record<string, string[]> | undefined {\n const angularDevTools = (window as any).ng;\n const o3rInfoProperty: typeof otterComponentInfoPropertyName = '__otter-info__';\n if (!node || !angularDevTools) {\n return;\n }\n const component = angularDevTools.getComponent(node);\n const subTranslations: (Record<string, string[]> | undefined)[] = Array.from(node.children).map((child) => rec(child, rec));\n const translations: Record<string, string[]> = {};\n subTranslations.forEach((s) => {\n Object.entries(s || {}).forEach(([k, v]) => {\n if (v.length > 0) {\n translations[k] = v;\n }\n });\n });\n if (component) {\n const componentName: string = component.constructor.name;\n const componentTranslations = Object.values<string>(component[o3rInfoProperty]?.translations || {}).filter((t) => typeof t === 'string');\n if (componentTranslations.length > 0) {\n translations[componentName] = componentTranslations;\n }\n }\n return Object.keys(translations).length > 0 ? translations : undefined;\n}\n\n/**\n * Determine the translations of a node\n * @param node HTMLElement to check\n * @returns the translations associated to their component name\n */\nexport const getTranslations = (node: Element | null): Record<string, string[]> | undefined => getTranslationsRec(node, getTranslations);\n\n/**\n * Recursive method to determine the analytics of a node\n * @param node Element to check\n * @param rec recursive method\n * @returns the analytics associated to their component name\n */\nexport function getAnalyticEventsRec(node: Element | null, rec: typeof getAnalyticEventsRec): Record<string, string[]> | undefined {\n const angularDevTools = (window as any).ng;\n const o3rInfoProperty: typeof otterComponentInfoPropertyName = '__otter-info__';\n if (!node || !angularDevTools) {\n return;\n }\n const component = angularDevTools.getComponent(node);\n const subEvents = Array.from(node.children).map((child) => rec(child, rec));\n const events: Record<string, string[]> = {};\n subEvents.forEach((s) => {\n Object.entries(s || {}).forEach(([k, v]) => {\n if (v.length > 0) {\n events[k] = v;\n }\n });\n });\n if (component && component[o3rInfoProperty]) {\n const componentName: string = component.constructor.name;\n const componentEvents: string[] = Object.values<any>(component.analyticsEvents || {}).map((eventConstructor) => eventConstructor.name);\n if (componentEvents.length > 0) {\n events[componentName] = componentEvents;\n }\n }\n return Object.keys(events).length > 0 ? events : undefined;\n}\n\n/**\n * Determine the analytics of a node\n * @param node Element to check\n * @returns the analytics associated to their component name\n */\nexport const getAnalyticEvents = (node: Element | null): Record<string, string[]> | undefined => getAnalyticEventsRec(node, getAnalyticEvents);\n\n/**\n * Determine all info from an Otter component\n * @param componentClassInstance component instance\n * @param host HTML element hosting the component\n * @returns all info from an Otter component\n */\nexport const getOtterLikeComponentInfo = (componentClassInstance: any, host: Element): OtterLikeComponentInfo => {\n const configId = getConfigId(componentClassInstance);\n const translations = getTranslations(host);\n const analytics = getAnalyticEvents(host);\n return {\n // Cannot use anymore `constructor.name` else all components are named `_a`\n componentName: componentClassInstance.constructor.ɵcmp?.debugInfo?.className || componentClassInstance.constructor.name,\n configId,\n translations,\n analytics\n };\n};\n","import {\n BehaviorSubject,\n Observable,\n} from 'rxjs';\nimport {\n Ng,\n} from './ng';\nimport {\n getOtterLikeComponentInfo,\n INSPECTOR_CLASS,\n isContainer,\n OtterLikeComponentInfo,\n} from './otter-inspector.helpers';\n\ninterface ComponentInfo extends OtterLikeComponentInfo {\n component: any;\n host: Element;\n}\n\n/**\n * Service to handle the custom inspector for the Otter Devtools Chrome extension.\n */\nexport class OtterInspectorService {\n private readonly angularDevTools: Ng | undefined;\n private readonly elementMouseOverCallback = this.elementMouseOver.bind(this);\n private readonly elementClickCallback = this.elementClick.bind(this);\n private readonly cancelEventCallback = this.cancelEvent.bind(this);\n private selectedComponent: ComponentInfo | undefined;\n private inspectorDiv: HTMLDivElement | null = null;\n private readonly otterLikeComponentInfoToBeSent = new BehaviorSubject<OtterLikeComponentInfo | undefined>(undefined);\n\n /**\n * Stream of component info to be sent to the extension app.\n */\n public otterLikeComponentInfoToBeSent$: Observable<OtterLikeComponentInfo | undefined> = this.otterLikeComponentInfoToBeSent.asObservable();\n\n constructor() {\n this.angularDevTools = (window as any).ng as Ng | undefined;\n }\n\n private startInspecting() {\n window.addEventListener('mouseover', this.elementMouseOverCallback, true);\n window.addEventListener('click', this.elementClickCallback, true);\n window.addEventListener('mouseout', this.cancelEventCallback, true);\n }\n\n private elementClick(e: MouseEvent) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n if (!this.selectedComponent || !this.angularDevTools) {\n return;\n }\n const parentElement = this.selectedComponent.host.parentElement;\n const parent = parentElement && (this.angularDevTools.getComponent(parentElement) || this.angularDevTools.getOwningComponent(parentElement));\n const parentHost = parent && this.angularDevTools.getHostElement(parent);\n const container = isContainer(parentHost)\n ? getOtterLikeComponentInfo(parent, parentHost)\n : undefined;\n\n const { component, host, ...infoToBeSent } = this.selectedComponent;\n\n this.otterLikeComponentInfoToBeSent.next({\n ...infoToBeSent,\n container\n });\n }\n\n private isOtterLikeComponent(info: OtterLikeComponentInfo) {\n const hasConfigId = !!info.configId;\n const hasTranslations = !!info.translations?.length;\n const hasAnalytics = Object.keys(info.analytics || {}).length > 0;\n return hasConfigId || hasTranslations || hasAnalytics;\n }\n\n private findComponentInfo(node: Element): ComponentInfo | undefined {\n if (!this.angularDevTools) {\n return;\n }\n let componentClassInstance = this.angularDevTools.getComponent(node) || this.angularDevTools.getOwningComponent(node);\n let o3rLikeComponentInfo: OtterLikeComponentInfo;\n let isO3rLike: boolean;\n if (!componentClassInstance) {\n return;\n }\n do {\n o3rLikeComponentInfo = getOtterLikeComponentInfo(componentClassInstance, this.angularDevTools.getHostElement(componentClassInstance));\n isO3rLike = this.isOtterLikeComponent(o3rLikeComponentInfo);\n if (!isO3rLike) {\n componentClassInstance = this.angularDevTools.getOwningComponent(componentClassInstance);\n }\n } while (!isO3rLike && componentClassInstance);\n if (isO3rLike) {\n return {\n component: componentClassInstance,\n host: this.angularDevTools.getHostElement(componentClassInstance),\n ...o3rLikeComponentInfo\n };\n }\n }\n\n private elementMouseOver(e: MouseEvent) {\n this.cancelEvent(e);\n\n const el = e.target as Element | undefined;\n\n if (el) {\n const selectedComponent = this.findComponentInfo(el);\n if (selectedComponent?.host !== this.selectedComponent?.host) {\n this.unHighlight();\n this.highlight(selectedComponent);\n }\n }\n }\n\n private highlight(selectedComponent: ComponentInfo | undefined) {\n this.selectedComponent = selectedComponent;\n if (this.selectedComponent?.host && this.inspectorDiv) {\n const rect = this.selectedComponent.host.getBoundingClientRect();\n this.inspectorDiv.style.width = `${rect.width}px`;\n this.inspectorDiv.style.height = `${rect.height}px`;\n this.inspectorDiv.style.top = `${rect.top}px`;\n this.inspectorDiv.style.left = `${rect.left}px`;\n this.inspectorDiv.firstChild!.textContent = `<${this.selectedComponent.componentName}>`;\n }\n }\n\n private unHighlight() {\n if (this.selectedComponent?.host && this.inspectorDiv) {\n this.inspectorDiv.style.width = '0';\n this.inspectorDiv.style.height = '0';\n this.inspectorDiv.style.top = '0';\n this.inspectorDiv.style.left = '0';\n }\n this.selectedComponent = undefined;\n }\n\n private cancelEvent(e: MouseEvent): void {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n\n /**\n * Prepare the inspector div and add it to the DOM.\n */\n public prepareInspector() {\n if (this.inspectorDiv) {\n return;\n }\n const inspectorCss = document.createElement('style');\n inspectorCss.textContent = `\n .${INSPECTOR_CLASS} {\n z-index: 9999999;\n width: 0;\n height: 0;\n background: rgba(104, 182, 255, 0.35);\n position: fixed;\n left: 0;\n top: 0;\n pointer-events: none;\n }\n\n .${INSPECTOR_CLASS} > span {\n bottom: -25px;\n position: absolute;\n right: 10px;\n background: rgba(104, 182, 255, 0.9);;\n padding: 5px;\n border-radius: 5px;\n color: white;\n }`;\n\n const inspectorDiv = document.createElement('div');\n const inspectorSpan = document.createElement('span');\n inspectorDiv.append(inspectorSpan);\n inspectorDiv.classList.add(INSPECTOR_CLASS);\n\n document.head.append(inspectorCss);\n document.body.append(inspectorDiv);\n this.inspectorDiv = inspectorDiv;\n }\n\n /**\n * Toggle the inspector.\n * @param isRunning true if the inspector is running\n */\n public toggleInspector(isRunning: boolean) {\n if (isRunning) {\n this.startInspecting();\n } else {\n this.stopInspecting();\n }\n }\n\n public stopInspecting() {\n this.unHighlight();\n window.removeEventListener('mouseover', this.elementMouseOverCallback, true);\n window.removeEventListener('click', this.elementClickCallback, true);\n window.removeEventListener('mouseout', this.cancelEventCallback, true);\n }\n}\n","import {\n DestroyRef,\n inject,\n Inject,\n Injectable,\n Optional,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n Store,\n} from '@ngrx/store';\nimport {\n DevtoolsServiceInterface,\n filterMessageContent,\n sendOtterMessage,\n} from '@o3r/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n firstValueFrom,\n fromEvent,\n} from 'rxjs';\nimport {\n filter,\n} from 'rxjs/operators';\nimport {\n type PlaceholderTemplateState,\n togglePlaceholderModeTemplate,\n} from '../stores';\nimport {\n AvailableComponentsMessageContents,\n ComponentsDevtoolsServiceOptions,\n ComponentsMessageDataTypes,\n isComponentsMessage,\n} from './components-devkit.interface';\nimport {\n OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS,\n OTTER_COMPONENTS_DEVTOOLS_OPTIONS,\n} from './components-devtools.token';\nimport {\n OtterInspectorService,\n OtterLikeComponentInfo,\n} from './inspector';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ComponentsDevtoolsMessageService implements DevtoolsServiceInterface {\n private readonly options: ComponentsDevtoolsServiceOptions;\n private readonly inspectorService: OtterInspectorService;\n private readonly sendMessage = sendOtterMessage<AvailableComponentsMessageContents>;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor(\n private readonly logger: LoggerService,\n private readonly store: Store<PlaceholderTemplateState>,\n @Optional() @Inject(OTTER_COMPONENTS_DEVTOOLS_OPTIONS) options?: ComponentsDevtoolsServiceOptions\n ) {\n this.options = {\n ...OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS,\n ...options\n };\n\n this.inspectorService = new OtterInspectorService();\n if (this.options.isActivatedOnBootstrap) {\n this.activate();\n }\n }\n\n /**\n * Function to connect the plugin to the Otter DevTools extension\n */\n private async connectPlugin() {\n this.logger.debug('Otter DevTools is plugged to components service of the application');\n const selectComponentInfo = await firstValueFrom(this.inspectorService.otterLikeComponentInfoToBeSent$);\n if (selectComponentInfo) {\n await this.sendCurrentSelectedComponent();\n }\n }\n\n private async sendCurrentSelectedComponent() {\n const selectComponentInfo = await firstValueFrom(this.inspectorService.otterLikeComponentInfoToBeSent$);\n if (selectComponentInfo) {\n this.sendMessage('selectedComponentInfo', selectComponentInfo);\n }\n }\n\n private sendIsComponentSelectionAvailable() {\n this.sendMessage('isComponentSelectionAvailable', { available: !!(window as any).ng });\n }\n\n /**\n * Function to trigger a re-send a requested messages to the Otter Chrome DevTools extension\n * @param only restricted list of messages to re-send\n */\n private handleReEmitRequest(only?: ComponentsMessageDataTypes[]) {\n if (!only) {\n void this.sendCurrentSelectedComponent();\n this.sendIsComponentSelectionAvailable();\n return;\n }\n if (only.includes('selectedComponentInfo')) {\n void this.sendCurrentSelectedComponent();\n }\n if (only.includes('isComponentSelectionAvailable')) {\n this.sendIsComponentSelectionAvailable();\n }\n }\n\n /**\n * Function to handle the incoming messages from Otter Chrome DevTools extension\n * @param message message coming from the Otter Chrome DevTools extension\n */\n private async handleEvents(message: AvailableComponentsMessageContents) {\n this.logger.debug('Message handling by the components service', message);\n\n switch (message.dataType) {\n case 'connect': {\n await this.connectPlugin();\n break;\n }\n case 'requestMessages': {\n this.handleReEmitRequest(message.only);\n break;\n }\n case 'toggleInspector': {\n this.inspectorService.toggleInspector(message.isRunning);\n break;\n }\n case 'placeholderMode': {\n this.store.dispatch(togglePlaceholderModeTemplate({ mode: message.mode }));\n break;\n }\n default: {\n this.logger.warn('Message ignored by the components service', message);\n }\n }\n }\n\n /** @inheritDoc */\n public activate() {\n fromEvent(window, 'message').pipe(takeUntilDestroyed(this.destroyRef), filterMessageContent(isComponentsMessage)).subscribe((e) => this.handleEvents(e));\n\n this.inspectorService.prepareInspector();\n this.inspectorService.otterLikeComponentInfoToBeSent$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((info): info is OtterLikeComponentInfo => !!info)\n ).subscribe(\n (info) => this.sendMessage('selectedComponentInfo', info)\n );\n }\n}\n","import {\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n StoreModule,\n} from '@ngrx/store';\nimport {\n PlaceholderTemplateStoreModule,\n} from '../stores/placeholder-template/placeholder-template.module';\nimport type {\n ComponentsDevtoolsServiceOptions,\n} from './components-devkit.interface';\nimport {\n ComponentsDevtoolsMessageService,\n} from './components-devtools.message.service';\nimport {\n OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS,\n OTTER_COMPONENTS_DEVTOOLS_OPTIONS,\n} from './components-devtools.token';\n\n@NgModule({\n imports: [\n StoreModule,\n PlaceholderTemplateStoreModule\n ],\n providers: [\n { provide: OTTER_COMPONENTS_DEVTOOLS_OPTIONS, useValue: OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS },\n ComponentsDevtoolsMessageService\n ]\n})\nexport class ComponentsDevtoolsModule {\n /**\n * Initialize Otter Devtools\n * @param options\n */\n public static instrument(options: Partial<ComponentsDevtoolsServiceOptions>): ModuleWithProviders<ComponentsDevtoolsModule> {\n return {\n ngModule: ComponentsDevtoolsModule,\n providers: [\n { provide: OTTER_COMPONENTS_DEVTOOLS_OPTIONS, useValue: { ...OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS, ...options }, multi: false },\n ComponentsDevtoolsMessageService\n ]\n };\n }\n}\n","import {\n ComponentRef,\n Directive,\n forwardRef,\n Injector,\n Input,\n KeyValueChangeRecord,\n KeyValueDiffer,\n KeyValueDiffers,\n OnChanges,\n OnDestroy,\n SimpleChange,\n SimpleChanges,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n} from '@angular/forms';\nimport type {\n BaseContextOutput,\n Configuration,\n Context,\n ContextInput,\n Functionify,\n} from '@o3r/core';\nimport {\n Subscription,\n} from 'rxjs';\n\n@Directive({\n selector: '[c11n]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => C11nDirective),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => C11nDirective),\n multi: true\n }\n ],\n standalone: false\n})\nexport class C11nDirective<\n D extends Configuration = Configuration,\n I extends ContextInput = ContextInput,\n O extends BaseContextOutput = BaseContextOutput,\n T extends Context<I, O> = Context<I, O>> implements OnChanges, OnDestroy {\n /** The component information passed to the directive */\n @Input() public component!: Type<T>;\n\n /** The information related to configuration */\n @Input() public config?: D;\n\n /** Formcontrol */\n @Input() public formControl?: FormControl;\n\n /** The input setter */\n @Input() public set inputs(value: { [K in keyof I]: I[K] }) {\n this._inputs = value;\n if (!this.differInputs && value) {\n // eslint-disable-next-line unicorn/no-array-callback-reference -- KeyValueDiffers.find is not an array function\n this.differInputs = this.differsService.find(value).create();\n }\n }\n\n /** The input getter */\n public get inputs(): { [K in keyof I]: I[K] } {\n return this._inputs;\n }\n\n /** The information related to output */\n @Input() public outputs?: Functionify<O>;\n\n /** The component reference */\n public componentRef!: ComponentRef<T>;\n\n private componentSubscriptions: Subscription[] = [];\n\n private _inputs!: { [K in keyof I]: I[K] };\n\n private differInputs!: KeyValueDiffer<string, any>;\n\n /** Set of inputs when the component was created. */\n private readonly uninitializedInputs = new Set<string>();\n\n constructor(public viewContainerRef: ViewContainerRef,\n private readonly differsService: KeyValueDiffers,\n private readonly injector: Injector) {}\n\n /**\n * Type guard for component implementing CVA\n * @param _cmp Component instance\n */\n private componentImplementsCva(_cmp: T): _cmp is T & ControlValueAccessor {\n return !!this.formControl;\n }\n\n private updateInputs(record: KeyValueChangeRecord<string, any>, inputChanges: SimpleChanges) {\n const recordKey = record.key;\n const isFirstChange = this.uninitializedInputs.has(recordKey);\n this.uninitializedInputs.delete(recordKey);\n inputChanges[recordKey] = new SimpleChange(record.previousValue, record.currentValue, isFirstChange);\n }\n\n /**\n * called when data-bound property change\n * @param changes The changes that occur\n */\n public ngOnChanges(changes: SimpleChanges) {\n const inputChanges: SimpleChanges = {};\n\n if (changes.component && changes.component.currentValue) {\n if (this.componentRef) {\n this.componentSubscriptions.forEach((s) => s.unsubscribe());\n this.componentSubscriptions = [];\n this.componentRef.destroy();\n }\n\n const ngControl = !!this.formControl && this.injector.get(NgControl);\n\n this.viewContainerRef.clear();\n this.componentRef = this.viewContainerRef.createComponent<T>(changes.component.currentValue);\n Object.keys(this.componentRef.instance)\n .filter((prop) => !(this.outputs && Object.keys(this.outputs).includes(prop)))\n .forEach((prop) => {\n this.uninitializedInputs.add(prop);\n });\n\n if (ngControl && this.componentImplementsCva(this.componentRef.instance)) {\n ngControl.valueAccessor = this.componentRef.instance;\n }\n\n // Initialize outputs\n if (this.outputs) {\n const subscriptions = Object.keys(this.outputs).map((outputName) => this.componentRef.instance[outputName].subscribe((val: any) => this.outputs![outputName](val)));\n this.componentSubscriptions.push(...subscriptions);\n }\n\n // In case of async component change keep the inputs\n if (!changes.inputs && this.inputs) {\n Object.keys(this.inputs).forEach((inputName) => {\n const currentInputValue = this.inputs[inputName];\n inputChanges[inputName] = new SimpleChange(undefined, currentInputValue, true);\n this.uninitializedInputs.delete(inputName);\n });\n }\n // In case of lazy loaded component keep the config\n if (!changes.config && this.config) {\n inputChanges.config = new SimpleChange(this.componentRef.instance.config, this.config, true);\n this.uninitializedInputs.delete('config');\n }\n }\n\n if (this.componentRef && this.differInputs) {\n const changesInInputs = this.differInputs.diff(this.inputs);\n if (changesInInputs) {\n changesInInputs.forEachAddedItem((record) => this.updateInputs(record, inputChanges));\n changesInInputs.forEachChangedItem((record) => this.updateInputs(record, inputChanges));\n changesInInputs.forEachRemovedItem((record) => this.updateInputs(record, inputChanges));\n }\n }\n\n if (this.componentRef && changes.config) {\n inputChanges.config = new SimpleChange(this.componentRef.instance.config, changes.config.currentValue, this.uninitializedInputs.has('config'));\n this.uninitializedInputs.delete('config');\n }\n\n if (this.componentRef && Object.keys(inputChanges).length > 0) {\n Object.entries(inputChanges).forEach(([inputName, value]) => {\n this.componentRef.setInput(inputName, value.currentValue);\n });\n }\n }\n\n /**\n * returns validation errors from component instance if validate method exists else returns null\n * @param control Form control\n */\n public validate(control: AbstractControl) {\n if (!this.componentRef?.instance.validate) {\n return null;\n }\n return this.componentRef.instance.validate(control);\n }\n\n /**\n * ngOnDestroy\n */\n public ngOnDestroy() {\n this.componentSubscriptions.forEach((s) => s.unsubscribe());\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n }\n}\n","import type {\n Type,\n} from '@angular/core';\nimport type {\n Context,\n} from '@o3r/core';\n\n/** Interface for grouping the arrays needed for custom component registration */\nexport interface EntryCustomComponents {\n\n /** Array of custom presenters */\n customComponents: Type<any>[];\n\n /** Array of custom presenter modules */\n customComponentsModules: Type<any>[];\n}\n\n/**\n * Register a custom component\n * @param customComponentsMap an object containing the already registered custom component\n * @param customComponentKey\n * @param customComponent\n */\nexport function registerCustomComponent<T extends Context>(\n customComponentsMap: Map<string, Type<T>>, customComponentKey: string, customComponent: Type<T>) {\n customComponentsMap.set(customComponentKey, customComponent);\n return customComponentsMap;\n}\n","import {\n InjectionToken,\n} from '@angular/core';\n\n/** The C11n injection token */\nexport const C11N_PRESENTERS_MAP_TOKEN: InjectionToken<string> = new InjectionToken('C11n injection token');\n\n/** Function used to register custom components */\nexport const C11N_REGISTER_FUNC_TOKEN: InjectionToken<string> = new InjectionToken('C11n register presenters token');\n","import {\n Inject,\n Injectable,\n Type,\n} from '@angular/core';\nimport type {\n Configuration,\n Context,\n} from '@o3r/core';\nimport {\n Observable,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n map,\n} from 'rxjs/operators';\nimport {\n C11N_PRESENTERS_MAP_TOKEN,\n} from './c11n.token';\n\n@Injectable()\nexport class C11nService {\n private readonly presentersMap: Map<string, any>;\n\n constructor(@Inject(C11N_PRESENTERS_MAP_TOKEN) presentersMap: Map<string, any>) {\n this.presentersMap = presentersMap;\n }\n\n /**\n * Add a presenter\n * @param presKey The presenter key to set\n * @param presenter The new presenter\n */\n public addPresenter<T extends Context>(presKey: string, presenter: Type<T>) {\n this.presentersMap.set(presKey, presenter);\n }\n\n /**\n * Operator to retrieve the presenter based on a given presKey\n * @param defaultPres The default presenter\n * @param presKey The presenter key to retrieve\n */\n public getPresenter<T extends Context>(defaultPres: Type<T>, presKey = 'customPresKey') {\n return (source: Observable<Configuration>): Observable<Type<T>> =>\n source.pipe(\n distinctUntilChanged((p, q) => p[presKey] === q[presKey]),\n map((config) => {\n const presenterConfig = config[presKey];\n return typeof presenterConfig === 'string' && presenterConfig !== '' ? (this.presentersMap.get(presenterConfig) || defaultPres) : defaultPres;\n })\n );\n }\n}\n","import {\n Directive,\n Injectable,\n NgModule,\n} from '@angular/core';\nimport {\n Observable,\n} from 'rxjs';\nimport {\n mapTo,\n} from 'rxjs/operators';\nimport {\n C11nService,\n} from './c11n.service';\n\n/** C11n directive mock */\n@Directive({\n selector: '[c11n]',\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property -- mocked directive\n inputs: ['config', 'component', 'inputs', 'outputs'],\n standalone: false\n})\nexport class MockC11nDirective {}\n\n/** C11n service mock */\n@Injectable()\nexport class C11nMockService {\n public addPresenter(_presKey: string, _presType: any) {}\n public getPresenter(_defaultPres: any, _presKey: string) {\n return (source: Observable<any>) => source.pipe(mapTo(null));\n }\n}\n\n/**\n * The purpose of this module is to be imported in the unit tests of the components which are using c11n directive\n */\n@NgModule({\n declarations: [MockC11nDirective],\n exports: [MockC11nDirective],\n providers: [{ provide: C11nService, useClass: C11nMockService }]\n})\nexport class C11nMockModule {}\n","import {\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n C11nDirective,\n} from './c11n.directive';\nimport {\n C11nService,\n} from './c11n.service';\nimport {\n C11N_REGISTER_FUNC_TOKEN,\n} from './c11n.token';\n\n/**\n * Customization service factory\n * @param config -> registerCompFunc - a function which returns the map of custom components which will be injected in c11n service\n * @param config.registerCompFunc\n */\nexport function createC11nService(config: { registerCompFunc: () => Map<string, any> }) {\n if (!config) {\n return new C11nService(new Map());\n }\n const custoComp = config.registerCompFunc();\n return new C11nService(custoComp);\n}\n\n@NgModule({\n declarations: [C11nDirective],\n exports: [C11nDirective]\n})\nexport class C11nModule {\n /**\n * Get the module with providers for the root component\n * @param config -> registerCompFunc - a function which returns the map of custom components which will be injected in c11n service\n * @param config.registerCompFunc\n */\n public static forRoot(config: { registerCompFunc: () => Map<string, any> }): ModuleWithProviders<C11nModule> {\n return {\n ngModule: C11nModule,\n providers: [{\n provide: C11N_REGISTER_FUNC_TOKEN,\n useValue: config\n },\n {\n provide: C11nService, useFactory: createC11nService, deps: [C11N_REGISTER_FUNC_TOKEN]\n }]\n };\n }\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\n@Pipe({ name: 'o3rCapitalize' })\nexport class O3rCapitalizePipe implements PipeTransform {\n public transform(value?: any) {\n const val: string | undefined = value && value.toString && value.toString();\n const firstLetter: string | undefined = val && val.charAt(0);\n return firstLetter ? firstLetter.toUpperCase() + val!.slice(1) : value;\n }\n}\n","/** Time object to format duration */\nexport interface TimeUnit {\n /** character defining the time unit */\n formatCharacter: string;\n /** divider to get the time unit value */\n divider: number;\n /**\n * modulo for the time unit\n * If not provided, it will either use the immediately higher unit time divider\n * or Number.MAX_SAFE_INTEGER for the highest one\n */\n modulo?: number;\n}\n\n/** const array of ordered measurement unit time from the highest unit to the lowest (days to seconds) */\nexport const defaultTimeUnits: TimeUnit[] = [\n {\n formatCharacter: 'd',\n divider: 3600 * 24\n },\n {\n formatCharacter: 'h',\n divider: 3600\n },\n {\n formatCharacter: 'm',\n divider: 60\n },\n {\n formatCharacter: 's',\n divider: 1\n }\n];\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport {\n defaultTimeUnits,\n TimeUnit,\n} from './duration.model';\n\n/**\n * Pad a number with zeroes\n * @param num\n * @param digits\n */\nfunction padNum(num: number, digits: number) {\n let strNum = String(num);\n while (strNum.length < digits) {\n strNum = '0' + strNum;\n }\n return strNum;\n}\n\n/**\n * Converts a duration in seconds into the HH:mm format\n */\n@Pipe({ name: 'o3rDuration' })\nexport class O3rDurationPipe implements PipeTransform {\n /**\n * Converts a duration in seconds into the HH:mm format\n * @param value the value in seconds\n * @param pattern the desired output format.\n * The pattern takes into account static format characters surrounded by braces\n * {d} for days, {h} for hours, {m} for minutes and {s} for seconds.\n * It accepts a double unit time in case a padding is wanted {dd} outputs 05 for instance\n * Should respect the following pattern `/(\\{h+\\})|(\\{m+\\})/` (ex: `'{h}h{m}m'` outputs `0h2m`, `'{h}H{mm}'` `0H02` etc.)\n * @param timeUnits the units time to be used in this transformation. This can be used for custom units in the pattern like\n * {\n * formatCharacter: 'w',\n * divider: 3600 * 24 * 7\n * }\n * The above defines a week for {w}\n */\n public transform(value?: number, pattern = '{h}:{mm}', timeUnits: TimeUnit[] = defaultTimeUnits) {\n const val = value || 0;\n let modulo = Number.MAX_SAFE_INTEGER;\n\n const matches = timeUnits.reduce<{\n textMatch: string;\n timeUnit: TimeUnit;\n }[]>((result, unit) => {\n const regexp = new RegExp('({' + unit.formatCharacter + '+})', 'g');\n const match = regexp.exec(pattern);\n if (!match) {\n return result;\n }\n return result.concat({\n textMatch: match[0],\n timeUnit: unit\n });\n }, []);\n\n return matches.reduce((result, match) => {\n const matchedPatternToReplace = match.textMatch;\n const unit = match.timeUnit;\n const unitTimeValue = Math.floor(val % (unit.modulo || modulo) / unit.divider);\n const unitMatchLength = (matchedPatternToReplace.match(new RegExp(unit.formatCharacter, 'g')) || []).length;\n const padded = padNum(unitTimeValue, unitMatchLength);\n modulo = unitTimeValue > 0 ? unit.divider : modulo;\n return result.replace(matchedPatternToReplace, padded);\n }, pattern);\n }\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\n@Pipe({ name: 'o3rKeepWhiteSpace' })\nexport class O3rKeepWhiteSpacePipe implements PipeTransform {\n public transform(value: string): string {\n return value.replace(/\\s/g, '&nbsp;');\n }\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\nconst escapeRegExp = (str: string) => str.replace(/[$()*+./?[\\\\\\]^{|}-]/g, '\\\\$&');\n\n@Pipe({ name: 'o3rReplaceWithBold' })\nexport class O3rReplaceWithBoldPipe implements PipeTransform {\n public transform(value: string, inputText: string): string {\n if (inputText) {\n const regexp = new RegExp(escapeRegExp(inputText.trim()), 'gi');\n return value.replace(regexp, (match) => `<strong>${match}</strong>`);\n } else {\n return value;\n }\n }\n}\n","import {\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n Input,\n OnDestroy,\n OnInit,\n type Signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n Store,\n} from '@ngrx/store';\nimport {\n sendOtterMessage,\n} from '@o3r/core';\nimport {\n BehaviorSubject,\n ReplaySubject,\n sample,\n Subject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n switchMap,\n} from 'rxjs/operators';\nimport {\n type PlaceholderMode,\n PlaceholderTemplateStore,\n selectPlaceholderTemplateMode,\n selectSortedTemplates,\n} from '../../stores/placeholder-template';\nimport {\n PlaceholderLoadingStatus,\n PlaceholderLoadingStatusMessage,\n} from './placeholder.interface';\n\n/**\n * Placeholder component that is bind to the PlaceholderTemplateStore to display a template based on its ID\n * A loading indication can be provided via projection\n * @example\n * <o3r-placeholder id=\"my-template-id\">Is loading ...</o3r-placeholder>\n */\n@Component({\n selector: 'o3r-placeholder',\n templateUrl: './placeholder.template.html',\n styleUrl: './placeholder.style.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.debug]': `mode() === 'debug'`\n },\n standalone: false\n})\nexport class PlaceholderComponent implements OnInit, OnDestroy, AfterViewChecked {\n public readonly id$ = new BehaviorSubject<string | undefined>(undefined);\n\n private readonly afterViewInit$ = new Subject<void>();\n\n private readonly messages$ = new ReplaySubject<PlaceholderLoadingStatus>(1);\n\n /** Determine if the placeholder content is pending */\n public isPending?: boolean;\n\n /** Generated HTML template */\n public template?: string;\n\n public mode: Signal<PlaceholderMode>;\n\n private readonly destroyRef = inject(DestroyRef);\n\n /** template identify */\n @Input()\n public set id(value: string) {\n this.id$.next(value);\n }\n\n constructor(private readonly store: Store<PlaceholderTemplateStore>, private readonly cd: ChangeDetectorRef) {\n this.mode = this.store.selectSignal(selectPlaceholderTemplateMode);\n }\n\n /** @inheritdoc */\n public ngOnInit() {\n this.id$.pipe(\n filter((id): id is string => !!id),\n distinctUntilChanged(),\n switchMap((id: string) =>\n this.store.select(selectSortedTemplates(id)).pipe(\n map((placeholders) => ({\n id,\n orderedTemplates: placeholders?.orderedTemplates,\n isPending: placeholders?.isPending\n })),\n distinctUntilChanged((previous, current) =>\n previous.id === current.id\n && previous.isPending === current.isPending\n && previous.orderedTemplates?.map((placeholder) => placeholder.renderedTemplate).join('')\n === current.orderedTemplates?.map((placeholder) => placeholder.renderedTemplate).join('')\n )\n )\n )\n ).subscribe(({ id, orderedTemplates, isPending }) => {\n this.isPending = isPending;\n this.template = orderedTemplates?.length\n // Concatenates the list of templates\n ? orderedTemplates.map((placeholder) => placeholder.renderedTemplate).join('')\n : undefined;\n if (this.isPending === false) {\n this.messages$.next({\n templateIds: this.isPending ? [] : (orderedTemplates || []).map((placeholder) => placeholder.resolvedUrl),\n placeholderId: id\n });\n }\n this.cd.markForCheck();\n });\n this.messages$.pipe(\n takeUntilDestroyed(this.destroyRef),\n sample(this.afterViewInit$),\n distinctUntilChanged((previous, current) => JSON.stringify(current) === JSON.stringify(previous))\n ).subscribe({\n next: (data) =>\n sendOtterMessage<PlaceholderLoadingStatusMessage>('placeholder-loading-status', data, false),\n complete: () =>\n sendOtterMessage<PlaceholderLoadingStatusMessage>('placeholder-loading-status', {\n placeholderId: this.id$.value,\n templateIds: []\n }, false)\n });\n }\n\n public ngAfterViewChecked() {\n // Make sure the view is rendered before posting the status\n this.afterViewInit$.next();\n }\n\n /** @inheritdoc */\n public ngOnDestroy() {\n this.id$.complete();\n this.messages$.complete();\n this.afterViewInit$.complete();\n }\n}\n","<ng-template #projection>\n <ng-content></ng-content>\n</ng-template>\n@switch (mode()) {\n @case ('debug') {\n <span class=\"placehoder-id\">{{ id$ | async }}</span>\n }\n @case ('pending') {\n <ng-container *ngTemplateOutlet=\"projection\" />\n }\n @case ('normal') {\n @if (isPending) {\n <ng-container *ngTemplateOutlet=\"projection\" />\n } @else {\n <div [innerHTML]=\"template\"></div>\n }\n }\n}\n","import {\n CommonModule,\n} from '@angular/common';\nimport {\n NgModule,\n} from '@angular/core';\nimport {\n StoreModule,\n} from '@ngrx/store';\nimport {\n PlaceholderRequestStoreModule,\n} from '../../stores/placeholder-request/index';\nimport {\n PlaceholderTemplateStoreModule,\n} from '../../stores/placeholder-template/index';\nimport {\n PlaceholderComponent,\n} from './placeholder.component';\n\n@NgModule({\n imports: [\n CommonModule,\n StoreModule,\n PlaceholderTemplateStoreModule,\n PlaceholderRequestStoreModule\n ],\n declarations: [PlaceholderComponent],\n exports: [PlaceholderComponent]\n})\nexport class PlaceholderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["actions.cancelPlaceholderRequest","actions.updatePlaceholderRequestEntity","actions.updatePlaceholderRequestEntitySync","actions.setPlaceholderRequestEntityFromUrl","actions.failPlaceholderRequestEntity","selectEntities","actions.setPlaceholderTemplateEntity","actions.deletePlaceholderTemplateEntity","actions.togglePlaceholderModeTemplate"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@o3r/components",
3
- "version": "12.1.10",
3
+ "version": "12.1.12",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -45,16 +45,15 @@
45
45
  "@ngrx/effects": "^19.0.0",
46
46
  "@ngrx/entity": "^19.0.0",
47
47
  "@ngrx/store": "^19.0.0",
48
- "@o3r/analytics": "^12.1.10",
49
- "@o3r/configuration": "^12.1.10",
50
- "@o3r/core": "^12.1.10",
51
- "@o3r/dynamic-content": "^12.1.10",
52
- "@o3r/extractors": "^12.1.10",
53
- "@o3r/localization": "^12.1.10",
54
- "@o3r/logger": "^12.1.10",
55
- "@o3r/rules-engine": "^12.1.10",
56
- "@o3r/schematics": "^12.1.10",
57
- "@o3r/testing": "^12.1.10",
48
+ "@o3r/analytics": "^12.1.12",
49
+ "@o3r/configuration": "^12.1.12",
50
+ "@o3r/core": "^12.1.12",
51
+ "@o3r/dynamic-content": "^12.1.12",
52
+ "@o3r/extractors": "^12.1.12",
53
+ "@o3r/localization": "^12.1.12",
54
+ "@o3r/logger": "^12.1.12",
55
+ "@o3r/rules-engine": "^12.1.12",
56
+ "@o3r/schematics": "^12.1.12",
58
57
  "@schematics/angular": "^19.0.0",
59
58
  "@yarnpkg/cli": "^4.0.0",
60
59
  "@yarnpkg/core": "^4.1.1",
@@ -67,6 +66,7 @@
67
66
  "rxjs": "^7.8.1",
68
67
  "semver": "^7.5.2",
69
68
  "ts-node": "~10.9.2",
69
+ "type-fest": "^4.30.1",
70
70
  "typescript": "^5.5.4"
71
71
  },
72
72
  "peerDependenciesMeta": {
@@ -130,6 +130,9 @@
130
130
  "semver": {
131
131
  "optional": true
132
132
  },
133
+ "type-fest": {
134
+ "optional": true
135
+ },
133
136
  "typescript": {
134
137
  "optional": true
135
138
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../schematics/ng-add/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,IAAI,EAGL,MAAM,4BAA4B,CAAC;AAapC,OAAO,KAAK,EACV,qBAAqB,EACtB,MAAM,UAAU,CAAC;AA4ElB;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,SAAS,qBAAqB,KAAG,IAKtD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../schematics/ng-add/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,IAAI,EAGL,MAAM,4BAA4B,CAAC;AAapC,OAAO,KAAK,EACV,qBAAqB,EACtB,MAAM,UAAU,CAAC;AA4GlB;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,SAAS,qBAAqB,KAAG,IAKtD,CAAC"}
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
5
5
  const fs = tslib_1.__importStar(require("node:fs"));
6
6
  const path = tslib_1.__importStar(require("node:path"));
7
7
  const schematics_1 = require("@angular-devkit/schematics");
8
+ const schematics_2 = require("@o3r/schematics");
8
9
  const cms_adapter_1 = require("../cms-adapter");
9
10
  const devtools_registration_1 = require("./helpers/devtools-registration");
10
11
  const reportMissingSchematicsDep = (logger) => (reason) => {
@@ -13,6 +14,27 @@ If the error is related to missing @o3r dependencies you need to install '@o3r/c
13
14
  Otherwise, use the error message as guidance.`);
14
15
  throw reason;
15
16
  };
17
+ /**
18
+ * List of external dependencies to be added to the project as peer dependencies
19
+ */
20
+ const dependenciesToInstall = [
21
+ '@angular/cdk',
22
+ '@angular/common',
23
+ '@angular/core',
24
+ '@angular/forms',
25
+ '@angular/platform-browser',
26
+ '@angular/platform-browser-dynamic',
27
+ '@ngrx/effects',
28
+ '@ngrx/entity',
29
+ '@ngrx/store',
30
+ 'rxjs'
31
+ ];
32
+ /**
33
+ * List of external dependencies to be added to the project as dev dependencies
34
+ */
35
+ const devDependenciesToInstall = [
36
+ 'chokidar'
37
+ ];
16
38
  /**
17
39
  * Add Otter components to an Angular Project
18
40
  * @param options
@@ -20,49 +42,54 @@ Otherwise, use the error message as guidance.`);
20
42
  function ngAddFn(options) {
21
43
  /* ng add rules */
22
44
  return async (tree, context) => {
23
- const { getDefaultOptionsForSchematic, getO3rPeerDeps, getProjectNewDependenciesTypes, getWorkspaceConfig, setupDependencies, removePackages, registerPackageCollectionSchematics, getPackageInstallConfig } = await Promise.resolve().then(() => tslib_1.__importStar(require('@o3r/schematics')));
24
- const { NodeDependencyType } = await Promise.resolve().then(() => tslib_1.__importStar(require('@schematics/angular/utility/dependencies'))).catch(() => ({ NodeDependencyType: { Dev: 'devDependencies' } }));
45
+ const { getDefaultOptionsForSchematic, getExternalDependenciesInfo, getO3rPeerDeps, getProjectNewDependenciesTypes, getWorkspaceConfig, setupDependencies, removePackages, registerPackageCollectionSchematics, getPackageInstallConfig } = await Promise.resolve().then(() => tslib_1.__importStar(require('@o3r/schematics')));
25
46
  options = { ...getDefaultOptionsForSchematic(getWorkspaceConfig(tree), '@o3r/components', 'ng-add', options), ...options };
26
47
  const packageJsonPath = path.resolve(__dirname, '..', '..', 'package.json');
27
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, { encoding: 'utf8' }));
28
- const depsInfo = getO3rPeerDeps(packageJsonPath);
48
+ const o3rPackageJson = JSON.parse(fs.readFileSync(packageJsonPath, { encoding: 'utf8' }));
49
+ const o3rPeerDeps = getO3rPeerDeps(packageJsonPath);
29
50
  if (options.enableMetadataExtract) {
30
- depsInfo.o3rPeerDeps = [...depsInfo.o3rPeerDeps, '@o3r/extractors'];
51
+ o3rPeerDeps.o3rPeerDeps = [...o3rPeerDeps.o3rPeerDeps, '@o3r/extractors'];
31
52
  }
32
53
  const workspaceProject = options.projectName ? getWorkspaceConfig(tree)?.projects[options.projectName] : undefined;
33
- const dependencies = depsInfo.o3rPeerDeps.reduce((acc, dep) => {
54
+ const dependencies = o3rPeerDeps.o3rPeerDeps.reduce((acc, dep) => {
34
55
  acc[dep] = {
35
56
  inManifest: [{
36
- range: `${options.exactO3rVersion ? '' : '~'}${depsInfo.packageVersion}`,
57
+ range: `${options.exactO3rVersion ? '' : '~'}${o3rPeerDeps.packageVersion}`,
37
58
  types: getProjectNewDependenciesTypes(workspaceProject)
38
59
  }],
39
60
  ngAddOptions: { exactO3rVersion: options.exactO3rVersion }
40
61
  };
41
62
  return acc;
42
63
  }, getPackageInstallConfig(packageJsonPath, tree, options.projectName, false, !!options.exactO3rVersion));
43
- const devDependencies = {
44
- chokidar: {
45
- inManifest: [{
46
- range: packageJson.peerDependencies.chokidar,
47
- types: [NodeDependencyType.Dev]
48
- }]
49
- }
50
- };
64
+ const projectDirectory = workspaceProject?.root || '.';
65
+ const projectPackageJson = tree.readJson(path.posix.join(projectDirectory, 'package.json'));
66
+ const externalDependenciesInfo = getExternalDependenciesInfo({
67
+ devDependenciesToInstall,
68
+ dependenciesToInstall,
69
+ projectPackageJson,
70
+ o3rPackageJsonPath: packageJsonPath,
71
+ projectType: workspaceProject?.projectType
72
+ }, context.logger);
51
73
  const rule = (0, schematics_1.chain)([
52
74
  removePackages(['@otter/components']),
53
75
  setupDependencies({
54
76
  projectName: options.projectName,
55
77
  dependencies: {
56
78
  ...dependencies,
57
- ...devDependencies
79
+ ...externalDependenciesInfo
58
80
  },
59
- ngAddToRun: depsInfo.o3rPeerDeps
81
+ ngAddToRun: o3rPeerDeps.o3rPeerDeps
60
82
  }),
61
- registerPackageCollectionSchematics(packageJson),
83
+ registerPackageCollectionSchematics(o3rPackageJson),
84
+ (0, schematics_2.setupSchematicsParamsForProject)({
85
+ '@o3r/core:component': {},
86
+ '@o3r/core:component-container': {},
87
+ '@o3r/core:component-presenter': {}
88
+ }, options.projectName),
62
89
  ...(options.enableMetadataExtract ? [(0, cms_adapter_1.updateCmsAdapter)(options)] : []),
63
90
  await (0, devtools_registration_1.registerDevtools)(options)
64
91
  ]);
65
- context.logger.info(`The package ${depsInfo.packageName} comes with a debug mechanism`);
92
+ context.logger.info(`The package ${o3rPeerDeps.packageName} comes with a debug mechanism`);
66
93
  context.logger.info('Get more information on the following page: https://github.com/AmadeusITGroup/otter/tree/main/docs/components/INTRODUCTION.md#Runtime-debugging');
67
94
  return () => rule(tree, context);
68
95
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../schematics/ng-add/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../schematics/ng-add/index.ts"],"names":[],"mappings":"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"}