{"version":3,"file":"igo2-context.mjs","sources":["../../../packages/context/src/lib/share-map/shared/share-map.interface.ts","../../../packages/context/src/lib/share-map/shared/share-map-definitions.ts","../../../packages/context/src/lib/share-map/shared/share-map.utils.ts","../../../packages/context/src/lib/share-map/shared/share-map-encoder.ts","../../../packages/context/src/lib/share-map/shared/share-map-legacy.service.ts","../../../packages/context/src/lib/share-map/shared/share-map-parser.ts","../../../packages/context/src/lib/share-map/shared/share-map.service.ts","../../../packages/context/src/lib/context-manager/shared/context.service.ts","../../../packages/context/src/lib/context-import-export/shared/context-export.errors.ts","../../../packages/context/src/lib/context-import-export/shared/context-export.service.ts","../../../packages/context/src/lib/context-import-export/shared/context-export.utils.ts","../../../packages/context/src/lib/context-import-export/shared/context-import.errors.ts","../../../packages/context/src/lib/context-import-export/shared/context-import.utils.ts","../../../packages/context/src/lib/context-import-export/shared/context-import.service.ts","../../../packages/context/src/lib/context-import-export/context-import-export/context-import-export.component.ts","../../../packages/context/src/lib/context-import-export/context-import-export/context-import-export.component.html","../../../packages/context/src/lib/context-import-export/context-import-export.module.ts","../../../packages/context/src/lib/context-manager/context-form/context-form.component.ts","../../../packages/context/src/lib/context-manager/context-form/context-form.component.html","../../../packages/context/src/lib/context-manager/shared/context.enum.ts","../../../packages/context/src/lib/context-manager/shared/layer-context.directive.ts","../../../packages/context/src/lib/context-manager/shared/map-context.directive.ts","../../../packages/context/src/lib/context-manager/context-edit/context-edit.component.ts","../../../packages/context/src/lib/context-manager/context-edit/context-edit.component.html","../../../packages/context/src/lib/context-manager/context-item/context-item.component.ts","../../../packages/context/src/lib/context-manager/context-item/context-item.component.html","../../../packages/context/src/lib/context-map-button/bookmark-button/bookmark-dialog.component.ts","../../../packages/context/src/lib/context-map-button/bookmark-button/bookmark-dialog.component.html","../../../packages/context/src/lib/context-manager/context-list/context-list.enum.ts","../../../packages/context/src/lib/context-manager/context-list/context-list.component.ts","../../../packages/context/src/lib/context-manager/context-list/context-list.component.html","../../../packages/context/src/lib/context-manager/context-permissions/context-permission-item/context-permission-item.component.ts","../../../packages/context/src/lib/context-manager/context-permissions/context-permission-item/context-permission-item.component.html","../../../packages/context/src/lib/context-manager/context-permissions/context-permission.service.ts","../../../packages/context/src/lib/context-manager/context-permissions/context-permissions.component.ts","../../../packages/context/src/lib/context-manager/context-permissions/context-permissions.component.html","../../../packages/context/src/lib/context-manager/context-manager.module.ts","../../../packages/context/src/lib/context-map-button/bookmark-button/bookmark-button.component.ts","../../../packages/context/src/lib/context-map-button/bookmark-button/bookmark-button.component.html","../../../packages/context/src/lib/context-map-button/poi-button/poi-dialog.component.ts","../../../packages/context/src/lib/context-map-button/poi-button/poi-dialog.component.html","../../../packages/context/src/lib/context-map-button/poi-button/shared/poi.service.ts","../../../packages/context/src/lib/context-map-button/poi-button/poi-button.component.ts","../../../packages/context/src/lib/context-map-button/poi-button/poi-button.component.html","../../../packages/context/src/lib/context-map-button/user-button/user-button.animation.ts","../../../packages/context/src/lib/context-map-button/user-button/user-dialog.component.ts","../../../packages/context/src/lib/context-map-button/user-button/user-dialog.component.html","../../../packages/context/src/lib/context-map-button/user-button/user-button.component.ts","../../../packages/context/src/lib/context-map-button/user-button/user-button.component.html","../../../packages/context/src/lib/context-map-button/context-map-button.module.ts","../../../packages/context/src/lib/share-map/share-map/share-map-url.component.ts","../../../packages/context/src/lib/share-map/share-map/share-map-url.component.html","../../../packages/context/src/lib/share-map/share-map/share-map.component.ts","../../../packages/context/src/lib/share-map/share-map/share-map.component.html","../../../packages/context/src/lib/share-map/share-map.module.ts","../../../packages/context/src/lib/sidenav/sidenav.component.ts","../../../packages/context/src/lib/sidenav/sidenav.component.html","../../../packages/context/src/lib/sidenav/sidenav.module.ts","../../../packages/context/src/lib/context.module.ts","../../../packages/context/src/lib/context-manager/context-manager.directive.ts","../../../packages/context/src/lib/context-map-button/context-map-button.directive.ts","../../../packages/context/src/public_api.ts","../../../packages/context/src/igo2-context.ts"],"sourcesContent":["import { RouteServiceOptions } from '@igo2/core/route';\nimport { LayerGroupOptions, LayerOptions } from '@igo2/geo';\n\nexport const ServiceType = [\n  'wms',\n  'wmts',\n  'arcgisrest',\n  'imagearcgisrest',\n  'tilearcgisrest'\n] as const;\nexport type ServiceType = (typeof ServiceType)[number];\n\nexport enum ServiceTypeEnum {\n  wms = 0,\n  wmts = 1,\n  arcgisrest = 2,\n  imagearcgisrest = 3,\n  tilearcgisrest = 4\n}\n\nconst BaseLayerParamsKeys = [\n  'visible',\n  'opacity',\n  'zIndex',\n  'parentId'\n] as const;\n\nexport const LayerParamsKeys = [\n  'id',\n  'index',\n  'names',\n  'type',\n  'version',\n  'queryString',\n  ...BaseLayerParamsKeys\n] as const;\nexport type LayerParamsKeys = (typeof LayerParamsKeys)[number];\n\nexport const GroupParamsKeys = [\n  'title',\n  'id',\n  'expanded',\n  ...BaseLayerParamsKeys\n] as const;\nexport type GroupParamsKeys = (typeof GroupParamsKeys)[number];\n\nconst PositionParamsKeys = [\n  'center',\n  'zoom',\n  'rotation',\n  'projection'\n] as const;\ntype PositionParamsKeys = (typeof PositionParamsKeys)[number];\n\nexport interface ShareMapKeysDefinitions {\n  urlsKey: string;\n  contextKey: string;\n  languageKey: string;\n  pos: DefinitionKeyParams<PositionParamsKeys>;\n  layers: DefinitionKeyParams<LayerParamsKeys>;\n  groups: DefinitionKeyParams<GroupParamsKeys>;\n}\n\nexport interface DefinitionKeyParams<T extends string> extends BaseKeyParams {\n  params: DefinitionParams<T>;\n}\n\nexport type DefinitionParams<T extends string = string> = Record<\n  T,\n  BaseKeyParams | undefined\n>;\n\nexport interface BaseKeyParams {\n  key: string;\n  parse?: (value: string) => unknown;\n  stringify?: (value: unknown) => string;\n}\n\nexport interface PositionParams {\n  center?: [number, number];\n  zoom?: number;\n  rotation?: number;\n  projection?: string;\n}\n\nexport interface LayerProperties {\n  zIndex: number;\n  visibility: boolean;\n  type: ServiceType;\n  opacity: number;\n  parentId: string;\n}\n\nexport interface UrlParsedParam {\n  position: PositionParams;\n  layersOptions: LayerOptions[];\n  context: string;\n}\n\nexport type LayerParams = BaseLayerParams & {\n  index: number;\n  names?: string;\n  type?: string;\n};\n\nexport type GroupParams = BaseLayerParams &\n  Pick<LayerGroupOptions, 'title' | 'id'> & { expanded?: boolean };\n\ntype BaseLayerParams = Pick<\n  LayerOptions,\n  'visible' | 'opacity' | 'zIndex' | 'parentId' | 'id'\n>;\n\nexport interface ShareMapRouteKeysOptions extends RouteServiceOptions {\n  context: string;\n  urls: string;\n  position: string;\n  layers: string;\n  groups: string;\n  center: string;\n  zoom: string;\n  projection: string;\n  rotation: string;\n  opacity: string;\n}\n\nexport const SHARE_MAP_KEYS_DEFAULT_OPTIONS: ShareMapRouteKeysOptions = {\n  context: 'ctx',\n  urls: 'urls',\n  position: 'pos',\n  layers: 'layers',\n  groups: 'groups',\n  center: 'ctr',\n  zoom: 'z',\n  projection: 'p',\n  rotation: 'r',\n  opacity: 'o'\n};\n","import {\n  ServiceTypeEnum,\n  ShareMapKeysDefinitions,\n  ShareMapRouteKeysOptions\n} from './share-map.interface';\n\nexport function shareMapKeyDefs(\n  options: ShareMapRouteKeysOptions\n): ShareMapKeysDefinitions {\n  return {\n    contextKey: options.context,\n    urlsKey: options.urls,\n    languageKey: options.languageKey,\n    pos: {\n      key: options.position,\n      params: {\n        zoom: {\n          key: options.zoom,\n          parse: (params) => parseIntergerParam(params, options.zoom)\n        },\n        center: {\n          key: '@',\n          parse: parseCenter,\n          stringify: stringifyCenter\n        },\n        rotation: {\n          key: options.rotation,\n          parse: (params) => parseRotation(params, options.rotation),\n          stringify: formatNumber\n        },\n        projection: {\n          key: options.projection,\n          parse: (params) => extractParam(params, options.projection)\n        }\n      }\n    },\n    layers: {\n      key: options.layers,\n      params: {\n        index: undefined,\n        id: {\n          key: 'id',\n          parse: (params) => extractParam(params, 'id'),\n          stringify: (value: string) => `${value}`\n        },\n        names: {\n          key: 'n',\n          parse: (params) => {\n            const param = extractParam(params, 'n');\n            if (!param) return undefined;\n            const unbracketed = param.slice(1, -1);\n            return decodeURIComponent(unbracketed);\n          },\n          stringify: (value: string) => `[${encodeURIComponent(value)}]`\n        },\n        opacity: {\n          key: 'o',\n          parse: (params) => parseFloatParam(params, 'o')\n        },\n        visible: {\n          key: 'v',\n          parse: (params) => parseBooleanParam(params, 'v'),\n          stringify: stringifyBoolean\n        },\n        type: {\n          key: 't',\n          parse: (params) => parseLayerType(params, 't'),\n          stringify: stringifyType\n        },\n        zIndex: {\n          key: 'z',\n          parse: (params) => parseIntergerParam(params, 'z')\n        },\n        parentId: {\n          key: 'pid',\n          parse: (params) => extractParam(params, 'pid')\n        },\n        version: {\n          key: 'vrn',\n          parse: (params) => extractParam(params, 'vrn')\n        },\n        queryString: {\n          key: 'q',\n          parse: (params) => extractParam(params, 'q')\n        }\n      }\n    },\n    groups: {\n      key: options.groups,\n      params: {\n        id: {\n          key: 'id',\n          parse: (params) => extractIdParam(params, 'id')\n        },\n        parentId: {\n          key: 'pid',\n          parse: (params) => extractIdParam(params, 'pid')\n        },\n        title: {\n          key: 't',\n          parse: (params) => {\n            const param = extractParam(params, 't');\n            return param ? decodeURIComponent(param) : undefined;\n          },\n          stringify: (value: string) => encodeURIComponent(value)\n        },\n        visible: {\n          key: 'v',\n          parse: (params) => parseBooleanParam(params, 'v'),\n          stringify: stringifyBoolean\n        },\n        opacity: {\n          key: 'o',\n          parse: (params) => parseFloatParam(params, 'o')\n        },\n        zIndex: {\n          key: 'z',\n          parse: (params) => parseIntergerParam(params, 'z')\n        },\n        expanded: {\n          key: 'e',\n          parse: (params) => parseBooleanParam(params, 'e'),\n          stringify: stringifyBoolean\n        }\n      }\n    }\n  };\n}\n\nfunction stringifyBoolean(value: boolean): string {\n  return value ? '1' : '0';\n}\n\nfunction parseBoolean(params: string): boolean {\n  return !!parseInt(params);\n}\n\nfunction stringifyType(value: keyof typeof ServiceTypeEnum): string {\n  return String(ServiceTypeEnum[value]);\n}\n\nfunction parseLayerType(\n  params: string,\n  key: string\n): keyof typeof ServiceTypeEnum {\n  const param = extractParam(params, key);\n  if (!param) {\n    return;\n  }\n  const type = Number(param);\n\n  return ServiceTypeEnum[type] as keyof typeof ServiceTypeEnum;\n}\n\nfunction stringifyCenter(values: [number, number]): string {\n  return values.map(formatNumber).join(',');\n}\n\nfunction parseCenter(params: string | undefined): [number, number] | undefined {\n  if (!params?.startsWith('@')) {\n    return;\n  }\n  const paramsSplitted = params.split(',');\n  const index = paramsSplitted.findIndex((param) => param.startsWith('@'));\n  return [\n    Number(paramsSplitted[index].slice(1)),\n    Number(paramsSplitted[index + 1])\n  ];\n}\n\nfunction parseRotation(params: string | undefined, key: string): number {\n  const param = extractParam(params, key);\n  if (!param) {\n    return;\n  }\n  const degree = parseInteger(param);\n  return (degree * Math.PI) / 180;\n}\n\nfunction parseIntergerParam(params: string | undefined, key: string): number {\n  const param = extractParam(params, key);\n  if (!param) {\n    return;\n  }\n  return parseInteger(param);\n}\n\nfunction parseBooleanParam(params: string | undefined, key: string): boolean {\n  const param = extractParam(params, key);\n  if (!param) {\n    return;\n  }\n  return parseBoolean(param);\n}\n\nfunction parseFloatParam(params: string | undefined, key: string): number {\n  const param = extractParam(params, key);\n  if (!param) {\n    return;\n  }\n  return parseFloat(param);\n}\n\nfunction extractParam(\n  params: string | undefined,\n  suffix: string\n): string | undefined {\n  return params\n    ?.split(',')\n    .find((param) => param.endsWith(suffix))\n    ?.slice(0, -suffix.length);\n}\n\nfunction extractIdParam(\n  params: string,\n  suffix: 'id' | 'pid'\n): string | undefined {\n  const paramsSplited = params.split(',');\n  // Find the parameter that ends with exact id/pid and isn't part of another word\n  const param = paramsSplited.find((param) => {\n    const key = param.slice(-suffix.length);\n\n    if (key !== suffix) {\n      return false;\n    }\n\n    if (suffix === 'pid') {\n      return true;\n    }\n\n    const prefixChar = param.slice(-suffix.length - 1, -suffix.length);\n    return prefixChar !== 'p';\n  });\n  return param?.slice(0, -suffix.length);\n}\n\nfunction parseInteger(value: string) {\n  return parseInt(value, 10);\n}\n\nfunction formatNumber(value: number) {\n  return value.toFixed(5).replace(/\\.([^0]+)0+$/, '.$1');\n}\n","import { Params } from '@angular/router';\n\nimport { RouteServiceOptions } from '@igo2/core/route';\nimport {\n  AnyDataSourceOptions,\n  AnyLayerOptions,\n  QueryFormat,\n  QueryableDataSourceOptions,\n  isLayerGroupOptions\n} from '@igo2/geo';\n\nimport { ServiceType, ShareMapKeysDefinitions } from './share-map.interface';\n\nexport function buildDataSourceOptions(\n  type: ServiceType,\n  url: string,\n  layers: string[],\n  version: string\n): AnyDataSourceOptions {\n  const isLayerType = [\n    'wmts',\n    'arcgisrest',\n    'imagearcgisrest',\n    'tilearcgisrest'\n  ].includes(type);\n  const arcgisClause =\n    type === 'arcgisrest' ||\n    type === 'imagearcgisrest' ||\n    type === 'tilearcgisrest';\n  const params =\n    type === 'wms' ? { LAYERS: layers.join(','), VERSION: version } : undefined;\n\n  const layer = isLayerType ? layers.join(',') : undefined;\n  const baseParams = {\n    type: type,\n    url,\n    params,\n    layer,\n    version: type === 'wmts' ? '1.0.0' : undefined\n  };\n\n  if (arcgisClause) {\n    return {\n      ...baseParams,\n      queryable: true,\n      queryFormat: QueryFormat.ESRIJSON\n    } as QueryableDataSourceOptions;\n  }\n\n  return baseParams;\n}\n\nexport function getFlattenOptions(\n  options: AnyLayerOptions[]\n): AnyLayerOptions[] {\n  return options.reduce((accumulator, option) => {\n    if (isLayerGroupOptions(option)) {\n      const children = option.children\n        ? getFlattenOptions(option.children)\n        : [];\n      accumulator.push(option, ...children);\n    } else {\n      accumulator.push(option);\n    }\n    return accumulator;\n  }, []);\n}\n\n/**\n * Checks if the provided query parameters contain legacy parameter pairs\n * (e.g., layers and URLs) that indicate older configuration formats.\n */\nexport function hasLegacyParams(\n  params: Params,\n  optionsLegacy: RouteServiceOptions\n): boolean {\n  const {\n    layersKey,\n    wmsUrlKey,\n    wmsLayersKey,\n    wmtsUrlKey,\n    wmtsLayersKey,\n    arcgisUrlKey,\n    arcgisLayersKey,\n    iarcgisUrlKey,\n    iarcgisLayersKey,\n    tarcgisUrlKey,\n    tarcgisLayersKey\n  } = optionsLegacy;\n\n  // Define valid legacy parameter pairs\n  const legacyPairs: [string | undefined, string | undefined][] = [\n    [layersKey, wmsUrlKey],\n    [wmsLayersKey, wmsUrlKey],\n    [wmtsLayersKey, wmtsUrlKey],\n    [arcgisLayersKey, arcgisUrlKey],\n    [iarcgisLayersKey, iarcgisUrlKey],\n    [tarcgisLayersKey, tarcgisUrlKey]\n  ].filter(([layer, url]) => layer && url) as [string, string][];\n\n  // Check if any legacy pair exists in the query parameters\n  return legacyPairs.some(\n    ([layer, url]) => getParamValue(params, layer) && getParamValue(params, url)\n  );\n}\n\nexport function hasModernShareParams(\n  params: Params,\n  keysDefinitions: ShareMapKeysDefinitions\n): boolean {\n  const { contextKey, groups } = keysDefinitions;\n  const hasGroups = !!getParamValue(params, groups.key);\n  const hasContext = !!getParamValue(params, contextKey);\n\n  return hasContext || hasGroups;\n}\n\nexport function getParamValue(params: Params, key: string): string | undefined {\n  const value = params[key];\n  return value !== '' ? value : undefined;\n}\n","import {\n  AnyDataSourceOptions,\n  AnyLayer,\n  AnyLayerOptions,\n  ID_GROUP_PREFIX,\n  IgoMap,\n  Layer,\n  LayerGroup,\n  LayerId,\n  MapViewController,\n  WMSDataSourceOptions,\n  findParentId,\n  getLayerOptionIdentifier,\n  isLayerGroup,\n  isLayerGroupOptions,\n  isLayerItem\n} from '@igo2/geo';\nimport { ObjectUtils, OptionalRequired } from '@igo2/utils';\n\nimport type { DetailedContext } from '../../context-manager';\nimport {\n  BaseKeyParams,\n  DefinitionParams,\n  GroupParams,\n  LayerParams,\n  PositionParams,\n  ServiceType,\n  ShareMapKeysDefinitions\n} from './share-map.interface';\nimport { getFlattenOptions } from './share-map.utils';\n\nexport class ShareMapEncoder {\n  private context: DetailedContext | undefined;\n  language: string;\n\n  constructor(\n    private SHARE_MAP_DEFS: ShareMapKeysDefinitions,\n    private document: Document\n  ) {}\n\n  generateUrl(map: IgoMap, context: DetailedContext): string {\n    this.context = context;\n\n    const layers = [\n      map.layerController.baseLayer,\n      ...map.layerController.layersFlattened\n    ].filter(Boolean);\n\n    const urlParams = this.getBaseUrlConfig(map.viewController);\n    this.buildQueryUrl(layers, urlParams);\n\n    const [baseUrl] = this.document.location.href.split('?');\n    const queryString = urlParams.toString();\n    return queryString !== '' ? `${baseUrl}?${queryString}` : baseUrl;\n  }\n\n  /**\n   * Replaces local group IDs with unique IDs to avoid conflicts and have short URL.\n   * This is necessary for sharing the map context.\n   */\n  private replaceGroupLocalIds(layers: AnyLayer[]): void {\n    const idMap = new Map<LayerId, LayerId>();\n    const existingIds = new Set(\n      layers.map((layer) => layer.id).filter(Boolean)\n    );\n\n    // eslint-disable-next-line prefer-const\n    let counter = 1;\n    layers.forEach((layer) => {\n      if (layer.id && layer.id.toString().includes(ID_GROUP_PREFIX)) {\n        const newId = this.getUniqueId(existingIds, counter);\n        idMap.set(layer.id, newId);\n        layer.options.id = newId;\n      }\n    });\n  }\n\n  private getUniqueId(existingIds: Set<string | number>, counter: number) {\n    while (existingIds.has(String(counter))) {\n      counter++;\n    }\n    existingIds.add(String(counter));\n    return counter;\n  }\n\n  private getCurrentContext(): {\n    layers: AnyLayerOptions[];\n    center?: [number, number];\n    projection?: string;\n    zoom?: number;\n    rotation?: number;\n  } {\n    return ObjectUtils.removeUndefined({\n      layers: this.context?.layers,\n      center: this.context?.map.view.center,\n      projection: this.context?.map.view.projection,\n      zoom: this.context?.map.view.zoom,\n      rotation: this.context?.map.view.rotation\n    });\n  }\n\n  /**\n   * Filters layers to include only LayerGroups or LayerItems with a valid ServiceType.\n   */\n  private isLayerSharable(layers: AnyLayer[]): AnyLayer[] {\n    return layers.filter(\n      (layer) =>\n        isLayerGroup(layer) ||\n        (isLayerItem(layer) &&\n          ServiceType.includes(layer.dataSource?.options?.type as ServiceType))\n    );\n  }\n\n  /**\n   * Extracts only LayerGroup items from the filtered layers.\n   */\n  private getLayerGroups(layers: AnyLayer[]): LayerGroup[] {\n    return layers.filter(isLayerGroup) as LayerGroup[];\n  }\n\n  /**\n   * Extracts only LayerItem items from the filtered layers.\n   */\n  private getLayerItems(layers: AnyLayer[]): Layer[] {\n    return layers.filter(isLayerItem) as Layer[];\n  }\n\n  private buildQueryUrl(layers: AnyLayer[], urlParams: URLSearchParams) {\n    const layersSharable = this.isLayerSharable(layers);\n    this.replaceGroupLocalIds(layersSharable);\n    const layersChanged = this.getFilteredMapLayers(layersSharable);\n\n    const groups = this.getLayerGroups(layersChanged);\n    const groupsQueryValue = this.buildGroupsQueryValue(groups);\n\n    const layersByService = this.generateLayersOptionsByService(\n      this.getLayerItems(layersChanged)\n    );\n    const [urls, layerParams] = this.buildLayersQueryValues(layersByService);\n\n    if (urls.length > 0) {\n      urlParams.set(this.SHARE_MAP_DEFS.urlsKey, urls.join(','));\n    }\n    if (layerParams.length > 0) {\n      urlParams.set(this.SHARE_MAP_DEFS.layers.key, layerParams.join(';'));\n    }\n    if (groupsQueryValue) {\n      urlParams.set(this.SHARE_MAP_DEFS.groups.key, groupsQueryValue);\n    }\n  }\n\n  /**\n   * Retrieves the current context layers and maps them by identifier.\n   */\n  private getContextLayersMap(): Map<string, AnyLayerOptions> {\n    const ctxLayers = this.getCurrentContext()?.layers || [];\n    const ctxFlattened = getFlattenOptions(ctxLayers);\n\n    return new Map(\n      ctxFlattened.map((lctx) => {\n        const identifier = getLayerOptionIdentifier(lctx);\n        return [identifier, lctx] as const;\n      })\n    );\n  }\n\n  /**\n   * Filters layers and context layers based on visibility, opacity, and expanded state.\n   */\n  private getFilteredMapLayers(filteredLayers: AnyLayer[]): AnyLayer[] {\n    const ctxLayersMap = this.getContextLayersMap();\n\n    return filteredLayers.filter((layer) => {\n      const mapLayerIdentifier = getLayerOptionIdentifier(layer.options);\n      if (!mapLayerIdentifier) return false;\n      const ctxLayer = ctxLayersMap.get(mapLayerIdentifier);\n      if (!ctxLayer) return true;\n\n      const visibilityChange = layer.visible !== (ctxLayer.visible ?? true);\n      const opacityChange = layer.opacity !== (ctxLayer.opacity ?? 1);\n      const layerParentId = this.getIdsNestedParent(layer)?.join('.');\n      const ctxParentId =\n        ctxLayer.parentId ?? findParentId(this.context.layers, ctxLayer);\n      const parentIdChange = ctxParentId !== layerParentId;\n\n      let expandedChange = false;\n      let titleChange = false;\n      if (isLayerGroup(layer) && isLayerGroupOptions(ctxLayer)) {\n        // Check if the layer group was assign an local id\n        // If so, we don't support any change for this case\n        if (String(ctxLayer.id).includes(ID_GROUP_PREFIX)) {\n          return false;\n        }\n        expandedChange = (ctxLayer.expanded ?? false) !== layer.expanded;\n        titleChange = (ctxLayer.title ?? false) !== layer.title;\n      }\n\n      return (\n        visibilityChange ||\n        opacityChange ||\n        expandedChange ||\n        titleChange ||\n        parentIdChange\n      );\n    });\n  }\n\n  private getIdsNestedParent(\n    node: Layer | LayerGroup,\n    ids?: LayerId[]\n  ): LayerId[] | undefined {\n    if (!node.parent) return ids;\n\n    if (node.parent) {\n      if (!ids) {\n        ids = [node.parent.id];\n      } else {\n        ids.unshift(node.parent.id);\n      }\n      return this.getIdsNestedParent(node.parent, ids);\n    }\n\n    return ids;\n  }\n\n  private generateLayersOptionsByService(\n    layers: Layer[]\n  ): [url: string, layers: LayerParams[]][] {\n    const layersByUrl = new Map<string, LayerParams[]>();\n\n    layers.forEach((layer) => {\n      const [url, params] = this.generateLayerOption(layer);\n      if (!layersByUrl.has(url)) {\n        layersByUrl.set(url, [params]);\n      } else {\n        layersByUrl.get(url)!.push(params);\n      }\n    });\n\n    let customIndex = 0;\n    return Array.from(layersByUrl.entries()).map(([url, layerParams]) => {\n      const hasNoId = layerParams.some((p) => !p.id);\n      if (hasNoId) {\n        layerParams.forEach((params) => {\n          if (!params.id) {\n            params.index = customIndex;\n          }\n        });\n        customIndex++;\n      }\n      return [url, layerParams];\n    });\n  }\n\n  private generateLayerOption(\n    layer: Layer\n  ): [url: string, layers: LayerParams] {\n    const dataSourceOptions = layer.dataSource.options as AnyDataSourceOptions;\n    return [\n      this.concatUrlWithVersion(dataSourceOptions),\n      this.getLayerParams(layer)\n    ];\n  }\n\n  private getLayerNames(dataSourceOptions: AnyDataSourceOptions): string {\n    const type = dataSourceOptions.type.toLowerCase() as ServiceType;\n    if (type === 'wms') {\n      const params = (dataSourceOptions as Partial<WMSDataSourceOptions>)\n        .params;\n      return params.LAYERS;\n    }\n\n    return 'layer' in dataSourceOptions ? dataSourceOptions.layer : '';\n  }\n\n  private getWmsVersion(\n    dataSourceOptions: AnyDataSourceOptions\n  ): string | undefined {\n    const params = (dataSourceOptions as Partial<WMSDataSourceOptions>)?.params;\n    return params?.VERSION && params.VERSION !== '1.3.0'\n      ? params.VERSION\n      : undefined;\n  }\n\n  private concatUrlWithVersion(\n    dataSourceOptions: AnyDataSourceOptions\n  ): string {\n    const url = dataSourceOptions.url;\n\n    if ((dataSourceOptions.type.toLowerCase() as ServiceType) === 'wms') {\n      const version = this.getWmsVersion(dataSourceOptions);\n      if (version) {\n        const operator = url.includes('?') ? '&' : '?';\n        const { version: versionDef } = this.SHARE_MAP_DEFS.layers.params;\n        return `${url}${operator}${versionDef.key}=${version}`;\n      }\n    }\n\n    return dataSourceOptions.url;\n  }\n\n  private getLayerParams(layer: Layer): LayerParams {\n    const dataSourceOptions = layer.dataSource.options;\n    const isExisting = this.context?.layers\n      ? this.hasLayerId(this.context.layers, layer.id)\n      : false;\n    return {\n      index: undefined,\n      ...(isExisting\n        ? { id: layer.id }\n        : {\n            names: this.getLayerNames(dataSourceOptions),\n            type: dataSourceOptions?.type\n          }),\n      opacity: this.getOpacity(layer.opacity),\n      parentId: layer.parent?.id,\n      visible: this.getVisibility(layer.visible),\n      zIndex: layer.zIndex\n    };\n  }\n\n  /** Recursive */\n  private hasLayerId(\n    layersOptions: AnyLayerOptions[],\n    targetId: string | number\n  ): boolean {\n    if (targetId == null) return false;\n    return layersOptions.some((l) => {\n      if (l.id == null) return false;\n      if (!isLayerGroupOptions(l)) {\n        return String(l.id) === String(targetId);\n      }\n\n      if (isLayerGroupOptions(l) && Array.isArray(l.children)) {\n        return this.hasLayerId(l.children, targetId);\n      }\n      return false;\n    });\n  }\n\n  private getOpacity(opacity: number): number | undefined {\n    return opacity === 1 ? undefined : opacity;\n  }\n\n  private getVisibility(visibility: boolean | undefined): boolean {\n    return !!visibility;\n  }\n\n  private buildLayersQueryValues(\n    layersByService: [url: string, params: LayerParams[]][]\n  ): [urls: string[], layerParams: string[]] {\n    const urls: string[] = [];\n    const layerParams: string[] = [];\n    for (const [url, layer] of layersByService) {\n      let needUrl = false;\n\n      for (const param of layer) {\n        layerParams.push(this.stringifyLayerParams(param));\n        if (param.id == null) {\n          needUrl = true;\n        }\n      }\n\n      // If some layer have no id push the url service.\n      if (needUrl) {\n        urls.push(url);\n      }\n    }\n\n    return [urls, layerParams];\n  }\n\n  private stringifyLayerParams(params: LayerParams): string {\n    const { index, ...restParams } = params;\n\n    const stringifiedParams = this.stringifyDefinitions(\n      restParams,\n      this.SHARE_MAP_DEFS.layers.params\n    );\n\n    return restParams.id != null\n      ? `${stringifiedParams}`\n      : `${index},${stringifiedParams}`;\n  }\n\n  private getBaseUrlConfig(viewController: MapViewController): URLSearchParams {\n    const { pos, contextKey, languageKey } = this.SHARE_MAP_DEFS;\n    const href = this.document.location.href;\n    const urlParams = this.getSanitizedParams(href);\n\n    if (pos) {\n      const positionStringified = this.stringifyPosition(\n        this.getPosition(viewController)\n      );\n      urlParams.set(pos.key, positionStringified);\n    }\n    const contextUri = this.context?.uri;\n    if (contextUri) urlParams.set(contextKey, contextUri);\n\n    if (this.language && !urlParams.has(languageKey))\n      urlParams.set(languageKey, this.language);\n\n    return urlParams;\n  }\n\n  getSanitizedParams(baseUrl: string): URLSearchParams {\n    const [, queryString] = baseUrl.split('?');\n    const params = new URLSearchParams(queryString);\n\n    const keys = this.extractKeys(this.SHARE_MAP_DEFS);\n    keys.forEach((key) => {\n      params.delete(key);\n    });\n\n    return params;\n  }\n\n  private extractKeys(defs: ShareMapKeysDefinitions): string[] {\n    const keys: string[] = [];\n    for (const key in defs) {\n      if (Object.prototype.hasOwnProperty.call(defs, key)) {\n        const value = defs[key];\n        if (typeof value === 'string') {\n          keys.push(value);\n        } else if (typeof value === 'object' && value !== null) {\n          keys.push(value.key);\n        }\n      }\n    }\n\n    return keys;\n  }\n\n  private getPosition(viewController: MapViewController): PositionParams {\n    return ObjectUtils.removeUndefined({\n      center: viewController.getCenter('EPSG:4326'),\n      zoom: this.getZoom(viewController),\n      rotation: this.getRotation(viewController),\n      projection: this.getProjection(viewController)\n    });\n  }\n\n  private getProjection(viewController: MapViewController): string | undefined {\n    const ctxProjection = this.getCurrentContext().projection;\n    const mapProjection = viewController.getOlProjection().getCode();\n    return ctxProjection === mapProjection ? undefined : mapProjection;\n  }\n\n  private getZoom(viewController: MapViewController): number | undefined {\n    const mapZoom = viewController.getZoom();\n    const ctxZoom = this.getCurrentContext().zoom;\n    return ctxZoom === mapZoom ? undefined : mapZoom;\n  }\n\n  private getRotation(viewController: MapViewController): number | undefined {\n    const rotationRadians = viewController.getRotation();\n    const rotationDegree = (rotationRadians * 180) / Math.PI;\n    const ctxRotation = this.getCurrentContext().rotation;\n    return rotationDegree === ctxRotation || rotationDegree === 0\n      ? undefined\n      : rotationDegree;\n  }\n\n  private stringifyPosition(position: PositionParams): string {\n    const definitions = this.SHARE_MAP_DEFS.pos.params;\n    const { center, ...restPosition } = position;\n    const stringifiedParams = this.stringifyDefinitions(\n      restPosition,\n      definitions\n    );\n\n    const result = [\n      `${definitions.center.key}${definitions.center.stringify(center)}`,\n      stringifiedParams\n    ].filter(Boolean);\n\n    return result.join(',');\n  }\n\n  private stringifyDefinitions(\n    values: Record<string, unknown>,\n    definitions: DefinitionParams\n  ): string | undefined {\n    const result = Object.keys(ObjectUtils.removeUndefined(values))\n      .map((key) => {\n        const { key: defKey, stringify } = definitions[key] as BaseKeyParams;\n        const value = stringify ? stringify(values[key]) : values[key];\n        return `${value}${defKey}`;\n      })\n      .join(',');\n    return result === '' ? undefined : result;\n  }\n\n  private buildGroupsQueryValue(layers: LayerGroup[]): string | undefined {\n    if (layers.length === 0) return undefined;\n\n    return layers\n      .map((layer) => {\n        const params = this.getLayerGroupParams(layer);\n        return this.stringifyGroupParams(params);\n      })\n      .join(';');\n  }\n\n  private getLayerGroupParams(layer: LayerGroup): GroupParams {\n    return {\n      id: layer.id,\n      title: layer.title,\n      zIndex: layer.zIndex,\n      parentId: layer.parent?.id,\n      visible: this.getVisibility(layer.visible),\n      opacity: this.getOpacity(layer.opacity),\n      expanded: layer.expanded\n    } satisfies OptionalRequired<GroupParams>;\n  }\n\n  private stringifyGroupParams(params: GroupParams): string {\n    return this.stringifyDefinitions(params, this.SHARE_MAP_DEFS.groups.params);\n  }\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Params } from '@angular/router';\n\nimport { RouteServiceOptions } from '@igo2/core/route';\nimport { LayerOptions, generateIdFromSourceOptions } from '@igo2/geo';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { PositionParams, ServiceType } from './share-map.interface';\nimport { buildDataSourceOptions } from './share-map.utils';\n\ninterface SharedLayerConfig {\n  layers: string[];\n  zIndex: number | undefined;\n}\n\nexport class ShareMapLegacyParser {\n  constructor(private options: RouteServiceOptions) {}\n\n  parseUrl(params: Params): LayerOptions[] | undefined {\n    const layerOptions = ServiceType.flatMap((type) =>\n      this.readLayersQueryParamsByType(params, type)\n    ).filter(Boolean);\n\n    return layerOptions;\n  }\n\n  parsePosition(params: Params): PositionParams {\n    const center = params[this.options.centerKey];\n    const projection = params[this.options.projectionKey];\n    const zoom = params[this.options.zoomKey];\n    const rotation = params[this.options.rotationKey];\n\n    return ObjectUtils.removeUndefined({\n      center: center?.split(',').map(Number),\n      projection,\n      zoom: zoom ? Number(zoom) : undefined,\n      rotation: rotation ? Number(rotation) : undefined\n    });\n  }\n\n  private readLayersQueryParamsByType(\n    params: Params,\n    type: ServiceType\n  ): LayerOptions[] | undefined {\n    const [nameParamLayersKey, urlsKey] = this.getQueryKeyByType(params, type);\n    if (!nameParamLayersKey || !urlsKey) {\n      return undefined;\n    }\n\n    const layersByService: string[] = params[nameParamLayersKey].split('),(');\n    const urls: string[] = params[urlsKey].split(',');\n\n    return urls\n      .map((urlSrc, index) => {\n        // Sanitize URL and extract version\n        const [url, version] = this.sanitizeUrl(urlSrc);\n\n        const layersConfig = this.extractLayersByService(\n          this.removeParenthesis(layersByService[index])\n        );\n\n        // Generate layer options for the current service\n        return this.extractLayersOptions(\n          layersConfig,\n          url,\n          type,\n          version,\n          params\n        );\n      })\n      .flat();\n  }\n\n  private getQueryKeyByType(\n    params: Params,\n    type: string\n  ): [nameParamLayersKey: string | undefined, urlsKey: string | undefined] {\n    let nameParamLayersKey;\n    let urlsKey;\n\n    const {\n      layersKey,\n      wmsUrlKey,\n      wmsLayersKey,\n      wmtsUrlKey,\n      wmtsLayersKey,\n      arcgisUrlKey,\n      arcgisLayersKey,\n      iarcgisUrlKey,\n      iarcgisLayersKey,\n      tarcgisUrlKey,\n      tarcgisLayersKey\n    } = this.options;\n\n    switch (type) {\n      case 'wms':\n        if ((params[layersKey] || params[wmsLayersKey]) && params[wmsUrlKey]) {\n          urlsKey = wmsUrlKey;\n          nameParamLayersKey = params[wmsLayersKey] ? wmsLayersKey : layersKey;\n        }\n        break;\n      case 'wmts':\n        if (params[wmtsLayersKey] && params[wmtsUrlKey]) {\n          urlsKey = wmtsUrlKey;\n          nameParamLayersKey = wmtsLayersKey;\n        }\n        break;\n      case 'arcgisrest':\n        if (params[arcgisLayersKey] && params[arcgisUrlKey]) {\n          urlsKey = arcgisUrlKey;\n          nameParamLayersKey = arcgisLayersKey;\n        }\n        break;\n      case 'imagearcgisrest':\n        if (params[iarcgisLayersKey] && params[iarcgisUrlKey]) {\n          urlsKey = iarcgisUrlKey;\n          nameParamLayersKey = iarcgisLayersKey;\n        }\n        break;\n      case 'tilearcgisrest':\n        if (params[tarcgisLayersKey] && params[tarcgisUrlKey]) {\n          urlsKey = tarcgisUrlKey;\n          nameParamLayersKey = tarcgisLayersKey;\n        }\n        break;\n    }\n    if (!nameParamLayersKey || !urlsKey) {\n      return [undefined, undefined];\n    }\n\n    return [nameParamLayersKey, urlsKey];\n  }\n\n  private sanitizeUrl(url: string): [url: string, version: string | undefined] {\n    const version =\n      this.getQueryParam('version', url.toLocaleLowerCase()) || undefined;\n\n    if (version) {\n      const versionRegex = new RegExp(`[?&]version=${version}`, 'i');\n      url = url.replace(versionRegex, '').replace(/[?&]$/, '');\n    }\n\n    if (url.endsWith('?')) {\n      url = url.substring(0, url.length - 1);\n    }\n    return [url, version];\n  }\n\n  private getQueryParam(name: string, url: string): string | undefined {\n    let paramValue;\n    if (url.includes('?')) {\n      const httpParams = new HttpParams({ fromString: url.split('?')[1] });\n      paramValue = httpParams.get(name);\n    }\n    return paramValue;\n  }\n\n  private extractLayersByService(layersByService: string): SharedLayerConfig[] {\n    if (!layersByService.includes(':igoz')) {\n      return [\n        {\n          layers: layersByService.split(','),\n          zIndex: null\n        }\n      ];\n    }\n\n    const layers = layersByService.match(\n      /([^(),:]+(?:,[^(),:]+)*(:[^(),:]+(?:[:][^(),:]+)*)?)/g\n    );\n\n    return layers.map((layer) => {\n      const [names, zIndex] = layer.split(':igoz');\n      return {\n        layers: names.split(','),\n        zIndex: parseInt(zIndex)\n      };\n    });\n  }\n\n  private removeParenthesis(value: string) {\n    if (value.startsWith('(')) {\n      value = value.substr(1);\n    }\n\n    if (value.endsWith(')')) {\n      value = value.slice(0, -1);\n    }\n\n    return value;\n  }\n\n  private extractLayersOptions(\n    layersConfig: SharedLayerConfig[],\n    url: string,\n    type: ServiceType,\n    version: string,\n    params: Params\n  ): LayerOptions[] {\n    return layersConfig.map((layerConfig) => {\n      const sourceOptions = buildDataSourceOptions(\n        type,\n        url,\n        layerConfig.layers,\n        version\n      );\n      const id = generateIdFromSourceOptions(sourceOptions);\n\n      const visible = this.computeLayerVisibilityFromUrl(params, id);\n\n      return ObjectUtils.removeUndefined({\n        id,\n        visible: visible,\n        zIndex: layerConfig.zIndex,\n        sourceOptions\n      });\n    });\n  }\n\n  private computeLayerVisibilityFromUrl(\n    params: Params,\n    currentLayerid: string\n  ): boolean {\n    const queryParams = params;\n    let visible = true;\n    if (!queryParams || !currentLayerid) {\n      return visible;\n    }\n    let visibleOnLayersParams = '';\n    let visibleOffLayersParams = '';\n    let visiblelayers: string[] = [];\n    let invisiblelayers: string[] = [];\n    if (queryParams['visiblelayers']) {\n      visibleOnLayersParams = queryParams['visiblelayers'];\n    }\n    if (queryParams['invisiblelayers']) {\n      visibleOffLayersParams = queryParams['invisiblelayers'];\n    }\n\n    /* This order is important because to control whichever\n         the order of * param. First whe open and close everything.*/\n    if (visibleOnLayersParams === '*') {\n      visible = true;\n    }\n    if (visibleOffLayersParams === '*') {\n      visible = false;\n    }\n\n    // After, managing named layer by id (context.json OR id from datasource)\n    visiblelayers = visibleOnLayersParams.split(',');\n    invisiblelayers = visibleOffLayersParams.split(',');\n    if (\n      visiblelayers.indexOf(currentLayerid) > -1 ||\n      visiblelayers.indexOf(currentLayerid.toString()) > -1\n    ) {\n      visible = true;\n    }\n    if (\n      invisiblelayers.indexOf(currentLayerid) > -1 ||\n      invisiblelayers.indexOf(currentLayerid.toString()) > -1\n    ) {\n      visible = false;\n    }\n    return visible;\n  }\n}\n","import { Params } from '@angular/router';\n\nimport { RouteServiceOptions } from '@igo2/core/route';\nimport {\n  type AnyLayerOptions,\n  type LayerGroupOptions,\n  type LayerOptions\n} from '@igo2/geo';\nimport { ObjectUtils, OptionalRequired } from '@igo2/utils';\n\nimport { ShareMapLegacyParser } from './share-map-legacy.service';\nimport {\n  LayerProperties,\n  PositionParams,\n  ServiceType,\n  ShareMapKeysDefinitions\n} from './share-map.interface';\nimport {\n  buildDataSourceOptions,\n  getParamValue,\n  hasLegacyParams,\n  hasModernShareParams\n} from './share-map.utils';\n\ntype BaseLayerOptionsParsed = Pick<\n  LayerOptions,\n  'visible' | 'zIndex' | 'opacity' | 'parentId'\n> &\n  Partial<Pick<LayerOptions, 'id'>>;\n\ntype LayerOptionsParsed = BaseLayerOptionsParsed &\n  Pick<LayerOptions, 'sourceOptions'>;\n\ntype LayerGroupOptionsParserd = BaseLayerOptionsParsed &\n  Pick<LayerGroupOptions, 'id' | 'title' | 'expanded' | 'type'>;\n\nexport class ShareMapParser {\n  legacy: ShareMapLegacyParser;\n\n  constructor(\n    private keysDefinitions: ShareMapKeysDefinitions,\n    private legacyOptions: RouteServiceOptions\n  ) {\n    this.legacy = new ShareMapLegacyParser(legacyOptions);\n  }\n\n  parseLayers(params: Params): AnyLayerOptions[] | undefined {\n    if (\n      !hasModernShareParams(params, this.keysDefinitions) &&\n      hasLegacyParams(params, this.legacyOptions)\n    ) {\n      return this.legacy.parseUrl(params);\n    }\n\n    const {\n      urlsKey,\n      layers: layersDef,\n      groups: groupsDef\n    } = this.keysDefinitions;\n\n    const layersArray = this.splitParam(\n      getParamValue(params, layersDef.key),\n      ';'\n    );\n    const urlsArray = this.splitParam(getParamValue(params, urlsKey), ',');\n    const groupsArray = this.splitParam(\n      getParamValue(params, groupsDef.key),\n      ';'\n    );\n\n    const groupsOptions = groupsArray.map((layer) => this.parseGroup(layer));\n    const layersOptions = layersArray\n      .map((layer) => this.parseLayer(layer, urlsArray))\n      .filter(Boolean);\n    return [...groupsOptions, ...layersOptions];\n  }\n\n  private splitParam(value: string | undefined, delimiter: string): string[] {\n    return value ? value.split(delimiter) : [];\n  }\n\n  parsePosition(params: Params): PositionParams | undefined {\n    const position = decodeURIComponent(params[this.keysDefinitions.pos.key]);\n    if (!position) {\n      return this.legacy.parsePosition(params);\n    }\n\n    const { center, zoom, rotation, projection } =\n      this.keysDefinitions.pos.params;\n\n    return ObjectUtils.removeUndefined({\n      center: center.parse(position) as [number, number],\n      zoom: zoom.parse(position) as number,\n      rotation: rotation.parse(position) as number,\n      projection: projection.parse(position) as string\n    } satisfies OptionalRequired<PositionParams>);\n  }\n\n  private parseLayer(\n    layer: string,\n    urls: string[]\n  ): LayerOptionsParsed | undefined {\n    const { zIndex, visibility, type, opacity, parentId } =\n      this.extractLayerProperties(layer);\n    const base = {\n      visible: visibility,\n      zIndex,\n      opacity,\n      parentId\n    } satisfies BaseLayerOptionsParsed;\n\n    const layerNames = this.extractLayerNames(layer);\n\n    if (layerNames) {\n      const urlIndex = this.extractUrlIndex(layer);\n      if (urlIndex === undefined) return undefined;\n\n      const url = urls[urlIndex];\n      const version = this.extractVersionFromUrl(url);\n\n      const sourceOptions = buildDataSourceOptions(\n        type,\n        url,\n        layerNames,\n        version\n      );\n\n      return ObjectUtils.removeUndefined({\n        id: undefined,\n        sourceOptions,\n        ...base\n      } satisfies OptionalRequired<LayerOptionsParsed>);\n    }\n\n    const id = this.extractLayerId(layer);\n    if (!id) return undefined;\n    return ObjectUtils.removeUndefined({\n      id,\n      sourceOptions: undefined,\n      ...base\n    } satisfies OptionalRequired<LayerOptionsParsed>);\n  }\n\n  private parseGroup(properties: string): LayerGroupOptionsParserd {\n    const { params } = this.keysDefinitions.groups;\n    return ObjectUtils.removeUndefined({\n      id: params.id.parse(properties) as string,\n      title: params.title.parse(properties) as string,\n      zIndex: params.zIndex.parse(properties) as number,\n      visible: params.visible.parse(properties) as boolean,\n      opacity: params.opacity.parse(properties) as number,\n      parentId: params.parentId.parse(properties) as string,\n      expanded: params.expanded.parse(properties) as boolean,\n      type: 'group'\n    } satisfies OptionalRequired<LayerGroupOptionsParserd>);\n  }\n\n  private extractVersionFromUrl(url: string): string | undefined {\n    const versionDef = this.keysDefinitions.layers.params.version;\n    return versionDef.parse(url) as string;\n  }\n\n  private extractLayerId(layer: string): string | undefined {\n    const { id } = this.keysDefinitions.layers.params;\n    const regex = new RegExp(`([a-zA-Z0-9_]+)${id.key}\\\\b`);\n    const match = layer.match(regex);\n    return match ? match[1] : undefined;\n  }\n\n  private extractUrlIndex(layer: string): number | undefined {\n    const { index } = this.keysDefinitions.layers.params;\n    const regex = index ? new RegExp(`([\\\\d.]+)${index}`) : /([\\d.]+)/;\n    const match = layer.match(regex);\n    return match ? parseInt(match[1], 10) : undefined;\n  }\n\n  private extractLayerNames(layer: string): string[] | undefined {\n    const { names } = this.keysDefinitions.layers.params;\n    const pattern = new RegExp(`\\\\[.*?\\\\]${names.key}`, 'g');\n\n    const matches = layer.match(pattern);\n    if (!matches) return undefined;\n\n    return matches\n      .map((match) =>\n        decodeURIComponent(match.slice(1, -`]${names.key}`.length))\n      )\n      .join('\\n')\n      .split(',');\n  }\n\n  private extractLayerProperties(properties: string): LayerProperties {\n    const { params } = this.keysDefinitions.layers;\n    return {\n      zIndex: params.zIndex.parse(properties) as number,\n      visibility: params.visible.parse(properties) as boolean,\n      type: params.type.parse(properties) as ServiceType,\n      opacity: params.opacity.parse(properties) as number,\n      parentId: params.parentId.parse(properties) as string\n    } satisfies OptionalRequired<LayerProperties>;\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\nimport { Params } from '@angular/router';\n\nimport { RouteService, RouteServiceOptions } from '@igo2/core/route';\nimport { AnyLayerOptions, IgoMap } from '@igo2/geo';\n\nimport { DetailedContext } from '../../context-manager/shared/context.interface';\nimport { shareMapKeyDefs } from './share-map-definitions';\nimport { ShareMapEncoder } from './share-map-encoder';\nimport { ShareMapParser } from './share-map-parser';\nimport {\n  PositionParams,\n  SHARE_MAP_KEYS_DEFAULT_OPTIONS,\n  ShareMapKeysDefinitions,\n  ShareMapRouteKeysOptions\n} from './share-map.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ShareMapService {\n  routeService = inject(RouteService);\n  document = inject<Document>(DOCUMENT);\n\n  get language(): string {\n    return this._language;\n  }\n  set language(value: string) {\n    this._language = value;\n    if (this.encoder) {\n      this.encoder.language = value;\n    }\n  }\n  private _language = '';\n\n  options: ShareMapRouteKeysOptions;\n  optionsLegacy: RouteServiceOptions;\n  keysDefinitions: ShareMapKeysDefinitions;\n  private encoder: ShareMapEncoder;\n  private parser: ShareMapParser;\n\n  constructor() {\n    this.options = SHARE_MAP_KEYS_DEFAULT_OPTIONS;\n    this.optionsLegacy = this.routeService.legacyOptions;\n    this.keysDefinitions = shareMapKeyDefs({\n      ...SHARE_MAP_KEYS_DEFAULT_OPTIONS,\n      languageKey: this.routeService.options.languageKey\n    });\n\n    this.encoder = new ShareMapEncoder(this.keysDefinitions, this.document);\n\n    this.parser = new ShareMapParser(\n      this.keysDefinitions,\n      this.routeService.legacyOptions\n    );\n\n    this.routeService.queryParams.subscribe((params) => {\n      const language = params[this.keysDefinitions.languageKey];\n      if (language) {\n        this.language = language;\n      }\n    });\n  }\n\n  generateUrl(map: IgoMap, context: DetailedContext): string {\n    return this.encoder.generateUrl(map, context);\n  }\n\n  parsePosition(params: Params): PositionParams | undefined {\n    return this.parser.parsePosition(params);\n  }\n\n  parseLayers(params: Params): AnyLayerOptions[] | undefined {\n    return this.parser.parseLayers(params);\n  }\n\n  sanitizeBaseUrl(baseUrl: string): string {\n    const params = this.encoder.getSanitizedParams(baseUrl);\n    const [base] = baseUrl.split('?');\n    const queryString = params.toString();\n    return queryString !== '' ? `${base}?${queryString}&` : `${base}?`;\n  }\n\n  getContext(params: Params): string | undefined {\n    return (\n      params[this.options.context] ?? params[this.optionsLegacy.contextKey]\n    );\n  }\n\n  getZoom(params: Params): number | undefined {\n    return this.parsePosition(params).zoom;\n  }\n\n  getUrlWithApi(formValues) {\n    const loc = this.document.location;\n    const origin = loc.origin;\n    const pathname = loc.pathname;\n    const search = loc.search;\n    const params = new URLSearchParams(search);\n    params.set('context', formValues.uri);\n    if (this.language) {\n      params.set('lang', this.language);\n    }\n    return `${origin}${pathname}?${params.toString()}`;\n  }\n\n  hasPositionParams(params: Params): boolean {\n    const { projectionKey, rotationKey, zoomKey, centerKey } =\n      this.optionsLegacy;\n    const { pos } = this.keysDefinitions;\n\n    return Boolean(\n      params[pos.key] ||\n      params[projectionKey] ||\n      params[rotationKey] ||\n      params[zoomKey] ||\n      params[centerKey]\n    );\n  }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { AuthService } from '@igo2/auth';\nimport { Tool } from '@igo2/common/tool';\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { Message, MessageService } from '@igo2/core/message';\nimport { RouteService } from '@igo2/core/route';\nimport { StorageService } from '@igo2/core/storage';\nimport type { AnyLayer, IgoMap, Layer } from '@igo2/geo';\nimport { ExportService, isLayerGroup } from '@igo2/geo';\nimport { ObjectUtils, uuid } from '@igo2/utils';\n\nimport GeoJSON from 'ol/format/GeoJSON';\nimport { Geometry } from 'ol/geom';\nimport olPoint from 'ol/geom/Point';\nimport Cluster from 'ol/source/Cluster';\nimport olVectorSource from 'ol/source/Vector';\n\nimport { Feature } from 'ol';\nimport { BehaviorSubject, Observable, Subject, of } from 'rxjs';\nimport {\n  catchError,\n  debounceTime,\n  first,\n  map,\n  mergeMap,\n  skip,\n  tap\n} from 'rxjs/operators';\n\nimport { ShareMapService } from '../../share-map/shared/share-map.service';\nimport {\n  Context,\n  ContextDetailedChanges,\n  ContextMapView,\n  ContextProfils,\n  ContextServiceOptions,\n  ContextsList,\n  DetailedContext,\n  ExtraFeatures\n} from './context.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ContextService {\n  private http = inject(HttpClient);\n  private authService = inject(AuthService);\n  private languageService = inject(LanguageService);\n  private config = inject(ConfigService);\n  private messageService = inject(MessageService);\n  private storageService = inject(StorageService);\n  private exportService = inject(ExportService);\n  private shareMapService = inject(ShareMapService);\n  private route = inject(RouteService, { optional: true });\n\n  public context$ = new BehaviorSubject<DetailedContext>(undefined);\n  public contexts$ = new BehaviorSubject<ContextsList>({ ours: [] });\n  public defaultContextId$ = new BehaviorSubject<number | string>(undefined);\n  public editedContext$ = new BehaviorSubject<DetailedContext>(undefined);\n  public importedContext: DetailedContext[] = [];\n  public toolsChanged$ = new Subject<DetailedContext>();\n  private mapViewFromRoute: ContextMapView = {};\n  private options: ContextServiceOptions;\n  private baseUrl: string;\n\n  // Until the ContextService is completely refactored, this is needed\n  // to track the current tools\n  private tools: Tool[];\n  private toolbar: string[];\n\n  get defaultContextUri(): string {\n    return (\n      (this.storageService.get('favorite.context.uri') as string) ||\n      this._defaultContextUri ||\n      this.options.defaultContextUri\n    );\n  }\n  set defaultContextUri(uri: string) {\n    this._defaultContextUri = uri;\n  }\n  private _defaultContextUri: string;\n\n  constructor() {\n    this.options = Object.assign(\n      {\n        basePath: 'contexts',\n        contextListFile: '_contexts.json',\n        defaultContextUri: '_default'\n      },\n      this.config.getConfig('context')\n    );\n\n    this.baseUrl = this.options.url ?? '';\n\n    if (this.authService.hasAuthService) {\n      this.authService.logged$.subscribe((logged) => {\n        if (logged) {\n          this.contexts$.pipe(skip(1), first()).subscribe(() => {\n            this.handleContextsChange();\n          });\n          this.loadContexts();\n        }\n      });\n    } else {\n      this.loadContexts();\n      this.handleContextsChange(false);\n    }\n  }\n\n  get(permissions?: string[], hidden?: boolean): Observable<ContextsList> {\n    let url = this.baseUrl + '/contexts';\n    if (permissions && this.authService.authenticated) {\n      url += '?permission=' + permissions.join();\n      if (hidden) {\n        url += '&hidden=true';\n      }\n    }\n    return this.http.get<ContextsList>(url);\n  }\n\n  getById(id: string): Observable<Context> {\n    const url = this.baseUrl + '/contexts/' + id;\n    return this.http.get<Context>(url);\n  }\n\n  getDetails(id: number): Observable<DetailedContext> {\n    const url = `${this.baseUrl}/contexts/${id}/details`;\n    return this.http.get<DetailedContext>(url).pipe(\n      catchError((res) => {\n        this.handleError(res, id);\n        throw res;\n      })\n    );\n  }\n\n  getDetailsByUri(uri: string): Observable<DetailedContext> {\n    const url = `${this.baseUrl}/contexts/uri/${uri}/details`;\n    return this.http.get<DetailedContext>(url).pipe(\n      catchError((res) => {\n        this.handleError(res, uri);\n        throw res;\n      })\n    );\n  }\n\n  getDefault(): Observable<DetailedContext> {\n    if (this.authService.authenticated) {\n      const url = this.baseUrl + '/contexts/default';\n      return this.http.get<DetailedContext>(url).pipe(\n        tap((context) => {\n          this.defaultContextId$.next(context.id);\n        })\n      );\n    } else {\n      const uri = this.storageService.get('favorite.context.uri') as string;\n      this.defaultContextId$.next(uri);\n      return this.getContextByUri(uri);\n    }\n  }\n\n  getProfilByUser(): Observable<ContextProfils[]> {\n    if (this.baseUrl) {\n      const url = this.baseUrl + '/profils?';\n      return this.http.get<ContextProfils[]>(url);\n    }\n    return of([]);\n  }\n\n  setDefault(id: string | number): Observable<string | number | undefined> {\n    if (this.authService.authenticated) {\n      const url = this.baseUrl + '/contexts/default';\n      return this.http.post<string>(url, { defaultContextId: id });\n    } else {\n      return this.setDefaultLocalStorage(id);\n    }\n  }\n\n  private setDefaultLocalStorage(\n    id: string | number\n  ): Observable<string | number | undefined> {\n    const selectedId = this.storageService.get('favorite.context.uri');\n    if (selectedId === id) {\n      this.storageService.remove('favorite.context.uri');\n    } else {\n      this.storageService.set('favorite.context.uri', id);\n    }\n    return of(selectedId === id ? undefined : id);\n  }\n\n  hideContext(id: number) {\n    const url = this.baseUrl + '/contexts/' + id + '/hide';\n    return this.http.post(url, {});\n  }\n\n  showContext(id: number) {\n    const url = this.baseUrl + '/contexts/' + id + '/show';\n    return this.http.post(url, {});\n  }\n\n  delete(id: number, imported = false): Observable<void> {\n    const contexts: ContextsList = { ours: [] };\n    Object.keys(this.contexts$.value).forEach(\n      (key) =>\n        (contexts[key] = this.contexts$.value[key].filter((c) => c.id !== id))\n    );\n\n    if (imported) {\n      this.importedContext = this.importedContext.filter((c) => c.id !== id);\n      return of(this.contexts$.next(contexts));\n    }\n\n    const url = this.baseUrl + '/contexts/' + id;\n    return this.http.delete<void>(url).pipe(\n      tap(() => {\n        this.contexts$.next(contexts);\n        this.loadContext(this.defaultContextUri);\n      })\n    );\n  }\n\n  create(context: DetailedContext): Observable<Context> {\n    const url = this.baseUrl + '/contexts';\n    return this.http.post<Context>(url, context).pipe(\n      map((contextCreated) => {\n        if (this.authService.authenticated) {\n          contextCreated.permission = 'write';\n        } else {\n          contextCreated.permission = 'read';\n        }\n        this.contexts$.value.ours.unshift(contextCreated);\n        this.contexts$.next(this.contexts$.value);\n        return contextCreated;\n      })\n    );\n  }\n\n  clone(id: number, properties = {}): Observable<Context> {\n    const url = this.baseUrl + '/contexts/' + id + '/clone';\n    return this.http.post<Context>(url, properties).pipe(\n      map((contextCloned) => {\n        contextCloned.permission = 'write';\n        this.contexts$.value.ours.unshift(contextCloned);\n        this.contexts$.next(this.contexts$.value);\n        return contextCloned;\n      })\n    );\n  }\n\n  update(\n    id: number,\n    context: DetailedContext\n  ): Observable<ContextDetailedChanges> {\n    const url = this.baseUrl + '/contexts/' + id;\n    return this.http.patch<ContextDetailedChanges>(url, context);\n  }\n\n  // =================================================================\n\n  addToolAssociation(contextId: string, toolId: string): Observable<void> {\n    const url = `${this.baseUrl}/contexts/${contextId}/tools`;\n    const association = {\n      toolId\n    };\n    return this.http.post<void>(url, association);\n  }\n\n  deleteToolAssociation(\n    contextId: string,\n    toolId: string\n  ): Observable<unknown> {\n    const url = `${this.baseUrl}/contexts/${contextId}/tools/${toolId}`;\n    return this.http.delete(url);\n  }\n\n  // ======================================================================\n\n  getLocalContexts(): Observable<ContextsList> {\n    const url = this.getPath(this.options.contextListFile);\n    return this.http.get<Context[]>(url).pipe(\n      map((res) => {\n        return { ours: res } satisfies ContextsList;\n      })\n    );\n  }\n\n  getLocalContext(uri: string): Observable<DetailedContext> {\n    const url = this.getPath(`${uri}.json`);\n    return this.http.get<DetailedContext>(url).pipe(\n      mergeMap((res) => {\n        if (!res.base) {\n          return of(res);\n        }\n        const urlBase = this.getPath(`${res.base}.json`);\n        return this.http.get<DetailedContext>(urlBase).pipe(\n          map((resBase: DetailedContext) => {\n            const resMerge = res;\n            resMerge.map = ObjectUtils.mergeDeep(resBase.map, res.map);\n            resMerge.layers = (resBase.layers || [])\n              .concat(res.layers || [])\n              .reverse()\n              .filter(\n                (l, index, self) =>\n                  !l.id || self.findIndex((l2) => l2.id === l.id) === index\n              )\n              .reverse();\n            resMerge.toolbar = res.toolbar || resBase.toolbar;\n            resMerge.message = res.message || resBase.message;\n            resMerge.messages = res.messages || resBase.messages;\n            resMerge.tools = (res.tools || [])\n              .concat(resBase.tools || [])\n              .filter(\n                (t, index, self) =>\n                  self.findIndex((t2) => t2.name === t.name) === index\n              );\n            return resMerge;\n          }),\n          catchError((err) => {\n            this.handleError(err, uri);\n            throw err;\n          })\n        );\n      }),\n      catchError((err2) => {\n        this.handleError(err2, uri);\n        throw err2;\n      })\n    );\n  }\n\n  loadContexts(permissions?: string[], hidden?: boolean) {\n    let request;\n    if (this.baseUrl) {\n      request = this.get(permissions, hidden);\n    } else {\n      request = this.getLocalContexts();\n    }\n    request.subscribe((contexts) => {\n      contexts.ours = this.importedContext.concat(contexts.ours);\n      this.contexts$.next(contexts);\n    });\n  }\n\n  loadDefaultContext() {\n    const loadFct = (direct = false) => {\n      if (!direct && this.baseUrl && this.authService.authenticated) {\n        this.getDefault().subscribe({\n          next: (_context) => {\n            this.defaultContextUri = _context.uri;\n            this.addContextToList(_context);\n            this.setContext(_context);\n          },\n          error: () => {\n            this.defaultContextId$.next(undefined);\n            this.loadContext(this.defaultContextUri);\n          }\n        });\n      } else {\n        this.loadContext(this.defaultContextUri);\n      }\n    };\n\n    if (this.route) {\n      this.route.queryParams.pipe(debounceTime(100)).subscribe((params) => {\n        const contextParam = this.shareMapService.getContext(params);\n        let direct = false;\n        if (contextParam) {\n          this.defaultContextUri = contextParam;\n          direct = true;\n        }\n        loadFct(direct);\n      });\n    } else {\n      loadFct();\n    }\n  }\n\n  loadContext(uri: string) {\n    const context = this.context$.value;\n\n    if (context && context.uri === uri) {\n      return;\n    }\n\n    this.getContextByUri(uri)\n      .pipe(first())\n      .subscribe(\n        (_context: DetailedContext) => {\n          this.addContextToList(_context);\n          this.setContext(_context);\n        },\n        () => {\n          if (uri !== this.options.defaultContextUri) {\n            this.loadContext(this.options.defaultContextUri);\n          }\n        }\n      );\n  }\n\n  setContext(context: DetailedContext) {\n    this.handleContextMessage(context);\n    const currentContext = this.context$.value;\n    if (currentContext && context && context.id === currentContext.id) {\n      if (context.map.view.keepCurrentView === undefined) {\n        context.map.view.keepCurrentView = true;\n      }\n      this.context$.next(context);\n      return;\n    }\n\n    if (!context.map) {\n      context.map = { view: {} };\n    }\n\n    Object.assign(context.map.view, this.mapViewFromRoute);\n\n    this.context$.next(context);\n  }\n\n  loadEditedContext(uri: string) {\n    this.getContextByUri(uri).subscribe((_context: DetailedContext) => {\n      this.setEditedContext(_context);\n    });\n  }\n\n  setEditedContext(context: DetailedContext) {\n    this.editedContext$.next(context);\n  }\n\n  getContextFromMap(igoMap: IgoMap, empty?: boolean): DetailedContext {\n    const view = igoMap.ol.getView();\n    const proj = view.getProjection().getCode();\n    const center = new olPoint(view.getCenter()).transform(proj, 'EPSG:4326');\n\n    const context: DetailedContext = {\n      uri: uuid(),\n      title: '',\n      scope: 'private',\n      map: {\n        view: {\n          center: center.getCoordinates() as [number, number],\n          zoom: view.getZoom(),\n          projection: proj,\n          maxZoomOnExtent: igoMap.viewController.maxZoomOnExtent\n        }\n      },\n      layers: [],\n      tools: []\n    };\n\n    const layers: AnyLayer[] = empty\n      ? []\n      : [...igoMap.layerController.treeLayers];\n\n    const baseLayer = igoMap.layerController.baseLayer;\n    if (baseLayer) {\n      layers.unshift(baseLayer);\n    }\n\n    // Remove null for the first level, the LayerGroup is already doing that for it's children\n    context.layers = layers\n      .map((layer) => layer.saveableOptions)\n      .filter(Boolean);\n\n    context.tools = this.tools.map((tool) => {\n      return {\n        id: tool.id,\n        name: tool.name,\n        global: tool.global\n      };\n    });\n\n    return context;\n  }\n\n  getContextFromLayers(\n    igoMap: IgoMap,\n    layers: AnyLayer[],\n    name: string,\n    keepCurrentView?: boolean\n  ): DetailedContext {\n    const view = igoMap.ol.getView();\n    const proj = view.getProjection().getCode();\n    const center = new olPoint(view.getCenter()).transform(proj, 'EPSG:4326');\n\n    const context: DetailedContext = {\n      uri: name,\n      title: name,\n      map: {\n        view: {\n          center: center.getCoordinates() as [number, number],\n          zoom: view.getZoom(),\n          projection: proj,\n          keepCurrentView\n        }\n      },\n      layers: [],\n      toolbar: [],\n      tools: [],\n      extraFeatures: []\n    };\n\n    context.layers = igoMap.layerController.baseLayers.map((l: Layer) => {\n      return {\n        baseLayer: true,\n        sourceOptions: l.options.sourceOptions,\n        title: l.options.title,\n        visible: l.visible\n      };\n    });\n\n    layers.forEach((layer) => {\n      if (isLayerGroup(layer)) {\n        return context.layers.push(layer.options);\n      }\n      if (!(layer.ol.getSource() instanceof olVectorSource)) {\n        const layerOptions = layer.options;\n        layerOptions.zIndex = layer.zIndex;\n        layerOptions.visible = layer.visible;\n        layerOptions.opacity = layer.opacity;\n        delete layerOptions.source;\n        context.layers.push(layerOptions);\n      } else {\n        const extraFeatures = this.getExtraFeatures(layer);\n        extraFeatures.name = layer.options.title;\n        extraFeatures.opacity = layer.opacity;\n        extraFeatures.visible = layer.visible;\n        context.extraFeatures.push(extraFeatures);\n      }\n    });\n\n    context.toolbar = this.toolbar;\n    context.tools = this.tools;\n\n    return context;\n  }\n\n  private getExtraFeatures(layer: Layer): ExtraFeatures {\n    const writer = new GeoJSON();\n    let olFeatures: Feature<Geometry>[];\n    if (layer.ol.getSource() instanceof Cluster) {\n      const clusterSource = layer.ol.getSource() as Cluster;\n      olFeatures = clusterSource.getFeatures();\n      olFeatures = olFeatures.flatMap((cluster) => cluster.get('features'));\n    } else {\n      const source = layer.ol.getSource() as olVectorSource;\n      olFeatures = source.getFeatures();\n    }\n    const cleanedOlFeatures = this.exportService.cleanFeatures(\n      olFeatures,\n      'GeoJSON',\n      '_featureStore'\n    );\n    const features = writer.writeFeatures(cleanedOlFeatures, {\n      dataProjection: 'EPSG:4326',\n      featureProjection: 'EPSG:3857'\n    });\n    return JSON.parse(features);\n  }\n\n  setTools(tools: Tool[]) {\n    this.tools = tools;\n  }\n\n  setToolbar(toolbar: string[]) {\n    this.toolbar = toolbar;\n  }\n\n  private handleContextMessage(context: DetailedContext) {\n    if (\n      this.context$.value &&\n      context.uri &&\n      this.context$.value.uri !== context.uri\n    ) {\n      this.messageService.removeAllAreNotError();\n    }\n\n    context.messages = context.messages ? context.messages : [];\n    context.messages.push(context.message);\n    context.messages.map((message) => {\n      if (message) {\n        this.messageService.message(message as Message);\n      }\n    });\n  }\n\n  private getContextByUri(uri: string): Observable<DetailedContext> {\n    if (this.baseUrl) {\n      let contextToLoad;\n      for (const key of Object.keys(this.contexts$.value)) {\n        contextToLoad = this.contexts$.value[key].find((c) => {\n          return c.uri === uri;\n        });\n        if (contextToLoad) {\n          break;\n        }\n      }\n\n      if (contextToLoad && contextToLoad.imported) {\n        return of(contextToLoad);\n      }\n\n      return contextToLoad\n        ? this.getDetails(contextToLoad.id)\n        : this.getDetailsByUri(uri);\n    }\n\n    const importedContext = this.contexts$.value.ours.find((currentContext) => {\n      return currentContext.uri === uri && currentContext.imported === true;\n    });\n\n    if (importedContext) {\n      return of(importedContext);\n    } else {\n      return this.getLocalContext(uri);\n    }\n  }\n\n  getContextLayers(map: IgoMap) {\n    return map.layerController.treeLayers;\n  }\n\n  private getPath(file: string) {\n    const basePath = this.options.basePath.replace(/\\/$/, '');\n\n    return `${basePath}/${file}`;\n  }\n\n  private handleError(\n    error: HttpErrorResponse,\n    uri: string | number,\n    permissionError?: boolean\n  ) {\n    const context = this.contexts$.value.ours.find((obj) => obj.uri === uri);\n    const titleContext = context ? context.title : uri;\n    error.error.title = this.languageService.translate.instant(\n      'igo.context.contextManager.invalid.title'\n    );\n\n    error.error.message = this.languageService.translate.instant(\n      'igo.context.contextManager.invalid.text',\n      { value: titleContext }\n    );\n\n    error.error.toDisplay = true;\n\n    if (permissionError) {\n      error.error.title = this.languageService.translate.instant(\n        'igo.context.contextManager.errors.addPermissionTitle'\n      );\n      error.error.message = this.languageService.translate.instant(\n        'igo.context.contextManager.errors.addPermission'\n      );\n    }\n    this.messageService.error(\n      'igo.context.contextManager.errors.addPermission',\n      'igo.context.contextManager.errors.addPermissionTitle'\n    );\n  }\n\n  private handleContextsChange(keepCurrentContext = true) {\n    const context = this.context$.value;\n    const editedContext = this.editedContext$.value;\n    if (!context || context.uri === this.options.defaultContextUri) {\n      keepCurrentContext = false;\n    }\n    if (!keepCurrentContext || !this.findContext(context)) {\n      this.defaultContextUri = undefined;\n      this.loadDefaultContext();\n    } else {\n      this.getContextByUri(context.uri)\n        .pipe(first())\n        .subscribe((newContext) => {\n          this.toolsChanged$.next(newContext);\n        });\n\n      if (this.baseUrl && this.authService.authenticated) {\n        this.getDefault().subscribe();\n      }\n    }\n    const editedFound = this.findContext(editedContext);\n    if (!editedFound || editedFound.permission !== 'write') {\n      this.setEditedContext(undefined);\n    }\n  }\n\n  private addContextToList(context: Context) {\n    const contextFound = this.findContext(context);\n    if (!contextFound) {\n      const contextSimplifie: Context = {\n        id: context.id,\n        uri: context.uri,\n        title: context.title,\n        scope: context.scope,\n        permission: 'read'\n      };\n\n      if (this.contexts$.value && this.contexts$.value.public) {\n        this.contexts$.value.public.push(contextSimplifie);\n        this.contexts$.next(this.contexts$.value);\n      }\n    }\n  }\n\n  private findContext(context: Context) {\n    if (!context) {\n      return false;\n    }\n\n    const contexts = this.contexts$.value;\n    let found;\n    for (const key of Object.keys(contexts)) {\n      const value = contexts[key];\n      found = value.find(\n        (c) =>\n          (context.id && c.id === context.id) ||\n          (context.uri && c.uri === context.uri)\n      );\n      if (found) {\n        break;\n      }\n    }\n\n    return found;\n  }\n}\n","export class ExportError extends Error {}\n\nexport class ExportInvalidFileError extends ExportError {\n  constructor() {\n    super('Invalid context');\n    Object.setPrototypeOf(this, ExportInvalidFileError.prototype);\n  }\n}\n\nexport class ExportNothingToExportError extends ExportError {\n  constructor() {\n    super('Nothing to export');\n    Object.setPrototypeOf(this, ExportNothingToExportError.prototype);\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { downloadContent } from '@igo2/utils';\n\nimport { Observable, Observer } from 'rxjs';\n\nimport { DetailedContext } from '../../context-manager/shared/context.interface';\nimport { ExportNothingToExportError } from './context-export.errors';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ContextExportService {\n  export(res: DetailedContext): Observable<void> {\n    return this.exportAsync(res);\n  }\n\n  protected exportAsync(res: DetailedContext): Observable<void> {\n    const doExport = (observer: Observer<void>) => {\n      const nothingToExport = this.nothingToExport(res);\n      if (nothingToExport === true) {\n        observer.error(new ExportNothingToExportError());\n        return;\n      }\n      const contextJSON = JSON.stringify(res);\n      downloadContent(\n        contextJSON,\n        'text/json;charset=utf-8',\n        `${res.uri}.json`\n      );\n      observer.complete();\n    };\n    return new Observable(doExport);\n  }\n\n  protected nothingToExport(res: DetailedContext): boolean {\n    if (res.map === undefined) {\n      return true;\n    }\n    return false;\n  }\n}\n","import { MessageService } from '@igo2/core/message';\n\nimport { ExportNothingToExportError } from './context-export.errors';\n\nexport function handleFileExportError(\n  error: Error,\n  messageService: MessageService\n) {\n  if (error instanceof ExportNothingToExportError) {\n    this.handleNothingToExportError(messageService);\n    return;\n  }\n  messageService.error(\n    'igo.context.contextImportExport.export.failed.text',\n    'igo.context.contextImportExport.export.failed.title'\n  );\n}\n\nexport function handleFileExportSuccess(messageService: MessageService) {\n  messageService.success(\n    'igo.context.contextImportExport.export.success.text',\n    'igo.context.contextImportExport.export.success.title'\n  );\n}\n\nexport function handleNothingToExportError(messageService: MessageService) {\n  messageService.error(\n    'igo.context.contextImportExport.export.nothing.text',\n    'igo.context.contextImportExport.export.nothing.title'\n  );\n}\n","export class ImportError extends Error {}\n\nexport class ImportInvalidFileError extends ImportError {\n  constructor() {\n    super('Invalid file');\n    Object.setPrototypeOf(this, ImportInvalidFileError.prototype);\n  }\n}\n\nexport class ImportUnreadableFileError extends ImportError {\n  constructor() {\n    super('Failed to read file');\n    Object.setPrototypeOf(this, ImportUnreadableFileError.prototype);\n  }\n}\n\nexport class ImportNothingToImportError extends ImportError {\n  constructor() {\n    super('Nothing to import');\n    Object.setPrototypeOf(this, ImportNothingToImportError.prototype);\n  }\n}\n\nexport class ImportSizeError extends ImportError {\n  constructor() {\n    super('File is too large');\n    Object.setPrototypeOf(this, ImportNothingToImportError.prototype);\n  }\n}\n\nexport class ImportSRSError extends ImportError {\n  constructor() {\n    super('Invalid SRS definition');\n    Object.setPrototypeOf(this, ImportNothingToImportError.prototype);\n  }\n}\n","import { MessageService } from '@igo2/core/message';\nimport {\n  ClusterDataSource,\n  ClusterDataSourceOptions,\n  ClusterParam,\n  FeatureDataSource,\n  FeatureDataSourceOptions,\n  IgoMap,\n  QueryableDataSourceOptions,\n  StyleByAttribute,\n  StyleListService,\n  StyleService,\n  VectorLayer,\n  featureRandomStyle,\n  featureRandomStyleFunction\n} from '@igo2/geo';\n\nimport OlFeature from 'ol/Feature';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\n\nimport {\n  DetailedContext,\n  ExtraFeatures\n} from '../../context-manager/shared/context.interface';\nimport { ContextService } from '../../context-manager/shared/context.service';\n\nexport function handleFileImportSuccess(\n  file: File,\n  context: DetailedContext,\n  messageService: MessageService,\n  contextService: ContextService\n) {\n  if (Object.keys(context).length <= 0) {\n    handleNothingToImportError(file, messageService);\n    return;\n  }\n\n  const contextTitle = computeLayerTitleFromFile(file);\n\n  addContextToContextList(context, contextTitle, contextService);\n\n  messageService.success(\n    'igo.context.contextImportExport.import.success.text',\n    'igo.context.contextImportExport.import.success.title',\n    undefined,\n    {\n      value: contextTitle\n    }\n  );\n}\n\nexport function handleFileImportError(\n  file: File,\n  error: Error,\n  messageService: MessageService,\n  sizeMb?: number\n) {\n  sizeMb = sizeMb ? sizeMb : 30;\n  const errMapping = {\n    'Invalid file': handleInvalidFileImportError,\n    'File is too large': handleSizeFileImportError,\n    'Failed to read file': handleUnreadbleFileImportError\n  };\n  errMapping[error.message](file, error, messageService, sizeMb);\n}\n\nexport function handleInvalidFileImportError(\n  file: File,\n  error: Error,\n  messageService: MessageService\n) {\n  messageService.error(\n    'igo.context.contextImportExport.import.invalid.text',\n    'igo.context.contextImportExport.import.invalid.title',\n    undefined,\n    {\n      value: file.name,\n      mimeType: file.type\n    }\n  );\n}\n\nexport function handleSizeFileImportError(\n  file: File,\n  error: Error,\n  messageService: MessageService,\n  sizeMb: number\n) {\n  messageService.error(\n    'igo.context.contextImportExport.import.tooLarge.text',\n    'igo.context.contextImportExport.import.tooLarge.title',\n    undefined,\n    {\n      value: file.name,\n      size: sizeMb\n    }\n  );\n}\n\nexport function handleUnreadbleFileImportError(\n  file: File,\n  error: Error,\n  messageService: MessageService\n) {\n  messageService.error(\n    'igo.context.contextImportExport.import.unreadable.text',\n    'igo.context.contextImportExport.import.unreadable.title',\n    undefined,\n    {\n      value: file.name\n    }\n  );\n}\n\nexport function handleNothingToImportError(\n  file: File,\n  messageService: MessageService\n) {\n  messageService.error(\n    'igo.context.contextImportExport.import.empty.text',\n    'igo.context.contextImportExport.import.empty.title',\n    undefined,\n    { value: file.name }\n  );\n}\n\nexport function addContextToContextList(\n  context: DetailedContext,\n  contextTitle: string,\n  contextService: ContextService\n) {\n  context.title = contextTitle;\n  context.imported = true;\n  contextService.contexts$.value.ours.unshift(context);\n  contextService.contexts$.next(contextService.contexts$.value);\n  contextService.importedContext.unshift(context);\n  contextService.loadContext(context.uri);\n}\n\nexport function getFileExtension(file: File): string {\n  return file.name.split('.').pop().toLowerCase();\n}\n\nexport function computeLayerTitleFromFile(file: File): string {\n  return file.name.substr(0, file.name.lastIndexOf('.'));\n}\n\nexport function addImportedFeaturesToMap(\n  extraFeatures: ExtraFeatures,\n  map: IgoMap\n): VectorLayer {\n  const sourceOptions: FeatureDataSourceOptions & QueryableDataSourceOptions = {\n    type: 'vector',\n    queryable: true\n  };\n\n  const olFeatures = collectFeaturesFromExtraFeatures(extraFeatures);\n  const source = new FeatureDataSource(sourceOptions);\n  source.ol.addFeatures(olFeatures);\n\n  let randomStyle;\n  let editable = false;\n  const featureKeys = olFeatures[0]?.getKeys() ?? [];\n  if (featureKeys.includes('_style') || featureKeys.includes('_mapTitle')) {\n    randomStyle = featureRandomStyleFunction();\n  } else {\n    randomStyle = featureRandomStyle();\n    editable = true;\n  }\n  const layer = new VectorLayer({\n    title: extraFeatures.name,\n    isIgoInternalLayer: true,\n    source,\n    igoStyle: { editable },\n    style: randomStyle,\n    visible: extraFeatures.visible,\n    opacity: extraFeatures.opacity\n  });\n  map.layerController.add(layer);\n\n  return layer;\n}\n\nexport function addImportedFeaturesStyledToMap(\n  extraFeatures: ExtraFeatures,\n  map: IgoMap,\n  styleListService: StyleListService,\n  styleService: StyleService\n): VectorLayer {\n  let style;\n  let distance: number;\n\n  if (styleListService.getStyleList(extraFeatures.name + '.styleByAttribute')) {\n    const styleByAttribute: StyleByAttribute = styleListService.getStyleList(\n      extraFeatures.name + '.styleByAttribute'\n    );\n\n    style = (feature, resolution) => {\n      return styleService.createStyleByAttribute(\n        feature,\n        styleByAttribute,\n        resolution\n      );\n    };\n  } else if (\n    styleListService.getStyleList(extraFeatures.name + '.clusterStyle')\n  ) {\n    const clusterParam: ClusterParam = styleListService.getStyleList(\n      extraFeatures.name + '.clusterParam'\n    );\n    distance = styleListService.getStyleList(extraFeatures.name + '.distance');\n\n    style = (feature, resolution) => {\n      const baseStyle = styleService.createStyle(\n        styleListService.getStyleList(extraFeatures.name + '.clusterStyle'),\n        feature,\n        resolution\n      );\n      return styleService.createClusterStyle(\n        feature,\n        resolution,\n        clusterParam,\n        baseStyle\n      );\n    };\n  } else if (styleListService.getStyleList(extraFeatures.name + '.style')) {\n    style = (feature, resolution) =>\n      styleService.createStyle(\n        styleListService.getStyleList(extraFeatures.name + '.style'),\n        feature,\n        resolution\n      );\n  } else {\n    style = (feature, resolution) =>\n      styleService.createStyle(\n        styleListService.getStyleList('default.style'),\n        feature,\n        resolution\n      );\n  }\n  let source;\n  const olFeatures = collectFeaturesFromExtraFeatures(extraFeatures);\n  if (styleListService.getStyleList(extraFeatures.name + '.clusterStyle')) {\n    const sourceOptions: ClusterDataSourceOptions & QueryableDataSourceOptions =\n      {\n        distance,\n        type: 'cluster',\n        queryable: true\n      };\n    source = new ClusterDataSource(sourceOptions);\n    source.ol.source.addFeatures(olFeatures);\n  } else {\n    const sourceOptions: FeatureDataSourceOptions & QueryableDataSourceOptions =\n      {\n        type: 'vector',\n        queryable: true\n      };\n    source = new FeatureDataSource(sourceOptions);\n    source.ol.addFeatures(olFeatures);\n  }\n\n  const layer = new VectorLayer({\n    title: extraFeatures.name,\n    isIgoInternalLayer: true,\n    source,\n    style,\n    opacity: extraFeatures.opacity,\n    visible: extraFeatures.visible\n  });\n  map.layerController.add(layer);\n\n  return layer;\n}\n\nfunction collectFeaturesFromExtraFeatures(\n  featureCollection: ExtraFeatures\n): OlFeature<OlGeometry>[] {\n  const format = new GeoJSON();\n  const features = format.readFeatures(featureCollection, {\n    dataProjection: 'EPSG:4326',\n    featureProjection: 'EPSG:3857'\n  });\n  return features;\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport { Observable, Observer } from 'rxjs';\n\nimport { DetailedContext } from '../../context-manager/shared/context.interface';\nimport {\n  ImportInvalidFileError,\n  ImportSizeError,\n  ImportUnreadableFileError\n} from './context-import.errors';\nimport { getFileExtension } from './context-import.utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ContextImportService {\n  private config = inject(ConfigService);\n\n  static allowedMimeTypes = ['application/json'];\n\n  static allowedExtensions = 'json';\n\n  private clientSideFileSizeMax: number;\n\n  constructor() {\n    const configFileSizeMb = this.config.getConfig(\n      'importExport.clientSideFileSizeMaxMb'\n    );\n    this.clientSideFileSizeMax =\n      (configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);\n  }\n\n  import(file: File): Observable<DetailedContext> {\n    return this.importAsync(file);\n  }\n\n  private getFileImporter(\n    file: File\n  ): (\n    file: File,\n    observer: Observer<DetailedContext>,\n    projectionIn: string,\n    projectionOut: string\n  ) => void {\n    const extension = getFileExtension(file);\n    const mimeType = file.type;\n    const allowedMimeTypes = [...ContextImportService.allowedMimeTypes];\n    const allowedExtensions = ContextImportService.allowedExtensions;\n\n    if (\n      allowedMimeTypes.indexOf(mimeType) < 0 &&\n      allowedExtensions.indexOf(extension) < 0\n    ) {\n      return undefined;\n    } else if (\n      mimeType === 'application/json' ||\n      extension === ContextImportService.allowedExtensions\n    ) {\n      return this.importFile;\n    }\n    return undefined;\n  }\n\n  private importAsync(file: File): Observable<DetailedContext> {\n    const doImport = (observer: Observer<DetailedContext>) => {\n      if (file.size >= this.clientSideFileSizeMax) {\n        observer.error(new ImportSizeError());\n        return;\n      }\n      const importer = this.getFileImporter(file);\n      if (importer === undefined) {\n        observer.error(new ImportInvalidFileError());\n        return;\n      }\n\n      importer.call(this, file, observer);\n    };\n\n    return new Observable(doImport);\n  }\n\n  private importFile(file: File, observer: Observer<DetailedContext>) {\n    const reader = new FileReader();\n\n    reader.onload = (event) => {\n      try {\n        const context = this.parseContextFromFile(\n          file,\n          event.target.result as string\n        );\n        observer.next(context);\n      } catch {\n        observer.error(new ImportUnreadableFileError());\n      }\n\n      observer.complete();\n    };\n\n    reader.onerror = () => {\n      observer.error(new ImportUnreadableFileError());\n    };\n\n    reader.readAsText(file, 'UTF-8');\n  }\n\n  private parseContextFromFile(file: File, data: string): DetailedContext {\n    const context: DetailedContext = JSON.parse(data);\n    return context;\n  }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, OnInit, inject, input } from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder,\n  UntypedFormGroup,\n  Validators\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { SpinnerComponent } from '@igo2/common/spinner';\nimport { ConfigService } from '@igo2/core/config';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { type AnyLayer, type IgoMap, VectorLayer } from '@igo2/geo';\n\nimport { BehaviorSubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { DetailedContext } from '../../context-manager/shared/context.interface';\nimport { ContextService } from '../../context-manager/shared/context.service';\nimport { ContextExportService } from '../shared/context-export.service';\nimport { handleFileExportError } from '../shared/context-export.utils';\nimport { handleFileExportSuccess } from '../shared/context-export.utils';\nimport { ContextImportService } from '../shared/context-import.service';\nimport {\n  handleFileImportError,\n  handleFileImportSuccess\n} from '../shared/context-import.utils';\n\n@Component({\n  selector: 'igo-context-import-export',\n  templateUrl: './context-import-export.component.html',\n  styleUrls: ['./context-import-export.component.scss'],\n  imports: [\n    MatButtonToggleModule,\n    FormsModule,\n    MatButtonModule,\n    SpinnerComponent,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatSelectModule,\n    MatOptionModule,\n    MatDividerModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class ContextImportExportComponent implements OnInit {\n  private contextImportService = inject(ContextImportService);\n  private contextExportService = inject(ContextExportService);\n  private messageService = inject(MessageService);\n  private formBuilder = inject(UntypedFormBuilder);\n  private config = inject(ConfigService);\n  private contextService = inject(ContextService);\n\n  public form: UntypedFormGroup;\n  public layers: VectorLayer[];\n  public inputProj = 'EPSG:4326';\n  public loading$ = new BehaviorSubject(false);\n  public forceNaming = false;\n  public layerList: AnyLayer[];\n  public userControlledLayerList: readonly AnyLayer[];\n  public res: DetailedContext;\n  private clientSideFileSizeMax: number;\n  public fileSizeMb: number;\n  public activeImportExport = 'import';\n\n  readonly map = input<IgoMap>(undefined);\n\n  constructor() {\n    this.buildForm();\n  }\n\n  ngOnInit() {\n    const configFileSizeMb = this.config.getConfig(\n      'importExport.clientSideFileSizeMaxMb'\n    );\n    this.clientSideFileSizeMax =\n      (configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);\n    this.fileSizeMb = this.clientSideFileSizeMax / Math.pow(1024, 2);\n\n    this.layerList = this.map().layerController.all;\n    this.userControlledLayerList = this.map().layerController.treeLayers;\n  }\n\n  importFiles(files: File[]) {\n    this.loading$.next(true);\n    for (const file of files) {\n      this.contextImportService\n        .import(file)\n        .pipe(take(1))\n        .subscribe(\n          (context: DetailedContext) => this.onFileImportSuccess(file, context),\n          (error: Error) => this.onFileImportError(file, error),\n          () => {\n            this.loading$.next(false);\n          }\n        );\n    }\n  }\n\n  handleExportFormSubmit(contextOptions) {\n    this.loading$.next(true);\n    this.res = this.contextService.getContextFromLayers(\n      this.map(),\n      contextOptions.layers,\n      contextOptions.name,\n      false\n    );\n    this.res.imported = true;\n    this.contextExportService\n      .export(this.res)\n      .pipe(take(1))\n      .subscribe({\n        error: (error: Error) => this.onFileExportError(error),\n        complete: () => {\n          this.onFileExportSuccess();\n          this.loading$.next(false);\n        }\n      });\n  }\n\n  private buildForm() {\n    this.form = this.formBuilder.group({\n      layers: ['', [Validators.required]],\n      name: ['', [Validators.required]]\n    });\n  }\n\n  private onFileImportSuccess(file: File, context: DetailedContext) {\n    handleFileImportSuccess(\n      file,\n      context,\n      this.messageService,\n      this.contextService\n    );\n  }\n\n  private onFileImportError(file: File, error: Error) {\n    this.loading$.next(false);\n    handleFileImportError(file, error, this.messageService, this.fileSizeMb);\n  }\n\n  private onFileExportError(error: Error) {\n    this.loading$.next(false);\n    handleFileExportError(error, this.messageService);\n  }\n\n  private onFileExportSuccess() {\n    handleFileExportSuccess(this.messageService);\n  }\n\n  selectAll(e) {\n    if (e._selected) {\n      this.form.controls.layers.setValue(this.userControlledLayerList);\n      e._selected = true;\n    }\n    if (e._selected === false) {\n      this.form.controls.layers.setValue([]);\n    }\n  }\n\n  onImportExportChange(event) {\n    this.activeImportExport = event.value;\n  }\n}\n","<div class=\"import-export-toggle\">\n  <mat-button-toggle-group\n    [value]=\"activeImportExport\"\n    (change)=\"onImportExportChange($event)\"\n  >\n    <mat-button-toggle [value]=\"'import'\">\n      {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\n    </mat-button-toggle>\n    <mat-button-toggle [value]=\"'export'\">\n      {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\n    </mat-button-toggle>\n  </mat-button-toggle-group>\n</div>\n\n@if (activeImportExport === 'import') {\n  <div>\n    <form class=\"igo-form\">\n      <div class=\"igo-form-button-group\">\n        <button\n          matButton=\"elevated\"\n          type=\"button\"\n          (click)=\"fileInput.click()\"\n          [disabled]=\"loading$ | async\"\n        >\n          {{ 'igo.geo.importExportForm.importButton' | translate }}\n        </button>\n        <igo-spinner [shown]=\"loading$ | async\" />\n        <input\n          #fileInput\n          type=\"file\"\n          [style.display]=\"'none'\"\n          (click)=\"fileInput.value = null\"\n          (change)=\"importFiles($any($event.target).files)\"\n        />\n      </div>\n    </form>\n    <section>\n      <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\n      <ul>\n        <li>\n          {{\n            'igo.geo.importExportForm.importSizeMax'\n              | translate: { size: fileSizeMb }\n          }}\n        </li>\n      </ul>\n    </section>\n  </div>\n}\n\n@if (activeImportExport === 'export') {\n  <form class=\"igo-form\" [formGroup]=\"form\">\n    <div class=\"igo-input-container\">\n      <mat-form-field class=\"example-full-width\">\n        <mat-label>{{\n          'igo.context.contextImportExport.export.exportContextName' | translate\n        }}</mat-label>\n        <input formControlName=\"name\" matInput [value]=\"\" />\n      </mat-form-field>\n    </div>\n    <div class=\"igo-input-container\">\n      <mat-form-field>\n        <mat-label>{{\n          'igo.context.contextImportExport.export.exportPlaceHolder' | translate\n        }}</mat-label>\n        <mat-select formControlName=\"layers\" multiple>\n          <mat-option [value]=\"1\" (click)=\"selectAll(e)\" #e>\n            {{\n              'igo.context.contextImportExport.export.exportSelectAll'\n                | translate\n            }}\n          </mat-option>\n          <mat-divider />\n          @for (layer of userControlledLayerList; track layer) {\n            <mat-option [value]=\"layer\">{{ layer.title }}</mat-option>\n          }\n        </mat-select>\n      </mat-form-field>\n    </div>\n    <div class=\"igo-form-button-group\">\n      <button\n        matButton=\"elevated\"\n        type=\"button\"\n        [disabled]=\"!form.valid || (loading$ | async)\"\n        (click)=\"handleExportFormSubmit(form.value)\"\n      >\n        {{ 'igo.geo.importExportForm.exportButton' | translate }}\n      </button>\n      <igo-spinner [shown]=\"loading$ | async\" />\n    </div>\n  </form>\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { ContextImportExportComponent } from './context-import-export/context-import-export.component';\n\n/**\n * @deprecated import the ContextImportExportComponent directly\n */\n@NgModule({\n  imports: [ContextImportExportComponent],\n  exports: [ContextImportExportComponent]\n})\nexport class IgoContextImportExportModule {\n  static forRoot(): ModuleWithProviders<IgoContextImportExportModule> {\n    return {\n      ngModule: IgoContextImportExportModule\n    };\n  }\n}\n","import { Clipboard } from '@angular/cdk/clipboard';\nimport { Component, computed, inject, input, output } from '@angular/core';\nimport {\n  FormGroup,\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { Context } from '../shared/context.interface';\n\n@Component({\n  selector: 'igo-context-form',\n  templateUrl: './context-form.component.html',\n  styleUrls: ['./context-form.component.scss'],\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class ContextFormComponent {\n  private clipboard = inject(Clipboard);\n  private formBuilder = inject(UntypedFormBuilder);\n  private messageService = inject(MessageService);\n\n  public prefix: string;\n\n  readonly btnSubmitText = input<string>();\n  readonly context = input<Context>();\n  readonly disabled = input(false);\n\n  readonly submitForm = output<unknown>();\n  readonly clone = output<unknown>();\n  readonly delete = output<unknown>();\n\n  // WORKAROUND, the context-form is shown before the editedContext emit and we got change detection problem\n  readonly form = computed<FormGroup | undefined>(() => {\n    const context = this.context();\n    if (context) {\n      return this.buildForm(context);\n    }\n  });\n\n  public handleFormSubmit(value) {\n    let inputs = Object.assign({}, value);\n    inputs = ObjectUtils.removeNull(inputs);\n    inputs.uri = inputs.uri.replace(' ', '');\n    if (inputs.uri) {\n      inputs.uri = this.prefix + '-' + inputs.uri;\n    } else {\n      inputs.uri = this.prefix;\n    }\n    this.submitForm.emit(inputs);\n  }\n\n  public copyTextToClipboard() {\n    const text = this.prefix + '-' + this.form().value.uri.replace(' ', '');\n    const successful = this.clipboard.copy(text);\n    if (successful) {\n      this.messageService.success(\n        'igo.context.contextManager.dialog.copyMsg',\n        'igo.context.contextManager.dialog.copyTitle'\n      );\n    }\n  }\n\n  private buildForm(context: Context): FormGroup {\n    const uriSplit = context.uri.split('-');\n    this.prefix = uriSplit.shift();\n    const uri = uriSplit.join('-');\n\n    return this.formBuilder.group({\n      title: [context.title],\n      uri: [uri || ' ']\n    });\n  }\n}\n","@let form = this.form();\n<form\n  class=\"igo-form\"\n  [formGroup]=\"form\"\n  (ngSubmit)=\"handleFormSubmit(form.value)\"\n>\n  <mat-form-field class=\"full-width\">\n    <input\n      matInput\n      required\n      maxlength=\"128\"\n      [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n      formControlName=\"title\"\n    />\n    <mat-error>\n      {{ 'igo.context.contextManager.form.titleRequired' | translate }}\n    </mat-error>\n  </mat-form-field>\n\n  <mat-form-field id=\"uriInput\" class=\"full-width\">\n    @if (prefix) {\n      <span class=\"prefix\">{{ prefix }}-</span>\n    }\n    <span class=\"fieldWrapper\">\n      <input\n        matInput\n        maxlength=\"64\"\n        floatLabel=\"always\"\n        [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n        formControlName=\"uri\"\n      />\n    </span>\n  </mat-form-field>\n\n  <button\n    id=\"copyButton\"\n    type=\"button\"\n    mat-icon-button\n    tooltip-position=\"below\"\n    matTooltipShowDelay=\"500\"\n    [matTooltip]=\"'igo.context.contextManager.form.copy' | translate\"\n    color=\"primary\"\n    (click)=\"copyTextToClipboard()\"\n  >\n    <mat-icon>content_copy</mat-icon>\n  </button>\n\n  <div class=\"igo-form-button-group\">\n    <button\n      matButton=\"elevated\"\n      type=\"submit\"\n      [disabled]=\"form.invalid || disabled()\"\n    >\n      {{ 'igo.context.contextManager.form.edit' | translate }}\n    </button>\n  </div>\n</form>\n","export const TypePermission = ['read', 'write'] as const;\nexport type TypePermission = (typeof TypePermission)[number];\n\nexport enum Scope {\n  public,\n  protected,\n  private\n}\n","import {\n  Directive,\n  OnDestroy,\n  OnInit,\n  inject,\n  input,\n  output\n} from '@angular/core';\nimport { Params } from '@angular/router';\n\nimport { ConfigService } from '@igo2/core/config';\nimport {\n  ID_GROUP_PREFIX,\n  LayerService,\n  MapBrowserComponent,\n  StyleListService,\n  StyleService,\n  isLayerGroupOptions,\n  mergeLayersOptions,\n  sortLayersByZindex\n} from '@igo2/geo';\nimport type { AnyLayer, AnyLayerOptions, IgoMap, LayerId } from '@igo2/geo';\nimport { ObjectUtils, uuid } from '@igo2/utils';\n\nimport { Subscription } from 'rxjs';\nimport { debounceTime, filter, switchMap } from 'rxjs/operators';\n\nimport {\n  addImportedFeaturesStyledToMap,\n  addImportedFeaturesToMap\n} from '../../context-import-export/shared/context-import.utils';\nimport { ShareMapService } from '../../share-map/shared/share-map.service';\nimport { DetailedContext } from './context.interface';\nimport { ContextService } from './context.service';\n\n@Directive({\n  selector: '[igoLayerContext]'\n})\nexport class LayerContextDirective implements OnInit, OnDestroy {\n  private component = inject(MapBrowserComponent);\n  private contextService = inject(ContextService);\n  private layerService = inject(LayerService);\n  private configService = inject(ConfigService);\n  private styleListService = inject(StyleListService);\n  private styleService = inject(StyleService);\n  private shareMapService = inject(ShareMapService);\n\n  private context$$: Subscription;\n  private queryParams: Params;\n\n  private contextLayers: AnyLayer[] = [];\n\n  readonly removeLayersOnContextChange = input<boolean>(true);\n\n  readonly contextLayersLoaded = output<boolean>();\n\n  get map(): IgoMap {\n    return this.component.map();\n  }\n\n  ngOnInit() {\n    this.context$$ = this.shareMapService.routeService.queryParams\n      .pipe(\n        switchMap((params) => {\n          this.queryParams = params ?? {};\n          return this.contextService.context$.pipe(\n            filter((context) => context !== undefined)\n          );\n        })\n      )\n      .subscribe((context) => this.handleContextChange(context));\n  }\n\n  ngOnDestroy() {\n    this.context$$.unsubscribe();\n  }\n\n  private handleContextChange(context: DetailedContext) {\n    if (context.layers === undefined) {\n      return;\n    }\n\n    /**\n     * Assign an id to each layer group if it doesn't have one.\n     * This is needed to be able to detect layer groups in the context that doesn't have and id and be able to ignore them in the share\n     */\n    if (context.layers?.length) {\n      addIdToGroups(context.layers);\n    }\n\n    const contextLayers = this.handleContextWithSharedUrl(\n      ObjectUtils.copyDeep(context)\n    );\n\n    if (this.removeLayersOnContextChange() === true) {\n      this.map.layerController.reset();\n    } else {\n      this.map.layerController.remove(...this.contextLayers);\n    }\n    this.contextLayers = [];\n    this.layerService.unavailableLayers = [];\n\n    const importExportOptions = this.configService.getConfig('importExport');\n\n    this.layerService\n      .createLayers(contextLayers, context.uri)\n      .subscribe((layers) => {\n        this.handleAddLayers(layers);\n\n        if (context.extraFeatures) {\n          context.extraFeatures.forEach((featureCollection) => {\n            if (!importExportOptions?.importWithStyle) {\n              addImportedFeaturesToMap(featureCollection, this.map);\n            } else {\n              addImportedFeaturesStyledToMap(\n                featureCollection,\n                this.map,\n                this.styleListService,\n                this.styleService\n              );\n            }\n          });\n        }\n\n        this.contextLayersLoaded.emit(true);\n      });\n    if (this.configService.getConfig('importExport.allowToStoreLayer', false)) {\n      this.layerService\n        .createAsyncIdbLayers(context.uri)\n        .pipe(debounceTime(500))\n        .subscribe((layers) => this.handleAddLayers(layers));\n    }\n  }\n\n  private handleAddLayers(layers: (AnyLayer | undefined)[]) {\n    const layersFiltrered = layers\n      .filter((layer) => layer)\n      .map((layer) => {\n        layer.visible = this.computeLayerVisibilityFromUrl(layer);\n        return layer;\n      });\n\n    const layersSorted = sortLayersByZindex(layersFiltrered, 'asc');\n    this.contextLayers.concat(layersSorted);\n    this.map.layerController.add(...layersSorted);\n  }\n\n  private computeLayerVisibilityFromUrl(layer: AnyLayer): boolean {\n    const params = this.queryParams;\n    const currentContext = this.contextService.context$.value.uri;\n    const currentLayerid = layer.id;\n\n    let visible = layer.visible;\n    if (!params || !currentLayerid) {\n      return visible;\n    }\n    const contextParams = this.shareMapService.getContext(params);\n\n    if (contextParams === currentContext || !contextParams) {\n      let visibleOnLayersParams = '';\n      let visibleOffLayersParams = '';\n      let visiblelayers: LayerId[] = [];\n      let invisiblelayers: LayerId[] = [];\n      const visibleOnLayers =\n        params[this.shareMapService.routeService.options.visibleOnLayersKey];\n\n      const visibleOffLayers =\n        params[this.shareMapService.routeService.options.visibleOffLayersKey];\n\n      if (visibleOnLayers) {\n        visibleOnLayersParams = visibleOnLayers;\n      }\n      if (visibleOffLayers) {\n        visibleOffLayersParams = visibleOffLayers;\n      }\n\n      /* This order is important because to control whichever\n       the order of * param. First whe open and close everything.*/\n      if (visibleOnLayersParams === '*') {\n        visible = true;\n      }\n      if (visibleOffLayersParams === '*') {\n        visible = false;\n      }\n\n      // After, managing named layer by id (context.json OR id from datasource)\n      visiblelayers = visibleOnLayersParams.split(',');\n      invisiblelayers = visibleOffLayersParams.split(',');\n      if (\n        visiblelayers.indexOf(currentLayerid) > -1 ||\n        visiblelayers.indexOf(currentLayerid.toString()) > -1\n      ) {\n        visible = true;\n      }\n      if (\n        invisiblelayers.indexOf(currentLayerid) > -1 ||\n        invisiblelayers.indexOf(currentLayerid.toString()) > -1\n      ) {\n        visible = false;\n      }\n    }\n\n    return visible;\n  }\n\n  private handleContextWithSharedUrl(\n    context: DetailedContext\n  ): AnyLayerOptions[] {\n    if (!this.queryParams) {\n      return context.layers;\n    }\n\n    const { layers, uri } = context;\n    const contextValue = this.shareMapService.getContext(this.queryParams);\n\n    if (!contextValue || contextValue === uri) {\n      const layersOptions = this.shareMapService.parseLayers(this.queryParams);\n      if (layersOptions.length) {\n        return mergeLayersOptions([...layers], layersOptions);\n      }\n    }\n    return layers;\n  }\n}\n\n/** Recursive */\nfunction addIdToGroups(layerOptions: AnyLayerOptions[]): void {\n  for (const options of layerOptions) {\n    if (isLayerGroupOptions(options) && !options.id) {\n      options.id = ID_GROUP_PREFIX + uuid();\n      if (Array.isArray(options.children)) {\n        addIdToGroups(options.children);\n      }\n    }\n  }\n}\n","import { Directive, OnDestroy, OnInit, inject } from '@angular/core';\nimport { Params } from '@angular/router';\n\nimport { MediaService } from '@igo2/core/media';\nimport {\n  MapBrowserComponent,\n  MapControlsOptions,\n  MapScaleLineOptions\n} from '@igo2/geo';\nimport type { IgoMap } from '@igo2/geo';\n\nimport { Subscription } from 'rxjs';\nimport { filter, switchMap } from 'rxjs/operators';\n\nimport { ShareMapService } from '../../share-map/shared/share-map.service';\nimport { ContextMapView, DetailedContext } from './context.interface';\nimport { ContextService } from './context.service';\n\n@Directive({\n  selector: '[igoMapContext]'\n})\nexport class MapContextDirective implements OnInit, OnDestroy {\n  private contextService = inject(ContextService);\n  private mediaService = inject(MediaService);\n  private shareMapService = inject(ShareMapService);\n\n  private component: MapBrowserComponent;\n  private context$$: Subscription;\n\n  get map(): IgoMap {\n    return this.component.map();\n  }\n\n  private queryParams: Params;\n\n  constructor() {\n    const component = inject(MapBrowserComponent);\n\n    this.component = component;\n  }\n\n  ngOnInit() {\n    this.context$$ = this.shareMapService.routeService.queryParams\n      .pipe(\n        switchMap((params) => {\n          this.queryParams = params ?? {};\n          return this.contextService.context$.pipe(\n            filter((context) => context !== undefined)\n          );\n        })\n      )\n      .subscribe((context) => this.handleContextChange(context));\n  }\n\n  ngOnDestroy() {\n    this.context$$.unsubscribe();\n  }\n\n  private handleContextChange(context: DetailedContext) {\n    if (context.map === undefined) {\n      return;\n    }\n\n    const viewContext: ContextMapView = context.map.view;\n    const shouldOverrideView =\n      !this.component.view() ||\n      viewContext.keepCurrentView !== true ||\n      context.map.view.projection !== this.map.projection;\n\n    if (\n      this.shareMapService.hasPositionParams(this.queryParams) &&\n      shouldOverrideView\n    ) {\n      const positions = this.shareMapService.parsePosition(this.queryParams);\n      this.component.setView({ ...viewContext, ...positions });\n    } else if (shouldOverrideView) {\n      this.component.setView(viewContext);\n    }\n\n    const map = this.component.map();\n    if (map.geolocationController) {\n      map.geolocationController.updateGeolocationOptions(viewContext);\n    }\n\n    const controlsContext: MapControlsOptions = context.map.controls;\n    if (!this.component.controls && controlsContext) {\n      if (this.mediaService.isMobile()) {\n        if (typeof controlsContext.scaleLine !== 'boolean') {\n          const scaleLineOption =\n            controlsContext.scaleLine as MapScaleLineOptions;\n          if (!scaleLineOption.minWidth) {\n            scaleLineOption.minWidth = Math.min(64, scaleLineOption.minWidth);\n            controlsContext.scaleLine = scaleLineOption;\n          }\n        }\n      }\n      this.component.controls = controlsContext;\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  output\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\n\nimport { ContextFormComponent } from '../context-form/context-form.component';\nimport { ContextService } from '../shared';\nimport { Context } from '../shared/context.interface';\n\n@Component({\n  selector: 'igo-context-edit',\n  imports: [ContextFormComponent, IgoLanguageModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './context-edit.component.html'\n})\nexport class ContextEditComponent {\n  private contextService = inject(ContextService);\n  private messageService = inject(MessageService);\n\n  readonly context = toSignal(this.contextService.editedContext$);\n\n  readonly submitSuccessed = output<Context>();\n\n  onEdit(context: Context) {\n    const id = this.context().id;\n    this.contextService.update(id, context).subscribe(() => {\n      this.messageService.success(\n        'igo.context.contextManager.dialog.saveMsg',\n        'igo.context.contextManager.dialog.saveTitle',\n        undefined,\n        {\n          value: context.title || this.context().title\n        }\n      );\n      const currentContext = this.contextService.context$.value;\n      if (currentContext && currentContext.id === id) {\n        currentContext.title = context.title;\n        currentContext.uri = context.uri;\n      }\n      this.contextService.setEditedContext(undefined);\n      this.submitSuccessed.emit(context);\n    });\n  }\n}\n","@if (context()) {\n  <igo-context-form\n    [btnSubmitText]=\"'igo.context.contextManager.save' | translate\"\n    [context]=\"context()\"\n    (submitForm)=\"onEdit($event)\"\n  />\n}\n","import { NgClass } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  output,\n  viewChild\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { AuthService } from '@igo2/auth';\nimport { StopPropagationDirective } from '@igo2/common/stop-propagation';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { TypePermission } from '../shared/context.enum';\nimport { DetailedContext } from '../shared/context.interface';\n\n@Component({\n  selector: 'igo-context-item',\n  templateUrl: './context-item.component.html',\n  styleUrls: ['./context-item.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatListModule,\n    NgClass,\n    MatButtonModule,\n    StopPropagationDirective,\n    MatTooltipModule,\n    MatIconModule,\n    MatMenuModule,\n    IgoLanguageModule\n  ],\n  host: {\n    '[class.igo-list-item-focused]': 'this.isMenuOpen'\n  }\n})\nexport class ContextItemComponent {\n  auth = inject(AuthService);\n  private storageService = inject(StorageService);\n\n  typePermission = TypePermission;\n  color = 'primary';\n  collapsed = true;\n\n  readonly showFavorite = input(true);\n  readonly context = input<DetailedContext>(undefined);\n  readonly default = input<boolean>(undefined);\n  readonly selected = input<boolean>(undefined);\n  readonly isDesktop = input<boolean>(undefined);\n\n  readonly edit = output<DetailedContext>();\n  readonly delete = output<DetailedContext>();\n  readonly save = output<DetailedContext>();\n  readonly clone = output<DetailedContext>();\n  readonly hide = output<DetailedContext>();\n  readonly show = output<DetailedContext>();\n  readonly favorite = output<DetailedContext>();\n  readonly managePermissions = output<DetailedContext>();\n  readonly manageTools = output<DetailedContext>();\n  readonly share = output<DetailedContext>();\n\n  get hidden(): boolean {\n    return this.context().hidden;\n  }\n\n  get canShare(): boolean {\n    return this.storageService.get('canShare') === true;\n  }\n\n  get isMenuOpen(): boolean {\n    return this.itemActionsMenuTrigger()?.menuOpen ?? false;\n  }\n\n  itemActionsMenuTrigger = viewChild(MatMenuTrigger);\n\n  favoriteClick(context: DetailedContext) {\n    this.favorite.emit(context);\n  }\n}\n","<mat-list-item\n  class=\"mat-list-item\"\n  [ngClass]=\"{ 'mat-list-item-light': hidden }\"\n>\n  @if (auth.authenticated) {\n    <button\n      matListItemAvatar\n      mat-icon-button\n      igoStopPropagation\n      [matTooltip]=\"\n        auth.authenticated\n          ? ('igo.context.contextManager.favorite' | translate)\n          : ''\n      \"\n      matTooltipShowDelay=\"500\"\n      [color]=\"default() ? 'primary' : 'default'\"\n      (click)=\"favoriteClick(context())\"\n    >\n      @if (!context().iconImage) {\n        <mat-icon>{{\n          context().icon\n            ? context().icon\n            : context().scope === 'public'\n              ? 'public'\n              : 'star'\n        }}</mat-icon>\n      } @else {\n        <img\n          [src]=\"context().iconImage\"\n          alt=\"Icône pour le favori de contexte\"\n        />\n      }\n    </button>\n  } @else if (showFavorite()) {\n    <button\n      matListItemAvatar\n      mat-icon-button\n      igoStopPropagation\n      [matTooltip]=\"'igo.context.contextManager.favorite' | translate\"\n      matTooltipShowDelay=\"500\"\n      [color]=\"default() ? 'primary' : 'default'\"\n      (click)=\"favoriteClick(context())\"\n    >\n      <mat-icon>star</mat-icon>\n    </button>\n  }\n\n  <span matListItemTitle>{{ context().title }}</span>\n\n  @if (auth.authenticated) {\n    <div\n      matListItemMeta\n      igoStopPropagation\n      class=\"igo-actions-container\"\n      [class.--not-desktop]=\"!isDesktop()\"\n      [class.--selected]=\"selected()\"\n    >\n      @if (\n        collapsed &&\n        selected() &&\n        (context().permission === 'write' || context().imported)\n      ) {\n        <button\n          class=\"save-button\"\n          mat-icon-button\n          [matTooltip]=\"'igo.context.contextManager.save' | translate\"\n          matTooltipShowDelay=\"500\"\n          [color]=\"color\"\n          (click)=\"save.emit(context())\"\n        >\n          <mat-icon>save</mat-icon>\n        </button>\n      }\n\n      <button\n        class=\"actions-button\"\n        mat-icon-button\n        [color]=\"color\"\n        [matMenuTriggerFor]=\"itemActionsMenu\"\n        #itemActionsMenuTrigger=\"matMenuTrigger\"\n      >\n        <mat-icon>more_vert</mat-icon>\n      </button>\n      <mat-menu #itemActionsMenu=\"matMenu\">\n        @if (!context().imported) {\n          @if (canShare) {\n            <button\n              mat-menu-item\n              [matTooltip]=\"\n                'igo.context.contextManager.managePermissions' | translate\n              \"\n              matTooltipShowDelay=\"500\"\n              (click)=\"managePermissions.emit(context())\"\n            >\n              <mat-icon>manage_accounts</mat-icon\n              ><span>{{\n                'igo.context.contextManager.managePermissions' | translate\n              }}</span>\n            </button>\n          }\n\n          <button\n            class=\"clone-button\"\n            mat-menu-item\n            [matTooltip]=\"'igo.context.contextManager.clone' | translate\"\n            matTooltipShowDelay=\"500\"\n            (click)=\"clone.emit(context())\"\n          >\n            <mat-icon>content_copy</mat-icon>\n            <span>{{ 'igo.context.contextManager.clone' | translate }}</span>\n          </button>\n\n          @if (context().permission === 'write') {\n            <button\n              class=\"edit-button\"\n              mat-menu-item\n              [matTooltip]=\"'igo.context.contextManager.edit' | translate\"\n              matTooltipShowDelay=\"500\"\n              (click)=\"edit.emit(context())\"\n            >\n              <mat-icon>edit</mat-icon>\n              <span>{{ 'igo.context.contextManager.edit' | translate }}</span>\n            </button>\n          }\n\n          @if (!context().hidden) {\n            <button\n              class=\"hide-button\"\n              mat-menu-item\n              [matTooltip]=\"'igo.context.contextManager.hide' | translate\"\n              matTooltipShowDelay=\"500\"\n              (click)=\"hide.emit(context())\"\n            >\n              <mat-icon>visibility</mat-icon>\n              <span>{{ 'igo.context.contextManager.hide' | translate }}</span>\n            </button>\n          }\n\n          @if (context().hidden) {\n            <button\n              class=\"hide-button\"\n              mat-menu-item\n              [matTooltip]=\"'igo.context.contextManager.show' | translate\"\n              matTooltipShowDelay=\"500\"\n              (click)=\"show.emit(context())\"\n            >\n              <mat-icon>visibility_off</mat-icon>\n              <span>{{ 'igo.context.contextManager.show' | translate }}</span>\n            </button>\n          }\n\n          <button\n            mat-menu-item\n            class=\"share-button\"\n            [matTooltip]=\"'igo.context.contextManager.share' | translate\"\n            matTooltipShowDelay=\"500\"\n            (click)=\"share.emit(context())\"\n          >\n            <mat-icon>share</mat-icon>\n            <span>{{ 'igo.context.contextManager.share' | translate }}</span>\n          </button>\n        }\n\n        @if (context().permission === 'write' || context().imported) {\n          <button\n            class=\"delete-button\"\n            mat-menu-item\n            color=\"warn\"\n            [matTooltip]=\"'igo.context.contextManager.delete' | translate\"\n            matTooltipShowDelay=\"500\"\n            (click)=\"delete.emit(context())\"\n          >\n            <mat-icon>delete</mat-icon>\n            <span>{{ 'igo.context.contextManager.delete' | translate }}</span>\n          </button>\n        }\n      </mat-menu>\n    </div>\n  }\n</mat-list-item>\n","import { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MatDialogActions,\n  MatDialogContent,\n  MatDialogRef,\n  MatDialogTitle\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\n@Component({\n  selector: 'igo-bookmark-dialog',\n  templateUrl: './bookmark-dialog.component.html',\n  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule,\n    MatDialogActions,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class BookmarkDialogComponent {\n  dialogRef = inject<MatDialogRef<BookmarkDialogComponent>>(MatDialogRef);\n\n  public title: string;\n}\n","<h1 mat-dialog-title>\n  {{ 'igo.context.bookmarkButton.dialog.title' | translate }}\n</h1>\n<div mat-dialog-content>\n  <mat-form-field>\n    <input\n      matInput\n      required\n      autocomplete=\"off\"\n      maxlength=\"128\"\n      [placeholder]=\"\n        'igo.context.bookmarkButton.dialog.placeholder' | translate\n      \"\n      [(ngModel)]=\"title\"\n    />\n  </mat-form-field>\n</div>\n<div mat-dialog-actions>\n  <button\n    mat-button\n    color=\"primary\"\n    [disabled]=\"!title\"\n    (click)=\"dialogRef.close(title)\"\n  >\n    {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\n  </button>\n  <button mat-button (click)=\"dialogRef.close(false)\">\n    {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\n  </button>\n</div>\n","export enum ContextListControlsEnum {\n  always = 'always',\n  never = 'never',\n  default = 'default'\n}\n","import { Clipboard } from '@angular/cdk/clipboard';\nimport { AsyncPipe, KeyValue, KeyValuePipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject,\n  input,\n  model,\n  output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { AuthService } from '@igo2/auth';\nimport {\n  ActionStore,\n  ActionbarComponent,\n  ActionbarMode\n} from '@igo2/common/action';\nimport { CollapsibleComponent } from '@igo2/common/collapsible';\nimport { ConfirmDialogService } from '@igo2/common/confirm-dialog';\nimport {\n  IgoIconComponent,\n  SORT_ALPHA_OFF_ICON,\n  SORT_ALPHA_ON_ICON\n} from '@igo2/common/icon';\nimport { ListComponent, ListItemDirective } from '@igo2/common/list';\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { StorageService } from '@igo2/core/storage';\nimport { type IgoMap, MapService, isLayerItemOptions } from '@igo2/geo';\n\nimport { BehaviorSubject, ReplaySubject, Subscription, timer } from 'rxjs';\nimport { debounceTime, switchMap, take, tap } from 'rxjs/operators';\nimport { debounce } from 'rxjs/operators';\n\nimport { BookmarkDialogComponent } from '../../context-map-button/bookmark-button/bookmark-dialog.component';\nimport { ShareMapService } from '../../share-map/shared/share-map.service';\nimport { ContextItemComponent } from '../context-item/context-item.component';\nimport { ContextUserPermission } from '../context-permissions/context-permission.interface';\nimport {\n  Context,\n  ContextDetailedChanges,\n  ContextProfils,\n  ContextServiceOptions,\n  ContextsList,\n  DetailedContext\n} from '../shared/context.interface';\nimport { ContextService } from '../shared/context.service';\nimport { ContextListControlsEnum } from './context-list.enum';\n\n@Component({\n  selector: 'igo-context-list',\n  templateUrl: './context-list.component.html',\n  styleUrls: ['./context-list.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    ListComponent,\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule,\n    MatButtonModule,\n    MatIconModule,\n    MatTooltipModule,\n    ActionbarComponent,\n    MatMenuModule,\n    MatCheckboxModule,\n    CollapsibleComponent,\n    ContextItemComponent,\n    ListItemDirective,\n    AsyncPipe,\n    KeyValuePipe,\n    IgoLanguageModule,\n    IgoIconComponent\n  ]\n})\nexport class ContextListComponent implements OnInit, OnDestroy {\n  configService = inject(ConfigService);\n  auth = inject(AuthService);\n  private contextService = inject(ContextService);\n  private shareMapService = inject(ShareMapService);\n  private clipboard = inject(Clipboard);\n  private messageService = inject(MessageService);\n  private mapService = inject(MapService);\n  private confirmDialogService = inject(ConfirmDialogService);\n  private dialog = inject(MatDialog);\n  private languageService = inject(LanguageService);\n  private storageService = inject(StorageService);\n\n  public contextConfigs: ContextServiceOptions;\n  private contextsInitial: ContextsList = { ours: [] };\n  contexts$ = new BehaviorSubject<ContextsList>(this.contextsInitial);\n\n  change$ = new ReplaySubject<void>(1);\n\n  private change$$: Subscription;\n  private previousMessageId: number;\n\n  sortAlphaOnIcon = SORT_ALPHA_ON_ICON;\n  sortAlphaOffIcon = SORT_ALPHA_OFF_ICON;\n\n  @Input() isDesktop: boolean;\n  @Input()\n  get contexts(): ContextsList {\n    return this._contexts;\n  }\n  set contexts(value: ContextsList) {\n    this._contexts = value;\n    this.next();\n  }\n  private _contexts: ContextsList = { ours: [] };\n\n  readonly selectedContext = model<DetailedContext>(undefined);\n\n  readonly map = input<IgoMap>(undefined);\n\n  @Input()\n  get defaultContextId(): string | number {\n    return this.contextConfigs\n      ? this._defaultContextId\n      : (this.storageService.get('favorite.context.uri') as string) ||\n          this._defaultContextId;\n  }\n  set defaultContextId(value: string | number) {\n    this._defaultContextId = value;\n  }\n  private _defaultContextId: string | number;\n\n  public collapsed: { contextScope }[] = [];\n\n  readonly select = output<DetailedContext>();\n  readonly unselect = output<DetailedContext>();\n  readonly edit = output<DetailedContext>();\n  readonly delete = output<DetailedContext>();\n  readonly save = output<DetailedContext>();\n  readonly clone = output<DetailedContext>();\n  readonly create = output<{\n    title: string;\n    empty: boolean;\n  }>();\n  readonly hide = output<DetailedContext>();\n  readonly show = output<DetailedContext>();\n  readonly showHiddenContexts = output<boolean>();\n  readonly favorite = output<DetailedContext>();\n  readonly managePermissions = output<DetailedContext>();\n  readonly manageTools = output<DetailedContext>();\n  readonly filterPermissionsChanged = output<ContextUserPermission[]>();\n\n  public titleMapping = {\n    ours: 'igo.context.contextManager.ourContexts',\n    shared: 'igo.context.contextManager.sharedContexts',\n    public: 'igo.context.contextManager.publicContexts'\n  };\n\n  public users: ContextProfils[];\n  public permissions: ContextUserPermission[] = [];\n\n  public actionStore = new ActionStore([]);\n  public actionbarMode = ActionbarMode.Overlay;\n\n  public color = 'primary';\n\n  public showHidden = false;\n\n  /**\n   * Context filter term\n   */\n  @Input()\n  set term(value: string) {\n    this._term = value;\n    this.next();\n  }\n  get term(): string {\n    return this._term;\n  }\n  public _term = '';\n\n  get sortedAlpha(): boolean {\n    return this._sortedAlpha;\n  }\n  set sortedAlpha(value: boolean) {\n    this._sortedAlpha = value;\n    this.next();\n  }\n  private _sortedAlpha: boolean = undefined;\n\n  public showContextFilter = ContextListControlsEnum.always;\n\n  public thresholdToFilter = 5;\n\n  get isEmpty(): boolean {\n    return (\n      !this.contexts.ours.length &&\n      !this.contexts.public?.length &&\n      !this.contexts.shared?.length\n    );\n  }\n\n  private contexts$$: Subscription;\n  private selectedContext$$: Subscription;\n  private defaultContextId$$: Subscription;\n\n  constructor() {\n    this.contextConfigs = this.configService.getConfig('context');\n  }\n\n  ngOnInit() {\n    this.change$$ = this.change$\n      .pipe(debounce(() => timer(50)))\n      .subscribe(() => {\n        this.contexts$.next(this.filterContextsList(this.contexts));\n      });\n\n    this.actionStore.load([\n      {\n        id: 'emptyContext',\n        title: this.languageService.translate.instant(\n          'igo.context.contextManager.emptyContext'\n        ),\n        icon: 'star',\n        tooltip: this.languageService.translate.instant(\n          'igo.context.contextManager.emptyContextTooltip'\n        ),\n        handler: () => {\n          this.createContext(true);\n        }\n      },\n      {\n        id: 'contextFromMap',\n        title: this.languageService.translate.instant(\n          'igo.context.contextManager.contextMap'\n        ),\n        icon: 'map',\n        tooltip: this.languageService.translate.instant(\n          'igo.context.contextManager.contextMapTooltip'\n        ),\n        handler: () => {\n          this.createContext(false);\n        }\n      }\n    ]);\n\n    // Override input contexts\n    this.contexts = { ours: [] };\n    this.showHidden = this.storageService.get('contexts.showHidden') as boolean;\n\n    this.contexts$$ = this.contextService.contexts$.subscribe(\n      (contexts) => (this.contexts = contexts)\n    );\n\n    this.defaultContextId$$ = this.contextService.defaultContextId$.subscribe(\n      (id) => {\n        this.defaultContextId = id;\n      }\n    );\n    const storedContextUri = this.storageService.get(\n      'favorite.context.uri'\n    ) as string;\n    if (storedContextUri && !this.auth.authenticated) {\n      this.contextService.defaultContextId$.next(storedContextUri);\n    }\n\n    // See feature-list.component for an explanation about the debounce time\n    this.selectedContext$$ = this.contextService.context$\n      .pipe(debounceTime(100))\n      .subscribe((context) => {\n        this.setSelected(context);\n      });\n\n    this.auth.authenticate$.subscribe((authenticate) => {\n      if (authenticate) {\n        this.contextService.getProfilByUser().subscribe((profils) => {\n          this.users = profils;\n          this.permissions = [];\n          const profilsAcc = this.users.reduce((acc, cur) => {\n            acc = acc.concat(cur);\n            acc = cur.childs ? acc.concat(cur.childs) : acc;\n            return acc;\n          }, []);\n\n          for (const user of profilsAcc) {\n            const permission: ContextUserPermission = {\n              name: user.name,\n              checked: this.storageService.get(\n                'contexts.permissions.' + user.name\n              ) as boolean\n            };\n            if (permission.checked === null) {\n              permission.checked = true;\n            }\n            this.permissions.push(permission);\n          }\n\n          const permissions = ['none'];\n          for (const p of this.permissions) {\n            if (p.checked === true || p.indeterminate === true) {\n              permissions.push(p.name);\n            }\n          }\n\n          this.contextService.loadContexts(permissions, this.showHidden);\n        });\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this.change$$.unsubscribe();\n    this.contexts$$.unsubscribe();\n    this.selectedContext$$.unsubscribe();\n    this.defaultContextId$$.unsubscribe();\n  }\n\n  setSelected(context: DetailedContext) {\n    this.selectedContext.set(context);\n  }\n\n  // Comparator function to sort by context.title\n  sortByKeyPriority = (\n    a: KeyValue<string, DetailedContext[]>,\n    b: KeyValue<string, DetailedContext[]>\n  ): number => {\n    const ORDER = ['ours', 'shared', 'public'];\n    return ORDER.indexOf(a.key) - ORDER.indexOf(b.key);\n  };\n\n  private next() {\n    this.change$.next();\n  }\n\n  private filterContextsList(contexts: ContextsList): ContextsList {\n    if (this.term === '') {\n      if (this.sortedAlpha) {\n        contexts = this.sortContextsList(contexts);\n      }\n      return contexts;\n    } else {\n      const ours = contexts.ours.filter((context) => {\n        const filterNormalized = this.term\n          .toLowerCase()\n          .normalize('NFD')\n          .replace(/[\\u0300-\\u036f]/g, '');\n        const contextTitleNormalized = context.title\n          .toLowerCase()\n          .normalize('NFD')\n          .replace(/[\\u0300-\\u036f]/g, '');\n        return contextTitleNormalized.includes(filterNormalized);\n      });\n\n      let updateContexts: ContextsList = {\n        ours\n      };\n\n      if (this.contexts.public) {\n        const publics = contexts.public.filter((context) => {\n          const filterNormalized = this.term\n            .toLowerCase()\n            .normalize('NFD')\n            .replace(/[\\u0300-\\u036f]/g, '');\n          const contextTitleNormalized = context.title\n            .toLowerCase()\n            .normalize('NFD')\n            .replace(/[\\u0300-\\u036f]/g, '');\n          return contextTitleNormalized.includes(filterNormalized);\n        });\n        updateContexts.public = publics;\n      }\n\n      if (this.contexts.shared) {\n        const shared = contexts.shared.filter((context) => {\n          const filterNormalized = this.term\n            .toLowerCase()\n            .normalize('NFD')\n            .replace(/[\\u0300-\\u036f]/g, '');\n          const contextTitleNormalized = context.title\n            .toLowerCase()\n            .normalize('NFD')\n            .replace(/[\\u0300-\\u036f]/g, '');\n          return contextTitleNormalized.includes(filterNormalized);\n        });\n        updateContexts.shared = shared;\n      }\n\n      if (this.sortedAlpha) {\n        updateContexts = this.sortContextsList(updateContexts);\n      }\n      return updateContexts;\n    }\n  }\n\n  public showFilter() {\n    switch (this.showContextFilter) {\n      case ContextListControlsEnum.always:\n        return true;\n      case ContextListControlsEnum.never:\n        return false;\n      default: {\n        let totalLength = this.contexts.ours.length;\n\n        this.contexts.public\n          ? (totalLength += this.contexts.public.length)\n          : (totalLength += 0);\n\n        this.contexts.shared\n          ? (totalLength += this.contexts.shared.length)\n          : (totalLength += 0);\n        if (totalLength >= this.thresholdToFilter) {\n          return true;\n        }\n        return false;\n      }\n    }\n  }\n\n  sortContextsList(contexts: ContextsList) {\n    if (contexts) {\n      const contextsList = JSON.parse(JSON.stringify(contexts));\n      contextsList.ours.sort((a, b) => {\n        if (this.normalize(a.title) < this.normalize(b.title)) {\n          return -1;\n        }\n        if (this.normalize(a.title) > this.normalize(b.title)) {\n          return 1;\n        }\n        return 0;\n      });\n\n      if (contextsList.shared) {\n        contextsList.shared.sort((a, b) => {\n          if (this.normalize(a.title) < this.normalize(b.title)) {\n            return -1;\n          }\n          if (this.normalize(a.title) > this.normalize(b.title)) {\n            return 1;\n          }\n          return 0;\n        });\n      } else if (contextsList.public) {\n        contextsList.public.sort((a, b) => {\n          if (this.normalize(a.title) < this.normalize(b.title)) {\n            return -1;\n          }\n          if (this.normalize(a.title) > this.normalize(b.title)) {\n            return 1;\n          }\n          return 0;\n        });\n      }\n      return contextsList;\n    }\n  }\n\n  normalize(str: string) {\n    return str\n      .normalize('NFD')\n      .replace(/[\\u0300-\\u036f]/g, '')\n      .toLowerCase();\n  }\n\n  toggleSort() {\n    this.sortedAlpha = !this.sortedAlpha;\n  }\n\n  clearFilter() {\n    this.term = '';\n  }\n\n  createContext(empty?: boolean) {\n    this.dialog\n      .open(BookmarkDialogComponent, { disableClose: false })\n      .afterClosed()\n      .pipe(take(1))\n      .subscribe((title: string) => {\n        if (title) {\n          this.onCreate({ title, empty });\n        }\n      });\n  }\n\n  getPermission(user?): ContextUserPermission {\n    if (user) {\n      const permission = this.permissions.find((p) => p.name === user.name);\n      return permission;\n    }\n  }\n\n  handleToggleCategory(user, parent?) {\n    const permission = this.getPermission(user);\n    if (permission) {\n      permission.checked = !permission.checked;\n      this.storageService.set(\n        'contexts.permissions.' + permission.name,\n        permission.checked\n      );\n      permission.indeterminate = false;\n    }\n\n    if (parent) {\n      let indeterminate = false;\n\n      for (const c of parent.childs) {\n        const cPermission = this.getPermission(c);\n        if (cPermission.checked !== permission.checked) {\n          indeterminate = true;\n          break;\n        }\n      }\n      const parentPermission = this.getPermission(parent);\n      if (parentPermission) {\n        parentPermission.checked = permission.checked;\n        this.storageService.set(\n          'contexts.permissions.' + parentPermission.name,\n          permission.checked\n        );\n        parentPermission.indeterminate = indeterminate;\n      }\n    }\n\n    if (user.childs) {\n      for (const c of user.childs) {\n        const childrenPermission = this.getPermission(c);\n        if (\n          childrenPermission &&\n          childrenPermission.checked !== permission.checked\n        ) {\n          childrenPermission.checked = permission.checked;\n          this.storageService.set(\n            'contexts.permissions.' + childrenPermission.name,\n            permission.checked\n          );\n        }\n      }\n    }\n\n    this.onFilterPermissionsChanged();\n  }\n\n  showContext(context: DetailedContext) {\n    context.hidden = false;\n    this.contextService.showContext(context.id).subscribe();\n\n    this.show.emit(context);\n  }\n\n  onSelect(context: DetailedContext) {\n    this.contextService.loadContext(context.uri);\n    this.select.emit(context);\n  }\n\n  isContextSelected(context: DetailedContext): boolean {\n    const selectedContext = this.selectedContext();\n    if (!selectedContext) return false;\n\n    return context?.id\n      ? selectedContext.id === context.id\n      : selectedContext.uri === context.uri;\n  }\n\n  onShareContext(context: DetailedContext) {\n    const currentContext = this.contextService.context$.value;\n    const { toolKey, sidenavKey, languageKey } =\n      this.shareMapService.routeService.options;\n    const { context: contextKey } = this.shareMapService.options;\n    const baseOrigin = this.shareMapService.sanitizeBaseUrl(\n      this.shareMapService.document.location.href\n    );\n\n    const url =\n      context.uri === currentContext.uri\n        ? this.shareMapService.generateUrl(\n            this.map(),\n            this.contextService.context$.value\n          )\n        : `${baseOrigin}${contextKey}=${context.uri}`;\n\n    const params: string[] = [];\n\n    const currentLanguage = this.shareMapService.language;\n    if (currentLanguage && !url.includes(`${languageKey}=`))\n      params.push(`${languageKey}=${currentLanguage}`);\n\n    if (!url.includes(`${toolKey}=`)) params.push(`${toolKey}=${'mapTools'}`);\n    if (!url.includes(`${sidenavKey}=`)) params.push(`${sidenavKey}=1`);\n\n    const fullUrl = params.length ? `${url}&${params.join('&')}` : url;\n    const successful = this.clipboard.copy(fullUrl);\n    if (!successful) return;\n\n    this.messageService.success(\n      'igo.context.shareMap.dialog.copyMsg',\n      'igo.context.shareMap.dialog.copyTitle'\n    );\n  }\n\n  onEdit(context: Context) {\n    this.contextService.loadEditedContext(context.uri);\n    this.edit.emit(context);\n  }\n\n  onSave(context: Context) {\n    const map = this.mapService.getMap();\n    const contextFromMap = this.contextService.getContextFromMap(map);\n\n    const msgSuccess = () => {\n      this.messageService.success(\n        'igo.context.contextManager.dialog.saveMsg',\n        'igo.context.contextManager.dialog.saveTitle',\n        undefined,\n        {\n          value: context.title\n        }\n      );\n    };\n\n    if (context.imported) {\n      contextFromMap.title = context.title;\n      this.contextService.delete(context.id, true);\n      this.contextService.create(contextFromMap).subscribe((contextCreated) => {\n        this.contextService.loadContext(contextCreated.uri);\n        msgSuccess();\n      });\n      return;\n    }\n\n    const changes: DetailedContext = {\n      layers: contextFromMap.layers,\n      map: {\n        view: contextFromMap.map.view\n      }\n    };\n\n    this.contextService\n      .update(context.id, changes)\n      .pipe(\n        tap((changes) => {\n          this.handleContextChanges(changes);\n          msgSuccess();\n        }),\n        switchMap(() => this.contextService.getDetails(context.id)),\n        tap((fullContext) => {\n          this.contextService.context$.value.layers = fullContext.layers;\n        }),\n        take(1)\n      )\n      .subscribe();\n\n    this.save.emit(context);\n  }\n\n  private handleContextChanges(changes: ContextDetailedChanges): void {\n    const map = this.mapService.getMap();\n    changes.layers.created.forEach((layerCreated) => {\n      const layer = isLayerItemOptions(layerCreated)\n        ? map.layerController.getBySourceId(layerCreated.sourceOptions.id)\n        : map.layerController.getByTitle(layerCreated.title);\n      if (layer) {\n        layer.id = layerCreated.id;\n      }\n    });\n  }\n\n  onFavorite(context: Context) {\n    if (!context.id) {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      context.id = context.uri as any;\n    }\n\n    this.contextService.setDefault(context.id).subscribe((defaultId) => {\n      if (this.previousMessageId) {\n        this.messageService.remove(this.previousMessageId);\n      }\n\n      this.contextService.defaultContextId$.next(defaultId);\n      if (defaultId != null && String(defaultId) === String(context.id)) {\n        const messageObj = this.messageService.success(\n          'igo.context.contextManager.dialog.favoriteMsg',\n          'igo.context.contextManager.dialog.favoriteTitle',\n          undefined,\n          {\n            value: context.title\n          }\n        );\n        this.previousMessageId = messageObj.toastId;\n      }\n\n      this.favorite.emit(context);\n    });\n  }\n\n  onManageTools(context: Context) {\n    this.contextService.loadEditedContext(context.uri);\n    this.manageTools.emit(context);\n  }\n\n  onManagePermissions(context: Context) {\n    this.contextService.loadEditedContext(context.uri);\n    this.managePermissions.emit(context);\n  }\n\n  onDelete(context: Context) {\n    const translate = this.languageService.translate;\n    this.confirmDialogService\n      .open(\n        translate.instant('igo.context.contextManager.dialog.confirmDelete')\n      )\n      .subscribe((confirm) => {\n        if (confirm) {\n          this.contextService\n            .delete(context.id, context.imported)\n            .subscribe(() => {\n              this.messageService.info(\n                'igo.context.contextManager.dialog.deleteMsg',\n                'igo.context.contextManager.dialog.deleteTitle',\n                undefined,\n                { value: context.title }\n              );\n            });\n\n          this.delete.emit(context);\n        }\n      });\n  }\n\n  onClone(context: DetailedContext) {\n    const properties = {\n      title: context.title + '-copy',\n      uri: context.uri + '-copy'\n    };\n    this.contextService.clone(context.id, properties).subscribe(() => {\n      this.messageService.success(\n        'igo.context.contextManager.dialog.cloneMsg',\n        'igo.context.contextManager.dialog.cloneTitle',\n        undefined,\n        { value: context.title }\n      );\n    });\n    this.clone.emit(context);\n  }\n\n  onCreate(opts: { title: string; empty: boolean }) {\n    const { title, empty } = opts;\n    const context = this.contextService.getContextFromMap(this.map(), empty);\n    context.title = title;\n    this.contextService.create(context).subscribe(() => {\n      this.messageService.success(\n        'igo.context.bookmarkButton.dialog.createMsg',\n        'igo.context.bookmarkButton.dialog.createTitle',\n        undefined,\n        { value: context.title }\n      );\n      this.contextService.loadContext(context.uri);\n    });\n\n    this.create.emit(opts);\n  }\n\n  onFilterPermissionsChanged() {\n    const permissions = ['none'];\n    for (const p of this.permissions) {\n      if (p.checked === true || p.indeterminate === true) {\n        permissions.push(p.name);\n      }\n    }\n\n    this.contextService.loadContexts(permissions, this.showHidden);\n\n    this.filterPermissionsChanged.emit(this.permissions);\n  }\n\n  onShowHiddenContexts() {\n    this.showHidden = !this.showHidden;\n    this.storageService.set('contexts.showHidden', this.showHidden);\n    this.onFilterPermissionsChanged();\n    this.showHiddenContexts.emit(this.showHidden);\n  }\n\n  onHideContext(context: DetailedContext) {\n    this.contextService.hideContext(context.id).subscribe();\n\n    context.hidden = true;\n    if (!this.showHidden) {\n      const contexts: ContextsList = { ours: [], shared: [], public: [] };\n      contexts.ours = this.contexts.ours.filter((c) => c.id !== context.id);\n      contexts.shared = this.contexts.shared?.filter(\n        (c) => c.id !== context.id\n      );\n      contexts.public = this.contexts.public?.filter(\n        (c) => c.id !== context.id\n      );\n      this.contexts = contexts;\n    }\n    this.hide.emit(context);\n  }\n}\n","<igo-list [navigation]=\"true\">\n  <div class=\"context-filter-container\">\n    @if (showFilter()) {\n      <mat-form-field>\n        <mat-label>{{\n          'igo.context.contextManager.filterPlaceHolder' | translate\n        }}</mat-label>\n        <input\n          matInput\n          type=\"text\"\n          [placeholder]=\"\n            'igo.context.contextManager.filterPlaceHolder' | translate\n          \"\n          [(ngModel)]=\"term\"\n        />\n        @if (term.length) {\n          <button\n            mat-icon-button\n            matSuffix\n            class=\"clear-button\"\n            aria-label=\"Clear\"\n            color=\"warn\"\n            (click)=\"clearFilter()\"\n          >\n            <mat-icon>close</mat-icon>\n          </button>\n        }\n      </mat-form-field>\n    }\n\n    <div class=\"actions-container\">\n      <button\n        mat-icon-button\n        [matTooltip]=\"\n          sortedAlpha\n            ? ('igo.context.contextManager.sortDefault' | translate)\n            : ('igo.context.contextManager.sortAlphabetically' | translate)\n        \"\n        matTooltipShowDelay=\"500\"\n        (click)=\"toggleSort()\"\n      >\n        <igo-icon\n          color=\"primary\"\n          [icon]=\"sortedAlpha ? sortAlphaOnIcon : sortAlphaOffIcon\"\n        />\n      </button>\n\n      @if (auth.authenticated && contextConfigs) {\n        <igo-actionbar\n          class=\"add-context-button\"\n          [iconColor]=\"color\"\n          [store]=\"actionStore\"\n          [withIcon]=\"true\"\n          icon=\"add\"\n          [withTitle]=\"actionbarMode === 'overlay'\"\n          [horizontal]=\"false\"\n          [mode]=\"actionbarMode\"\n        />\n\n        <button\n          class=\"users-filter\"\n          mat-icon-button\n          [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\n          matTooltipShowDelay=\"500\"\n          [matMenuTriggerFor]=\"accountMenu\"\n        >\n          <mat-icon color=\"primary\">filter_alt</mat-icon>\n        </button>\n      }\n      <mat-menu #accountMenu=\"matMenu\">\n        @for (user of users; track user.name) {\n          @if (!user.childs) {\n            <button mat-menu-item class=\"profil-menu\">\n              <mat-checkbox\n                [checked]=\"getPermission(user).checked\"\n                [indeterminate]=\"getPermission(user).indeterminate\"\n                (click)=\"$event.stopPropagation()\"\n                (change)=\"handleToggleCategory(user)\"\n              />\n              <span>{{ user.title }}</span>\n            </button>\n          } @else {\n            <button\n              mat-menu-item\n              [matMenuTriggerFor]=\"subAccountMenu\"\n              class=\"profil-menu\"\n            >\n              <mat-checkbox\n                [checked]=\"getPermission(user).checked\"\n                [indeterminate]=\"getPermission(user).indeterminate\"\n                (click)=\"$event.stopPropagation()\"\n                (change)=\"handleToggleCategory(user)\"\n              />\n              <span>{{ user.title }}</span>\n            </button>\n            <mat-menu #subAccountMenu=\"matMenu\">\n              @for (child of user.childs; track child.name) {\n                <button mat-menu-item class=\"profil-menu\">\n                  <mat-checkbox\n                    [checked]=\"getPermission(child).checked\"\n                    (click)=\"$event.stopPropagation()\"\n                    (change)=\"handleToggleCategory(child, user)\"\n                  >\n                    {{ child.title }}\n                  </mat-checkbox>\n                </button>\n              }\n            </mat-menu>\n          }\n        }\n\n        <button mat-menu-item class=\"profil-menu\">\n          <mat-checkbox\n            [checked]=\"showHidden\"\n            (click)=\"$event.stopPropagation()\"\n            (change)=\"onShowHiddenContexts()\"\n          />\n          <span>\n            {{ 'igo.context.contextManager.showHidden' | translate }}\n          </span>\n        </button>\n      </mat-menu>\n    </div>\n  </div>\n\n  @for (\n    groupContexts of $any(contexts$ | async) | keyvalue: sortByKeyPriority;\n    track groupContexts\n  ) {\n    @if ($any(groupContexts).value.length) {\n      @if (auth.authenticated) {\n        <igo-collapsible\n          [title]=\"titleMapping[$any(groupContexts).key] | translate\"\n          [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\n          (toggle)=\"\n            collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\n          \"\n        >\n          @for (\n            context of $any(groupContexts).value;\n            track context.id ?? context.uri\n          ) {\n            <igo-context-item\n              igoListItem\n              color=\"accent\"\n              [selected]=\"\n                selectedContext() && selectedContext().uri === context.uri\n              \"\n              [context]=\"context\"\n              [default]=\"\n                context.id &&\n                this.defaultContextId &&\n                this.defaultContextId === context.id\n              \"\n              [isDesktop]=\"isDesktop\"\n              (edit)=\"onEdit(context)\"\n              (delete)=\"onDelete(context)\"\n              (clone)=\"onClone(context)\"\n              (save)=\"onSave(context)\"\n              (hide)=\"onHideContext(context)\"\n              (show)=\"showContext(context)\"\n              (favorite)=\"onFavorite(context)\"\n              (manageTools)=\"onManageTools(context)\"\n              (managePermissions)=\"onManagePermissions(context)\"\n              (select)=\"onSelect(context)\"\n              (unselect)=\"unselect.emit(context)\"\n              (share)=\"onShareContext(context)\"\n            />\n          }\n        </igo-collapsible>\n      } @else {\n        @for (\n          context of $any(groupContexts).value;\n          track context.id ?? context.uri\n        ) {\n          <igo-context-item\n            igoListItem\n            color=\"accent\"\n            [showFavorite]=\"\n              configService.getConfig('favoriteContext4NonAuthenticated')\n            \"\n            [selected]=\"isContextSelected(context)\"\n            [context]=\"context\"\n            [default]=\"\n              contextConfigs\n                ? defaultContextId === context.id\n                : defaultContextId === context.uri\n            \"\n            [isDesktop]=\"isDesktop\"\n            (edit)=\"onEdit(context)\"\n            (delete)=\"onDelete(context)\"\n            (clone)=\"onClone(context)\"\n            (save)=\"onSave(context)\"\n            (hide)=\"onHideContext(context)\"\n            (show)=\"showContext(context)\"\n            (favorite)=\"onFavorite(context)\"\n            (select)=\"onSelect(context)\"\n            (unselect)=\"unselect.emit(context)\"\n          />\n        }\n      }\n    }\n  }\n\n  @if (isEmpty) {\n    <div class=\"no-result\">\n      {{ 'igo.context.contextManager.noResult' | translate }}\n    </div>\n  }\n</igo-list>\n","import { Component, computed, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { User } from '@igo2/auth';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport {\n  IAnyContextPermission,\n  IContextPermissionUser\n} from '../context-permission.interface';\n\n@Component({\n  selector: 'igo-context-permission-item',\n  imports: [\n    MatButtonModule,\n    MatIconModule,\n    MatListModule,\n    MatTooltipModule,\n    IgoLanguageModule\n  ],\n  templateUrl: './context-permission-item.component.html',\n  styleUrl: './context-permission-item.component.scss'\n})\nexport class ContextPermissionItemComponent {\n  permission = input.required<IAnyContextPermission>();\n  canWrite = input.required<boolean>();\n  user = input<User>();\n\n  type = computed(() => {\n    const permission = this.permission();\n    return isContextPermissionUser(permission)\n      ? this.isUserExtranet(permission)\n        ? 'Extranet'\n        : 'Intranet'\n      : 'Profil';\n  });\n  icon = computed(() => {\n    const permission = this.permission();\n    return permission.profilType === 'user'\n      ? this.isUserExtranet(permission)\n        ? 'person'\n        : 'person_shield'\n      : 'badge';\n  });\n  canDelete = computed(() => {\n    const permission = this.permission();\n    return (\n      this.canWrite() ||\n      (isContextPermissionUser(permission) &&\n        permission.user.externalId === this.user().id)\n    );\n  });\n\n  delete = output<IAnyContextPermission>();\n\n  isContextPermissionUser = isContextPermissionUser;\n\n  isUserExtranet(permission: IAnyContextPermission): boolean {\n    return (\n      isContextPermissionUser(permission) &&\n      permission.userSource.includes('extranet')\n    );\n  }\n\n  onDelete(): void {\n    this.delete.emit(this.permission());\n  }\n}\n\nfunction isContextPermissionUser(\n  permission: IAnyContextPermission\n): permission is IContextPermissionUser {\n  return (permission as IContextPermissionUser).userId != null;\n}\n","@let permission = this.permission();\n\n<mat-list-item>\n  <mat-icon matListItemIcon [matTooltip]=\"type()\">\n    {{ icon() }}\n  </mat-icon>\n\n  <span matListItemTitle [matTooltip]=\"permission.title\">\n    {{ permission.title }}\n  </span>\n\n  <span matListItemLine>{{ type() }}</span>\n  <div matListItemMeta class=\"igo-actions-container\">\n    @if (canDelete()) {\n      <button\n        mat-icon-button\n        [matTooltip]=\"'igo.context.permission.delete' | translate\"\n        matTooltipShowDelay=\"500\"\n        color=\"warn\"\n        (click)=\"onDelete()\"\n      >\n        <mat-icon>delete</mat-icon>\n      </button>\n    }\n  </div>\n</mat-list-item>\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\n\nimport { Observable, catchError } from 'rxjs';\n\nimport { IAnyContextPermission } from './context-permission.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ContextPermissionService {\n  private http = inject(HttpClient);\n  private config = inject(ConfigService);\n  private languageService = inject(LanguageService);\n  private messageService = inject(MessageService);\n  private baseUrl: string;\n\n  constructor() {\n    const options = this.config.getConfig('context');\n    this.baseUrl = options?.url ?? '';\n  }\n\n  getAll(id: number): Observable<IAnyContextPermission[]> {\n    const url = this.baseUrl + '/contexts/' + id + '/permissions';\n    return this.http.get<IAnyContextPermission[]>(url);\n  }\n\n  add(\n    contextId: number,\n    permission: IAnyContextPermission\n  ): Observable<IAnyContextPermission> {\n    const url = `${this.baseUrl}/contexts/${contextId}/permissions`;\n\n    return this.http.post<IAnyContextPermission>(url, permission).pipe(\n      catchError((res) => {\n        this.handleError(res, true);\n        throw res;\n      })\n    );\n  }\n\n  delete(contextId: number, permissionId: number): Observable<void> {\n    const url = `${this.baseUrl}/contexts/${contextId}/permissions/${permissionId}`;\n    return this.http.delete<void>(url);\n  }\n\n  private handleError(error: HttpErrorResponse, permissionError?: boolean) {\n    error.error.toDisplay = true;\n\n    if (permissionError) {\n      error.error.title = this.languageService.translate.instant(\n        'igo.context.contextManager.errors.addPermissionTitle'\n      );\n      error.error.message = this.languageService.translate.instant(\n        'igo.context.contextManager.errors.addPermission'\n      );\n    }\n    this.messageService.error(\n      'igo.context.contextManager.errors.addPermission',\n      'igo.context.contextManager.errors.addPermissionTitle'\n    );\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport {\n  Component,\n  DestroyRef,\n  OnInit,\n  computed,\n  inject,\n  model,\n  signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder,\n  UntypedFormControl,\n  UntypedFormGroup\n} from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { AuthService } from '@igo2/auth';\nimport { CollapsibleComponent } from '@igo2/common/collapsible';\nimport { ListComponent } from '@igo2/common/list';\nimport { ConfigService } from '@igo2/core/config';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\n\nimport { Subscription, map, of, switchMap, tap } from 'rxjs';\n\nimport { ContextService } from '../shared';\nimport { Context } from '../shared/context.interface';\nimport { ContextPermissionItemComponent } from './context-permission-item/context-permission-item.component';\nimport {\n  ContextUserOrProfils,\n  IAnyContextPermission\n} from './context-permission.interface';\nimport { ContextPermissionService } from './context-permission.service';\n\n@Component({\n  selector: 'igo-context-permissions',\n  templateUrl: './context-permissions.component.html',\n  styleUrls: ['./context-permissions.component.scss'],\n  imports: [\n    CollapsibleComponent,\n    FormsModule,\n    IgoLanguageModule,\n    ListComponent,\n    MatAutocompleteModule,\n    MatButtonModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatInputModule,\n    MatListModule,\n    MatOptionModule,\n    MatRadioModule,\n    MatTooltipModule,\n    ReactiveFormsModule,\n    ContextPermissionItemComponent\n  ]\n})\nexport class ContextPermissionsComponent implements OnInit {\n  private formBuilder = inject(UntypedFormBuilder);\n  private http = inject(HttpClient);\n  authService = inject(AuthService);\n  private config = inject(ConfigService);\n  private contextService = inject(ContextService);\n  private contextPermissionService = inject(ContextPermissionService);\n  private messageService = inject(MessageService);\n  private destroyRef = inject(DestroyRef); // Modern way to handle cleanup\n  public form: UntypedFormGroup;\n\n  readonly context = model<Context>();\n  readonly permissions = model<IAnyContextPermission[]>();\n  readonly permissionsRead = computed(() =>\n    this.permissions().filter(\n      (permission) => permission.typePermission === 'read'\n    )\n  );\n  readonly permissionsWrite = computed(() =>\n    this.permissions().filter(\n      (permission) => permission.typePermission === 'write'\n    )\n  );\n\n  profils = signal<ContextUserOrProfils[]>([]);\n\n  canWrite = computed(() => this.context().permission === 'write');\n\n  private baseUrlProfils;\n\n  public formControl = new UntypedFormControl();\n  formValueChanges$$: Subscription;\n\n  ngOnInit(): void {\n    this.buildForm();\n\n    this.baseUrlProfils =\n      this.config.getConfig('context.url') + '/profils/users?';\n\n    this.formValueChanges$$ = this.formControl.valueChanges.subscribe(\n      (value) => {\n        if (value.length) {\n          this.getProfils(value).subscribe((profils) =>\n            this.profils.set(profils)\n          );\n        } else {\n          this.profils.set([]);\n        }\n      }\n    );\n\n    this.handleEditedContextChange();\n  }\n\n  displayFn(profil?: ContextUserOrProfils): string | undefined {\n    return profil ? profil.title : undefined;\n  }\n\n  handleFormSubmit(value: IAnyContextPermission) {\n    const contextId = this.context().id;\n    this.contextPermissionService\n      .add(contextId, value)\n      .subscribe((permission) => {\n        this.permissions.update((permissions) => {\n          permissions.push(permission);\n          return [...permissions];\n        });\n        this.messageService.success(\n          'igo.context.permission.dialog.addMsg',\n          'igo.context.permission.dialog.addTitle',\n          undefined,\n          { value: permission.title }\n        );\n      });\n  }\n\n  private buildForm(): void {\n    this.form = this.formBuilder.group({\n      id: null,\n      userExternalId: null,\n      profilId: null,\n      typePermission: ['read']\n    });\n  }\n\n  onProfilSelected(value: ContextUserOrProfils) {\n    this.form.setValue({\n      id: value.id,\n      userExternalId: value.type === 'user' ? value.id : null,\n      profilId: value.type === 'profil' ? value.id : null,\n      typePermission: this.form.value.typePermission\n    });\n  }\n\n  onRemovePermission(permission: IAnyContextPermission) {\n    const contextId = this.context().id;\n    this.contextPermissionService\n      .delete(contextId, permission.id)\n      .subscribe(() => {\n        this.permissions.update((permissions) => {\n          const index = permissions.findIndex((p) => {\n            return p.id === permission.id;\n          });\n          permissions.splice(index, 1);\n          return [...permissions];\n        });\n\n        this.messageService.success(\n          'igo.context.permission.dialog.deleteMsg',\n          'igo.context.permission.dialog.deleteTitle',\n          undefined,\n          { value: permission.title }\n        );\n      });\n  }\n\n  onScopeChanged(context: Context) {\n    const scope = context.scope;\n    this.contextService.update(context.id, { scope }).subscribe(() => {\n      this.messageService.success(\n        'igo.context.permission.dialog.scopeChangedMsg',\n        'igo.context.permission.dialog.scopeChangedTitle',\n        undefined,\n        { value: 'igo.context.permission.scope.' + scope }\n      );\n    });\n  }\n\n  private handleEditedContextChange() {\n    this.contextService.editedContext$\n      .pipe(\n        // 1. Cleanly handle the context update\n        tap((context) => this.context.set(context)),\n\n        // 2. Switch to the permissions call, or return an empty array if context is null\n        switchMap((context) => {\n          if (!context) return of([]);\n          return this.contextPermissionService.getAll(context.id);\n        }),\n\n        // 3. Automatically unsubscribe when component is destroyed\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe((permissions) => {\n        this.permissions.set(permissions);\n      });\n  }\n\n  private getProfils(value: string) {\n    return this.http\n      .get<ContextUserOrProfils[]>(this.baseUrlProfils + 'q=' + value)\n      .pipe(\n        map((profils) => {\n          const search = normalizeStr(value);\n          return profils.filter((p) =>\n            normalizeStr(p.name + p.title).includes(search)\n          );\n        })\n      );\n  }\n}\n\nconst normalizeStr = (str: string): string =>\n  str\n    .toLowerCase()\n    .normalize('NFD')\n    .replace(/[\\u0300-\\u036f]/g, '');\n","@let user = authService.user;\n\n@if (context()) {\n  <div>\n    @if (!canWrite()) {\n      <div class=\"scopeForm\">\n        <h4>{{ 'igo.context.permission.readOnlyTitle' | translate }}</h4>\n        <p>{{ 'igo.context.permission.readOnlyMsg' | translate }}</p>\n      </div>\n    } @else {\n      <div class=\"scopeForm\">\n        <mat-radio-group\n          [(ngModel)]=\"context().scope\"\n          (change)=\"onScopeChanged(context())\"\n        >\n          <mat-radio-button value=\"private\">\n            {{ 'igo.context.permission.scope.private' | translate }}\n          </mat-radio-button>\n          <mat-radio-button value=\"protected\">\n            {{ 'igo.context.permission.scope.shared' | translate }}\n          </mat-radio-button>\n          @if (authService.isAdmin) {\n            <mat-radio-button value=\"public\">\n              {{ 'igo.context.permission.scope.public' | translate }}\n            </mat-radio-button>\n          }\n        </mat-radio-group>\n      </div>\n    }\n    @if (context().scope !== 'private') {\n      @if (canWrite()) {\n        <form [formGroup]=\"form\" (ngSubmit)=\"handleFormSubmit(form.value)\">\n          <mat-form-field class=\"full-width\">\n            <input\n              matInput\n              required\n              [placeholder]=\"'igo.context.permission.user' | translate\"\n              [formControl]=\"formControl\"\n              [matAutocomplete]=\"auto\"\n            />\n            <mat-autocomplete\n              #auto=\"matAutocomplete\"\n              (optionSelected)=\"onProfilSelected($event.option.value)\"\n              [displayWith]=\"displayFn\"\n            >\n              @for (profil of this.profils(); track profil) {\n                <mat-option [value]=\"profil\">\n                  {{ profil.title }}<br />\n                  <small>{{ profil.name }}</small>\n                </mat-option>\n              }\n            </mat-autocomplete>\n            <mat-error>\n              {{ 'igo.context.permission.profilRequired' | translate }}\n            </mat-error>\n          </mat-form-field>\n          <mat-radio-group formControlName=\"typePermission\">\n            <mat-radio-button value=\"read\">\n              {{ 'igo.context.permission.read' | translate }}\n            </mat-radio-button>\n            <mat-radio-button value=\"write\">\n              {{ 'igo.context.permission.write' | translate }}\n            </mat-radio-button>\n          </mat-radio-group>\n          <div class=\"igo-form-button-group\">\n            <button matButton=\"elevated\" type=\"submit\" [disabled]=\"!form.valid\">\n              {{ 'igo.context.permission.addBtn' | translate }}\n            </button>\n          </div>\n        </form>\n      }\n      @if (permissions()) {\n        <igo-list>\n          @if (permissionsRead().length) {\n            <igo-collapsible\n              [title]=\"'igo.context.permission.' + 'read' | translate\"\n            >\n              @for (permission of permissionsRead(); track permission) {\n                <igo-context-permission-item\n                  [permission]=\"permission\"\n                  [canWrite]=\"canWrite()\"\n                  [user]=\"user\"\n                  (delete)=\"onRemovePermission($event)\"\n                />\n              }\n            </igo-collapsible>\n          }\n          @if (permissionsWrite().length) {\n            <igo-collapsible\n              [title]=\"'igo.context.permission.' + 'write' | translate\"\n            >\n              @for (permission of permissionsWrite(); track permission) {\n                <igo-context-permission-item\n                  [permission]=\"permission\"\n                  [canWrite]=\"canWrite()\"\n                  [user]=\"user\"\n                  (delete)=\"onRemovePermission($event)\"\n                />\n              }\n            </igo-collapsible>\n          }\n        </igo-list>\n      }\n    }\n  </div>\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { ContextEditComponent } from './context-edit/context-edit.component';\nimport { ContextFormComponent } from './context-form/context-form.component';\nimport { ContextItemComponent } from './context-item/context-item.component';\nimport { ContextListComponent } from './context-list/context-list.component';\nimport { ContextPermissionsComponent } from './context-permissions/context-permissions.component';\nimport { LayerContextDirective } from './shared/layer-context.directive';\nimport { MapContextDirective } from './shared/map-context.directive';\n\n/**\n * @deprecated import the components/directives directly or CONTEXT_MANAGER_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [\n    ContextListComponent,\n    ContextItemComponent,\n    ContextFormComponent,\n    ContextEditComponent,\n    ContextPermissionsComponent,\n    LayerContextDirective,\n    MapContextDirective\n  ],\n  exports: [\n    ContextListComponent,\n    ContextItemComponent,\n    ContextFormComponent,\n    ContextEditComponent,\n    ContextPermissionsComponent,\n    LayerContextDirective,\n    MapContextDirective\n  ]\n})\nexport class IgoContextManagerModule {\n  static forRoot(): ModuleWithProviders<IgoContextManagerModule> {\n    return {\n      ngModule: IgoContextManagerModule\n    };\n  }\n}\n","import { Component, Input, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport type { IgoMap } from '@igo2/geo';\n\nimport { take } from 'rxjs/operators';\n\nimport { ContextService } from '../../context-manager/shared/context.service';\nimport { BookmarkDialogComponent } from './bookmark-dialog.component';\n\n@Component({\n  selector: 'igo-bookmark-button',\n  templateUrl: './bookmark-button.component.html',\n  styleUrls: ['./bookmark-button.component.scss'],\n  imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule]\n})\nexport class BookmarkButtonComponent {\n  private dialog = inject(MatDialog);\n  private contextService = inject(ContextService);\n  private messageService = inject(MessageService);\n\n  @Input()\n  get map(): IgoMap {\n    return this._map;\n  }\n  set map(value: IgoMap) {\n    this._map = value;\n  }\n  private _map: IgoMap;\n\n  @Input()\n  get color(): string {\n    return this._color;\n  }\n  set color(value: string) {\n    this._color = value;\n  }\n  private _color: string;\n\n  createContext() {\n    this.dialog\n      .open(BookmarkDialogComponent, { disableClose: false })\n      .afterClosed()\n      .pipe(take(1))\n      .subscribe((title) => {\n        if (title) {\n          const context = this.contextService.getContextFromMap(this.map);\n          context.title = title;\n          this.contextService.create(context).subscribe(() => {\n            this.messageService.success(\n              'igo.context.bookmarkButton.dialog.createMsg',\n              'igo.context.bookmarkButton.dialog.createTitle',\n              undefined,\n              { value: context.title }\n            );\n            this.contextService.loadContext(context.uri);\n          });\n        }\n      });\n  }\n}\n","<div class=\"igo-bookmark-button-container\">\n  <button\n    mat-icon-button\n    [matTooltip]=\"'igo.context.bookmarkButton.create' | translate\"\n    matTooltipPosition=\"above\"\n    [color]=\"color\"\n    (click)=\"createContext()\"\n  >\n    <mat-icon>star</mat-icon>\n  </button>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MatDialogActions,\n  MatDialogContent,\n  MatDialogRef,\n  MatDialogTitle\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\n@Component({\n  selector: 'igo-poi-dialog',\n  templateUrl: './poi-dialog.component.html',\n  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule,\n    MatDialogActions,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class PoiDialogComponent {\n  dialogRef = inject<MatDialogRef<PoiDialogComponent>>(MatDialogRef);\n\n  public title: string;\n}\n","<h1 mat-dialog-title>\n  {{ 'igo.context.poiButton.dialog.title' | translate }}\n</h1>\n<div mat-dialog-content>\n  <mat-form-field>\n    <input\n      matInput\n      required\n      autocomplete=\"off\"\n      [placeholder]=\"'igo.context.poiButton.dialog.placeholder' | translate\"\n      [(ngModel)]=\"title\"\n    />\n  </mat-form-field>\n</div>\n<div mat-dialog-actions>\n  <button\n    mat-button\n    color=\"primary\"\n    [disabled]=\"!title\"\n    (click)=\"dialogRef.close(title)\"\n  >\n    {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\n  </button>\n  <button matButton (click)=\"dialogRef.close(false)\">\n    {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\n  </button>\n</div>\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport { EMPTY, Observable } from 'rxjs';\n\nimport { Poi } from './poi.interface';\n\n@Injectable()\nexport class PoiService {\n  private http = inject(HttpClient);\n  private config = inject(ConfigService);\n\n  private baseUrl: string;\n\n  constructor() {\n    this.baseUrl = this.config.getConfig('context.url');\n  }\n\n  get(): Observable<Poi[]> {\n    if (!this.baseUrl) {\n      return EMPTY;\n    }\n\n    const url = this.baseUrl + '/pois';\n    return this.http.get<Poi[]>(url);\n  }\n\n  delete(id: string): Observable<void> {\n    const url = this.baseUrl + '/pois/' + id;\n    return this.http.delete<void>(url);\n  }\n\n  create(context: Poi): Observable<Poi> {\n    const url = this.baseUrl + '/pois';\n    return this.http.post<Poi>(url, context);\n  }\n}\n","import { Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { AuthService } from '@igo2/auth';\nimport { ConfirmDialogService } from '@igo2/common/confirm-dialog';\nimport { StopPropagationDirective } from '@igo2/common/stop-propagation';\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport type { IgoMap } from '@igo2/geo';\n\nimport * as oleasing from 'ol/easing';\nimport olPoint from 'ol/geom/Point';\nimport * as olproj from 'ol/proj';\n\nimport { Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { PoiDialogComponent } from './poi-dialog.component';\nimport { Poi } from './shared/poi.interface';\nimport { PoiService } from './shared/poi.service';\n\n@Component({\n  selector: 'igo-poi-button',\n  templateUrl: './poi-button.component.html',\n  styleUrls: ['./poi-button.component.scss'],\n  imports: [\n    IgoLanguageModule,\n    MatButtonModule,\n    MatDividerModule,\n    MatIconModule,\n    MatOptionModule,\n    MatSelectModule,\n    MatTooltipModule,\n    StopPropagationDirective\n  ],\n  providers: [PoiService]\n})\nexport class PoiButtonComponent implements OnInit, OnDestroy {\n  private dialog = inject(MatDialog);\n  private authService = inject(AuthService);\n  private poiService = inject(PoiService);\n  private messageService = inject(MessageService);\n  private languageService = inject(LanguageService);\n  private confirmDialogService = inject(ConfirmDialogService);\n  selected: Poi;\n\n  @Input()\n  get map(): IgoMap {\n    return this._map;\n  }\n  set map(value: IgoMap) {\n    this._map = value;\n  }\n  private _map: IgoMap;\n\n  @Input()\n  get color(): string {\n    return this._color;\n  }\n  set color(value: string) {\n    this._color = value;\n  }\n  private _color: string;\n\n  public pois: Poi[];\n  private authenticate$$: Subscription;\n\n  ngOnInit() {\n    this.authenticate$$ = this.authService.authenticate$.subscribe((auth) => {\n      if (auth) {\n        this.getPois();\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this.authenticate$$.unsubscribe();\n  }\n\n  deletePoi(poi: Poi) {\n    if (poi && poi.id) {\n      this.confirmDialogService\n        .open(\n          this.languageService.translate.instant(\n            'igo.context.poiButton.dialog.confirmDelete'\n          )\n        )\n        .subscribe((confirm) => {\n          if (confirm) {\n            this.poiService.delete(poi.id).subscribe(\n              () => {\n                this.messageService.info(\n                  'igo.context.poiButton.dialog.deleteMsg',\n                  'igo.context.poiButton.dialog.deleteTitle',\n                  undefined,\n                  { value: poi.title }\n                );\n                this.pois = this.pois.filter((p) => p.id !== poi.id);\n              },\n              (err) => {\n                err.error.title = 'DELETE Pois';\n                this.messageService.showError(err);\n              }\n            );\n          }\n        });\n    }\n  }\n\n  private getPois() {\n    this.poiService\n      .get()\n      .pipe(take(1))\n      .subscribe(\n        (rep) => {\n          this.pois = rep;\n        },\n        (err) => {\n          err.error.title = 'GET Pois';\n          this.messageService.showError(err);\n        }\n      );\n  }\n\n  createPoi() {\n    const view = this.map.ol.getView();\n    const proj = view.getProjection().getCode();\n    const center = new olPoint(view.getCenter()).transform(proj, 'EPSG:4326');\n\n    const poi: Poi = {\n      title: '',\n      x: center.getCoordinates()[0],\n      y: center.getCoordinates()[1],\n      zoom: view.getZoom()\n    };\n\n    this.dialog\n      .open(PoiDialogComponent, { disableClose: false })\n      .afterClosed()\n      .subscribe((title) => {\n        if (title) {\n          poi.title = title;\n          this.poiService.create(poi).subscribe(\n            (newPoi) => {\n              this.messageService.success(\n                'igo.context.poiButton.dialog.createMsg',\n                'igo.context.poiButton.dialog.createTitle',\n                undefined,\n                { value: poi.title }\n              );\n              poi.id = newPoi.id;\n              this.pois.push(poi);\n            },\n            (err) => {\n              err.error.title = 'POST Pois';\n              this.messageService.showError(err);\n            }\n          );\n        }\n      });\n  }\n\n  zoomOnPoi(id) {\n    const poi = this.pois.find((p) => p.id === id);\n\n    const center = olproj.fromLonLat(\n      [Number(poi.x), Number(poi.y)],\n      this.map.projection\n    );\n\n    this.map.ol.getView().animate({\n      center,\n      zoom: poi.zoom,\n      duration: 500,\n      easing: oleasing.easeOut\n    });\n  }\n}\n","<mat-select\n  panelClass=\"poi-select-panel\"\n  class=\"poi-select\"\n  [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\n  floatPlaceholder=\"never\"\n  [(value)]=\"selected\"\n>\n  <mat-select-trigger>\n    {{ selected?.title || '' }}\n  </mat-select-trigger>\n  <mat-option (click)=\"createPoi()\" class=\"poi-option\">\n    <div\n      class=\"poi-option-row\"\n      [matTooltip]=\"'igo.context.poiButton.create' | translate\"\n      matTooltipPosition=\"above\"\n    >\n      <div class=\"poi-option-text\">\n        {{ 'igo.context.poiButton.create' | translate }}\n      </div>\n      <div class=\"poi-option-button\">\n        <button\n          igoStopPropagation\n          mat-icon-button\n          color=\"primary\"\n          (click)=\"createPoi()\"\n        >\n          <mat-icon>add_circle</mat-icon>\n        </button>\n      </div>\n    </div>\n  </mat-option>\n  <mat-divider />\n  @for (poi of pois; track poi) {\n    <mat-option class=\"poi-option\" [value]=\"poi\" (click)=\"zoomOnPoi(poi.id)\">\n      <div class=\"poi-option-row\">\n        <div\n          class=\"poi-option-text\"\n          [matTooltip]=\"poi.title\"\n          matTooltipPosition=\"above\"\n        >\n          {{ poi.title }}\n        </div>\n        <div class=\"poi-option-button\">\n          <button\n            mat-icon-button\n            igoStopPropagation\n            color=\"warn\"\n            (click)=\"deletePoi(poi)\"\n          >\n            <mat-icon>delete</mat-icon>\n          </button>\n        </div>\n      </div>\n    </mat-option>\n  }\n</mat-select>\n","import {\n  AnimationTriggerMetadata,\n  animate,\n  state,\n  style,\n  transition,\n  trigger\n} from '@angular/animations';\n\nexport function userButtonSlideInOut(): AnimationTriggerMetadata {\n  return trigger('userButtonState', [\n    state(\n      'collapse',\n      style({\n        width: '0',\n        overflow: 'hidden'\n      })\n    ),\n    state(\n      'expand',\n      style({\n        overflow: 'hidden'\n      })\n    ),\n    transition('collapse => expand', animate('200ms')),\n    transition('expand => collapse', animate('200ms'))\n  ]);\n}\n","import { Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MatDialogActions,\n  MatDialogContent,\n  MatDialogRef,\n  MatDialogTitle\n} from '@angular/material/dialog';\n\nimport { AuthService } from '@igo2/auth';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\n\n@Component({\n  selector: 'igo-user-dialog',\n  templateUrl: './user-dialog.component.html',\n  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    MatButtonModule,\n    MatDialogActions,\n    IgoLanguageModule\n  ]\n})\nexport class UserDialogComponent {\n  dialogRef = inject<MatDialogRef<UserDialogComponent>>(MatDialogRef);\n  private auth = inject(AuthService);\n  private storageService = inject(StorageService);\n\n  public user;\n  public exp;\n\n  constructor() {\n    const decodeToken = this.auth.decodeToken();\n    this.user = decodeToken?.user;\n    this.exp = new Date(decodeToken.exp * 1000).toLocaleString();\n  }\n\n  clearPreferences() {\n    this.storageService.clear();\n  }\n}\n","<h1 mat-dialog-title>\n  {{ 'igo.context.userButton.infoTitle' | translate }}\n</h1>\n<div mat-dialog-content>\n  <p>\n    {{ 'igo.context.userButton.dialog.user' | translate }}: {{ user.sourceId }}\n  </p>\n  <p>\n    {{ 'igo.context.userButton.dialog.email' | translate }}: {{ user.email }}\n  </p>\n  <p>{{ 'igo.context.userButton.dialog.expiration' | translate }}: {{ exp }}</p>\n  <button mat-stroked-button color=\"primary\" (click)=\"clearPreferences()\">\n    {{ 'igo.context.userButton.dialog.clearPreferences' | translate }}\n  </button>\n  <br />\n</div>\n<div mat-dialog-actions style=\"justify-content: center\">\n  <button matButton=\"elevated\" color=\"primary\" (click)=\"dialogRef.close(false)\">\n    OK\n  </button>\n</div>\n","import { Component, Input, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { AuthService } from '@igo2/auth';\nimport { ConfigService } from '@igo2/core/config';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport type { IgoMap } from '@igo2/geo';\n\nimport { PoiButtonComponent } from '../poi-button/poi-button.component';\nimport { userButtonSlideInOut } from './user-button.animation';\nimport { UserDialogComponent } from './user-dialog.component';\n\n@Component({\n  selector: 'igo-user-button',\n  templateUrl: './user-button.component.html',\n  styleUrls: ['./user-button.component.scss'],\n  animations: [userButtonSlideInOut()],\n  imports: [\n    PoiButtonComponent,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class UserButtonComponent {\n  private dialog = inject(MatDialog);\n  private config = inject(ConfigService);\n  auth = inject(AuthService);\n\n  @Input()\n  get map(): IgoMap {\n    return this._map;\n  }\n  set map(value: IgoMap) {\n    this._map = value;\n  }\n  private _map: IgoMap;\n\n  @Input()\n  get color(): string {\n    return this._color;\n  }\n  set color(value: string) {\n    this._color = value;\n  }\n  private _color: string;\n\n  public expand = false;\n  public visible = false;\n  public hasApi = false;\n\n  constructor() {\n    this.visible = this.config.getConfig('auth') ? true : false;\n    this.hasApi = this.config.getConfig('context.url') !== undefined;\n  }\n\n  accountClick() {\n    if (this.auth.authenticated) {\n      this.expand = !this.expand;\n    } else {\n      this.auth.logout();\n    }\n  }\n\n  logout() {\n    this.expand = false;\n    this.auth.logout();\n  }\n\n  infoUser() {\n    this.dialog.open(UserDialogComponent, { disableClose: false });\n  }\n}\n","@if (visible) {\n  <div class=\"igo-user-button-container\">\n    <div\n      class=\"igo-user-button-more-container\"\n      [@userButtonState]=\"expand ? 'expand' : 'collapse'\"\n    >\n      @if (hasApi) {\n        <igo-poi-button [color]=\"color\" [map]=\"map\" />\n      }\n      <button\n        mat-icon-button\n        [matTooltip]=\"'igo.context.userButton.infoTitle' | translate\"\n        matTooltipPosition=\"above\"\n        [color]=\"color\"\n        (click)=\"infoUser()\"\n      >\n        <mat-icon>info</mat-icon>\n      </button>\n      <button\n        mat-icon-button\n        [matTooltip]=\"'igo.context.userButton.logout' | translate\"\n        matTooltipPosition=\"above\"\n        [color]=\"color\"\n        (click)=\"logout()\"\n      >\n        <mat-icon>power_settings_new</mat-icon>\n      </button>\n    </div>\n    <button\n      mat-icon-button\n      [color]=\"auth.authenticated ? color : 'warn'\"\n      (click)=\"accountClick()\"\n    >\n      <mat-icon>account_box</mat-icon>\n    </button>\n  </div>\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { BookmarkButtonComponent } from './bookmark-button/bookmark-button.component';\nimport { BookmarkDialogComponent } from './bookmark-button/bookmark-dialog.component';\nimport { PoiButtonComponent } from './poi-button/poi-button.component';\nimport { PoiService } from './poi-button/shared/poi.service';\nimport { UserButtonComponent } from './user-button/user-button.component';\n\n/**\n * @deprecated import the components/directives directly or CONTEXT_MAP_BUTTON_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [\n    BookmarkButtonComponent,\n    BookmarkDialogComponent,\n    PoiButtonComponent,\n    UserButtonComponent\n  ],\n  exports: [\n    BookmarkButtonComponent,\n    PoiButtonComponent,\n    UserButtonComponent,\n    BookmarkDialogComponent\n  ],\n  providers: [PoiService]\n})\nexport class IgoContextMapButtonModule {\n  static forRoot(): ModuleWithProviders<IgoContextMapButtonModule> {\n    return {\n      ngModule: IgoContextMapButtonModule\n    };\n  }\n}\n","import { Clipboard } from '@angular/cdk/clipboard';\nimport {\n  ChangeDetectorRef,\n  Component,\n  OnDestroy,\n  OnInit,\n  inject,\n  input\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { CustomHtmlComponent } from '@igo2/common/custom-html';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport type { IgoMap } from '@igo2/geo';\n\nimport { Subscription, combineLatest } from 'rxjs';\n\nimport { ContextService } from '../../context-manager/shared/context.service';\nimport { ShareMapService } from '../shared/share-map.service';\n\n@Component({\n  selector: 'igo-share-map-url',\n  templateUrl: './share-map-url.component.html',\n  styleUrls: ['./share-map-url.component.scss'],\n  imports: [\n    MatFormFieldModule,\n    MatInputModule,\n    MatButtonModule,\n    MatIconModule,\n    IgoLanguageModule,\n    CustomHtmlComponent\n  ]\n})\nexport class ShareMapUrlComponent implements OnInit, OnDestroy {\n  private clipboard = inject(Clipboard);\n  private messageService = inject(MessageService);\n  private shareMapService = inject(ShareMapService);\n  private contextService = inject(ContextService);\n  private cdRef = inject(ChangeDetectorRef);\n\n  private mapState$$: Subscription;\n\n  readonly map = input<IgoMap>(undefined);\n\n  public url: string;\n\n  ngOnInit(): void {\n    this.generateUrl();\n    this.mapState$$ = combineLatest([\n      this.map().viewController.state$,\n      this.map().status$\n    ]).subscribe(() => {\n      this.generateUrl();\n      this.cdRef.detectChanges();\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.mapState$$?.unsubscribe();\n  }\n\n  generateUrl(): void {\n    this.url = this.shareMapService.generateUrl(\n      this.map(),\n      this.contextService.context$.value\n    );\n  }\n\n  copyTextToClipboard(textArea: HTMLTextAreaElement) {\n    const successful = this.clipboard.copy(textArea.value);\n    if (successful) {\n      this.messageService.success(\n        'igo.context.shareMap.dialog.copyMsg',\n        'igo.context.shareMap.dialog.copyTitle'\n      );\n    }\n  }\n}\n","<div class=\"igo-input-container\">\n  <mat-form-field>\n    <textarea\n      #textArea\n      matInput\n      readonly\n      rows=\"3\"\n      [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n      [value]=\"url\"\n    ></textarea>\n  </mat-form-field>\n\n  <div class=\"igo-share-map-url-content\">\n    <div class=\"igo-form-button-group\">\n      <button matButton=\"elevated\" (click)=\"copyTextToClipboard(textArea)\">\n        <mat-icon>content_copy</mat-icon>\n        {{ 'igo.context.shareMap.copy' | translate }}\n      </button>\n    </div>\n\n    <div>\n      <br />\n      <section>\n        @if (('igo.context.shareMap.htmlClarifications' | translate) === '') {\n          <div>\n            @if (('igo.context.shareMap.included' | translate) !== '') {\n              <h4>\n                {{ 'igo.context.shareMap.included' | translate }}\n              </h4>\n            }\n            <ul>\n              @if (('igo.context.shareMap.context' | translate) !== '') {\n                <li>\n                  {{ 'igo.context.shareMap.context' | translate }}\n                </li>\n              }\n              @if (('igo.context.shareMap.center' | translate) !== '') {\n                <li>\n                  {{ 'igo.context.shareMap.center' | translate }}\n                </li>\n              }\n              @if (('igo.context.shareMap.zoom' | translate) !== '') {\n                <li>\n                  {{ 'igo.context.shareMap.zoom' | translate }}\n                </li>\n              }\n              @if (('igo.context.shareMap.addedLayers' | translate) !== '') {\n                <li>\n                  {{ 'igo.context.shareMap.addedLayers' | translate }}\n                </li>\n              }\n              @if (\n                ('igo.context.shareMap.visibleInvisible' | translate) !== ''\n              ) {\n                <li>\n                  {{ 'igo.context.shareMap.visibleInvisible' | translate }}\n                </li>\n              }\n            </ul>\n            @if (('igo.context.shareMap.excluded' | translate) !== '') {\n              <h4>\n                {{ 'igo.context.shareMap.excluded' | translate }}\n              </h4>\n            }\n            <ul>\n              @if (('igo.context.shareMap.order' | translate) !== '') {\n                <li>\n                  {{ 'igo.context.shareMap.order' | translate }}\n                </li>\n              }\n              @if (('igo.context.shareMap.opacity' | translate) !== '') {\n                <li>\n                  {{ 'igo.context.shareMap.opacity' | translate }}\n                </li>\n              }\n              @if (('igo.context.shareMap.filterOgc' | translate) !== '') {\n                <li>\n                  {{ 'igo.context.shareMap.filterOgc' | translate }}\n                </li>\n              }\n              @if (('igo.context.shareMap.filterTime' | translate) !== '') {\n                <li>\n                  {{ 'igo.context.shareMap.filterTime' | translate }}\n                </li>\n              }\n            </ul>\n          </div>\n        }\n        @if (('igo.context.shareMap.htmlClarifications' | translate) !== '') {\n          <igo-custom-html\n            class=\"shareCustomPadding\"\n            [html]=\"'igo.context.shareMap.htmlClarifications' | translate\"\n          />\n        }\n      </section>\n    </div>\n  </div>\n</div>\n","import { Component, input } from '@angular/core';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport type { IgoMap } from '@igo2/geo';\n\nimport { ShareMapUrlComponent } from './share-map-url.component';\n\n@Component({\n  selector: 'igo-share-map',\n  templateUrl: './share-map.component.html',\n  styleUrls: ['./share-map.component.scss'],\n  imports: [MatTabsModule, ShareMapUrlComponent]\n})\nexport class ShareMapComponent {\n  readonly map = input<IgoMap>(undefined);\n}\n","<igo-share-map-url [map]=\"map()\" />\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { ShareMapUrlComponent } from './share-map/share-map-url.component';\nimport { ShareMapComponent } from './share-map/share-map.component';\n\nexport const SHARE_MAP_DIRECTIVES = [\n  ShareMapComponent,\n  ShareMapUrlComponent\n] as const;\n\n/**\n * @deprecated import the components/directives directly or SHARE_MAP_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [ShareMapComponent, ShareMapUrlComponent],\n  exports: [ShareMapComponent, ShareMapUrlComponent]\n})\nexport class IgoShareMapModule {\n  static forRoot(): ModuleWithProviders<IgoShareMapModule> {\n    return {\n      ngModule: IgoShareMapModule\n    };\n  }\n}\n","import { Component, Input, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Title } from '@angular/platform-browser';\n\nimport { getEntityTitle } from '@igo2/common/entity';\nimport { FlexibleComponent, FlexibleState } from '@igo2/common/flexible';\nimport { PanelComponent } from '@igo2/common/panel';\nimport { Tool } from '@igo2/common/tool';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport type { Media } from '@igo2/core/media';\nimport {\n  Feature,\n  FeatureDetailsComponent,\n  FeatureMotion,\n  moveToOlFeatures\n} from '@igo2/geo';\nimport type { IgoMap } from '@igo2/geo';\n\nimport olFormatGeoJSON from 'ol/format/GeoJSON';\n\n@Component({\n  selector: 'igo-sidenav',\n  templateUrl: './sidenav.component.html',\n  styleUrls: ['./sidenav.component.scss'],\n  imports: [\n    MatSidenavModule,\n    FlexibleComponent,\n    PanelComponent,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    FeatureDetailsComponent,\n    IgoLanguageModule\n  ]\n})\nexport class SidenavComponent {\n  titleService = inject(Title);\n\n  private format = new olFormatGeoJSON();\n  @Input()\n  get map(): IgoMap {\n    return this._map;\n  }\n  set map(value: IgoMap) {\n    this._map = value;\n  }\n  private _map: IgoMap;\n  @Input()\n  get opened(): boolean {\n    return this._opened;\n  }\n  set opened(value: boolean) {\n    this._opened = value;\n  }\n  private _opened: boolean;\n\n  @Input()\n  get feature(): Feature {\n    return this._feature;\n  }\n  set feature(value: Feature) {\n    this._feature = value;\n  }\n  private _feature: Feature;\n\n  @Input()\n  get tool(): Tool {\n    return this._tool;\n  }\n  set tool(value: Tool) {\n    this._tool = value;\n  }\n  private _tool: Tool;\n\n  @Input()\n  get media(): Media {\n    return this._media;\n  }\n  set media(value: Media) {\n    this._media = value;\n  }\n  private _media: Media;\n\n  @Input()\n  get title(): string {\n    return this._title;\n  }\n  set title(value: string) {\n    if (value) {\n      this._title = value;\n    }\n  }\n  private _title: string;\n\n  public topPanelState: FlexibleState = 'initial';\n\n  get featureTitle(): string {\n    return this.feature ? getEntityTitle(this.feature) : undefined;\n  }\n\n  constructor() {\n    this._title = this.titleService.getTitle();\n  }\n\n  zoomToFeatureExtent() {\n    if (this.feature.geometry) {\n      const olFeature = this.format.readFeature(this.feature, {\n        dataProjection: this.feature.projection,\n        featureProjection: this.map.viewProjection\n      });\n      moveToOlFeatures(this.map.viewController, olFeature, FeatureMotion.Zoom);\n    }\n  }\n\n  toggleTopPanel() {\n    if (this.topPanelState === 'initial') {\n      this.topPanelState = 'expanded';\n    } else {\n      this.topPanelState = 'initial';\n    }\n  }\n}\n","<mat-sidenav #sidenav igoSidenavShim mode=\"side\" [opened]=\"opened\">\n  <div class=\"igo-sidenav-content\">\n    <igo-flexible\n      #topPanel\n      initial=\"50%\"\n      initialMobile=\"100%\"\n      expanded=\"calc(100% - 58px)\"\n      [state]=\"topPanelState\"\n    >\n      <div class=\"igo-content\">\n        <igo-panel [title]=\"tool ? (tool.title | translate) : title\">\n          @if (tool) {\n            <button\n              mat-icon-button\n              panelLeftButton\n              tooltip-position=\"below\"\n              matTooltipShowDelay=\"500\"\n              [matTooltip]=\"'igo.context.sidenav.goBack' | translate\"\n            >\n              <mat-icon>arrow_back</mat-icon>\n            </button>\n          }\n\n          @if (tool) {\n            <button\n              mat-icon-button\n              panelRightButton\n              tooltip-position=\"below\"\n              matTooltipShowDelay=\"500\"\n              [matTooltip]=\"'igo.context.sidenav.mainMenu' | translate\"\n            >\n              <mat-icon>menu</mat-icon>\n            </button>\n          }\n        </igo-panel>\n      </div>\n\n      <div igoFlexibleFill class=\"igo-content\">\n        @if (feature && media !== 'mobile') {\n          <igo-panel [title]=\"featureTitle\">\n            <button\n              mat-icon-button\n              panelLeftButton\n              class=\"igo-icon-button\"\n              (click)=\"toggleTopPanel()\"\n            >\n              <mat-icon>{{\n                ['collapsed', 'initial'].indexOf(topPanel.state) >= 0\n                  ? 'arrow_downward'\n                  : 'arrow_upward'\n              }}</mat-icon>\n            </button>\n            @if (feature.geometry) {\n              <button\n                mat-icon-button\n                panelRightButton\n                class=\"igo-icon-button\"\n                (click)=\"zoomToFeatureExtent()\"\n              >\n                <mat-icon>zoom_in</mat-icon>\n              </button>\n            }\n            @if (['collapsed', 'initial'].indexOf(topPanel.state) >= 0) {\n              <igo-feature-details [feature]=\"feature\" />\n            }\n          </igo-panel>\n        }\n      </div>\n    </igo-flexible>\n  </div>\n</mat-sidenav>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { SidenavComponent } from './sidenav.component';\n\n/**\n * @deprecated import the SidenavComponent directly\n */\n@NgModule({\n  imports: [SidenavComponent],\n  exports: [SidenavComponent]\n})\nexport class IgoSidenavModule {\n  static forRoot(): ModuleWithProviders<IgoSidenavModule> {\n    return {\n      ngModule: IgoSidenavModule\n    };\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { IgoContextImportExportModule } from './context-import-export/context-import-export.module';\nimport { IgoContextManagerModule } from './context-manager/context-manager.module';\nimport { IgoContextMapButtonModule } from './context-map-button/context-map-button.module';\nimport { IgoShareMapModule } from './share-map/share-map.module';\nimport { IgoSidenavModule } from './sidenav/sidenav.module';\n\n/**\n * @deprecated import the components/directives directly or SHARE_MAP_DIRECTIVES for the set\n */\n@NgModule({\n  declarations: [],\n  exports: [\n    IgoContextImportExportModule,\n    IgoContextManagerModule,\n    IgoContextMapButtonModule,\n    IgoShareMapModule,\n    IgoSidenavModule\n  ]\n})\nexport class IgoContextModule {\n  static forRoot(): ModuleWithProviders<IgoContextModule> {\n    return {\n      ngModule: IgoContextModule\n    };\n  }\n}\n","import { ContextEditComponent } from './context-edit';\nimport { ContextFormComponent } from './context-form';\nimport { ContextItemComponent } from './context-item';\nimport { ContextListComponent } from './context-list';\nimport { ContextPermissionsComponent } from './context-permissions';\nimport { LayerContextDirective, MapContextDirective } from './shared';\n\nexport const CONTEXT_MANAGER_DIRECTIVES = [\n  ContextListComponent,\n  ContextItemComponent,\n  ContextFormComponent,\n  ContextEditComponent,\n  ContextPermissionsComponent,\n  MapContextDirective,\n  LayerContextDirective\n] as const;\n","import {\n  BookmarkButtonComponent,\n  BookmarkDialogComponent\n} from './bookmark-button';\nimport { PoiButtonComponent } from './poi-button';\nimport { UserButtonComponent } from './user-button';\n\nexport const CONTEXT_MAP_BUTTON_DIRECTIVES = [\n  BookmarkButtonComponent,\n  BookmarkDialogComponent,\n  PoiButtonComponent,\n  UserButtonComponent\n] as const;\n","/*\n * Public API Surface of context\n */\n\nexport * from './lib/context.module';\nexport * from './lib/context-import-export/context-import-export.module';\nexport * from './lib/context-manager/context-manager.module';\nexport * from './lib/context-map-button/context-map-button.module';\nexport * from './lib/share-map/share-map.module';\nexport * from './lib/sidenav/sidenav.module';\n\nexport * from './lib/context-import-export';\nexport * from './lib/context-manager';\nexport * from './lib/context-map-button';\nexport * from './lib/environment';\nexport * from './lib/share-map';\nexport * from './lib/sidenav';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i3","i4","i5","i6","i7","i8","i9","i1","catchError","tap","switchMap","map","olFormatGeoJSON"],"mappings":"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"}