@acorex/platform 20.8.19 → 20.8.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1816,7 +1816,7 @@ declare class AXPUserAvatarComponent implements OnInit, OnDestroy {
1816
1816
  protected userInfo: _angular_core.WritableSignal<AXPUserAvatarData | null>;
1817
1817
  size: _angular_core.InputSignal<number>;
1818
1818
  userId: _angular_core.InputSignal<string>;
1819
- src: _angular_core.WritableSignal<string>;
1819
+ avatarUrl: _angular_core.WritableSignal<string>;
1820
1820
  userName: _angular_core.Signal<string>;
1821
1821
  firstName: _angular_core.Signal<string>;
1822
1822
  lastName: _angular_core.Signal<string>;
@@ -1824,19 +1824,26 @@ declare class AXPUserAvatarComponent implements OnInit, OnDestroy {
1824
1824
  isOnline: _angular_core.Signal<boolean>;
1825
1825
  avatarText: _angular_core.Signal<string>;
1826
1826
  avatarColor: _angular_core.Signal<string>;
1827
- protected hasAvatar: _angular_core.Signal<boolean>;
1827
+ protected hasAvatarUrl: _angular_core.Signal<boolean>;
1828
1828
  protected isAvatarLoaded: _angular_core.WritableSignal<boolean>;
1829
- protected isLoading: _angular_core.Signal<boolean>;
1830
- protected onImageError(event: AXHtmlEvent<ErrorEvent>): void;
1831
- protected onImageLoad(event: AXHtmlEvent<Event>): void;
1829
+ protected hasImageError: _angular_core.WritableSignal<boolean>;
1830
+ protected showImage: _angular_core.Signal<boolean>;
1831
+ protected showPlaceholder: _angular_core.Signal<boolean>;
1832
+ protected onImageError(_event: AXHtmlEvent<ErrorEvent>): void;
1833
+ protected onImageLoad(_event: AXHtmlEvent<Event>): void;
1832
1834
  ngOnInit(): void;
1833
1835
  ngOnDestroy(): void;
1834
1836
  private loadUserData;
1835
1837
  /**
1836
- * Generate avatar image source
1837
- * This is a placeholder - implement based on your actual requirements
1838
+ * Resolves avatar image URL from user data and resets load state.
1838
1839
  */
1839
1840
  private generateAvatarSrc;
1841
+ /**
1842
+ * Preloads avatar image without breaking ax-avatar content projection.
1843
+ */
1844
+ private preloadAvatar;
1845
+ private markImageAsLoaded;
1846
+ private markImageAsFailed;
1840
1847
  /**
1841
1848
  * Get initials from first and last name
1842
1849
  */
@@ -12,7 +12,7 @@ import { AXStyleColorType, AXDataSource, AXDataSourceFilterOption, AXValueChange
12
12
  import * as _acorex_platform_common from '@acorex/platform/common';
13
13
  import { AXPEntityCommandScope, AXPEntity, AXPEntityAction, AXPEntityProperty, AXPEntityTableColumn, AXPRelatedEntity, AXPEntitySectionView, AXPEntityPropertyCreateView, AXPEntityPropertyLayoutConfig, AXPQueryView, AXPEntityPropertyView, AXPCategoryEntity, AXPEntityPropertyGroup, AXPEntityMasterCreateLayoutView, AXPEntityMasterUpdateLayoutView, AXPEntityMasterSingleLayoutView, AXPEntityMasterListView, AXPEntityDetailListView, AXPQueryFilter } from '@acorex/platform/common';
14
14
  import * as i1 from '@angular/router';
15
- import { ResolveFn } from '@angular/router';
15
+ import { ResolveFn, RedirectCommand } from '@angular/router';
16
16
  import * as rxjs from 'rxjs';
17
17
  import { Subject } from 'rxjs';
18
18
  import * as i2 from '@acorex/platform/workflow';
@@ -608,7 +608,7 @@ declare class AXPEntityListViewModelFactory {
608
608
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListViewModelFactory, never>;
609
609
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListViewModelFactory>;
610
610
  }
611
- declare const AXPEntityListViewModelResolver: ResolveFn<Promise<AXPEntityMasterListViewModel>>;
611
+ declare const AXPEntityListViewModelResolver: ResolveFn<Promise<AXPEntityMasterListViewModel | RedirectCommand>>;
612
612
 
613
613
  declare class AXPEntityMasterSingleViewGroupViewModel {
614
614
  private entity;
@@ -763,7 +763,7 @@ declare class AXPEntityPreloadFiltersViewModel {
763
763
  */
764
764
  serializeFilters(filters: any): AXPFilterQuery[];
765
765
  }
766
- declare const AXPEntityPreloadFiltersViewModelResolver: ResolveFn<Promise<AXPEntityPreloadFiltersViewModel>>;
766
+ declare const AXPEntityPreloadFiltersViewModelResolver: ResolveFn<Promise<AXPEntityPreloadFiltersViewModel | RedirectCommand>>;
767
767
 
768
768
  interface AXPEntityModifierContext {
769
769
  readonly entity: AXPEntity;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/platform",
3
- "version": "20.8.19",
3
+ "version": "20.8.22",
4
4
  "peerDependencies": {
5
5
  "@acorex/cdk": "^19.0.0 || ^20.0.0 || ^21.0.0-next.0 || ^21.0.2-next.0",
6
6
  "@acorex/core": "^19.0.0 || ^20.0.0 || ^21.0.0-next.0 || ^21.0.2-next.0",
@@ -75,14 +75,14 @@
75
75
  "types": "./layout/views/index.d.ts",
76
76
  "default": "./fesm2022/acorex-platform-layout-views.mjs"
77
77
  },
78
- "./layout/widgets": {
79
- "types": "./layout/widgets/index.d.ts",
80
- "default": "./fesm2022/acorex-platform-layout-widgets.mjs"
81
- },
82
78
  "./layout/widget-core": {
83
79
  "types": "./layout/widget-core/index.d.ts",
84
80
  "default": "./fesm2022/acorex-platform-layout-widget-core.mjs"
85
81
  },
82
+ "./layout/widgets": {
83
+ "types": "./layout/widgets/index.d.ts",
84
+ "default": "./fesm2022/acorex-platform-layout-widgets.mjs"
85
+ },
86
86
  "./themes/default": {
87
87
  "types": "./themes/default/index.d.ts",
88
88
  "default": "./fesm2022/acorex-platform-themes-default.mjs"
@@ -1,25 +0,0 @@
1
- import * as i3 from '@acorex/components/button';
2
- import { AXButtonModule } from '@acorex/components/button';
3
- import { AXPSessionService } from '@acorex/platform/auth';
4
- import * as i0 from '@angular/core';
5
- import { inject, Component } from '@angular/core';
6
- import { Router } from '@angular/router';
7
-
8
- class AXPError404Component {
9
- constructor() {
10
- this.sessionService = inject(AXPSessionService);
11
- this.router = inject(Router);
12
- }
13
- goHome() {
14
- this.router.navigate([`/${this.sessionService.application?.name}/home`]);
15
- }
16
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPError404Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: AXPError404Component, isStandalone: true, selector: "axp-error-404", ngImport: i0, template: "<div class=\"ax-h-full ax-flex ax-flex-col ax-gap-8 ax-items-center ax-justify-center\">\n <img class=\"ax-w-3/4 md:ax-w-1/2 lg:ax-w-1/3 xl:ax-w-1/3\" src=\" /assets/images/error/error-404.svg\"\n alt=\"Oops! Error 404. No result found.\">\n <div class=\"ax-flex ax-flex-col ax-items-center ax-gap-2 md:ax-gap-4\">\n <h1 class=\"ax-font-bold ax-text-2xl md:ax-text-4xl\">No Result Found.</h1>\n <p class=\"md:ax-text-lg ax-text-neutral-400\">Whoops! Looks like that page doesn't exist.</p>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-2 md:ax-gap-4 md:ax-flex-row\">\n <ax-button (onClick)=\"goHome()\" class=\"ax-px-4\" color=\"primary\" text=\"Go back to home\"></ax-button>\n <ax-button class=\"ax-px-4\" [color]=\"'default'\" text=\"Contact us\"></ax-button>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }] }); }
18
- }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPError404Component, decorators: [{
20
- type: Component,
21
- args: [{ selector: 'axp-error-404', imports: [AXButtonModule], template: "<div class=\"ax-h-full ax-flex ax-flex-col ax-gap-8 ax-items-center ax-justify-center\">\n <img class=\"ax-w-3/4 md:ax-w-1/2 lg:ax-w-1/3 xl:ax-w-1/3\" src=\" /assets/images/error/error-404.svg\"\n alt=\"Oops! Error 404. No result found.\">\n <div class=\"ax-flex ax-flex-col ax-items-center ax-gap-2 md:ax-gap-4\">\n <h1 class=\"ax-font-bold ax-text-2xl md:ax-text-4xl\">No Result Found.</h1>\n <p class=\"md:ax-text-lg ax-text-neutral-400\">Whoops! Looks like that page doesn't exist.</p>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-2 md:ax-gap-4 md:ax-flex-row\">\n <ax-button (onClick)=\"goHome()\" class=\"ax-px-4\" color=\"primary\" text=\"Go back to home\"></ax-button>\n <ax-button class=\"ax-px-4\" [color]=\"'default'\" text=\"Contact us\"></ax-button>\n </div>\n</div>" }]
22
- }] });
23
-
24
- export { AXPError404Component };
25
- //# sourceMappingURL=acorex-platform-themes-default-error-404.component-DVF9soT5.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-themes-default-error-404.component-DVF9soT5.mjs","sources":["../tmp-esm2022/themes/default/lib/pages/errors/error-404/error-404.component.js"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { Component, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nexport class AXPError404Component {\n constructor() {\n this.sessionService = inject(AXPSessionService);\n this.router = inject(Router);\n }\n goHome() {\n this.router.navigate([`/${this.sessionService.application?.name}/home`]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.19\", ngImport: i0, type: AXPError404Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.19\", type: AXPError404Component, isStandalone: true, selector: \"axp-error-404\", ngImport: i0, template: \"<div class=\\\"ax-h-full ax-flex ax-flex-col ax-gap-8 ax-items-center ax-justify-center\\\">\\n <img class=\\\"ax-w-3/4 md:ax-w-1/2 lg:ax-w-1/3 xl:ax-w-1/3\\\" src=\\\" /assets/images/error/error-404.svg\\\"\\n alt=\\\"Oops! Error 404. No result found.\\\">\\n <div class=\\\"ax-flex ax-flex-col ax-items-center ax-gap-2 md:ax-gap-4\\\">\\n <h1 class=\\\"ax-font-bold ax-text-2xl md:ax-text-4xl\\\">No Result Found.</h1>\\n <p class=\\\"md:ax-text-lg ax-text-neutral-400\\\">Whoops! Looks like that page doesn't exist.</p>\\n </div>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 md:ax-gap-4 md:ax-flex-row\\\">\\n <ax-button (onClick)=\\\"goHome()\\\" class=\\\"ax-px-4\\\" color=\\\"primary\\\" text=\\\"Go back to home\\\"></ax-button>\\n <ax-button class=\\\"ax-px-4\\\" [color]=\\\"'default'\\\" text=\\\"Contact us\\\"></ax-button>\\n </div>\\n</div>\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.19\", ngImport: i0, type: AXPError404Component, decorators: [{\n type: Component,\n args: [{ selector: 'axp-error-404', imports: [AXButtonModule], template: \"<div class=\\\"ax-h-full ax-flex ax-flex-col ax-gap-8 ax-items-center ax-justify-center\\\">\\n <img class=\\\"ax-w-3/4 md:ax-w-1/2 lg:ax-w-1/3 xl:ax-w-1/3\\\" src=\\\" /assets/images/error/error-404.svg\\\"\\n alt=\\\"Oops! Error 404. No result found.\\\">\\n <div class=\\\"ax-flex ax-flex-col ax-items-center ax-gap-2 md:ax-gap-4\\\">\\n <h1 class=\\\"ax-font-bold ax-text-2xl md:ax-text-4xl\\\">No Result Found.</h1>\\n <p class=\\\"md:ax-text-lg ax-text-neutral-400\\\">Whoops! Looks like that page doesn't exist.</p>\\n </div>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 md:ax-gap-4 md:ax-flex-row\\\">\\n <ax-button (onClick)=\\\"goHome()\\\" class=\\\"ax-px-4\\\" color=\\\"primary\\\" text=\\\"Go back to home\\\"></ax-button>\\n <ax-button class=\\\"ax-px-4\\\" [color]=\\\"'default'\\\" text=\\\"Contact us\\\"></ax-button>\\n </div>\\n</div>\" }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItNDA0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGhlbWVzL2RlZmF1bHQvc3JjL2xpYi9wYWdlcy9lcnJvcnMvZXJyb3ItNDA0L2Vycm9yLTQwNC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3RoZW1lcy9kZWZhdWx0L3NyYy9saWIvcGFnZXMvZXJyb3JzL2Vycm9yLTQwNC9lcnJvci00MDQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBUXpDLE1BQU0sT0FBTyxvQkFBb0I7SUFOakM7UUFRVSxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FLakM7SUFIQyxNQUFNO1FBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDOytHQVBVLG9CQUFvQjttR0FBcEIsb0JBQW9CLHlFQ1hqQyxxMEJBV00seURERlEsY0FBYzs7NEZBRWYsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNJLGVBQWUsV0FHaEIsQ0FBQyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdheHAtZXJyb3ItNDA0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXJyb3ItNDA0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lcnJvci00MDQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBpbXBvcnRzOiBbQVhCdXR0b25Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEFYUEVycm9yNDA0Q29tcG9uZW50IHtcblxuICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICBnb0hvbWUoKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvJHt0aGlzLnNlc3Npb25TZXJ2aWNlLmFwcGxpY2F0aW9uPy5uYW1lfS9ob21lYF0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtaC1mdWxsIGF4LWZsZXggYXgtZmxleC1jb2wgYXgtZ2FwLTggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktY2VudGVyXCI+XG4gICAgPGltZyBjbGFzcz1cImF4LXctMy80IG1kOmF4LXctMS8yIGxnOmF4LXctMS8zIHhsOmF4LXctMS8zXCIgc3JjPVwiIC9hc3NldHMvaW1hZ2VzL2Vycm9yL2Vycm9yLTQwNC5zdmdcIlxuICAgICAgICBhbHQ9XCJPb3BzISBFcnJvciA0MDQuIE5vIHJlc3VsdCBmb3VuZC5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTIgbWQ6YXgtZ2FwLTRcIj5cbiAgICAgICAgPGgxIGNsYXNzPVwiYXgtZm9udC1ib2xkIGF4LXRleHQtMnhsIG1kOmF4LXRleHQtNHhsXCI+Tm8gUmVzdWx0IEZvdW5kLjwvaDE+XG4gICAgICAgIDxwIGNsYXNzPVwibWQ6YXgtdGV4dC1sZyBheC10ZXh0LW5ldXRyYWwtNDAwXCI+V2hvb3BzISBMb29rcyBsaWtlIHRoYXQgcGFnZSBkb2Vzbid0IGV4aXN0LjwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtMiBtZDpheC1nYXAtNCBtZDpheC1mbGV4LXJvd1wiPlxuICAgICAgICA8YXgtYnV0dG9uIChvbkNsaWNrKT1cImdvSG9tZSgpXCIgY2xhc3M9XCJheC1weC00XCIgY29sb3I9XCJwcmltYXJ5XCIgdGV4dD1cIkdvIGJhY2sgdG8gaG9tZVwiPjwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uIGNsYXNzPVwiYXgtcHgtNFwiIFtjb2xvcl09XCInZGVmYXVsdCdcIiB0ZXh0PVwiQ29udGFjdCB1c1wiPjwvYXgtYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19"],"names":["i1"],"mappings":";;;;;;;AAMO,MAAM,oBAAoB,CAAC;AAClC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACvD,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACpC,IAAI;AACJ,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChF,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACvL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,q0BAAq0B,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEA,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACl7C;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAC/H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,q0BAAq0B,EAAE;AAC55B,SAAS,CAAC,EAAE,CAAC;;;;"}