{"version":3,"file":"luigi-project-client-support-angular.mjs","sources":["../../../projects/client-support-angular/src/lib/component/luigi.preload.component.ts","../../../projects/client-support-angular/src/lib/component/luigi.preload.component.html","../../../projects/client-support-angular/src/lib/luigi-mock/luigi-mock.module.ts","../../../projects/client-support-angular/src/lib/route/luigi-activated-route-snapshot-helper.ts","../../../projects/client-support-angular/src/lib/route/luigi-route-strategy.ts","../../../projects/client-support-angular/src/lib/service/luigi-context.service.ts","../../../projects/client-support-angular/src/lib/service/luigi-context.model.ts","../../../projects/client-support-angular/src/lib/service/luigi-context.service.impl.ts","../../../projects/client-support-angular/src/lib/service/luigi-auto-routing.service.ts","../../../projects/client-support-angular/src/lib/luigi.angular.support.module.ts","../../../projects/client-support-angular/src/public-api.ts","../../../projects/client-support-angular/src/luigi-project-client-support-angular.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lib-client-support-angular',\n  templateUrl: './luigi.preload.component.html',\n  styles: []\n})\nexport class LuigiPreloadComponent {}\n","<p luigipreload=\"luigipreload\"></p>\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { LuigiMockEngine } from '@luigi-project/testing-utilities';\n\n// @dynamic\n@NgModule({\n  providers: [\n    {\n      provide: APP_INITIALIZER,\n      useFactory: LuigiMockEngine.initPostMessageHook,\n      multi: true\n    }\n  ]\n})\n/*\n * This class mocks Luigi Core related functionality.\n *\n * Micro Frontends that use Luigi Client would usually communicate with Luigi Core\n * back and forth. When testing Luigi Client based components, Luigi Core might\n * not be present which leads into limitations on integration/e2e testing for standalone\n * microfrontends.\n *\n * This module adds a hook to the window postMessage API by adding an event listener to the\n * global message event of the window object and mocking the callback.\n * In the normal workflow this message would picked up by Luigi Core which then sends the response back.\n */\nexport class LuigiMockModule {}\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\nexport class LuigiActivatedRouteSnapshotHelper {\n  private static _current: ActivatedRouteSnapshot = null as unknown as ActivatedRouteSnapshot;\n\n  static getCurrent(): ActivatedRouteSnapshot {\n    return LuigiActivatedRouteSnapshotHelper._current;\n  }\n\n  static setCurrent(current: ActivatedRouteSnapshot): void {\n    LuigiActivatedRouteSnapshotHelper._current = current;\n  }\n}\n","import { BaseRouteReuseStrategy } from '@angular/router';\nimport { ActivatedRouteSnapshot, DetachedRouteHandle } from '@angular/router';\nimport { LuigiActivatedRouteSnapshotHelper } from './luigi-activated-route-snapshot-helper';\n\nexport class LuigiRouteStrategy extends BaseRouteReuseStrategy {\n  retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n    LuigiActivatedRouteSnapshotHelper.setCurrent(route);\n    return super.retrieve(route);\n  }\n}\n","import { Signal } from '@angular/core';\nimport { Context } from '@luigi-project/client';\nimport { Observable } from 'rxjs';\nimport { IContextMessage } from './luigi-context.model';\n\nexport abstract class LuigiContextService {\n  /**\n   * Get a signal that emits when context is set.\n   */\n  abstract contextSignal(): Signal<IContextMessage | undefined>;\n\n  /**\n   * Listen to context changes\n   * Receives current value, even if the event was already dispatched earlier.\n   */\n  abstract contextObservable(): Observable<IContextMessage>;\n\n  /**\n   * Get latest set context object\n   */\n  abstract getContext(): Context;\n\n  /**\n   * Get a promise that resolves when context is set.\n   */\n  abstract getContextAsync(): Promise<Context>;\n}\n","import { Context } from '@luigi-project/client';\n\nexport enum ILuigiContextTypes {\n  INIT,\n  UPDATE\n}\n\nexport interface IContextMessage {\n  context: Context;\n  contextType: ILuigiContextTypes;\n}\n","import { inject, Injectable, NgZone, Signal, signal, WritableSignal } from '@angular/core';\nimport { Context, addInitListener, addContextUpdateListener } from '@luigi-project/client';\nimport { ReplaySubject, Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { IContextMessage, ILuigiContextTypes } from './luigi-context.model';\nimport { LuigiContextService } from './luigi-context.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuigiContextServiceImpl implements LuigiContextService {\n  private signalContext: WritableSignal<IContextMessage | undefined> = signal<IContextMessage | undefined>(undefined);\n  private subject: ReplaySubject<IContextMessage> = new ReplaySubject<IContextMessage>(1);\n  private currentContext!: IContextMessage;\n  private ngZone = inject(NgZone);\n\n  constructor() {\n    addInitListener((initContext: Context) => {\n      this.addListener(ILuigiContextTypes.INIT, initContext);\n    });\n    addContextUpdateListener((updateContext: Context) => {\n      this.addListener(ILuigiContextTypes.UPDATE, updateContext);\n    });\n  }\n\n  public addListener(contextType: ILuigiContextTypes, context: Context): void {\n    this.setContext({\n      contextType,\n      context\n    } as IContextMessage);\n  }\n\n  /**\n   * Get a signal that emits when context is set.\n   */\n  public contextSignal(): Signal<IContextMessage | undefined> {\n    return this.signalContext.asReadonly();\n  }\n\n  /**\n   * Get an observable that emits when context is set.\n   */\n  public contextObservable(): Observable<IContextMessage> {\n    return this.subject.asObservable();\n  }\n\n  /**\n   * Get latest context object retrieved from luigi core application or empty object, if not yet set.\n   */\n  public getContext(): Context {\n    return this.currentContext?.context || {};\n  }\n\n  /**\n   * Get a promise that resolves when context is set.\n   */\n  public getContextAsync(): Promise<Context> {\n    return new Promise<Context>((resolve, reject) => {\n      const context: Context = this.getContext();\n\n      if (this.isObject(context) && Object.keys(context)?.length) {\n        resolve(this.getContext());\n      } else {\n        this.contextObservable()\n          .pipe(first())\n          .subscribe((ctx: IContextMessage) => resolve(ctx.context));\n      }\n    });\n  }\n\n  /**\n   * Checks if input is an object.\n   * @param objectToCheck mixed\n   * @returns {boolean}\n   */\n  private isObject(objectToCheck: any): boolean {\n    return !!(objectToCheck && typeof objectToCheck === 'object' && !Array.isArray(objectToCheck));\n  }\n\n  /**\n   * Set current context\n   */\n  protected setContext(obj: IContextMessage): void {\n    this.ngZone.run(() => {\n      this.currentContext = obj;\n      this.signalContext.set(obj);\n      this.subject.next(obj);\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRouteSnapshot, Event, NavigationEnd, ParamMap, Router, convertToParamMap } from '@angular/router';\nimport { linkManager, uxManager, isLuigiClientInitialized } from '@luigi-project/client';\nimport { OperatorFunction } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { LuigiActivatedRouteSnapshotHelper } from '../route/luigi-activated-route-snapshot-helper';\nimport { LuigiContextService } from './luigi-context.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuigiAutoRoutingService {\n  constructor(\n    private router: Router,\n    private luigiContextService: LuigiContextService\n  ) {\n    this.router.events\n      .pipe(this.doFilter(), takeUntilDestroyed())\n      .subscribe((event: NavigationEnd) => this.doSubscription(event));\n  }\n\n  doFilter(): OperatorFunction<Event, NavigationEnd> {\n    return filter(\n      (event: Event): event is NavigationEnd =>\n        !!(event instanceof NavigationEnd && event?.url?.length && !history?.state?.luigiInduced)\n    );\n  }\n\n  /**\n   * This method will be take in consideration angular route that having in data object the paramter\n   * fromVirtualTreeRoot: true, here an example:\n   * {path: 'demo', component: DemoComponent, data:{fromVirtualTreeRoot: true}}\n   * Another option is to specify the LuigiPath: if you add in route data luigiRoute:'/xxxx/xxx';\n   * in the case we will update the path in LuigiCore navigation, here an example\n   * {path: 'demo', component: DemoComponent, data:{luigiRoute: '/home/demo''}}\n   * If updateModalPathParam is specified, than modalPathParam will be updated upon internal navigation:\n   * {path: 'demo', component: DemoComponent, data:{updateModalPathParam: true}}\n   * @param event the NavigationEnd event\n   */\n  doSubscription(event: NavigationEnd): void {\n    let current: ActivatedRouteSnapshot | null = LuigiActivatedRouteSnapshotHelper.getCurrent();\n\n    if (!current) {\n      current = this.router.routerState.root.snapshot;\n\n      while (current?.children?.length) {\n        // handle multiple children\n        let primary: ActivatedRouteSnapshot | null = null;\n\n        current.children.forEach((childSnapshot: ActivatedRouteSnapshot) => {\n          if (childSnapshot?.outlet === 'primary') {\n            primary = childSnapshot;\n          }\n        });\n\n        if (primary) {\n          current = primary;\n        } else if (current.firstChild) {\n          current = current.firstChild;\n        } else {\n          break;\n        }\n      }\n    }\n\n    if (current?.data && this.isClientInitialized()) {\n      const ux = uxManager();\n      let lm = linkManager().withoutSync();\n      let route: string | undefined;\n\n      if (current.data.luigiRoute) {\n        route = this.getResolvedLuigiRoute(current);\n\n        if (current.data.fromContext) {\n          if (!this.luigiContextService.getContext()) {\n            console.debug('Ignoring auto navigation request, luigi context not set');\n            return;\n          }\n\n          if (current.data.fromContext === true) {\n            lm = lm.fromClosestContext();\n          } else {\n            lm = lm.fromContext(current.data.fromContext);\n          }\n        }\n      } else if (current.data.fromVirtualTreeRoot) {\n        let url = event.url;\n        const truncate = current.data.fromVirtualTreeRoot.truncate;\n\n        if (truncate) {\n          if (truncate.indexOf('*') === 0) {\n            const index = url.indexOf(truncate.substring(1));\n\n            url = url.substring(index + truncate.length - 1);\n          } else if (url.indexOf(truncate) === 0) {\n            url = url.substring(truncate.length);\n          }\n        }\n\n        route = url;\n        console.debug('Calling fromVirtualTreeRoot for url ==> ' + route);\n        lm = lm.fromVirtualTreeRoot();\n      }\n\n      if (ux.isModal()) {\n        if (current.data.updateModalDataPath) {\n          lm.updateModalPathInternalNavigation(route as string, {}, current.data.addHistoryEntry);\n        }\n      } else if (route) {\n        lm.navigate(route);\n      }\n    }\n  }\n\n  getResolvedLuigiRoute(current: ActivatedRouteSnapshot): string | undefined {\n    let route: string | undefined = current.data.luigiRoute;\n    const allParams = this.getAllParamsFromParents(current);\n\n    if (!route || !allParams) {\n      return route;\n    }\n\n    const pmap: ParamMap = convertToParamMap(allParams);\n\n    pmap.keys.forEach((key: string) => {\n      pmap.getAll(key).forEach((param: string) => {\n        route = route?.replace(':' + key, param);\n      });\n    });\n\n    return route;\n  }\n\n  getAllParamsFromParents(current: ActivatedRouteSnapshot): { [key: string]: string } | undefined {\n    let allParams: { [key: string]: string } = {};\n    let currentToCheck: ActivatedRouteSnapshot | null = current;\n\n    while (currentToCheck) {\n      if (currentToCheck.params) {\n        allParams = { ...allParams, ...currentToCheck.params };\n      }\n\n      currentToCheck = currentToCheck.parent;\n    }\n\n    return allParams;\n  }\n\n  private isClientInitialized(): boolean {\n    return isLuigiClientInitialized();\n  }\n}\n","import { NgModule, provideZonelessChangeDetection } from '@angular/core';\nimport { RouteReuseStrategy, RouterModule, Routes } from '@angular/router';\nimport { LuigiPreloadComponent } from './component/luigi.preload.component';\nimport { LuigiRouteStrategy } from './route/luigi-route-strategy';\nimport { LuigiAutoRoutingService } from './service/luigi-auto-routing.service';\nimport { LuigiContextService } from './service/luigi-context.service';\nimport { LuigiContextServiceImpl } from './service/luigi-context.service.impl';\n\nexport const staticRoutes: Routes = [\n  /** here an example if you want to specify that this component is a virtualTree element in Luigi Core navigation*/\n  {\n    path: 'luigi-client-support-preload',\n    component: LuigiPreloadComponent,\n    data: { fromVirtualTreeRoot: true }\n  },\n  /** here an example if you want to specify that this component it is a luigi component and u want to change the navigation in Luigi core*/\n  {\n    path: 'luigi-client-support-preload',\n    component: LuigiPreloadComponent,\n    data: { luigiRoute: '/home/reload' }\n  },\n  /** here an example if you want to reuse the component and not recreating every time you navigate to it (a singleton Component) It requires in your module to redefine  */\n  {\n    path: 'luigi-client-support-preload=component',\n    component: LuigiPreloadComponent,\n    data: { reuse: true }\n  },\n  /** here an example if you want to update modalPathParam on internal navigation  */\n  {\n    path: 'luigi-client-support-preload',\n    component: LuigiPreloadComponent,\n    data: { updateModalPathParam: true }\n  }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(staticRoutes)],\n  providers: [\n    provideZonelessChangeDetection(),\n    {\n      provide: LuigiContextService,\n      useClass: LuigiContextServiceImpl\n    },\n    {\n      provide: RouteReuseStrategy,\n      useClass: LuigiRouteStrategy\n    }\n  ]\n})\nexport class LuigiAngularSupportModule {\n  constructor(navigation: LuigiAutoRoutingService, context: LuigiContextService) {}\n}\n","/*\n * Public API Surface of client-support-angular\n */\n\nexport * from './lib/component/luigi.preload.component';\nexport * from './lib/luigi-mock/luigi-mock.module';\nexport * from './lib/luigi.angular.support.module';\nexport * from './lib/service/luigi-auto-routing.service';\nexport * from './lib/service/luigi-context.model';\nexport * from './lib/service/luigi-context.service';\nexport * from './lib/service/luigi-context.service.impl';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.LuigiContextService","i1.LuigiAutoRoutingService","i3"],"mappings":";;;;;;;;;;MAOa,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,sFCPlC,yCACA,EAAA,CAAA,CAAA;;2FDMa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAAA,yCAAA,EAAA;;;AEAxC;AAUA;;;;;;;;;;;AAWG;MACU,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAf,eAAe,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,SAAA,EApBf;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,eAAe;gBACxB,UAAU,EAAE,eAAe,CAAC,mBAAmB;AAC/C,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,CAAA,CAAA;;2FAcU,eAAe,EAAA,UAAA,EAAA,CAAA;kBArB3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,eAAe;4BACxB,UAAU,EAAE,eAAe,CAAC,mBAAmB;AAC/C,4BAAA,KAAK,EAAE;AACR;AACF;AACF,iBAAA;;;MCVY,iCAAiC,CAAA;aAC7B,IAAA,CAAA,QAAQ,GAA2B,IAAyC,CAAC;AAE5F,IAAA,OAAO,UAAU,GAAA;QACf,OAAO,iCAAiC,CAAC,QAAQ;IACnD;IAEA,OAAO,UAAU,CAAC,OAA+B,EAAA;AAC/C,QAAA,iCAAiC,CAAC,QAAQ,GAAG,OAAO;IACtD;;;ACPI,MAAO,kBAAmB,SAAQ,sBAAsB,CAAA;AAC5D,IAAA,QAAQ,CAAC,KAA6B,EAAA;AACpC,QAAA,iCAAiC,CAAC,UAAU,CAAC,KAAK,CAAC;AACnD,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC9B;AACD;;MCJqB,mBAAmB,CAAA;AAqBxC;;ICxBW;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,kBAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACR,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;;MCQjB,uBAAuB,CAAA;AAMlC,IAAA,WAAA,GAAA;AALQ,QAAA,IAAA,CAAA,aAAa,GAAgD,MAAM,CAA8B,SAAS,yDAAC;AAC3G,QAAA,IAAA,CAAA,OAAO,GAAmC,IAAI,aAAa,CAAkB,CAAC,CAAC;AAE/E,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAG7B,QAAA,eAAe,CAAC,CAAC,WAAoB,KAAI;YACvC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,WAAW,CAAC;AACxD,QAAA,CAAC,CAAC;AACF,QAAA,wBAAwB,CAAC,CAAC,aAAsB,KAAI;YAClD,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,CAAC;AAC5D,QAAA,CAAC,CAAC;IACJ;IAEO,WAAW,CAAC,WAA+B,EAAE,OAAgB,EAAA;QAClE,IAAI,CAAC,UAAU,CAAC;YACd,WAAW;YACX;AACkB,SAAA,CAAC;IACvB;AAEA;;AAEG;IACI,aAAa,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;IACxC;AAEA;;AAEG;IACI,iBAAiB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;IACpC;AAEA;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,OAAO,IAAI,EAAE;IAC3C;AAEA;;AAEG;IACI,eAAe,GAAA;QACpB,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9C,YAAA,MAAM,OAAO,GAAY,IAAI,CAAC,UAAU,EAAE;AAE1C,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE;AAC1D,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5B;iBAAO;gBACL,IAAI,CAAC,iBAAiB;qBACnB,IAAI,CAAC,KAAK,EAAE;AACZ,qBAAA,SAAS,CAAC,CAAC,GAAoB,KAAK,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9D;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;AACK,IAAA,QAAQ,CAAC,aAAkB,EAAA;AACjC,QAAA,OAAO,CAAC,EAAE,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAChG;AAEA;;AAEG;AACO,IAAA,UAAU,CAAC,GAAoB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,cAAc,GAAG,GAAG;AACzB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,QAAA,CAAC,CAAC;IACJ;8GA9EW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCGY,uBAAuB,CAAA;IAClC,WAAA,CACU,MAAc,EACd,mBAAwC,EAAA;QADxC,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QAE3B,IAAI,CAAC,MAAM,CAAC;aACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,kBAAkB,EAAE;AAC1C,aAAA,SAAS,CAAC,CAAC,KAAoB,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpE;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,MAAM,CACX,CAAC,KAAY,KACX,CAAC,EAAE,KAAK,YAAY,aAAa,IAAI,KAAK,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAC5F;IACH;AAEA;;;;;;;;;;AAUG;AACH,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,OAAO,GAAkC,iCAAiC,CAAC,UAAU,EAAE;QAE3F,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ;AAE/C,YAAA,OAAO,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;;gBAEhC,IAAI,OAAO,GAAkC,IAAI;gBAEjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,aAAqC,KAAI;AACjE,oBAAA,IAAI,aAAa,EAAE,MAAM,KAAK,SAAS,EAAE;wBACvC,OAAO,GAAG,aAAa;oBACzB;AACF,gBAAA,CAAC,CAAC;gBAEF,IAAI,OAAO,EAAE;oBACX,OAAO,GAAG,OAAO;gBACnB;AAAO,qBAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AAC7B,oBAAA,OAAO,GAAG,OAAO,CAAC,UAAU;gBAC9B;qBAAO;oBACL;gBACF;YACF;QACF;QAEA,IAAI,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC/C,YAAA,MAAM,EAAE,GAAG,SAAS,EAAE;AACtB,YAAA,IAAI,EAAE,GAAG,WAAW,EAAE,CAAC,WAAW,EAAE;AACpC,YAAA,IAAI,KAAyB;AAE7B,YAAA,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE;AAC3B,gBAAA,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;AAE3C,gBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;oBAC5B,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,EAAE;AAC1C,wBAAA,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC;wBACxE;oBACF;oBAEA,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AACrC,wBAAA,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;oBAC9B;yBAAO;wBACL,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;oBAC/C;gBACF;YACF;AAAO,iBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC3C,gBAAA,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG;gBACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ;gBAE1D,IAAI,QAAQ,EAAE;oBACZ,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC/B,wBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAEhD,wBAAA,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;oBAClD;yBAAO,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;wBACtC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACtC;gBACF;gBAEA,KAAK,GAAG,GAAG;AACX,gBAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,GAAG,KAAK,CAAC;AACjE,gBAAA,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE;YAC/B;AAEA,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;AAChB,gBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACpC,oBAAA,EAAE,CAAC,iCAAiC,CAAC,KAAe,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;gBACzF;YACF;iBAAO,IAAI,KAAK,EAAE;AAChB,gBAAA,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpB;QACF;IACF;AAEA,IAAA,qBAAqB,CAAC,OAA+B,EAAA;AACnD,QAAA,IAAI,KAAK,GAAuB,OAAO,CAAC,IAAI,CAAC,UAAU;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;AAEvD,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,IAAI,GAAa,iBAAiB,CAAC,SAAS,CAAC;QAEnD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,KAAa,KAAI;gBACzC,KAAK,GAAG,KAAK,EAAE,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,KAAK,CAAC;AAC1C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,uBAAuB,CAAC,OAA+B,EAAA;QACrD,IAAI,SAAS,GAA8B,EAAE;QAC7C,IAAI,cAAc,GAAkC,OAAO;QAE3D,OAAO,cAAc,EAAE;AACrB,YAAA,IAAI,cAAc,CAAC,MAAM,EAAE;gBACzB,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE;YACxD;AAEA,YAAA,cAAc,GAAG,cAAc,CAAC,MAAM;QACxC;AAEA,QAAA,OAAO,SAAS;IAClB;IAEQ,mBAAmB,GAAA;QACzB,OAAO,wBAAwB,EAAE;IACnC;8GA3IW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACHM,MAAM,YAAY,GAAW;;AAElC,IAAA;AACE,QAAA,IAAI,EAAE,8BAA8B;AACpC,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,IAAI,EAAE,EAAE,mBAAmB,EAAE,IAAI;AAClC,KAAA;;AAED,IAAA;AACE,QAAA,IAAI,EAAE,8BAA8B;AACpC,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,IAAI,EAAE,EAAE,UAAU,EAAE,cAAc;AACnC,KAAA;;AAED,IAAA;AACE,QAAA,IAAI,EAAE,wCAAwC;AAC9C,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI;AACpB,KAAA;;AAED,IAAA;AACE,QAAA,IAAI,EAAE,8BAA8B;AACpC,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,IAAI,EAAE,EAAE,oBAAoB,EAAE,IAAI;AACnC;;MAiBU,yBAAyB,CAAA;AACpC,IAAA,WAAA,CAAY,UAAmC,EAAE,OAA4B,EAAA,EAAG;8GADrE,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAzB,yBAAyB,EAAA,OAAA,EAAA,CAAAE,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,SAAA,EAZzB;AACT,YAAA,8BAA8B,EAAE;AAChC,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA,EAAA,OAAA,EAAA,CAXS,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA,EAAA,CAAA,CAAA;;2FAalC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAdrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC9C,oBAAA,SAAS,EAAE;AACT,wBAAA,8BAA8B,EAAE;AAChC,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,QAAQ,EAAE;AACX,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,QAAQ,EAAE;AACX;AACF;AACF,iBAAA;;;AChDD;;AAEG;;ACFH;;AAEG;;;;"}