{"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/highlight/constants.ts","../../src/devkit/highlight/helpers.ts","../../src/devkit/highlight/highlight.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.ts","../../src/tools/placeholder/placeholder.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 type {\n  GroupInfo,\n} from './highlight/models';\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 highlight\n */\nexport interface ToggleHighlightMessage extends OtterMessageContent<'toggleHighlight'> {\n  /** Is the highlight displayed */\n  isRunning: boolean;\n}\n\n/**\n * Message the change the configuration of the `HighlightService`\n */\nexport interface ChangeHighlightConfiguration extends OtterMessageContent<'changeHighlightConfiguration'> {\n  /**\n   * Minimum width of HTMLElement to be considered\n   */\n  elementMinWidth?: number;\n  /**\n   * Minimum height of HTMLElement to be considered\n   */\n  elementMinHeight?: number;\n  /**\n   * Throttle interval\n   */\n  throttleInterval?: number;\n  /**\n   * Group information to detect elements\n   */\n  groupsInfo?: Record<string, GroupInfo>;\n  /**\n   * Maximum number of ancestors\n   */\n  maxDepth?: number;\n  /**\n   * Opacity of the chips\n   */\n  chipsOpacity?: number;\n  /**\n   * Auto refresh\n   */\n  autoRefresh?: 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 = IsComponentSelectionAvailableMessage\n  | SelectedComponentInfoMessage\n  | ToggleInspectorMessage\n  | ToggleHighlightMessage\n  | ChangeHighlightConfiguration\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 = 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    || message.dataType === 'toggleHighlight'\n    || message.dataType === 'changeHighlightConfiguration'\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} 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 = placeholderRequestAdapter.getInitialState<PlaceholderRequestState>({\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<PlaceholderRequestState>(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 = placeholderTemplateAdapter.getInitialState<PlaceholderTemplateState>({\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.toSorted((template1, template2) => {\n      return (template2.priority - template1.priority) || 1;\n    }).filter((templateData) => !!templateData.renderedTemplate);\n\n    return { orderedTemplates, isPending };\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<PlaceholderTemplateState>(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","/**\n * Class applied on the wrapper of highlight elements\n */\nexport const HIGHLIGHT_WRAPPER_CLASS = 'highlight-wrapper';\n\n/**\n * Class applied on the overlay elements\n */\nexport const HIGHLIGHT_OVERLAY_CLASS = 'highlight-overlay';\n\n/**\n * Class applied on the chip elements\n */\nexport const HIGHLIGHT_CHIP_CLASS = 'highlight-chip';\n\n/**\n * Default value for maximum number of ancestors\n */\nexport const DEFAULT_MAX_DEPTH = 10;\n\n/**\n * Default value for element min height\n */\nexport const DEFAULT_ELEMENT_MIN_HEIGHT = 30;\n/**\n * Default value for element min width\n */\nexport const DEFAULT_ELEMENT_MIN_WIDTH = 60;\n/**\n * Default value for throttle interval\n */\nexport const DEFAULT_THROTTLE_INTERVAL = 500;\n/**\n * Default value for chips opacity\n */\nexport const DEFAULT_CHIPS_OPACITY = 1;\n/**\n * Default value for auto refresh activation\n */\nexport const DEFAULT_AUTO_REFRESH = true;\n","import {\n  HIGHLIGHT_CHIP_CLASS,\n  HIGHLIGHT_OVERLAY_CLASS,\n  HIGHLIGHT_WRAPPER_CLASS,\n} from './constants';\nimport type {\n  ElementWithGroupInfo,\n  GroupInfo,\n} from './models';\n\n/**\n * Retrieve the identifier of the element\n * @param element\n */\nexport function getIdentifier(element: ElementWithGroupInfo): string {\n  const { tagName, attributes, classList } = element.htmlElement;\n  const regexp = new RegExp(element.regexp, 'i');\n  if (!regexp.test(tagName)) {\n    const attribute = Array.from(attributes).find((attr) => regexp.test(attr.name));\n    if (attribute) {\n      return `${attribute.name}${attribute.value ? `=\"${attribute.value}\"` : ''}`;\n    }\n    const className = Array.from(classList).find((cName) => regexp.test(cName));\n    if (className) {\n      return className;\n    }\n  }\n  return tagName;\n}\n\n/**\n * Filters a list of HTML elements and returns those that match specific group information.\n *\n * Each element is checked against a set of criteria:\n * - The element's dimensions must meet the minimum height and width requirements.\n * - The element's tag name, attributes, or class names must match a regular expression defined in the group information.\n * @param elements An array of HTML elements to filter.\n * @param elementMinHeight The min height required for each element to be considered in the computation\n * @param elementMinWidth The min width required for each element to be considered in the computation\n * @param groupsInfo The config that describes the HTML tags to check\n * @returns An array of objects containing the matching elements and their associated group information\n */\nexport function filterElementsWithInfo(elements: HTMLElement[], elementMinHeight: number, elementMinWidth: number, groupsInfo: Record<string, GroupInfo>): ElementWithGroupInfo[] {\n  return elements.reduce((acc: ElementWithGroupInfo[], element) => {\n    const { height, width } = element.getBoundingClientRect();\n\n    if (height < elementMinHeight || width < elementMinWidth) {\n      return acc;\n    }\n    const elementInfo = Object.values(groupsInfo).find((info) => {\n      const regexp = new RegExp(info.regexp, 'i');\n\n      return regexp.test(element.tagName)\n        || Array.from(element.attributes).some((attr) => regexp.test(attr.name))\n        || Array.from(element.classList).some((cName) => regexp.test(cName));\n    });\n    if (elementInfo) {\n      return acc.concat({ ...elementInfo, htmlElement: element });\n    }\n    return acc;\n  }, []);\n}\n\n/**\n * Compute the number of ancestors of a given element based on a list of elements\n * @param element\n * @param elementList\n */\nexport function computeNumberOfAncestors(element: HTMLElement, elementList: HTMLElement[]) {\n  return elementList.filter((el: HTMLElement) => el.contains(element)).length;\n}\n\n/**\n * Throttle {@link fn} with a {@link delay}\n * @param fn method to run\n * @param delay given in ms\n */\nexport function throttle<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void {\n  let timerFlag: ReturnType<typeof setTimeout> | null = null;\n\n  const throttleFn = (...args: Parameters<T>) => {\n    if (timerFlag === null) {\n      fn(...args);\n      timerFlag = setTimeout(() => {\n        timerFlag = null;\n      }, delay);\n    }\n  };\n  return throttleFn;\n}\n\n/**\n * Run {@link refreshFn} if {@link mutations} implies to refresh elements inside {@link highlightWrapper}\n * @param mutations\n * @param highlightWrapper\n * @param refreshFn\n */\nexport function runRefreshIfNeeded(mutations: MutationRecord[], highlightWrapper: Element | null, refreshFn: () => void) {\n  if (\n    mutations.some((mutation) =>\n      mutation.target !== highlightWrapper\n      || (\n        mutation.target === document.body\n        && Array.from<HTMLElement>(mutation.addedNodes.values() as any)\n          .concat(...mutation.removedNodes.values() as any)\n          .some((node) => !node.classList.contains(HIGHLIGHT_WRAPPER_CLASS))\n      )\n    )\n  ) {\n    refreshFn();\n  }\n}\n\n/**\n * Options to create an overlay element\n */\nexport interface CreateOverlayOptions {\n  top: string;\n  left: string;\n  position: string;\n  width: string;\n  height: string;\n  backgroundColor: string;\n}\n\n/**\n * Create an overlay element\n * @param doc HTML Document\n * @param opts\n * @param depth\n */\nexport function createOverlay(doc: Document, opts: CreateOverlayOptions, depth: number) {\n  const overlay = doc.createElement('div');\n  overlay.classList.add(HIGHLIGHT_OVERLAY_CLASS);\n  // All static style could be moved in a <style>\n  overlay.style.top = opts.top;\n  overlay.style.left = opts.left;\n  overlay.style.width = opts.width;\n  overlay.style.height = opts.height;\n  overlay.style.border = `2px ${depth % 2 === 0 ? 'solid' : 'dotted'} ${opts.backgroundColor}`;\n  overlay.style.zIndex = '10000';\n  overlay.style.position = opts.position;\n  overlay.style.pointerEvents = 'none';\n  return overlay;\n}\n\n/**\n * Options to create a chip element\n */\nexport interface CreateChipOptions {\n  displayName: string;\n  depth: number;\n  top: string;\n  left: string;\n  position: string;\n  backgroundColor: string;\n  color?: string;\n  name: string;\n  opacity?: number;\n}\n\n/**\n * Create a chip element\n * @param doc HTML Document\n * @param opts\n * @param overlay\n */\nexport function createChip(doc: Document, opts: CreateChipOptions, overlay: HTMLDivElement) {\n  const chip = doc.createElement('div');\n  chip.classList.add(HIGHLIGHT_CHIP_CLASS);\n  chip.textContent = `${opts.displayName} ${opts.depth}`;\n  // All static style could be moved in a <style>\n  chip.style.top = opts.top;\n  chip.style.left = opts.left;\n  chip.style.backgroundColor = opts.backgroundColor;\n  chip.style.color = opts.color ?? '#FFF';\n  chip.style.position = opts.position;\n  chip.style.display = 'inline-block';\n  chip.style.padding = '2px 4px';\n  chip.style.borderRadius = '0 0 4px';\n  chip.style.cursor = 'pointer';\n  chip.style.zIndex = '10000';\n  chip.style.textWrap = 'no-wrap';\n  chip.style.opacity = opts.opacity?.toString() ?? '1';\n  chip.title = opts.name;\n  chip.addEventListener('click', () => {\n    // Should we log in the console as well ?\n    void navigator.clipboard.writeText(opts.name);\n  });\n  chip.addEventListener('mouseover', () => {\n    chip.style.opacity = '1';\n    overlay.style.boxShadow = `0 0 10px 3px ${opts.backgroundColor}`;\n  });\n  chip.addEventListener('mouseout', () => {\n    chip.style.opacity = opts.opacity?.toString() ?? '1';\n    overlay.style.boxShadow = 'none';\n  });\n  overlay.style.transition = 'box-shadow 0.3s ease-in-out';\n\n  return chip;\n}\n","import {\n  DOCUMENT,\n} from '@angular/common';\nimport {\n  DestroyRef,\n  inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  DEFAULT_AUTO_REFRESH,\n  DEFAULT_CHIPS_OPACITY,\n  DEFAULT_ELEMENT_MIN_HEIGHT,\n  DEFAULT_ELEMENT_MIN_WIDTH,\n  DEFAULT_MAX_DEPTH,\n  DEFAULT_THROTTLE_INTERVAL,\n  HIGHLIGHT_WRAPPER_CLASS,\n} from './constants';\nimport {\n  computeNumberOfAncestors,\n  createChip,\n  createOverlay,\n  filterElementsWithInfo,\n  getIdentifier,\n  runRefreshIfNeeded,\n  throttle,\n} from './helpers';\nimport type {\n  ElementWithGroupInfo,\n  ElementWithGroupInfoAndDepth,\n  GroupInfo,\n} from './models';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class HighlightService {\n  /**\n   * Group information\n   * Value could be changed through chrome extension options\n   */\n  public groupsInfo: Record<string, GroupInfo> = {};\n\n  /**\n   * Maximum number of components ancestor\n   * Value could be changed through chrome extension view\n   */\n  public maxDepth = DEFAULT_MAX_DEPTH;\n\n  /**\n   * Element min height to be considered\n   * Value could be changed through chrome extension options\n   */\n  public elementMinHeight = DEFAULT_ELEMENT_MIN_HEIGHT;\n\n  /**\n   * Element min width to be considered\n   * Value could be changed through chrome extension options\n   */\n  public elementMinWidth = DEFAULT_ELEMENT_MIN_WIDTH;\n\n  /**\n   * Throttle interval to refresh the highlight elements\n   * Value could be changed through chrome extension options\n   */\n  public throttleInterval = DEFAULT_THROTTLE_INTERVAL;\n\n  /**\n   * Opacity of the chips\n   * Value could be changed through chrome extension options\n   */\n  public chipsOpacity = DEFAULT_CHIPS_OPACITY;\n\n  /**\n   * Whether to activate the auto refresh of the highlight\n   * Value could be changed through chrome extension view\n   */\n  public autoRefresh = DEFAULT_AUTO_REFRESH;\n\n  private throttleRun: (() => void) | undefined;\n  private singleRun = false;\n\n  private readonly document = inject(DOCUMENT);\n\n  private readonly mutationObserver = new MutationObserver((mutations) =>\n    runRefreshIfNeeded(\n      mutations,\n      this.getHighlightWrapper(),\n      () => this.throttleRun?.()\n    )\n  );\n\n  private readonly resizeObserver = new ResizeObserver(() => this.throttleRun?.());\n\n  constructor() {\n    inject(DestroyRef).onDestroy(() => this.stop());\n  }\n\n  private getHighlightWrapper() {\n    return this.document.body.querySelector(`.${HIGHLIGHT_WRAPPER_CLASS}`);\n  }\n\n  private cleanHighlightWrapper() {\n    this.getHighlightWrapper()?.querySelectorAll('*').forEach((node) => node.remove());\n  }\n\n  private initializeHighlightWrapper() {\n    let wrapper = this.getHighlightWrapper();\n    if (!wrapper) {\n      wrapper = this.document.createElement('div');\n      wrapper.classList.add(HIGHLIGHT_WRAPPER_CLASS);\n      this.document.body.append(wrapper);\n    }\n    this.cleanHighlightWrapper();\n  }\n\n  private run() {\n    this.initializeHighlightWrapper();\n    const wrapper = this.getHighlightWrapper()!;\n\n    // We have to select all elements from document because\n    // with CSS Selector it's impossible to select element\n    // by regex on their `tagName`, attribute name or attribute value.\n    const allHTMLElements: HTMLElement[] = Array.from(this.document.body.querySelectorAll<HTMLElement>('*'));\n    const elementsWithInfo: ElementWithGroupInfo[] = filterElementsWithInfo(allHTMLElements, this.elementMinHeight, this.elementMinWidth, this.groupsInfo);\n\n    const elementsWithInfoAndDepth = elementsWithInfo\n      .reduce((acc: ElementWithGroupInfoAndDepth[], elementWithInfo, _, array) => {\n        const depth = computeNumberOfAncestors(elementWithInfo.htmlElement, array.map((e) => e.htmlElement));\n        if (depth <= this.maxDepth) {\n          return acc.concat({\n            ...elementWithInfo,\n            depth\n          });\n        }\n        return acc;\n      }, []);\n\n    const overlayData: Record<string, { chip: HTMLElement; overlay: HTMLElement; depth: number }[]> = {};\n\n    elementsWithInfoAndDepth.forEach((item) => {\n      const { htmlElement: element, backgroundColor, color, displayName, depth } = item;\n      const rect = element.getBoundingClientRect();\n      const position = element.computedStyleMap().get('position')?.toString() === 'fixed' ? 'fixed' : 'absolute';\n      const top = `${position === 'fixed' ? rect.top : (rect.top + window.scrollY)}px`;\n      const left = `${position === 'fixed' ? rect.left : (rect.left + window.scrollX)}px`;\n\n      const overlay = createOverlay(this.document, {\n        top, left, width: `${rect.width}px`, height: `${rect.height}px`, position, backgroundColor\n      }, depth);\n\n      const chip = createChip(this.document, {\n        displayName,\n        depth,\n        top,\n        left,\n        backgroundColor,\n        color,\n        position,\n        name: getIdentifier(item),\n        opacity: this.chipsOpacity\n      }, overlay);\n\n      wrapper.append(overlay);\n      wrapper.append(chip);\n\n      const positionKey = `${top};${left}`;\n      if (!overlayData[positionKey]) {\n        overlayData[positionKey] = [];\n      }\n      overlayData[positionKey].push({ chip, overlay, depth });\n    });\n\n    Object.values(overlayData).forEach((chips) => {\n      chips\n        .toSorted(({ depth: depthA }, { depth: depthB }) => depthA - depthB)\n        .forEach(({ chip, overlay }, index, array) => {\n          if (index !== 0) {\n            // In case of overlap,\n            // we should translate the chip to have it visible\n            // and reduce the size of the overlay.\n            const translateX = array.slice(0, index).reduce((sum, e) => sum + e.chip.getBoundingClientRect().width, 0);\n            chip.style.transform = `translateX(${translateX}px)`;\n            overlay.style.margin = `${index}px 0 0 ${index}px`;\n            overlay.style.width = `${+overlay.style.width.replace('px', '') - 2 * index}px`;\n            overlay.style.height = `${+overlay.style.height.replace('px', '') - 2 * index}px`;\n            overlay.style.zIndex = `${+overlay.style.zIndex - index}`;\n          }\n        });\n    });\n  }\n\n  /**\n   * Returns true if the highlight is displayed\n   */\n  public isRunning() {\n    return !!this.throttleRun || this.singleRun;\n  }\n\n  /**\n   * Start the highlight of elements\n   */\n  public start() {\n    this.stop();\n    if (!this.autoRefresh) {\n      this.run();\n      this.singleRun = true;\n      return;\n    }\n\n    this.throttleRun = throttle(() => this.run(), this.throttleInterval);\n    this.throttleRun();\n    this.document.addEventListener('scroll', this.throttleRun, true);\n    this.resizeObserver.observe(this.document.body);\n    this.mutationObserver.observe(this.document.body, { childList: true, subtree: true });\n  }\n\n  /**\n   * Stop the highlight of elements\n   */\n  public stop() {\n    this.cleanHighlightWrapper();\n    if (this.throttleRun) {\n      this.document.removeEventListener('scroll', this.throttleRun, true);\n      this.resizeObserver.disconnect();\n      this.mutationObserver.disconnect();\n      this.throttleRun = undefined;\n      this.singleRun = false;\n    }\n  }\n}\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  Injectable,\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  HighlightService,\n} from './highlight/highlight';\nimport {\n  OtterInspectorService,\n  OtterLikeComponentInfo,\n} from './inspector';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ComponentsDevtoolsMessageService implements DevtoolsServiceInterface {\n  private readonly logger = inject(LoggerService);\n  private readonly store = inject<Store<PlaceholderTemplateState>>(Store);\n\n  private readonly options: ComponentsDevtoolsServiceOptions;\n  private readonly inspectorService: OtterInspectorService;\n  private readonly sendMessage = sendOtterMessage<AvailableComponentsMessageContents>;\n\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly highlightService = inject(HighlightService);\n\n  constructor() {\n    const options = inject<ComponentsDevtoolsServiceOptions>(OTTER_COMPONENTS_DEVTOOLS_OPTIONS, { optional: true });\n\n    this.options = {\n      ...OTTER_COMPONENTS_DEVTOOLS_DEFAULT_OPTIONS,\n      ...options\n    };\n\n    this.inspectorService = new OtterInspectorService();\n\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 'toggleHighlight': {\n        if (message.isRunning) {\n          this.highlightService.start();\n        } else {\n          this.highlightService.stop();\n        }\n        break;\n      }\n      case 'changeHighlightConfiguration': {\n        if (message.elementMinWidth) {\n          this.highlightService.elementMinWidth = message.elementMinWidth;\n        }\n        if (message.elementMinHeight) {\n          this.highlightService.elementMinHeight = message.elementMinHeight;\n        }\n        if (message.throttleInterval) {\n          this.highlightService.throttleInterval = message.throttleInterval;\n        }\n        if (message.groupsInfo) {\n          this.highlightService.groupsInfo = message.groupsInfo;\n        }\n        if (message.maxDepth) {\n          this.highlightService.maxDepth = message.maxDepth;\n        }\n        if (message.chipsOpacity) {\n          this.highlightService.chipsOpacity = message.chipsOpacity;\n        }\n        if (message.autoRefresh !== undefined) {\n          this.highlightService.autoRefresh = message.autoRefresh;\n        }\n        if (this.highlightService.isRunning()) {\n          // Re-start to recompute the highlight with the new configuration\n          this.highlightService.start();\n        }\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  type EventEmitter,\n  forwardRef,\n  inject,\n  Injector,\n  Input,\n  type InputSignal,\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/**\n * Minimum interface for components used with c11n directive\n */\ninterface C11nComponent {\n  [key: string]: any;\n  config?: any;\n  validate?: (control: AbstractControl) => any;\n}\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})\nexport class C11nDirective<\n  D extends Configuration = Configuration,\n  I extends ContextInput = ContextInput,\n  O extends BaseContextOutput = BaseContextOutput,\n  T extends C11nComponent = Context<I, O>> implements OnChanges, OnDestroy {\n  private readonly viewContainerRef = inject(ViewContainerRef);\n  private readonly differsService = inject(KeyValueDiffers);\n  private readonly injector = inject(Injector);\n\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] | InputSignal<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] | InputSignal<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] | InputSignal<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  /**\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)\n          .map((outputName) => (this.componentRef.instance[outputName] as EventEmitter<any>).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<D>(this.componentRef.instance.config as D, 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 = inject<Map<string, any>>(C11N_PRESENTERS_MAP_TOKEN);\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  Injector,\n  makeEnvironmentProviders,\n  type Type,\n} from '@angular/core';\nimport type {\n  Context,\n} from '@o3r/core';\nimport {\n  C11nService,\n} from './c11n-service';\nimport {\n  C11N_PRESENTERS_MAP_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  const injector = Injector.create({\n    providers: [\n      { provide: C11N_PRESENTERS_MAP_TOKEN, useValue: (config ? config.registerCompFunc() : new Map()) },\n      { provide: C11nService, deps: [C11N_PRESENTERS_MAP_TOKEN] }\n    ]\n  });\n  return injector.get(C11nService);\n}\n\n/**\n * Returns a tuple of the key and the component\n * @note should be used with {@link provideCustomComponents}\n * @example\n * ```typescript\n * provideCustomComponents(\n *   new Map(),\n *   withComponent('example1', MyFirstComponent),\n *   withComponent('example2', MySecondComponent),\n * )\n * ```\n * @param customComponentKey\n * @param customComponent\n */\nexport function withComponent<T extends Context>(customComponentKey: string, customComponent: Type<T>): [string, Type<T>] {\n  return [customComponentKey, customComponent];\n}\n\n/**\n * Provide custom components which will be injected in c11n service\n * @param customComponents\n * @param additionalComponents\n */\nexport function provideCustomComponents(customComponents: Map<string, any> = new Map(), ...additionalComponents: (ReturnType<typeof withComponent>)[]) {\n  additionalComponents.forEach(([customComponentKey, customComponent]) => customComponents.set(customComponentKey, customComponent));\n  return makeEnvironmentProviders([\n    C11nService,\n    {\n      provide: C11N_PRESENTERS_MAP_TOKEN,\n      useValue: customComponents\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.html',\n  styleUrl: './placeholder.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  private readonly store = inject<Store<PlaceholderTemplateStore>>(Store);\n  private readonly cd = inject(ChangeDetectorRef);\n\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() {\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          takeUntilDestroyed(this.destroyRef),\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 />\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';\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","i1"],"mappings":"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"}