UNPKG

@cisstech/nge

Version:

NG Essentials is a collection of libraries for Angular developers.

1 lines 22.9 kB
{"version":3,"file":"cisstech-nge-services.mjs","sources":["../../../projects/nge/services/src/browser-picker.service.ts","../../../projects/nge/services/src/clipboard.service.ts","../../../projects/nge/services/src/compiler.service.ts","../../../projects/nge/services/src/injector.service.ts","../../../projects/nge/services/src/resource-loader.service.ts","../../../projects/nge/services/cisstech-nge-services.ts"],"sourcesContent":["import { Injectable } from '@angular/core'\n\n/** Service to programmatically open file dialog. */\n@Injectable({ providedIn: 'root' })\nexport class PickerBrowserService {\n /**\n * Open file dialog to select files.\n * @param options picker options.\n * @returns A promise that resolves with the picked files or and empty array.\n */\n pickFiles(options: PickerBrowserOptions): Promise<File[]> {\n return new Promise<File[]>(async (resolve) => {\n const input = document.createElement('input')\n input.type = 'file'\n input.multiple = options.multiple ?? true\n input.accept = options.accept ?? '*'\n input.style.visibility = 'hidden'\n input.onchange = (event: any) => {\n const target = event.target || event.srcElement\n if (target.value.length > 0) {\n input.remove()\n resolve(target.files)\n } else {\n input.remove()\n resolve([])\n }\n }\n // handle cancel button click.\n setTimeout(() => {\n let onfocus: any\n onfocus = () => {\n if (!input.value.length) {\n resolve([])\n input.remove()\n }\n window.removeEventListener('click', onfocus)\n }\n window.addEventListener('click', onfocus)\n }, 300)\n document.body.appendChild(input)\n input.focus()\n input.click()\n })\n }\n}\n\n/** Picker options. */\nexport interface PickerBrowserOptions {\n /** optional mime type of the files to select. (default *) */\n readonly accept?: string\n /** allow multiple files (default true.) */\n readonly multiple?: boolean\n}\n","import { Injectable } from '@angular/core'\n\n@Injectable({ providedIn: 'root' })\nexport class ClipboardService {\n copy(data: string): Promise<void> {\n return navigator.clipboard.writeText(data)\n }\n\n read() {\n return navigator.clipboard.readText()\n }\n}\n","import {\n ComponentRef,\n createNgModule,\n Injectable,\n Injector,\n NgModuleRef,\n SimpleChanges,\n Type,\n ViewContainerRef,\n} from '@angular/core'\n\n@Injectable({ providedIn: 'root' })\nexport class CompilerService {\n private readonly modules: ModuleInfo[] = []\n\n async render(options: RendererOptions): Promise<ComponentRef<any>> {\n const { component } = await this.resolveComponent(options.type, options.container.injector)\n return await this.renderComponent(\n options.inputs,\n options.container.createComponent(component, {\n index: 0,\n injector: options.container.injector,\n })\n )\n }\n\n async resolveComponent(type: Type<any>, injector: Injector) {\n // https://blog.ninja-squad.com/2019/05/07/what-is-angular-ivy/\n // https://juristr.com/blog/2019/10/lazyload-module-ivy-viewengine\n\n if (!('ɵmod' in type) && !('ɵcmp' in type)) {\n throw new Error(`[render]: type \"${type.name}\" does not refers to a Component or a NgModule`)\n }\n\n let component: Type<any> = type\n let componentInjector = injector\n if ('ɵmod' in type) {\n const module = await this.resolveModuleInfo(type, injector)\n componentInjector = module.injector\n component = module.instance.component\n }\n\n return {\n component,\n injector: componentInjector,\n }\n }\n\n private async renderComponent(inputs: any, componentRef: ComponentRef<any>): Promise<ComponentRef<any>> {\n const changes: SimpleChanges = {}\n const { instance, changeDetectorRef } = componentRef\n\n if (inputs) {\n Object.keys(inputs).forEach((k) => {\n instance[k] = inputs[k]\n changes[k] = {\n currentValue: inputs[k],\n previousValue: undefined,\n firstChange: true,\n isFirstChange: () => true,\n }\n })\n }\n\n if (instance.ngOnChanges) {\n await instance.ngOnChanges(changes)\n }\n\n changeDetectorRef.markForCheck()\n return componentRef\n }\n\n private async resolveModuleInfo(type: Type<any>, injector: Injector): Promise<NgModuleRef<IDynamicModule>> {\n const moduleInfo = this.modules.find((e) => e.type === type)\n if (moduleInfo) {\n return moduleInfo.module\n }\n\n const module: NgModuleRef<IDynamicModule> = createNgModule(type, injector)\n if (typeof module.instance.component !== 'function') {\n throw new Error(`[compiler]: The module \"${type.name}\" does not define a public \"component\" field.`)\n }\n this.modules.push({ type: type, module: module })\n return module\n }\n}\n\nexport interface RendererOptions {\n type: Type<any>\n inputs?: any\n container: ViewContainerRef\n}\n\nexport interface IDynamicModule {\n /** Reference to the main component of the module */\n component: Type<any>\n}\n\ninterface ModuleInfo {\n type: Type<any>\n module: NgModuleRef<IDynamicModule>\n}\n","import { AbstractType, Injectable, InjectionToken, Injector, Type } from '@angular/core'\n\nexport interface IDynamicService {\n injectable(): boolean\n}\n\n@Injectable({ providedIn: 'root' })\nexport class InjectorService {\n constructor(private readonly injector: Injector) {}\n\n get<T extends IDynamicService>(token: Type<any> | InjectionToken<any> | AbstractType<any>): T {\n const service = (this.injector.get(token, []) as T[]).find((e) => e.injectable())\n if (!service) {\n throw new Error('[InjectorService]: No provider found for ' + token)\n }\n return service\n }\n}\n","import { DOCUMENT } from '@angular/common'\nimport { Injectable, inject } from '@angular/core'\nimport { Observable, forkJoin, from, of } from 'rxjs'\nimport { concatMap, shareReplay, take } from 'rxjs/operators'\n\nexport class ResourceLoaderConfig {\n /**\n * If true, the document.baseURI will be used to build the url of the resource to load if the url is relative.\n */\n useDocumentBaseURI?: boolean\n}\n\n/**\n * An array of [type, url, attributes] tuple where:\n * - `type` is the type of an asset to load `script`| `style`\n * - `url` is the url to a style/script to load\n * - `attributes` is a map of optional attributes to add to the element.\n */\ndeclare type ResourceInfo = ['style' | 'script', string, Record<string, string>?]\n\nclass LoadRequest {\n private request?: Observable<ResourceInfo>\n private finished = false\n\n get isFinished(): boolean {\n return this.finished\n }\n\n constructor(\n private readonly asset: ResourceInfo,\n private readonly document: Document,\n private readonly config?: ResourceLoaderConfig | null\n ) {}\n\n run() {\n if (this.asset[0] === 'style') {\n return this.loadStyle()\n }\n return this.loadScript()\n }\n\n private loadStyle(): Observable<ResourceInfo> {\n return (\n this.request ??\n (this.request = new Observable<ResourceInfo>((observer) => {\n const url = this.buildUrl(this.asset[1])\n const style: HTMLLinkElement = this.document.createElement('link')\n style.href = url\n style.rel = 'stylesheet'\n\n style.onload = () => {\n observer.next(this.asset)\n observer.complete()\n this.finished = true\n }\n style.onerror = (err) => {\n observer.error(err)\n this.finished = true\n }\n\n const attributes = this.asset[2]\n if (attributes) {\n for (const key in attributes) {\n if (attributes.hasOwnProperty(key)) {\n style.setAttribute(key, attributes[key])\n }\n }\n }\n this.document.head.appendChild(style)\n }).pipe(take(1), shareReplay(1)))\n )\n }\n\n private loadScript(): Observable<ResourceInfo> {\n return (\n this.request ??\n (this.request = new Observable<ResourceInfo>((observer) => {\n const url = this.buildUrl(this.asset[1])\n const script: HTMLScriptElement = this.document.createElement('script')\n script.src = url\n\n script.onload = () => {\n observer.next(this.asset)\n observer.complete()\n this.finished = true\n }\n script.onerror = (err) => {\n observer.error(err)\n this.finished = true\n }\n\n const attributes = this.asset[2]\n if (attributes) {\n for (const key in attributes) {\n if (attributes.hasOwnProperty(key)) {\n script.setAttribute(key, attributes[key])\n }\n }\n }\n\n this.document.head.appendChild(script)\n }).pipe(take(1), shareReplay(1)))\n )\n }\n\n private buildUrl(url: string) {\n if (!this.config?.useDocumentBaseURI) {\n return url\n }\n\n if (url.startsWith('http')) {\n return url\n }\n\n if (!url.startsWith(document.baseURI)) {\n url = url.startsWith('/') ? url.slice(1) : url\n return document.baseURI + url\n }\n\n return url\n }\n}\n\n/**\n * Services that dynamically inject scripts and styles elements to the DOM.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ResourceLoaderService {\n private readonly document = inject(DOCUMENT)\n private readonly config = inject(ResourceLoaderConfig, { optional: true })\n private readonly requests = new Map<string, LoadRequest>()\n\n waitForPendings(): Promise<void> {\n return new Promise<void>((resolve) => {\n const interval = setInterval(() => {\n for (const request of this.requests.values()) {\n if (!request.isFinished) {\n return\n }\n }\n clearInterval(interval)\n resolve()\n }, 100)\n })\n }\n\n /**\n * Injects styles and scripts from given urls to the head of the DOM.\n * This method loads assets from same url once and the assets are\n * loaded in the same order that given.\n * @param resources Resources to load.\n */\n loadAllSync(resources: ResourceInfo[]): Observable<ResourceInfo[]> {\n if (!resources.length) {\n return of([])\n }\n const requests = this.createRequests(resources)\n return new Observable<ResourceInfo[]>((observer) => {\n const response: ResourceInfo[] = []\n const subs = from(requests)\n .pipe(concatMap((e) => e.run()))\n .subscribe((e) => {\n response.push(e)\n if (response.length === resources.length) {\n observer.next(response)\n observer.complete()\n }\n })\n return () => {\n subs?.unsubscribe()\n }\n })\n }\n\n /**\n * Injects styles and scripts from given urls to target place in DOM\n * This method loads style and script from same url once.\n * @param resources Resources to load.\n */\n loadAllAsync(resources: ResourceInfo[]): Observable<ResourceInfo[]> {\n if (!resources.length) {\n return of([])\n }\n const loaders = this.createRequests(resources)\n return forkJoin(loaders.map((e) => e.run()))\n }\n\n private createRequests(resources: ResourceInfo[]): LoadRequest[] {\n return resources.map((asset) => {\n const url = asset[1]\n let request = this.requests.get(url)\n if (!request) {\n this.requests.set(url, (request = new LoadRequest(asset, this.document, this.config)))\n }\n return request\n })\n }\n}\n\nexport const ResourceLoaderConfigProvider = (config: Partial<ResourceLoaderConfig>): any => ({\n provide: ResourceLoaderConfig,\n useValue: config,\n})\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAEA;MAEa,oBAAoB,CAAA;AAC/B;;;;AAIG;AACH,IAAA,SAAS,CAAC,OAA6B,EAAA;AACrC,QAAA,OAAO,IAAI,OAAO,CAAS,OAAO,OAAO,KAAI;YAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;AAC7C,YAAA,KAAK,CAAC,IAAI,GAAG,MAAM,CAAA;YACnB,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAA;YACzC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAA;AACpC,YAAA,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAA;AACjC,YAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAU,KAAI;gBAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAA;gBAC/C,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC3B,KAAK,CAAC,MAAM,EAAE,CAAA;AACd,oBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;iBACtB;qBAAM;oBACL,KAAK,CAAC,MAAM,EAAE,CAAA;oBACd,OAAO,CAAC,EAAE,CAAC,CAAA;iBACZ;AACH,aAAC,CAAA;;YAED,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,OAAY,CAAA;gBAChB,OAAO,GAAG,MAAK;AACb,oBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;wBACvB,OAAO,CAAC,EAAE,CAAC,CAAA;wBACX,KAAK,CAAC,MAAM,EAAE,CAAA;qBACf;AACD,oBAAA,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAC9C,iBAAC,CAAA;AACD,gBAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;aAC1C,EAAE,GAAG,CAAC,CAAA;AACP,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YAChC,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,KAAK,CAAC,KAAK,EAAE,CAAA;AACf,SAAC,CAAC,CAAA;KACH;8GAvCU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAApB,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,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCArB,gBAAgB,CAAA;AAC3B,IAAA,IAAI,CAAC,IAAY,EAAA;QACf,OAAO,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;KAC3C;IAED,IAAI,GAAA;AACF,QAAA,OAAO,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAA;KACtC;8GAPU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,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,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCUrB,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;QAEmB,IAAO,CAAA,OAAA,GAAiB,EAAE,CAAA;AAwE5C,KAAA;IAtEC,MAAM,MAAM,CAAC,OAAwB,EAAA;AACnC,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;AAC3F,QAAA,OAAO,MAAM,IAAI,CAAC,eAAe,CAC/B,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE;AAC3C,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ;AACrC,SAAA,CAAC,CACH,CAAA;KACF;AAED,IAAA,MAAM,gBAAgB,CAAC,IAAe,EAAE,QAAkB,EAAA;;;AAIxD,QAAA,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,CAAA,gBAAA,EAAmB,IAAI,CAAC,IAAI,CAAgD,8CAAA,CAAA,CAAC,CAAA;SAC9F;QAED,IAAI,SAAS,GAAc,IAAI,CAAA;QAC/B,IAAI,iBAAiB,GAAG,QAAQ,CAAA;AAChC,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC3D,YAAA,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAA;AACnC,YAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAA;SACtC;QAED,OAAO;YACL,SAAS;AACT,YAAA,QAAQ,EAAE,iBAAiB;SAC5B,CAAA;KACF;AAEO,IAAA,MAAM,eAAe,CAAC,MAAW,EAAE,YAA+B,EAAA;QACxE,MAAM,OAAO,GAAkB,EAAE,CAAA;AACjC,QAAA,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,YAAY,CAAA;QAEpD,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBAChC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;gBACvB,OAAO,CAAC,CAAC,CAAC,GAAG;AACX,oBAAA,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;AACvB,oBAAA,aAAa,EAAE,SAAS;AACxB,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,aAAa,EAAE,MAAM,IAAI;iBAC1B,CAAA;AACH,aAAC,CAAC,CAAA;SACH;AAED,QAAA,IAAI,QAAQ,CAAC,WAAW,EAAE;AACxB,YAAA,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;SACpC;QAED,iBAAiB,CAAC,YAAY,EAAE,CAAA;AAChC,QAAA,OAAO,YAAY,CAAA;KACpB;AAEO,IAAA,MAAM,iBAAiB,CAAC,IAAe,EAAE,QAAkB,EAAA;AACjE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;QAC5D,IAAI,UAAU,EAAE;YACd,OAAO,UAAU,CAAC,MAAM,CAAA;SACzB;QAED,MAAM,MAAM,GAAgC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC1E,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU,EAAE;YACnD,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAAC,IAAI,CAA+C,6CAAA,CAAA,CAAC,CAAA;SACrG;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AACjD,QAAA,OAAO,MAAM,CAAA;KACd;8GAxEU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAf,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,eAAe,cADF,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCJrB,eAAe,CAAA;AAC1B,IAAA,WAAA,CAA6B,QAAkB,EAAA;QAAlB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;KAAI;AAEnD,IAAA,GAAG,CAA4B,KAA0D,EAAA;QACvF,MAAM,OAAO,GAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,CAAA;QACjF,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,KAAK,CAAC,CAAA;SACrE;AACD,QAAA,OAAO,OAAO,CAAA;KACf;8GATU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAf,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,eAAe,cADF,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCDrB,oBAAoB,CAAA;AAKhC,CAAA;AAUD,MAAM,WAAW,CAAA;AAIf,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAA;KACrB;AAED,IAAA,WAAA,CACmB,KAAmB,EACnB,QAAkB,EAClB,MAAoC,EAAA;QAFpC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;QACnB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAClB,IAAM,CAAA,MAAA,GAAN,MAAM,CAA8B;QAT/C,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAA;KAUpB;IAEJ,GAAG,GAAA;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;SACxB;AACD,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAA;KACzB;IAEO,SAAS,GAAA;QACf,QACE,IAAI,CAAC,OAAO;aACX,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAe,CAAC,QAAQ,KAAI;AACxD,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBACxC,MAAM,KAAK,GAAoB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;AAClE,gBAAA,KAAK,CAAC,IAAI,GAAG,GAAG,CAAA;AAChB,gBAAA,KAAK,CAAC,GAAG,GAAG,YAAY,CAAA;AAExB,gBAAA,KAAK,CAAC,MAAM,GAAG,MAAK;AAClB,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBACzB,QAAQ,CAAC,QAAQ,EAAE,CAAA;AACnB,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;AACtB,iBAAC,CAAA;AACD,gBAAA,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,KAAI;AACtB,oBAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACnB,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;AACtB,iBAAC,CAAA;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAChC,IAAI,UAAU,EAAE;AACd,oBAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,wBAAA,IAAI,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;4BAClC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;yBACzC;qBACF;iBACF;gBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;AACvC,aAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAClC;KACF;IAEO,UAAU,GAAA;QAChB,QACE,IAAI,CAAC,OAAO;aACX,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAe,CAAC,QAAQ,KAAI;AACxD,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBACxC,MAAM,MAAM,GAAsB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;AACvE,gBAAA,MAAM,CAAC,GAAG,GAAG,GAAG,CAAA;AAEhB,gBAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBACzB,QAAQ,CAAC,QAAQ,EAAE,CAAA;AACnB,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;AACtB,iBAAC,CAAA;AACD,gBAAA,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,KAAI;AACvB,oBAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACnB,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;AACtB,iBAAC,CAAA;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAChC,IAAI,UAAU,EAAE;AACd,oBAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,wBAAA,IAAI,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;4BAClC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;yBAC1C;qBACF;iBACF;gBAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AACxC,aAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAClC;KACF;AAEO,IAAA,QAAQ,CAAC,GAAW,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE;AACpC,YAAA,OAAO,GAAG,CAAA;SACX;AAED,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC1B,YAAA,OAAO,GAAG,CAAA;SACX;QAED,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACrC,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAA;AAC9C,YAAA,OAAO,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAA;SAC9B;AAED,QAAA,OAAO,GAAG,CAAA;KACX;AACF,CAAA;AAED;;AAEG;MAIU,qBAAqB,CAAA;AAHlC,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC3B,IAAM,CAAA,MAAA,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AACzD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAA;AAmE3D,KAAA;IAjEC,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AACnC,YAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;gBAChC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AAC5C,oBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;wBACvB,OAAM;qBACP;iBACF;gBACD,aAAa,CAAC,QAAQ,CAAC,CAAA;AACvB,gBAAA,OAAO,EAAE,CAAA;aACV,EAAE,GAAG,CAAC,CAAA;AACT,SAAC,CAAC,CAAA;KACH;AAED;;;;;AAKG;AACH,IAAA,WAAW,CAAC,SAAyB,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;SACd;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;AAC/C,QAAA,OAAO,IAAI,UAAU,CAAiB,CAAC,QAAQ,KAAI;YACjD,MAAM,QAAQ,GAAmB,EAAE,CAAA;AACnC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;AACxB,iBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/B,iBAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACf,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAChB,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;AACxC,oBAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;oBACvB,QAAQ,CAAC,QAAQ,EAAE,CAAA;iBACpB;AACH,aAAC,CAAC,CAAA;AACJ,YAAA,OAAO,MAAK;gBACV,IAAI,EAAE,WAAW,EAAE,CAAA;AACrB,aAAC,CAAA;AACH,SAAC,CAAC,CAAA;KACH;AAED;;;;AAIG;AACH,IAAA,YAAY,CAAC,SAAyB,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;SACd;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;AAC9C,QAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;KAC7C;AAEO,IAAA,cAAc,CAAC,SAAyB,EAAA;AAC9C,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AAC7B,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACpB,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,CAAC,OAAO,EAAE;gBACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA;aACvF;AACD,YAAA,OAAO,OAAO,CAAA;AAChB,SAAC,CAAC,CAAA;KACH;8GArEU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAArB,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,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;MAyEY,4BAA4B,GAAG,CAAC,MAAqC,MAAW;AAC3F,IAAA,OAAO,EAAE,oBAAoB;AAC7B,IAAA,QAAQ,EAAE,MAAM;AACjB,CAAA;;AC5MD;;AAEG;;;;"}