@zambon-dev/ui 0.0.1-bootstrap.0 → 1.0.0

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +81 -81
  3. package/fesm2022/zambon-dev-ui-framework.mjs +5943 -3980
  4. package/fesm2022/zambon-dev-ui-framework.mjs.map +1 -1
  5. package/fesm2022/zambon-dev-ui-library.mjs +5787 -4272
  6. package/fesm2022/zambon-dev-ui-library.mjs.map +1 -1
  7. package/fesm2022/zambon-dev-ui-shared.mjs +2505 -1790
  8. package/fesm2022/zambon-dev-ui-shared.mjs.map +1 -1
  9. package/fesm2022/zambon-dev-ui-testing.mjs +73 -77
  10. package/fesm2022/zambon-dev-ui-testing.mjs.map +1 -1
  11. package/fesm2022/zambon-dev-ui.mjs +3 -8
  12. package/i18n/framework/en.json +63 -63
  13. package/i18n/framework/pt.json +63 -63
  14. package/i18n/shared/external-content/en.json +12 -12
  15. package/i18n/shared/external-content/pt.json +12 -12
  16. package/i18n/shared/language-selector/en.json +5 -5
  17. package/i18n/shared/language-selector/pt.json +5 -5
  18. package/i18n/shared/login/en.json +14 -14
  19. package/i18n/shared/login/pt.json +14 -14
  20. package/i18n/shared/operations-history/en.json +5 -5
  21. package/i18n/shared/operations-history/pt.json +5 -5
  22. package/i18n/shared/services-history/en.json +14 -14
  23. package/i18n/shared/services-history/pt.json +14 -14
  24. package/i18n/shared/top-bar/en.json +7 -7
  25. package/i18n/shared/top-bar/pt.json +7 -7
  26. package/package.json +1 -1
  27. package/styles/common.scss +10 -10
  28. package/styles/components/button.scss +101 -101
  29. package/styles/components/card.scss +13 -13
  30. package/styles/components/dropdown-static.scss +35 -35
  31. package/styles/components/input-group.scss +44 -44
  32. package/styles/components/input.scss +99 -99
  33. package/styles/components/label.scss +3 -3
  34. package/styles/components/row.scss +48 -48
  35. package/styles/mixins/background.scss +31 -31
  36. package/styles/theme.css +75 -75
  37. package/styles/variables.scss +60 -60
  38. package/types/zambon-dev-ui-framework.d.ts +1459 -1029
  39. package/types/zambon-dev-ui-library.d.ts +1607 -1165
  40. package/types/zambon-dev-ui-shared.d.ts +563 -543
  41. package/types/zambon-dev-ui-testing.d.ts +25 -30
  42. package/types/zambon-dev-ui.d.ts +3 -3
  43. package/fesm2022/zambon-dev-ui.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"zambon-dev-ui-framework.mjs","sources":["../../../../libs/ui/src/framework/services/auth.service.ts","../../../../libs/ui/src/framework/services/custom-reuse-strategy.ts","../../../../libs/ui/src/framework/services/tab-view.service.ts","../../../../libs/ui/src/framework/services/tab.service.ts","../../../../libs/ui/src/framework/components/buttons/base-button.ts","../../../../libs/ui/src/framework/components/buttons/base-form-view-button.ts","../../../../libs/ui/src/framework/helpers/backend-form-validation-helper.ts","../../../../libs/ui/src/framework/helpers/route-helper.ts","../../../../libs/ui/src/framework/components/modals/confirm-modal/confirm-modal.component.ts","../../../../libs/ui/src/framework/components/modals/confirm-modal/confirm-modal.component.html","../../../../libs/ui/src/framework/components/modals/error-modal/error-modal.component.ts","../../../../libs/ui/src/framework/components/modals/error-modal/error-modal.component.html","../../../../libs/ui/src/framework/components/modals/modals.module.ts","../../../../libs/ui/src/framework/components/buttons/button-confirm/button-confirm.component.ts","../../../../libs/ui/src/framework/components/buttons/button-confirm/button-confirm.component.html","../../../../libs/ui/src/framework/components/buttons/button-delete/button-delete.component.ts","../../../../libs/ui/src/framework/components/buttons/button-delete/button-delete.component.html","../../../../libs/ui/src/framework/components/buttons/button-edit/button-edit.component.ts","../../../../libs/ui/src/framework/components/buttons/button-edit/button-edit.component.html","../../../../libs/ui/src/framework/components/buttons/button-export/button-export.component.ts","../../../../libs/ui/src/framework/components/buttons/button-export/button-export.component.html","../../../../libs/ui/src/framework/components/buttons/button-filters/button-filters.component.ts","../../../../libs/ui/src/framework/components/buttons/button-filters/button-filters.component.html","../../../../libs/ui/src/framework/models/route-data.ts","../../../../libs/ui/src/framework/models/tab.ts","../../../../libs/ui/src/framework/components/buttons/button-new/button-new.component.ts","../../../../libs/ui/src/framework/components/buttons/button-new/button-new.component.html","../../../../libs/ui/src/framework/components/buttons/button-open-record/button-open-record.component.ts","../../../../libs/ui/src/framework/components/buttons/button-open-record/button-open-record.component.html","../../../../libs/ui/src/framework/components/buttons/button-refresh/button-refresh.component.ts","../../../../libs/ui/src/framework/components/buttons/button-refresh/button-refresh.component.html","../../../../libs/ui/src/framework/components/buttons/button-save/button-save.component.ts","../../../../libs/ui/src/framework/components/buttons/button-save/button-save.component.html","../../../../libs/ui/src/framework/components/buttons/button-views/button-views.component.ts","../../../../libs/ui/src/framework/components/buttons/button-views/button-views.component.html","../../../../libs/ui/src/framework/components/buttons/button/button.component.ts","../../../../libs/ui/src/framework/components/buttons/button/button.component.html","../../../../libs/ui/src/framework/components/buttons/legacy/button-edit/button-edit.component.ts","../../../../libs/ui/src/framework/components/buttons/legacy/button-edit/button-edit.component.html","../../../../libs/ui/src/framework/components/buttons/legacy/button-new/button-new.component.ts","../../../../libs/ui/src/framework/components/buttons/legacy/button-new/button-new.component.html","../../../../libs/ui/src/framework/components/buttons/legacy/button-open-record/button-open-record.component.ts","../../../../libs/ui/src/framework/components/buttons/legacy/button-open-record/button-open-record.component.html","../../../../libs/ui/src/framework/components/buttons/legacy/button-save/button-save.component.ts","../../../../libs/ui/src/framework/components/buttons/legacy/button-save/button-save.component.html","../../../../libs/ui/src/framework/components/buttons/legacy/button-views/button-views.component.ts","../../../../libs/ui/src/framework/components/buttons/legacy/button-views/button-views.component.html","../../../../libs/ui/src/framework/components/buttons/buttons.module.ts","../../../../libs/ui/src/framework/components/views/default-tab-view/default-tab-view.component.ts","../../../../libs/ui/src/framework/components/views/default-tab-view/default-tab-view.component.html","../../../../libs/ui/src/framework/components/views/default-details-tab-view/default-details-tab-view.component.ts","../../../../libs/ui/src/framework/components/views/default-details-tab-view/default-details-tab-view.component.html","../../../../libs/ui/src/framework/components/views/tab-breadcrumbs/tab-breadcrumbs.component.ts","../../../../libs/ui/src/framework/components/views/tab-breadcrumbs/tab-breadcrumbs.component.html","../../../../libs/ui/src/framework/components/views/tabs/tabs.component.ts","../../../../libs/ui/src/framework/components/views/tabs/tabs.component.html","../../../../libs/ui/src/framework/components/views/views.module.ts","../../../../libs/ui/src/framework/components/components.module.ts","../../../../libs/ui/src/framework/configs/app-config.ts","../../../../libs/ui/src/framework/configs-providers/grid-configs.provider.ts","../../../../libs/ui/src/framework/framework.module.ts","../../../../libs/ui/src/framework/i18n/framework-i18n.ts","../../../../libs/ui/src/framework/views/view-base.ts","../../../../libs/ui/src/framework/views/child-list.ts","../../../../libs/ui/src/framework/views/child-list-legacy.ts","../../../../libs/ui/src/framework/views/tabview-base.ts","../../../../libs/ui/src/framework/views/form-view.ts","../../../../libs/ui/src/framework/views/legacy/legacy-sub-view-form.ts","../../../../libs/ui/src/framework/views/legacy/legacy-tabview-base.ts","../../../../libs/ui/src/framework/views/legacy/legacy-tabview-details.ts","../../../../libs/ui/src/framework/views/legacy/legacy-tabview-list.ts","../../../../libs/ui/src/framework/views/tabview-list.ts","../../../../libs/ui/src/framework/views/list-view.ts","../../../../libs/ui/src/framework/views/modals/modal-base.ts","../../../../libs/ui/src/framework/views/modals/multi-editor-legacy.modal.ts","../../../../libs/ui/src/framework/views/modals/multi-editor.modal.ts","../../../../libs/ui/src/framework/views/modals/multi-select.modal.ts","../../../../libs/ui/src/framework/views/modals/view.modal.ts","../../../../libs/ui/src/framework/zambon-dev-ui-framework.ts"],"sourcesContent":["import { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { map, Observable, of, ReplaySubject, switchMap, take } from 'rxjs';\r\nimport { TabService } from './tab.service';\r\n\r\nconst ADMINISTRATIVE_MASTER_ACTION = 'AdministrativeMaster';\r\n\r\nexport abstract class AuthService {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n private actionsCache$: ReplaySubject<string[]> = new ReplaySubject<string[]>(1);\r\n private isActionsCacheInitialized = false;\r\n //#endregion\r\n\r\n //#region Properties\r\n public abstract get adminAction(): string;\r\n public get isAuthenticated(): boolean {\r\n return this.username !== null;\r\n }\r\n public get isTokenExpired(): boolean {\r\n return this.token !== null && this.jwtHelper.isTokenExpired(this.token);\r\n }\r\n public get token(): string | null {\r\n return localStorage.getItem('token') ?? sessionStorage.getItem('token');\r\n }\r\n public get userID(): number | undefined {\r\n return 0;\r\n }\r\n protected get refreshToken(): string | null {\r\n return localStorage.getItem('refreshToken') ?? sessionStorage.getItem('refreshToken');\r\n }\r\n protected get userInfo(): string | null {\r\n return localStorage.getItem('userInfo') ?? sessionStorage.getItem('userInfo');\r\n }\r\n protected get username(): string | null {\r\n return localStorage.getItem('username') ?? sessionStorage.getItem('username');\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor(\r\n protected jwtHelper: JwtHelperService,\r\n protected tabService: TabService,\r\n ) {}\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public checkActionIsAllowed(actionToCheck: string): Observable<boolean> {\r\n if (!this.isActionsCacheInitialized) {\r\n this.isActionsCacheInitialized = true;\r\n\r\n this.getActions()\r\n .pipe(take(1))\r\n .subscribe((actions: string[]) => {\r\n this.actionsCache$.next(actions);\r\n });\r\n }\r\n\r\n return this.actionsCache$.pipe(\r\n map((actions: string[]) => actions.includes(this.adminAction) || actions.includes(actionToCheck)),\r\n );\r\n }\r\n\r\n public checkActionsAreAllowed(actionsToCheck: string[], checkForAdministrativeMaster = true): Observable<boolean[]> {\r\n if (!this.isActionsCacheInitialized) {\r\n this.isActionsCacheInitialized = true;\r\n\r\n this.getActions()\r\n .pipe(take(1))\r\n .subscribe((actions: string[]) => {\r\n this.actionsCache$.next(actions);\r\n });\r\n }\r\n\r\n return this.actionsCache$.pipe(\r\n switchMap((actions: string[]) =>\r\n of(\r\n actionsToCheck.map(\r\n (actionsToCheck: string) =>\r\n (checkForAdministrativeMaster && actions.indexOf(ADMINISTRATIVE_MASTER_ACTION) >= 0) ||\r\n actions.indexOf(actionsToCheck) >= 0,\r\n ),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n public signOut(): void {\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n\r\n this.tabService.closeAllTabs();\r\n this.resetActionsCache();\r\n }\r\n\r\n protected setStorage(\r\n key: 'username' | 'token' | 'refreshToken' | 'userInfo',\r\n value: string | null,\r\n useLocalStorage: boolean | null = null,\r\n ) {\r\n if (useLocalStorage === null) {\r\n useLocalStorage = sessionStorage.getItem(key) === null;\r\n }\r\n\r\n if (value) {\r\n if (useLocalStorage) {\r\n localStorage.setItem(key, value);\r\n } else {\r\n sessionStorage.setItem(key, value);\r\n }\r\n } else {\r\n localStorage.removeItem(key);\r\n sessionStorage.removeItem(key);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n protected resetActionsCache(): void {\r\n this.isActionsCacheInitialized = false;\r\n this.actionsCache$ = new ReplaySubject<string[]>(1);\r\n }\r\n //#endregion\r\n\r\n //#region Abstract methods\r\n public abstract getActions(): Observable<string[]>;\r\n //#endregion\r\n}\r\n","import { ApplicationRef, Inject, inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy, UrlSegment } from '@angular/router';\r\nimport { TabService } from './tab.service';\r\n\r\n@Inject({})\r\nexport class CustomReuseStrategy implements RouteReuseStrategy {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n public clones: { [key: string]: string } = {};\r\n public redirects: { [key: string]: string } = {};\r\n public tabService?: TabService;\r\n\r\n private applicationRef: ApplicationRef = inject(ApplicationRef);\r\n private cachedHandles: { [key: string]: DetachedRouteHandle | null } = {};\r\n private componentIDs: WeakMap<object, number> = new WeakMap<object, number>();\r\n private nextComponentID = 1;\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public clearAllHandles(): void {\r\n this.cachedHandles = {};\r\n }\r\n\r\n public clearHandle(url: string): void {\r\n const keysToRemove: string[] = Object.keys(this.cachedHandles).filter((key: string) => key.startsWith(`${url}-`));\r\n\r\n keysToRemove.forEach((key: string) => {\r\n const handle: DetachedRouteHandle | null = this.cachedHandles[key];\r\n\r\n if (handle) {\r\n if ((<any>handle)?.componentRef?.instance?.ngOnDestroy) {\r\n (<any>handle).componentRef.instance.ngOnDestroy();\r\n }\r\n }\r\n delete this.cachedHandles[key];\r\n });\r\n }\r\n\r\n public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\r\n if (!route.component) {\r\n return null;\r\n }\r\n\r\n const cacheKey: string = this.getCacheKey(route);\r\n const handle: DetachedRouteHandle | null = this.cachedHandles[cacheKey];\r\n\r\n if (handle) {\r\n // Schedule global change detection after Angular finishes reattaching the component.\r\n // Without this, reattached components may render stale views (e.g., empty ribbon)\r\n // because NgTemplateOutlet does not re-create its embedded view automatically.\r\n // ApplicationRef.tick() ensures the entire app tree is checked, including embedded views.\r\n setTimeout(() => {\r\n this.applicationRef.tick();\r\n });\r\n }\r\n\r\n return handle;\r\n }\r\n\r\n public shouldAttach(route: ActivatedRouteSnapshot): boolean {\r\n const url: string = this.getUrlFromRoute(route);\r\n const hasComponent = !!route.component;\r\n\r\n if ((this.tabService?.isUrlOpen(url) ?? false) && hasComponent) {\r\n const cacheKey: string = this.getCacheKey(route);\r\n const isCached = !!this.cachedHandles[cacheKey];\r\n return isCached;\r\n }\r\n return false;\r\n }\r\n\r\n public shouldDetach(route: ActivatedRouteSnapshot): boolean {\r\n const url: string = this.getUrlFromRoute(route);\r\n const hasComponent = !!route.component;\r\n\r\n return (this.tabService?.isUrlOpen(url) ?? false) && hasComponent;\r\n }\r\n\r\n public shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean {\r\n const futureUrl: string = this.getUrlFromRoute(future);\r\n const currentUrl: string = this.getUrlFromRoute(current);\r\n\r\n return (\r\n (futureUrl === currentUrl && future.routeConfig === current.routeConfig) ||\r\n this.redirects[currentUrl] === futureUrl ||\r\n this.clones[futureUrl] === currentUrl\r\n );\r\n }\r\n\r\n public store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {\r\n const cacheKey: string = this.getCacheKey(route);\r\n this.cachedHandles[cacheKey] = handle;\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n private getCacheKey(route: ActivatedRouteSnapshot): string {\r\n let url: string = this.getUrlFromRoute(route);\r\n if (this.clones[url]) {\r\n url = this.clones[url];\r\n }\r\n\r\n // The component is identified by identity, never by name. A production build renames every\r\n // class: esbuild wraps each component as `X = (() => { class i { } return i; })()`, so\r\n // `component.name` is a single mangled letter that the whole chunk shares. Nested empty-path\r\n // routes already resolve to the same URL, because an empty path contributes no segment, so a\r\n // key built from the name collapsed a screen's tab view and its list into one entry: storing\r\n // one overwrote the other, both levels were then handed the same detached view, and Angular\r\n // blew the stack building a router state whose node was its own descendant. That reproduced\r\n // only in a minified build, and only on the screens whose chunk happened to mangle to the\r\n // same letter as the framework's.\r\n //\r\n // The depth is part of the key too, so two sibling routes sharing a component type under one\r\n // URL cannot collide either.\r\n return `${url}-${this.getRouteDepth(route)}-${this.getComponentID(route.component)}`;\r\n }\r\n\r\n private getComponentID(component: ActivatedRouteSnapshot['component']): number {\r\n if (typeof component !== 'function') {\r\n return 0;\r\n }\r\n\r\n let componentID: number | undefined = this.componentIDs.get(component);\r\n if (componentID === undefined) {\r\n componentID = this.nextComponentID++;\r\n this.componentIDs.set(component, componentID);\r\n }\r\n\r\n return componentID;\r\n }\r\n\r\n private getRouteDepth(route: ActivatedRouteSnapshot): number {\r\n let depth = 0;\r\n let current: ActivatedRouteSnapshot | null = route.parent;\r\n\r\n while (current) {\r\n depth++;\r\n current = current.parent;\r\n }\r\n\r\n return depth;\r\n }\r\n\r\n private getUrlFromRoute(route: ActivatedRouteSnapshot): string {\r\n const segments: string[] = [];\r\n\r\n const buildRoute: (route: ActivatedRouteSnapshot | null) => void = (route: ActivatedRouteSnapshot | null): void => {\r\n if (route) {\r\n if (route.url.length) {\r\n segments.push(...route.url.map((segment: UrlSegment) => segment.path));\r\n }\r\n buildRoute(route.parent);\r\n }\r\n };\r\n\r\n buildRoute(route);\r\n\r\n return `/${segments.reverse().join('/')}`;\r\n }\r\n //#endregion\r\n}\r\n","import { Injectable, signal, TemplateRef, WritableSignal } from '@angular/core';\r\nimport { ReplaySubject, Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class TabViewService {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n public onUpdateRibbonTemplate: ReplaySubject<TemplateRef<any> | undefined> = new ReplaySubject<\r\n TemplateRef<any> | undefined\r\n >(1);\r\n public onViewChanged: Subject<string> = new Subject<string>();\r\n\r\n private readonly _activeView: WritableSignal<string | undefined> = signal(undefined);\r\n //#endregion\r\n\r\n //#region Properties\r\n public get activeView(): string {\r\n return this._activeView() ?? '';\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public setActiveView(viewId: string): void {\r\n if (viewId === this._activeView()) {\r\n return;\r\n }\r\n\r\n this._activeView.set(viewId);\r\n this.onViewChanged.next(viewId);\r\n }\r\n\r\n public updateRibbonTemplate(template: TemplateRef<any> | undefined): void {\r\n this.onUpdateRibbonTemplate.next(template);\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","import { Location } from '@angular/common';\r\nimport { ApplicationRef, Injectable, signal, WritableSignal } from '@angular/core';\r\nimport { Router, RouteReuseStrategy } from '@angular/router';\r\nimport { CustomReuseStrategy } from './custom-reuse-strategy';\r\nimport { ITab } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TabService {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n // Tab state is a tree of arrays mutated in place -- spliced, pushed, and with ITab objects\r\n // whose titles are rewritten as they resolve. A signal over the array could not see any of\r\n // that, so this counter stands in for it: every write below bumps it, and the public getters\r\n // read it, which is what makes a template that reads them re-render. It is a bridge, not the\r\n // destination -- the tab state itself still wants to become signals. See\r\n // docs/guides/reactivity.md.\r\n private readonly revision: WritableSignal<number> = signal(0);\r\n\r\n private activeTabIndex = -1;\r\n private customReuseStrategy: CustomReuseStrategy;\r\n private displayTitleIndices: number[] = [];\r\n private openTabs: ITab[][] = [];\r\n //#endregion\r\n\r\n //#region Properties\r\n public get activeTabHistory(): ITab[] {\r\n this.revision();\r\n return this.openTabs[this.activeTabIndex] ?? [];\r\n }\r\n\r\n public get activeTabs(): ITab[] {\r\n this.revision();\r\n return this.openTabs.map((tabs: ITab[]) => tabs[0]) ?? [];\r\n }\r\n\r\n public get activeTabsDisplayTitles(): (string | undefined)[] {\r\n this.revision();\r\n return this.openTabs.map((tabs: ITab[], i: number) => {\r\n const displayIndex: number = this.displayTitleIndices[i] ?? 0;\r\n return tabs[displayIndex]?.title;\r\n });\r\n }\r\n\r\n public get activeTabsLoadingStates(): boolean[] {\r\n this.revision();\r\n return this.openTabs.map((tabs: ITab[], i: number) => {\r\n const displayIndex: number = this.displayTitleIndices[i] ?? 0;\r\n return tabs[displayIndex]?.isTitleLoading ?? true;\r\n });\r\n }\r\n\r\n private get activeTab(): ITab[] | null {\r\n if (this.activeTabIndex < 0) {\r\n return null;\r\n }\r\n return this.openTabs[this.activeTabIndex];\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor(\r\n private applicationRef: ApplicationRef,\r\n private location: Location,\r\n private router: Router,\r\n routeReuseStrategy: RouteReuseStrategy,\r\n ) {\r\n this.customReuseStrategy = <CustomReuseStrategy>routeReuseStrategy;\r\n this.customReuseStrategy.tabService = this;\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public activateTab(tab: ITab): void {\r\n this.activeTabIndex = this.activeTabs.indexOf(tab);\r\n this.touched();\r\n this.navigateTo(this.currentViewOf(this.activeTabIndex));\r\n }\r\n\r\n public cloneCurrentTab(url: string): void {\r\n if (!this.activeTab) {\r\n return;\r\n }\r\n\r\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\r\n\r\n this.customReuseStrategy.clones[url] = tab.url;\r\n if (tab.clones.indexOf(url) === -1) {\r\n tab.clones.push(url);\r\n }\r\n\r\n this.navigateTo(tab, url);\r\n }\r\n\r\n public closeActiveTab(): void {\r\n this.closeTab(this.activeTabIndex);\r\n }\r\n\r\n public closeAllTabs(): void {\r\n this.openTabs = [];\r\n this.touched();\r\n this.displayTitleIndices = [];\r\n this.touched();\r\n this.activeTabIndex = -1;\r\n this.touched();\r\n this.customReuseStrategy.clearAllHandles();\r\n }\r\n\r\n public closeTab(index: number): void {\r\n if (index > this.activeTabs.length - 1 || this.activeTabs.length === 0) {\r\n return;\r\n }\r\n\r\n const wasActive: boolean = index === this.activeTabIndex;\r\n const closedTab: ITab[] = this.openTabs[index];\r\n this.openTabs.splice(index, 1);\r\n this.touched();\r\n this.displayTitleIndices.splice(index, 1);\r\n this.touched();\r\n\r\n if (wasActive) {\r\n // Closed the active tab — pick an adjacent tab to focus, and put it back on the view it was\r\n // left on. This used to navigate to activeTabs[i], which is that tab's *root*: a tab opened\r\n // as a list and then drilled into a record went back to the list, under the record's own\r\n // tab, until the tab was clicked again.\r\n if (this.activeTabIndex >= this.openTabs.length) {\r\n this.activeTabIndex = this.openTabs.length - 1;\r\n this.touched();\r\n }\r\n\r\n // Undefined once the last tab is gone, which navigateTo answers with the home URL.\r\n this.navigateTo(this.currentViewOf(this.activeTabIndex));\r\n } else if (index < this.activeTabIndex) {\r\n // Closed a tab before the active one — shift index to keep the same tab active.\r\n this.activeTabIndex--;\r\n }\r\n\r\n closedTab.forEach((tab: ITab) => {\r\n if (!this.isUrlOpen(tab.url)) {\r\n // Tab is not in use by any other tab, we're clear to remove.\r\n this.customReuseStrategy.clearHandle(tab.url);\r\n }\r\n });\r\n }\r\n\r\n public isTabActive(tab: ITab): boolean {\r\n return this.activeTabs[this.activeTabIndex] === tab;\r\n }\r\n\r\n public isUrlActive(url: string, checkForClones = false): boolean {\r\n if (!this.activeTab) {\r\n return false;\r\n }\r\n\r\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\r\n\r\n if (tab.url === url) {\r\n return true;\r\n } else if (checkForClones) {\r\n return tab.clones.indexOf(url) !== -1;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public isUrlOpen(url: string): boolean {\r\n const tabs: ITab[] = this.openTabs.flatMap((tabs: ITab[]) => tabs);\r\n\r\n return this.isTabExists(tabs, url);\r\n }\r\n\r\n public navigateBackOrCloseActiveTab(): void {\r\n if (!this.activeTab || this.activeTab.length === 0) {\r\n return;\r\n }\r\n\r\n if (this.activeTab.length <= 1) {\r\n this.closeTab(this.activeTabIndex);\r\n } else {\r\n const previousEntry: ITab = this.activeTab[this.activeTab.length - 2];\r\n this.navigateCurrentTabBack(previousEntry);\r\n }\r\n }\r\n\r\n public navigateCurrentTab(tab: ITab): void {\r\n if (!this.activeTab) {\r\n return;\r\n }\r\n\r\n // Check other tabs for entity match first, then fall back to current behavior.\r\n if (tab.entityBaseUrl) {\r\n const entityMatchIndex: number = this.findTabIndexByEntityMatch(tab.entityBaseUrl, this.activeTabIndex);\r\n if (entityMatchIndex !== -1) {\r\n this.activeTabIndex = entityMatchIndex;\r\n this.touched();\r\n const otherTab: ITab[] = this.openTabs[entityMatchIndex];\r\n this.navigateTo(otherTab[otherTab.length - 1]);\r\n return;\r\n }\r\n } else {\r\n // Fallback for tabs without entityBaseUrl (existing behavior).\r\n const showingIndex: number = this.findTabIndexByCurrentView(tab.url, this.activeTabIndex, true);\r\n if (showingIndex !== -1) {\r\n this.activeTabIndex = showingIndex;\r\n this.touched();\r\n const otherTab: ITab[] = this.openTabs[showingIndex];\r\n this.navigateTo(otherTab[otherTab.length - 1]);\r\n return;\r\n }\r\n }\r\n\r\n // Check if URL already in current tab's stack — navigate back.\r\n const tabIsAlreadyOpen: ITab | undefined = this.findTab(this.activeTab, tab.url);\r\n if (tabIsAlreadyOpen) {\r\n this.navigateCurrentTabBack(tabIsAlreadyOpen);\r\n return;\r\n }\r\n\r\n // Inherit title from an existing tab entry with the same URL, if available.\r\n this.inheritTitleIfKnown(tab);\r\n\r\n // Push new entry onto the stack.\r\n let clonedUrl: string | undefined = undefined;\r\n if (tab.clones.length > 0) {\r\n clonedUrl = tab.clones[0];\r\n this.customReuseStrategy.clones[clonedUrl] = tab.url;\r\n }\r\n\r\n this.activeTab.push(tab);\r\n this.displayTitleIndices[this.activeTabIndex] = this.activeTab.length - 1;\r\n this.touched();\r\n\r\n this.navigateTo(tab, clonedUrl);\r\n }\r\n\r\n public navigateCurrentTabBack(tab: ITab): void {\r\n if (!this.activeTab) {\r\n return;\r\n }\r\n\r\n // If another tab is currently showing this URL, focus it instead.\r\n const otherTabIndex: number = this.findTabIndexByCurrentView(tab.url, this.activeTabIndex);\r\n if (otherTabIndex !== -1) {\r\n this.activeTabIndex = otherTabIndex;\r\n this.touched();\r\n const otherTab: ITab[] = this.openTabs[otherTabIndex];\r\n this.navigateTo(otherTab[otherTab.length - 1]);\r\n return;\r\n }\r\n\r\n const lastIndex: number = this.activeTab.lastIndexOf(tab);\r\n if (lastIndex !== -1) {\r\n const removedEntries: ITab[] = this.activeTab.slice(lastIndex + 1);\r\n\r\n this.openTabs[this.activeTabIndex] = this.activeTab.slice(0, lastIndex + 1);\r\n this.touched();\r\n\r\n if (this.displayTitleIndices[this.activeTabIndex] > lastIndex) {\r\n this.displayTitleIndices[this.activeTabIndex] = lastIndex;\r\n this.touched();\r\n }\r\n\r\n // Every open tab keeps its views in the reuse cache, the one it shows or one in its history,\r\n // so a view leaves the cache only once no tab has its URL open. This cleared every removed\r\n // URL unconditionally and could take a view out from under another tab; closeTab and\r\n // replaceCurrentTabSubView already made this check. The history is cut first, so the removed\r\n // entries no longer count as open themselves.\r\n removedEntries.forEach((entry: ITab) => {\r\n if (!this.isUrlOpen(entry.url)) {\r\n this.customReuseStrategy.clearHandle(entry.url);\r\n }\r\n });\r\n }\r\n\r\n this.navigateTo(tab);\r\n }\r\n\r\n public navigateTo(tab: ITab | undefined, clonedUrl?: string): void {\r\n let url: string = tab?.url ?? '/';\r\n if (clonedUrl) {\r\n url = clonedUrl;\r\n }\r\n\r\n this.router.navigate([url], { queryParams: tab?.queryParams }).then((navigated: boolean) => {\r\n this.customReuseStrategy.redirects = {};\r\n\r\n // Clean up clone mapping after successful clone-based navigation.\r\n if (navigated && this.customReuseStrategy.clones[url]) {\r\n delete this.customReuseStrategy.clones[url];\r\n }\r\n\r\n this.applicationRef.tick();\r\n });\r\n }\r\n\r\n public openTab(tab: ITab): void {\r\n // 1. Exact URL match at top-of-stack — focus that tab.\r\n const exactMatchIndex: number = this.findTabIndexByCurrentView(tab.url);\r\n if (exactMatchIndex !== -1) {\r\n this.activeTabIndex = exactMatchIndex;\r\n this.touched();\r\n const currentTab: ITab[] = this.openTabs[exactMatchIndex];\r\n this.navigateTo(currentTab[currentTab.length - 1]);\r\n return;\r\n }\r\n\r\n // 2. Entity match (only when entityBaseUrl is set) — focus that tab, keep current view.\r\n if (tab.entityBaseUrl) {\r\n const entityMatchIndex: number = this.findTabIndexByEntityMatch(tab.entityBaseUrl);\r\n if (entityMatchIndex !== -1) {\r\n this.activeTabIndex = entityMatchIndex;\r\n this.touched();\r\n const existingTab: ITab[] = this.openTabs[entityMatchIndex];\r\n this.navigateTo(existingTab[existingTab.length - 1]);\r\n return;\r\n }\r\n }\r\n\r\n // 3. No match — open a new tab.\r\n this.inheritTitleIfKnown(tab);\r\n this.openTabs.push([tab]);\r\n this.touched();\r\n this.displayTitleIndices.push(0);\r\n this.touched();\r\n this.activeTabIndex = this.openTabs.length - 1;\r\n this.touched();\r\n this.navigateTo(tab);\r\n }\r\n\r\n public replaceCurrentTabSubView(baseUrl: string, tab?: ITab): void {\r\n if (!this.activeTab || this.activeTab.length === 0) {\r\n return;\r\n }\r\n\r\n // Find the anchor entry (the detail view whose URL matches baseUrl).\r\n // Keep all entries up to and including the anchor.\r\n const anchorIndex: number = this.activeTab.findIndex((t: ITab) => t.url === baseUrl);\r\n const keepUntil: number = anchorIndex !== -1 ? anchorIndex + 1 : 1;\r\n\r\n const keptEntries: ITab[] = this.activeTab.slice(0, keepUntil);\r\n const removedEntries: ITab[] = this.activeTab.slice(keepUntil);\r\n\r\n // Update history: keep entries up to anchor, optionally add new sub-view\r\n if (tab) {\r\n // Propagate entityBaseUrl from the anchor so entity matching works on sub-views.\r\n const anchor: ITab | undefined = keptEntries[anchorIndex !== -1 ? anchorIndex : 0];\r\n if (!tab.entityBaseUrl && anchor?.entityBaseUrl) {\r\n tab.entityBaseUrl = anchor.entityBaseUrl;\r\n }\r\n\r\n this.openTabs[this.activeTabIndex] = [...keptEntries, tab];\r\n this.touched();\r\n } else {\r\n this.openTabs[this.activeTabIndex] = keptEntries;\r\n this.touched();\r\n }\r\n\r\n // Clear reuse-strategy handles for removed entries no longer open anywhere\r\n removedEntries.forEach((entry: ITab) => {\r\n if (!this.isUrlOpen(entry.url)) {\r\n this.customReuseStrategy.clearHandle(entry.url);\r\n }\r\n });\r\n\r\n // Navigate to the topmost entry\r\n const current: ITab[] = this.openTabs[this.activeTabIndex];\r\n this.navigateTo(current[current.length - 1]);\r\n }\r\n\r\n public redirectCurrentTab(url: string, updateLocation = true): void {\r\n if (!this.activeTab) {\r\n return;\r\n }\r\n\r\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\r\n\r\n // Update entityBaseUrl if it was pointing to the old URL (e.g., /new → /:id after save).\r\n if (tab.entityBaseUrl === tab.url) {\r\n tab.entityBaseUrl = url;\r\n }\r\n\r\n tab.url = url;\r\n tab.queryParams = {};\r\n\r\n if (updateLocation) {\r\n this.location.replaceState(url);\r\n }\r\n }\r\n\r\n public setRouteRedirect(fromUrl: string, toUrl: string): void {\r\n this.customReuseStrategy.redirects[fromUrl] = toUrl;\r\n }\r\n\r\n public updateActiveTabRootTitle(title: string): void {\r\n if (this.activeTab && this.activeTab.length > 0) {\r\n this.activeTab[0].title = title;\r\n this.touched();\r\n }\r\n }\r\n\r\n public updateTabTitle(url: string, title: string): void {\r\n this.openTabs\r\n .flatMap((tabs: ITab[]) => tabs)\r\n .filter((tab: ITab) => tab.url === url)\r\n .forEach((tab: ITab) => {\r\n tab.title = title;\r\n this.touched();\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n /** Announces that the tab state changed, so views reading it re-render. */\r\n private touched(): void {\r\n this.revision.update((revision: number) => revision + 1);\r\n }\r\n\r\n /**\r\n * The view a tab is showing: the top of its history stack.\r\n *\r\n * Not `activeTabs[index]`, which is the stack's *root* -- the entry the strip takes each tab's\r\n * label from. The two are the same only for a tab nobody has drilled into, which is why\r\n * reaching for the wrong one survives most testing. Undefined for an index with no tab, which\r\n * is what closing the last tab leaves behind.\r\n */\r\n private currentViewOf(index: number): ITab | undefined {\r\n const history: ITab[] | undefined = this.openTabs[index];\r\n\r\n return history?.[history.length - 1];\r\n }\r\n\r\n private findTab(tabs: ITab[], url: string): ITab | undefined {\r\n return tabs.find((tab: ITab) => this.matchTabUrl(tab, url));\r\n }\r\n\r\n private findTabIndex(tabs: ITab[], url: string): number {\r\n return tabs.findIndex((tab: ITab) => this.matchTabUrl(tab, url));\r\n }\r\n\r\n private isTabExists(tabs: ITab[], url: string): boolean {\r\n return tabs.some((tab: ITab) => this.matchTabUrl(tab, url));\r\n }\r\n\r\n private findTabIndexByEntityMatch(entityBaseUrl: string, excludeIndex = -1): number {\r\n return this.openTabs.findIndex((tabStack: ITab[], index: number) => {\r\n if (index === excludeIndex) {\r\n return false;\r\n }\r\n // Only check the current view (top of stack), not the full history.\r\n const currentView: ITab = tabStack[tabStack.length - 1];\r\n return currentView.entityBaseUrl === entityBaseUrl || currentView.url === entityBaseUrl;\r\n });\r\n }\r\n\r\n private findTabIndexByCurrentView(url: string, excludeIndex = -1, includeChildRoutes = false): number {\r\n return this.openTabs.findIndex((tabStack: ITab[], index: number) => {\r\n if (index === excludeIndex) {\r\n return false;\r\n }\r\n const currentView: ITab = tabStack[tabStack.length - 1];\r\n return this.matchTabUrl(currentView, url) || (includeChildRoutes && this.isChildRoute(currentView.url, url));\r\n });\r\n }\r\n\r\n private inheritTitleIfKnown(tab: ITab): void {\r\n if (tab.title || !tab.isTitleLoading) {\r\n return;\r\n }\r\n\r\n const existing: ITab | undefined = this.openTabs\r\n .flatMap((stack: ITab[]) => stack)\r\n .find((entry: ITab) => entry.url === tab.url && !entry.isTitleLoading && !!entry.title);\r\n\r\n if (existing) {\r\n tab.title = existing.title;\r\n this.touched();\r\n tab.isTitleLoading = false;\r\n this.touched();\r\n }\r\n }\r\n\r\n private isChildRoute(currentUrl: string, parentUrl: string): boolean {\r\n return currentUrl.startsWith(parentUrl + '/');\r\n }\r\n\r\n private matchTabUrl(tab: ITab, url: string): boolean {\r\n return tab.url === url || tab.clones.indexOf(url) !== -1;\r\n }\r\n //#endregion\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n InputSignal,\r\n model,\r\n ModelSignal,\r\n OnDestroy,\r\n Signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\r\nimport { IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { map, Observable, of, startWith, Subject, switchMap, take } from 'rxjs';\r\nimport { AuthService } from '../../services';\r\n\r\n/** What the access check knows at a given moment. */\r\ninterface IAccessState {\r\n isLoaded: boolean;\r\n isVisible: boolean;\r\n}\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport class BaseButton extends RibbonGroupChild implements OnDestroy {\r\n //#region ViewChilds, Inputs, Outputs\r\n protected readonly button: Signal<RibbonButtonComponent | undefined> = viewChild(RibbonButtonComponent);\r\n\r\n public readonly allowedActions: InputSignal<string[]> = input<string[]>([]);\r\n\r\n // Models rather than inputs: a subclass writes all three from a constructor, a lifecycle hook\r\n // or a subscription -- the filters button disables itself until its grid has loaded, the\r\n // refresh button drives its own spinner, and the export, save and views buttons build their own\r\n // option lists. A plain field told Angular nothing.\r\n public readonly disabled: ModelSignal<boolean> = model(false);\r\n public readonly loading: ModelSignal<boolean> = model(false);\r\n public readonly options: ModelSignal<IRibbonButtonOption[]> = model<IRibbonButtonOption[]>([]);\r\n\r\n public readonly iconSize: InputSignal<'small' | 'large'> = input<'small' | 'large'>('large');\r\n //#endregion\r\n\r\n //#region Variables\r\n protected authService: AuthService = inject(AuthService);\r\n protected destroy$: Subject<boolean> = new Subject<boolean>();\r\n\r\n /**\r\n * Whether a button is allowed is one question asked of one input, so it is one stream rather\r\n * than two fields written from a subscription. It also runs once: the old setter fired the\r\n * check and the constructor fired it again, before any input had arrived.\r\n *\r\n * While the answer is outstanding the button is visible but not yet loaded, which is what\r\n * `RibbonButtonComponent` already does with an option whose access has not come back.\r\n */\r\n private readonly access: Signal<IAccessState> = toSignal(\r\n toObservable(this.allowedActions).pipe(\r\n switchMap((allowedActions: string[]) => this.checkAccessIsAllowed(allowedActions)),\r\n ),\r\n { initialValue: { isLoaded: true, isVisible: true } },\r\n );\r\n\r\n /**\r\n * The options whose access check has already been sent.\r\n *\r\n * Resolving one replaces that option with a copy carrying the answer, so the list below sees a\r\n * new array and the check runs again over it. The copy has an answer and is skipped; this set\r\n * is what stops an option still in flight from being asked a second time.\r\n */\r\n private readonly requestedOptions: WeakSet<IRibbonButtonOption> = new WeakSet<IRibbonButtonOption>();\r\n //#endregion\r\n\r\n //#region Properties\r\n public readonly isAccessLoaded: Signal<boolean> = computed(() => this.access().isLoaded);\r\n\r\n public override readonly isVisible: Signal<boolean> = computed(() => this.access().isVisible);\r\n\r\n protected get isButtonDisabled(): boolean {\r\n return this.disabled() || !this.isAccessLoaded();\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n /**\r\n * Asks for the access behind every option that declares one and has not been asked yet.\r\n *\r\n * An effect rather than a setter: `options` is written by this component's own subclasses as\r\n * well as bound by a host application, and both have to reach the check.\r\n */\r\n private readonly optionsAccess = effect(() => {\r\n const pendingOptions: IRibbonButtonOption[] = this.options().filter(\r\n (option: IRibbonButtonOption) =>\r\n (option.allowedActions?.length ?? 0) > 0 &&\r\n option.isAccessAllowed === undefined &&\r\n !this.requestedOptions.has(option),\r\n );\r\n\r\n for (const option of pendingOptions) {\r\n this.requestedOptions.add(option);\r\n\r\n this.authService\r\n .checkActionsAreAllowed(option.allowedActions!)\r\n .pipe(take(1))\r\n .subscribe((result: boolean[]) => {\r\n this.setOptionAccess(\r\n option,\r\n result.some((isAllowed: boolean) => isAllowed === true),\r\n );\r\n });\r\n }\r\n });\r\n\r\n public ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public startLoading(): void {\r\n this.button()?.startLoading();\r\n }\r\n\r\n public finishLoading(status: 'failure' | 'warning' | 'success'): void {\r\n this.button()?.finishLoading(status);\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n private checkAccessIsAllowed(allowedActions: string[]): Observable<IAccessState> {\r\n if (allowedActions.length === 0) {\r\n return of<IAccessState>({ isLoaded: true, isVisible: true });\r\n }\r\n\r\n return this.authService.checkActionsAreAllowed(allowedActions).pipe(\r\n take(1),\r\n map((result: boolean[]) => ({\r\n isLoaded: true,\r\n isVisible: result.some((isAllowed: boolean) => isAllowed === true),\r\n })),\r\n startWith<IAccessState>({ isLoaded: false, isVisible: true }),\r\n );\r\n }\r\n\r\n /**\r\n * Replaces one option with a copy carrying its answer, leaving the others as they are.\r\n *\r\n * The list has to be a new array for the ribbon button to see it at all, and the untouched\r\n * options have to keep their identity so the dropdown does not rebuild every row.\r\n */\r\n private setOptionAccess(option: IRibbonButtonOption, isAccessAllowed: boolean): void {\r\n this.options.update((options: IRibbonButtonOption[]) =>\r\n options.map((candidate: IRibbonButtonOption) =>\r\n candidate === option ? { ...candidate, isAccessAllowed } : candidate,\r\n ),\r\n );\r\n }\r\n //#endregion\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { DataProviderService, FormService } from '@zambon-dev/ui/library';\r\nimport { BaseButton } from './base-button';\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class BaseFormViewButton extends BaseButton {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n protected dataProviderService!: DataProviderService<any>;\r\n protected formService!: FormService;\r\n //#endregion\r\n\r\n //#region Properties\r\n protected override get isButtonDisabled(): boolean {\r\n return super.isButtonDisabled || this.formService.loading;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.dataProviderService = inject(DataProviderService<any>);\r\n this.formService = inject(FormService);\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\nexport abstract class BackendFormValidationHelper {\r\n public static validateAllFormFields(httpErrorResponse: HttpErrorResponse, formGroup: FormGroup) {\r\n if (!httpErrorResponse || !formGroup) {\r\n return;\r\n }\r\n\r\n // Error 400 = Validation issues\r\n if (httpErrorResponse.status === 400 && httpErrorResponse.error && httpErrorResponse.error.errors) {\r\n const controls: string[] = Object.keys(formGroup.controls);\r\n const validationErrors: { [id: string]: string[] } = <{ [id: string]: string[] }>httpErrorResponse.error.errors;\r\n\r\n Object.keys(validationErrors).forEach((fieldName: string) => {\r\n setTimeout(() => {\r\n const controlName: string | undefined = controls.find(\r\n (controlName: string) => controlName.toLocaleLowerCase() === fieldName.toLocaleLowerCase(),\r\n );\r\n if (!controlName || !formGroup.get(controlName)) {\r\n return;\r\n }\r\n\r\n formGroup.get(controlName)!.setErrors({ [validationErrors[fieldName][0]]: true });\r\n formGroup.get(controlName)!.markAsTouched();\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","import { ActivatedRouteSnapshot, UrlSegment } from '@angular/router';\r\n\r\nexport abstract class RouteHelper {\r\n public static getRouteByData(\r\n routeSnapshot: ActivatedRouteSnapshot | null,\r\n key: string,\r\n value: any,\r\n ): ActivatedRouteSnapshot | null {\r\n if (!routeSnapshot) {\r\n return null;\r\n }\r\n return routeSnapshot.data[key] === value\r\n ? routeSnapshot\r\n : this.getRouteByData(routeSnapshot.firstChild, key, value);\r\n }\r\n\r\n public static getRouteWithComponent(\r\n routeSnapshot: ActivatedRouteSnapshot | null,\r\n component: any,\r\n ): ActivatedRouteSnapshot | null {\r\n if (!routeSnapshot) {\r\n return null;\r\n }\r\n return routeSnapshot.component === component\r\n ? routeSnapshot\r\n : this.getRouteWithComponent(routeSnapshot.firstChild, component);\r\n }\r\n\r\n public static getRouteURL(route: ActivatedRouteSnapshot, rootLevel = false): string {\r\n let segments: string[] = [];\r\n\r\n const buildRoute: (route: ActivatedRouteSnapshot | null) => void = (route: ActivatedRouteSnapshot | null): void => {\r\n if (route) {\r\n if (route.url.length) {\r\n segments.push(...route.url.map((segment: UrlSegment) => segment.path));\r\n }\r\n buildRoute(rootLevel ? route.firstChild : route.parent);\r\n }\r\n };\r\n\r\n buildRoute(route);\r\n\r\n if (!rootLevel) {\r\n segments = segments.reverse();\r\n }\r\n\r\n return `/${segments.join('/')}`;\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { Component, computed, inject, input, InputSignal, model, ModelSignal, Signal, viewChild } from '@angular/core';\r\nimport { ControlContainer, FormGroup } from '@angular/forms';\r\nimport { FormService, IModal, ModalComponent, ModalSize } from '@zambon-dev/ui/library';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { BackendFormValidationHelper } from '../../../helpers';\r\n\r\n@Component({\r\n selector: 'framework-confirm-modal',\r\n templateUrl: './confirm-modal.component.html',\r\n styleUrls: ['./confirm-modal.component.scss'],\r\n imports: [ModalComponent, NgClass, TranslatePipe],\r\n})\r\nexport class ConfirmModalComponent implements IModal {\r\n //#region ViewChilds, Inputs, Outputs\r\n private readonly modal: Signal<ModalComponent | undefined> = viewChild(ModalComponent);\r\n\r\n // Models rather than inputs: this component writes both while confirming, from callbacks a\r\n // parent owns. As plain fields they landed with nothing marking this view dirty.\r\n public readonly errorMessage: ModelSignal<string> = model('');\r\n public readonly isLoading: ModelSignal<boolean> = model(false);\r\n\r\n public readonly message: InputSignal<string> = input('');\r\n public readonly messageIcon: InputSignal<string> = input('fa-regular fa-circle-question');\r\n public readonly messageIconColor: InputSignal<string> = input('text-cyan-500');\r\n public readonly showMessageIcon: InputSignal<boolean> = input(true);\r\n public readonly size: InputSignal<ModalSize> = input<ModalSize>('xl');\r\n public readonly title: InputSignal<string> = input('');\r\n //#endregion\r\n\r\n //#region Variables\r\n\r\n protected formService: FormService | undefined = inject(FormService, { optional: true }) ?? undefined;\r\n //#endregion\r\n\r\n //#region Properties\r\n /**\r\n * Delegates to the inner modal. A signal view query, not @ViewChild: a computed reading a plain\r\n * query would never re-run when the query resolves, so the wrapper would answer against an\r\n * undefined child for ever.\r\n */\r\n public readonly isOpen: Signal<boolean> = computed(() => this.modal()?.isOpen() ?? false);\r\n\r\n protected get hasErrorMessage(): boolean {\r\n return !!this.errorMessage() && this.errorMessage().length > 0;\r\n }\r\n\r\n protected get hasMessage(): boolean {\r\n return !!this.message() && this.message().length > 0;\r\n }\r\n\r\n private controlContainer: ControlContainer | null = inject(ControlContainer, { optional: true });\r\n\r\n private get formGroup(): FormGroup | null {\r\n return (this.controlContainer?.control as FormGroup) ?? null;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public beginLoading(): void {\r\n this.clearErrorMessage();\r\n this.isLoading.set(true);\r\n }\r\n\r\n public clearErrorMessage(): void {\r\n this.errorMessage.set('');\r\n }\r\n\r\n public closeModal(): void {\r\n this.modal()?.closeModal();\r\n }\r\n\r\n public finishLoading(closeModal?: boolean): void {\r\n this.isLoading.set(false);\r\n\r\n if (this.formGroup && this.formGroup.disabled) {\r\n this.formGroup.enable();\r\n }\r\n\r\n if (closeModal) {\r\n this.closeModal();\r\n }\r\n }\r\n\r\n public setErrorMessage(httpErrorResponse: HttpErrorResponse): void {\r\n this.finishLoading();\r\n\r\n if (httpErrorResponse.status === 400 && !!this.formGroup) {\r\n BackendFormValidationHelper.validateAllFormFields(httpErrorResponse, this.formGroup);\r\n } else {\r\n if (typeof httpErrorResponse.error === 'string') {\r\n this.errorMessage.set(httpErrorResponse.error);\r\n } else {\r\n this.errorMessage.set('Modal-Failed-DefaultMessage');\r\n }\r\n }\r\n }\r\n\r\n public toggleModal(): void {\r\n if (!!this.formService && this.formService.loading) {\r\n return;\r\n }\r\n\r\n if (this.formGroup) {\r\n // TODO: TEST THIS CHANGE\r\n this.formGroup.reset();\r\n this.formService?.resetForm();\r\n }\r\n\r\n this.clearErrorMessage();\r\n this.modal()?.toggleModal();\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","<lib-modal\r\n position=\"top\"\r\n [closeButtonText]=\"'Button-Modal-Cancel' | translate\"\r\n [size]=\"size()\"\r\n [title]=\"title() | translate\"\r\n>\r\n <div body>\r\n @if (hasMessage) {\r\n <div class=\"message\">\r\n @if (showMessageIcon()) {\r\n <i class=\"fa-3x\" [ngClass]=\"[messageIcon(), messageIconColor()]\"></i>\r\n }\r\n <h4 [innerHTML]=\"message() | translate\"></h4>\r\n </div>\r\n }\r\n\r\n <ng-content></ng-content>\r\n\r\n @if (hasErrorMessage) {\r\n <div class=\"erro\">\r\n <h4>{{ errorMessage() | translate }}</h4>\r\n <span>{{ 'Modal-Failed-Administrator' | translate }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div footer>\r\n <ng-content select=\"[footer]\"></ng-content>\r\n </div>\r\n</lib-modal>\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n Component,\r\n computed,\r\n input,\r\n InputSignal,\r\n model,\r\n ModelSignal,\r\n output,\r\n OutputEmitterRef,\r\n Signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ModalComponent, ModalSize } from '@zambon-dev/ui/library';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'framework-error-modal',\r\n templateUrl: './error-modal.component.html',\r\n styleUrls: ['./error-modal.component.scss'],\r\n imports: [ModalComponent, TranslatePipe],\r\n})\r\nexport class ErrorModalComponent {\r\n //#region ViewChilds, Inputs, Outputs\r\n private readonly modal: Signal<ModalComponent | undefined> = viewChild(ModalComponent);\r\n\r\n // A model rather than an input: showModal() writes it, and a parent calls that from its own\r\n // subscription. As a plain field the message landed with nothing marking this view dirty.\r\n public readonly errorMessage: ModelSignal<string> = model('');\r\n\r\n public readonly size: InputSignal<ModalSize> = input<ModalSize>('xl');\r\n // Models too: DefaultDetailsTabViewComponent sets both before showing the modal, so that a 404\r\n // reads as \"record not found\" rather than as a server error.\r\n public readonly subtitle: ModelSignal<string> = model('Modal-Failed-Administrator');\r\n public readonly title: ModelSignal<string> = model('Modal-Failed-Title');\r\n\r\n public readonly closed: OutputEmitterRef<void> = output<void>();\r\n //#endregion\r\n\r\n //#region Variables\r\n //#endregion\r\n\r\n //#region Properties\r\n /**\r\n * Delegates to the inner modal. A signal view query, not @ViewChild: a computed reading a plain\r\n * query would never re-run when the query resolves, so the wrapper would answer against an\r\n * undefined child for ever.\r\n */\r\n public readonly isOpen: Signal<boolean> = computed(() => this.modal()?.isOpen() ?? false);\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public closeModal(): void {\r\n this.modal()?.closeModal();\r\n }\r\n\r\n public showModal(error: string | HttpErrorResponse): void {\r\n let errorMessage = 'Modal-Failed-DefaultMessage';\r\n if (typeof error === 'string') {\r\n errorMessage = error;\r\n } else if (typeof error.error === 'string') {\r\n errorMessage = error.error;\r\n }\r\n this.errorMessage.set(errorMessage);\r\n this.modal()?.toggleModal();\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","<lib-modal\r\n position=\"top\"\r\n [closeButtonText]=\"'Button-Modal-Close' | translate\"\r\n [size]=\"size()\"\r\n [title]=\"title() | translate\"\r\n (closed)=\"closed.emit()\"\r\n>\r\n <div body>\r\n <div class=\"erro\">\r\n <h4>{{ errorMessage() | translate }}</h4>\r\n @if (subtitle()) {\r\n <span>{{ subtitle() | translate }}</span>\r\n }\r\n </div>\r\n </div>\r\n</lib-modal>\r\n","import { NgModule } from '@angular/core';\r\nimport { ConfirmModalComponent } from './confirm-modal/confirm-modal.component';\r\nimport { ErrorModalComponent } from './error-modal/error-modal.component';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [ConfirmModalComponent, ErrorModalComponent],\r\n exports: [ConfirmModalComponent, ErrorModalComponent],\r\n})\r\n/**\r\n * @deprecated Use standalone component imports instead of FrameworkModalsModule.\r\n * Import individual components directly in your component's `imports` array.\r\n */\r\nexport class FrameworkModalsModule {}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Component, forwardRef, inject, input, InputSignal, Signal, viewChild } from '@angular/core';\r\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { Observable, take } from 'rxjs';\r\nimport { ConfirmModalComponent } from '../../modals';\r\nimport { BaseButton } from '../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-confirm',\r\n templateUrl: './button-confirm.component.html',\r\n imports: [ConfirmModalComponent, RibbonButtonComponent, TranslatePipe],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonConfirmComponent) }],\r\n})\r\nexport class ButtonConfirmComponent extends BaseButton {\r\n //#region ViewChilds, Inputs, Outputs\r\n private readonly confirmModal: Signal<ConfirmModalComponent | undefined> = viewChild(ConfirmModalComponent);\r\n\r\n public readonly action: InputSignal<Observable<any>> = input.required<Observable<any>>();\r\n public readonly color: InputSignal<string> = input('text-primary-500');\r\n public readonly icon: InputSignal<string> = input('');\r\n public readonly label: InputSignal<string> = input('');\r\n public readonly modalConfirmButtonColor: InputSignal<string> = input('');\r\n public readonly modalConfirmButtonLabel: InputSignal<string> = input('');\r\n public readonly modalMessage: InputSignal<string> = input('');\r\n public readonly modalMessageIcon: InputSignal<string> = input('fa-solid fa-circle-question');\r\n public readonly modalMessageIconColor: InputSignal<string> = input('');\r\n public readonly modalTitle: InputSignal<string> = input('');\r\n //#endregion\r\n\r\n //#region Variables\r\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.disabled.set(true);\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onButtonClicked(): void {\r\n this.confirmModal()?.toggleModal();\r\n }\r\n\r\n protected onDelete(): void {\r\n const confirmModal: ConfirmModalComponent | undefined = this.confirmModal();\r\n if (!confirmModal || confirmModal.isLoading() || !confirmModal.isOpen()) {\r\n return;\r\n }\r\n\r\n confirmModal.beginLoading();\r\n\r\n this.action()\r\n .pipe(take(1))\r\n .subscribe({\r\n next: () => {\r\n this.finishLoading('success');\r\n confirmModal.finishLoading(true);\r\n this.gridDataset.refresh();\r\n },\r\n error: (e: HttpErrorResponse) => {\r\n confirmModal.setErrorMessage(e);\r\n },\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","@if (isVisible()) {\r\n <lib-ribbon-button\r\n [color]=\"color()\"\r\n [disabled]=\"disabled()\"\r\n [icon]=\"icon()\"\r\n [label]=\"label()\"\r\n [loading]=\"loading()\"\r\n (action)=\"onButtonClicked()\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n\r\n<framework-confirm-modal\r\n #modal\r\n [message]=\"modalMessage()\"\r\n [messageIcon]=\"modalMessageIcon()\"\r\n [messageIconColor]=\"modalMessageIconColor()\"\r\n [title]=\"modalTitle()\"\r\n>\r\n <div footer>\r\n <button\r\n class=\"btn {{ modalConfirmButtonColor() }}\"\r\n type=\"button\"\r\n [class.loading]=\"modal.isLoading()\"\r\n (click)=\"onDelete()\"\r\n >\r\n {{ modalConfirmButtonLabel() | translate }}\r\n </button>\r\n </div>\r\n</framework-confirm-modal>\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Component, forwardRef, inject, input, InputSignal, Signal, viewChild } from '@angular/core';\r\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { Observable, take } from 'rxjs';\r\nimport { ConfirmModalComponent } from '../../modals';\r\nimport { BaseButton } from '../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-delete',\r\n templateUrl: './button-delete.component.html',\r\n imports: [ConfirmModalComponent, RibbonButtonComponent, TranslatePipe],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonDeleteComponent) }],\r\n})\r\nexport class ButtonDeleteComponent extends BaseButton {\r\n //#region ViewChilds, Inputs, Outputs\r\n private readonly confirmModal: Signal<ConfirmModalComponent | undefined> = viewChild(ConfirmModalComponent);\r\n\r\n public readonly action: InputSignal<Observable<any>> = input.required<Observable<any>>();\r\n public readonly label: InputSignal<string> = input('Button-Delete');\r\n public readonly modalConfirmButtonLabel: InputSignal<string> = input('Modal-Delete-Confirm');\r\n public readonly modalMessage: InputSignal<string> = input('Modal-Delete-Message');\r\n public readonly modalTitle: InputSignal<string> = input('Modal-Delete-Title');\r\n //#endregion\r\n\r\n //#region Variables\r\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.disabled.set(true);\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onButtonClicked(): void {\r\n this.confirmModal()?.toggleModal();\r\n }\r\n\r\n protected onDelete(): void {\r\n const confirmModal: ConfirmModalComponent | undefined = this.confirmModal();\r\n if (!confirmModal || confirmModal.isLoading() || !confirmModal.isOpen()) {\r\n return;\r\n }\r\n\r\n confirmModal.beginLoading();\r\n\r\n this.action()\r\n .pipe(take(1))\r\n .subscribe({\r\n next: () => {\r\n this.finishLoading('success');\r\n confirmModal.finishLoading(true);\r\n this.gridDataset.refresh();\r\n },\r\n error: (e: HttpErrorResponse) => {\r\n confirmModal.setErrorMessage(e);\r\n },\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","@if (isVisible()) {\r\n <lib-ribbon-button\r\n color=\"text-red-500\"\r\n icon=\"fa-trash-alt\"\r\n [disabled]=\"disabled()\"\r\n [label]=\"label()\"\r\n [loading]=\"loading()\"\r\n (action)=\"onButtonClicked()\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n\r\n<framework-confirm-modal\r\n #modal\r\n messageIcon=\"fa-solid fa-circle-exclamation\"\r\n messageIconColor=\"text-red-500\"\r\n [message]=\"modalMessage()\"\r\n [title]=\"modalTitle()\"\r\n>\r\n <div footer>\r\n <button class=\"btn red-500\" type=\"button\" [class.loading]=\"modal.isLoading()\" (click)=\"onDelete()\">\r\n {{ modalConfirmButtonLabel() | translate }}\r\n </button>\r\n </div>\r\n</framework-confirm-modal>\r\n","import { Component, forwardRef, inject, input, InputSignal, OnInit, signal, WritableSignal } from '@angular/core';\r\nimport { DataProviderService, FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { takeUntil } from 'rxjs';\r\nimport { ModalBase } from '../../../views/modals/modal-base';\r\nimport { BaseButton } from '../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-edit',\r\n templateUrl: './button-edit.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonEditComponent) }],\r\n})\r\nexport class ButtonEditComponent extends BaseButton implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n public readonly cancelColor: InputSignal<string> = input('text-red-500');\r\n public readonly cancelIcon: InputSignal<string> = input('fa-ban');\r\n public readonly cancelLabel: InputSignal<string> = input('Button-Cancel-Edit');\r\n public readonly editIcon: InputSignal<string> = input('fa-edit');\r\n public readonly editLabel: InputSignal<string> = input('Button-Edit');\r\n public readonly modal: InputSignal<ModalBase | undefined> = input<ModalBase>();\r\n //#endregion\r\n\r\n //#region Variables\r\n // A signal rather than a field: the form cancelling an edit flips this from a subscription,\r\n // which swaps Edit back in for Cancel.\r\n protected readonly isButtonCancelVisible: WritableSignal<boolean> = signal(false);\r\n\r\n private dataProviderService: DataProviderService<any> = inject(DataProviderService);\r\n private formService: FormService = inject(FormService);\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get hasDataProviderEntityID(): boolean {\r\n return this.dataProviderService?.hasEntityID ?? false;\r\n }\r\n\r\n protected get isFormLoading(): boolean {\r\n return this.formService.loading;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n\r\n public ngOnInit(): void {\r\n this.formService.editCanceled.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.isButtonCancelVisible.set(false);\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onCancelClicked(): void {\r\n if (this.isButtonCancelVisible()) {\r\n this.isButtonCancelVisible.set(false);\r\n this.formService.cancelEdit();\r\n }\r\n }\r\n\r\n protected onEditClicked(): void {\r\n const modal: ModalBase | undefined = this.modal();\r\n if (modal) {\r\n modal.toggle();\r\n } else {\r\n this.isButtonCancelVisible.set(true);\r\n this.formService.beginEdit();\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","@if (isVisible() && !isButtonCancelVisible() && hasDataProviderEntityID) {\r\n <lib-ribbon-button\r\n [disabled]=\"disabled() || !isAccessLoaded() || isFormLoading\"\r\n [icon]=\"editIcon()\"\r\n [iconSize]=\"iconSize()\"\r\n [label]=\"editLabel()\"\r\n [loading]=\"loading()\"\r\n (action)=\"onEditClicked()\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n@if (isVisible() && isButtonCancelVisible() && hasDataProviderEntityID) {\r\n <lib-ribbon-button\r\n [color]=\"cancelColor()\"\r\n [disabled]=\"disabled() || !isAccessLoaded() || isFormLoading\"\r\n [icon]=\"cancelIcon()\"\r\n [label]=\"cancelLabel()\"\r\n [loading]=\"loading()\"\r\n (action)=\"onCancelClicked()\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n","import { HttpErrorResponse, HttpResponse } from '@angular/common/http';\r\nimport { Component, forwardRef, inject, input, InputSignal } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { DataGridDataset, IListParameters, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { take } from 'rxjs';\r\nimport { BaseButton } from '../base-button';\r\n\r\nexport type ExportFormat = 'xlsx' | 'pdf' | 'csv' | 'xml' | 'mhtml';\r\n\r\nexport const MaxExportRows = 50000;\r\n\r\n@Component({\r\n selector: 'framework-button-export',\r\n templateUrl: './button-export.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonExportComponent) }],\r\n})\r\nexport class ButtonExportComponent extends BaseButton {\r\n //#region ViewChilds, Inputs, Outputs\r\n /**\r\n * Index into `options` exported when the main button is clicked, defaulting to Excel.\r\n * `RibbonButtonComponent` treats -1 as \"no default\" and merely toggles the dropdown, which left\r\n * Export needing two clicks for the common case while Save (which sets 0) needed one. Set -1 to\r\n * restore the dropdown-only behaviour.\r\n */\r\n public readonly defaultOption: InputSignal<number> = input(0);\r\n public readonly fileBaseName: InputSignal<string> = input('export');\r\n //#endregion\r\n\r\n //#region Variables\r\n private dataGridDataset: DataGridDataset | null = inject(DataGridDataset, { optional: true });\r\n private translateService: TranslateService = inject(TranslateService);\r\n //#endregion\r\n\r\n //#region Properties\r\n protected override get isButtonDisabled(): boolean {\r\n return super.isButtonDisabled || this.isExceedingExportLimit;\r\n }\r\n\r\n protected get tooltip(): string {\r\n if (this.isExceedingExportLimit) {\r\n return this.translateService.instant('Button-Export-LimitExceeded', { max: MaxExportRows });\r\n }\r\n return '';\r\n }\r\n\r\n private get isExceedingExportLimit(): boolean {\r\n const totalRows: number | undefined = this.dataGridDataset?.totalRows;\r\n return totalRows !== undefined && totalRows > MaxExportRows;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.options.set([\r\n { id: 'xlsx', label: 'Button-Export-Excel', icon: 'fa-file-excel' },\r\n { id: 'pdf', label: 'Button-Export-PDF', icon: 'fa-file-pdf' },\r\n { id: 'csv', label: 'Button-Export-CSV', icon: 'fa-file-csv' },\r\n { id: 'xml', label: 'Button-Export-XML', icon: 'fa-file-code' },\r\n { id: 'mhtml', label: 'Button-Export-MHTML', icon: 'fa-file-archive' },\r\n ]);\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onButtonClicked(format?: string): void {\r\n if (!this.dataGridDataset) {\r\n return;\r\n }\r\n\r\n const resolvedFormat: ExportFormat = (format as ExportFormat) ?? 'xlsx';\r\n\r\n this.startLoading();\r\n\r\n const parameters: IListParameters = {\r\n endRow: 0,\r\n filters: this.dataGridDataset.filters,\r\n startRow: 0,\r\n };\r\n\r\n this.dataGridDataset\r\n .export(resolvedFormat, parameters)\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (response: HttpResponse<Blob>) => {\r\n this.download(response);\r\n this.finishLoading('success');\r\n },\r\n error: (_: HttpErrorResponse) => {\r\n this.finishLoading('failure');\r\n },\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n private download(response: HttpResponse<Blob>): void {\r\n if (!response.body) {\r\n return;\r\n }\r\n\r\n const contentDisposition: string = response.headers.get('Content-Disposition') ?? '';\r\n const match: RegExpExecArray | null = /filename\\*?=(?:UTF-8'')?\"?([^\";]+)\"?/i.exec(contentDisposition);\r\n const fileName: string = match ? decodeURIComponent(match[1]) : this.fileBaseName();\r\n\r\n const url: string = URL.createObjectURL(response.body);\r\n const anchor: HTMLAnchorElement = document.createElement('a');\r\n anchor.href = url;\r\n anchor.download = fileName;\r\n anchor.click();\r\n URL.revokeObjectURL(url);\r\n }\r\n //#endregion\r\n}\r\n","@if (isVisible()) {\r\n <lib-ribbon-button\r\n label=\"Button-Export\"\r\n icon=\"fa-file-export\"\r\n [defaultOption]=\"defaultOption()\"\r\n [disabled]=\"isButtonDisabled\"\r\n [loading]=\"loading()\"\r\n [iconSize]=\"iconSize()\"\r\n [options]=\"options()\"\r\n [tooltip]=\"tooltip\"\r\n (action)=\"onButtonClicked($event)\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n","import {\r\n Component,\r\n forwardRef,\r\n inject,\r\n input,\r\n InputSignal,\r\n OnInit,\r\n signal,\r\n Signal,\r\n viewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { FormGroupDirective } from '@angular/forms';\r\nimport {\r\n DataGridDataset,\r\n DisplayControls,\r\n FormService,\r\n ModalComponent,\r\n ModalSize,\r\n RibbonButtonComponent,\r\n RibbonGroupChild,\r\n} from '@zambon-dev/ui/library';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { takeUntil } from 'rxjs';\r\nimport { BaseButton } from '../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-filters',\r\n templateUrl: './button-filters.component.html',\r\n styleUrls: ['./button-filters.component.scss'],\r\n imports: [ModalComponent, RibbonButtonComponent, TranslatePipe],\r\n providers: [FormService, { provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonFiltersComponent) }],\r\n})\r\nexport class ButtonFiltersComponent extends BaseButton implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n public readonly modal: Signal<ModalComponent | undefined> = viewChild(ModalComponent);\r\n\r\n public readonly modalSize: InputSignal<ModalSize> = input<ModalSize>('xl');\r\n public readonly modalTitle: InputSignal<string> = input('');\r\n public readonly validateFormFunction: InputSignal<(() => void) | undefined> = input<() => void>();\r\n //#endregion\r\n\r\n //#region Variables\r\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\r\n protected readonly formGroup: FormGroupDirective = inject(FormGroupDirective);\r\n\r\n // A signal rather than a field: submitting or clearing the filters changes which buttons the\r\n // ribbon shows, and both happen from a click handler deep inside the modal.\r\n private readonly filters: WritableSignal<{ [key: string]: string }> = signal({});\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get hasFiltersApplied(): boolean {\r\n return Object.keys(this.filters()).length > 0;\r\n }\r\n\r\n protected get singleColumn(): boolean {\r\n const modalSize: ModalSize = this.modalSize();\r\n return modalSize === 'sm' || modalSize === 'md' || modalSize === 'lg' || modalSize === 'xl';\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n // This will force the screen to initialize with the filter disabled.\r\n this.disabled.set(true);\r\n }\r\n\r\n public ngOnInit(): void {\r\n // The constructor disables the button and the two subscriptions below are what re-enable it,\r\n // which is right only for a button that exists before its grid first loads. A ribbon template\r\n // is re-created whenever a record's views are switched, so a button built then arrives at a\r\n // grid that finished loading long ago, waits for an event that has already passed, and stays\r\n // unclickable until something makes the grid load again. The dataset knows either way.\r\n this.disabled.set(this.gridDataset.isLoading || !this.gridDataset.hasBeenLoaded);\r\n\r\n this.gridDataset.loadStarted.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.disabled.set(true);\r\n this.finishLoadingIfStarted();\r\n });\r\n\r\n this.gridDataset.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.disabled.set(false);\r\n this.finishLoadingIfStarted();\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onFiltersButtonClicked(): void {\r\n this.modal()?.toggleModal();\r\n this.formGroup.form.reset();\r\n this.formGroup.form.patchValue(this.filters(), { emitEvent: false });\r\n }\r\n\r\n protected onFiltersSubmitClicked(): void {\r\n const validateFormFunction: (() => void) | undefined = this.validateFormFunction();\r\n if (validateFormFunction) {\r\n validateFormFunction();\r\n }\r\n\r\n if (this.formGroup.form.valid) {\r\n this.startLoading();\r\n this.modal()?.toggleModal();\r\n\r\n const formValue: any = this.formGroup.form.getRawValue();\r\n const formFilters: { [key: string]: any } = Object.fromEntries(\r\n Object.entries(formValue).filter(([_, v]) => (!!v && v !== '') || v === 0),\r\n );\r\n\r\n this.setFilters(formFilters);\r\n }\r\n }\r\n\r\n protected onResetButtonClicked(): void {\r\n this.startLoading();\r\n\r\n this.formGroup.form.reset();\r\n this.filters.set({});\r\n\r\n this.gridDataset.setFilters();\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n public setFilters(filters: { [key: string]: any }): void {\r\n // Kept whole, because reopening the modal patches this straight back into the form and a\r\n // catalog select backed by a search endpoint cannot recover its label from the identifier --\r\n // it only resolves a display from a local entries list. Dropping the labels here would leave\r\n // the field showing a selection with no text.\r\n this.filters.set(filters);\r\n\r\n if (this.hasFiltersApplied) {\r\n this.gridDataset.setFilters(this.withoutDisplayControls(filters));\r\n } else {\r\n this.gridDataset.setFilters();\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n private finishLoadingIfStarted(): void {\r\n if (this.button()?.loading()) {\r\n this.finishLoading('success');\r\n }\r\n }\r\n\r\n /**\r\n * Drops the controls that only hold a catalog selection's label.\r\n *\r\n * They are half of how `lib-catalog-select` works and are created by it, so a screen never asked\r\n * for them and a backend has no filter behind them. Sent anyway they are dead weight, and worse:\r\n * the day a service does filter by a name, it would receive the formatted label rather than the\r\n * stored value and quietly match nothing.\r\n *\r\n * @param filters The filters as submitted.\r\n * @returns The filters a backend should receive.\r\n */\r\n private withoutDisplayControls(filters: { [key: string]: string }): { [key: string]: string } {\r\n return Object.fromEntries(\r\n Object.entries(filters).filter(\r\n ([key]: [string, string]) => !DisplayControls.isDisplayControl(this.formGroup.form.get(key)),\r\n ),\r\n );\r\n }\r\n //#endregion\r\n}\r\n","<lib-ribbon-button\r\n [color]=\"hasFiltersApplied ? 'text-amber-500' : 'text-primary-500'\"\r\n [disabled]=\"disabled()\"\r\n [icon]=\"'fa-filter'\"\r\n [iconSize]=\"iconSize()\"\r\n [label]=\"'Button-Filters'\"\r\n [loading]=\"loading()\"\r\n (action)=\"onFiltersButtonClicked()\"\r\n>\r\n</lib-ribbon-button>\r\n\r\n@if (hasFiltersApplied) {\r\n <lib-ribbon-button\r\n [color]=\"'text-red-500'\"\r\n [disabled]=\"disabled()\"\r\n [icon]=\"'fa-broom'\"\r\n [iconSize]=\"iconSize()\"\r\n [label]=\"'Button-Filters-Clear'\"\r\n [loading]=\"loading()\"\r\n (action)=\"onResetButtonClicked()\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n\r\n<lib-modal\r\n position=\"top\"\r\n [size]=\"modalSize()\"\r\n [title]=\"modalTitle() | translate\"\r\n [closeButtonText]=\"'Button-Modal-Cancel' | translate\"\r\n>\r\n <ng-container body>\r\n <ng-content></ng-content>\r\n </ng-container>\r\n <div footer>\r\n <button type=\"submit\" class=\"btn blue-500\" (click)=\"onFiltersSubmitClicked()\">\r\n {{ 'Button-Filters-Modal-Confirm' | translate }}\r\n </button>\r\n </div>\r\n</lib-modal>\r\n","/**\r\n * Key used in Angular route `data` to identify the framework tab view type.\r\n *\r\n * Usage in route config:\r\n * ```ts\r\n * {\r\n * path: ':id',\r\n * component: MyDetailsViewComponent,\r\n * data: { [FRAMEWORK_VIEW_TYPE]: FrameworkViewType.Details, ... },\r\n * }\r\n * ```\r\n */\r\nexport const FRAMEWORK_VIEW_TYPE = 'frameworkViewType';\r\n\r\n/**\r\n * Values for the {@link FRAMEWORK_VIEW_TYPE} route data key.\r\n */\r\nexport enum FrameworkViewType {\r\n /** A details/edit view with data provider and sub-views (breadcrumbs, save, etc.). */\r\n Details = 'details',\r\n /** A list/grid view (no data provider, no sub-views). */\r\n List = 'list',\r\n}\r\n","export interface ITab {\r\n clones: string[];\r\n entityBaseUrl?: string;\r\n isTitleLoading: boolean;\r\n queryParams?: { [key: string]: string };\r\n title?: string;\r\n url: string;\r\n}\r\n\r\nexport class Tab implements ITab {\r\n private _title?: string | undefined;\r\n\r\n public clones: string[] = [];\r\n\r\n public entityBaseUrl?: string;\r\n\r\n public isTitleLoading = true;\r\n\r\n public queryParams?: { [key: string]: string };\r\n\r\n public get title(): string | undefined {\r\n return this._title;\r\n }\r\n public set title(value: string | undefined) {\r\n if (this._title !== value) {\r\n this._title = value;\r\n\r\n if (value) {\r\n this.isTitleLoading = false;\r\n }\r\n }\r\n }\r\n\r\n public url = '';\r\n\r\n constructor(init?: Partial<Tab>) {\r\n Object.assign(this, init);\r\n }\r\n}\r\n","import { Component, forwardRef, inject, input, InputSignal } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\r\nimport {\r\n DataProviderService,\r\n IRibbonButtonOption,\r\n RibbonButtonComponent,\r\n RibbonGroupChild,\r\n} from '@zambon-dev/ui/library';\r\nimport { RouteHelper } from '../../../helpers';\r\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\r\nimport { TabService } from '../../../services';\r\nimport { BaseButton } from '../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-new',\r\n templateUrl: './button-new.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonNewComponent) }],\r\n})\r\nexport class ButtonNewComponent extends BaseButton {\r\n //#region ViewChilds, Inputs, Outputs\r\n public readonly endpoint: InputSignal<string> = input('new');\r\n public readonly parameters: InputSignal<{ [key: string]: string } | undefined> = input<{ [key: string]: string }>();\r\n public readonly path: InputSignal<string | undefined> = input<string>();\r\n //#endregion\r\n\r\n //#region Variables\r\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\r\n private router: Router = inject(Router);\r\n private tabService: TabService = inject(TabService);\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get hasDataProvider(): boolean {\r\n return !!this.dataProviderService;\r\n }\r\n\r\n protected get hasDataProviderEntityID(): boolean {\r\n return this.dataProviderService?.hasEntityID ?? false;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onButtonClicked(optionId?: string): void {\r\n let option: IRibbonButtonOption | undefined = undefined;\r\n if (optionId) {\r\n option = this.options().find((o) => o.id === optionId);\r\n }\r\n\r\n let path: string | undefined = this.path();\r\n if (option && option.path && option.path.length > 0) {\r\n path = option.path ?? optionId;\r\n }\r\n\r\n let queryParameters: { [key: string]: string } | undefined = this.parameters();\r\n if (option && option.parameters && Object.keys(option.parameters).length > 0) {\r\n queryParameters = { ...queryParameters, ...option.parameters };\r\n }\r\n\r\n // Try to find the route with ':id' parameters; fall back to the current route.\r\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\r\n this.router.routerState.root.snapshot,\r\n FRAMEWORK_VIEW_TYPE,\r\n FrameworkViewType.Details,\r\n );\r\n let url: string = targetRoute\r\n ? RouteHelper.getRouteURL(targetRoute.parent!)\r\n : RouteHelper.getRouteURL(this.router.routerState.root.snapshot, true);\r\n\r\n if (path && path.length > 0) {\r\n url += `/${path}`;\r\n }\r\n\r\n const entityUrl = `${url}/${this.endpoint()}`;\r\n const tab: ITab = new Tab({\r\n entityBaseUrl: entityUrl,\r\n queryParams: queryParameters,\r\n url: entityUrl,\r\n });\r\n\r\n this.tabService.navigateCurrentTab(tab);\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","@if (isVisible() && (!hasDataProvider || hasDataProviderEntityID)) {\r\n <lib-ribbon-button\r\n icon=\"fa-plus\"\r\n label=\"Button-New\"\r\n [disabled]=\"disabled() || !isAccessLoaded()\"\r\n [loading]=\"loading()\"\r\n [options]=\"options()\"\r\n (action)=\"onButtonClicked($event)\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n","import { Component, forwardRef, inject, input, InputSignal, OnInit, signal, WritableSignal } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { takeUntil } from 'rxjs';\r\nimport { Tab } from '../../../models';\r\nimport { TabService } from '../../../services';\r\nimport { BaseButton } from '../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-open-record',\r\n templateUrl: './button-open-record.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonOpenRecordComponent) }],\r\n})\r\nexport class ButtonOpenRecordComponent extends BaseButton implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n public readonly elementPath: InputSignal<string | undefined> = input<string>();\r\n public readonly rootPath: InputSignal<string | undefined> = input<string>();\r\n //#endregion\r\n\r\n //#region Variables\r\n private dataGridDataset: DataGridDataset = inject(DataGridDataset);\r\n private router: Router = inject(Router);\r\n // A signal rather than a field: the grid announces a selection change from a subscription, and\r\n // this is what enables the button.\r\n private readonly selectionCount: WritableSignal<number> = signal(0);\r\n private tabService: TabService = inject(TabService);\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get isSelectedOneRecord(): boolean {\r\n return this.selectionCount() === 1;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n\r\n public ngOnInit(): void {\r\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.selectionCount.set(this.dataGridDataset.selectedRowKeys.length);\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onButtonClicked(): void {\r\n if (this.disabled() || !this.isAccessLoaded() || !this.isSelectedOneRecord || !this.isVisible()) {\r\n return;\r\n }\r\n\r\n let path: string = this.rootPath() ?? this.router.url;\r\n\r\n const elementPath: string | undefined = this.elementPath();\r\n if (elementPath) {\r\n path += `/${elementPath}`;\r\n }\r\n\r\n const selectedKey: string = this.dataGridDataset.selectedRowKeys[0];\r\n const selectedID: any = this.dataGridDataset.getRowID(selectedKey);\r\n path += `/${selectedID}`;\r\n\r\n this.tabService.navigateCurrentTab(new Tab({ entityBaseUrl: path, url: path }));\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","@if (isVisible()) {\r\n <lib-ribbon-button\r\n icon=\"fa-eye\"\r\n label=\"Button-Open-Record\"\r\n [disabled]=\"disabled() || !isAccessLoaded() || !isSelectedOneRecord\"\r\n [iconSize]=\"iconSize()\"\r\n [loading]=\"loading()\"\r\n (action)=\"onButtonClicked()\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n","import { Component, forwardRef, inject, OnInit } from '@angular/core';\r\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { takeUntil } from 'rxjs';\r\nimport { BaseButton } from '../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-refresh',\r\n templateUrl: './button-refresh.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonRefreshComponent) }],\r\n})\r\nexport class ButtonRefreshComponent extends BaseButton implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n private dataGridDataset: DataGridDataset | null = inject(DataGridDataset, { optional: true });\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.disabled.set(false);\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.dataGridDataset?.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.loading.set(false);\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onButtonClicked(): void {\r\n this.loading.set(true);\r\n this.dataGridDataset?.refresh();\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","<lib-ribbon-button\r\n label=\"Button-Refresh\"\r\n icon=\"fa-sync-alt\"\r\n [disabled]=\"disabled()\"\r\n [loading]=\"loading()\"\r\n [iconSize]=\"iconSize()\"\r\n (action)=\"onButtonClicked()\"\r\n></lib-ribbon-button>\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Component, forwardRef, inject, input, InputSignal, Signal, viewChild } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\r\nimport { DataProviderService, FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { Observable, take, throwError } from 'rxjs';\r\nimport { RouteHelper } from '../../../helpers';\r\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\r\nimport { TabService } from '../../../services';\r\nimport { ErrorModalComponent } from '../../modals/error-modal/error-modal.component';\r\nimport { BaseButton } from '../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-save',\r\n templateUrl: './button-save.component.html',\r\n imports: [ErrorModalComponent, RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonSaveComponent) }],\r\n})\r\nexport class ButtonSaveComponent extends BaseButton {\r\n //#region ViewChilds, Inputs, Outputs\r\n private readonly errorModal: Signal<ErrorModalComponent | undefined> = viewChild(ErrorModalComponent);\r\n\r\n public readonly defaultOption: InputSignal<number> = input(0);\r\n //#endregion\r\n\r\n //#region Variables\r\n private dataProviderService: DataProviderService<any> = inject(DataProviderService);\r\n private formService: FormService = inject(FormService);\r\n private router: Router = inject(Router);\r\n private tabService: TabService = inject(TabService);\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get isFormEditMode(): boolean {\r\n return this.formService.isEditMode;\r\n }\r\n\r\n protected get isFormLoading(): boolean {\r\n return this.formService.loading;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.options.set([\r\n { id: 'save', label: 'Button-Save', icon: 'fa-save' },\r\n { id: 'save-and-close', label: 'Button-Save-And-Close', icon: 'fa-save' },\r\n { id: 'save-and-new', label: 'Button-Save-And-New', icon: 'fa-save' },\r\n ]);\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onButtonClicked(option?: string): void {\r\n this.startLoading();\r\n\r\n this.formService.markAllAsTouched();\r\n if (!this.formService.isValid) {\r\n this.finishLoading('warning');\r\n return;\r\n }\r\n\r\n this.saveModel()\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (model: any) => {\r\n this.finishLoading('success');\r\n this.formService.enableForm();\r\n this.formService.model = model;\r\n this.formService.cancelEdit();\r\n\r\n switch (option) {\r\n case 'save-and-close':\r\n this.tabService.navigateBackOrCloseActiveTab();\r\n break;\r\n case 'save-and-new': {\r\n this.dataProviderService.updateModel(model);\r\n\r\n const detailsRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\r\n this.router.routerState.root.snapshot,\r\n FRAMEWORK_VIEW_TYPE,\r\n FrameworkViewType.Details,\r\n );\r\n const savedEntityUrl = `${RouteHelper.getRouteURL(detailsRoute!.parent!)}/${model.id}`;\r\n const currentRouteUrl: string = RouteHelper.getRouteURL(detailsRoute!);\r\n\r\n if (currentRouteUrl !== savedEntityUrl) {\r\n // Router URL differs from saved entity (new entity, or regular save\r\n // that only used location.replaceState). Redirect to sync the router\r\n // to /{id} invisibly, then navigate to /new normally. The real second\r\n // navigation detaches and caches the /{id} component so back-navigation\r\n // reattaches it instantly without reloading from the server.\r\n this.tabService.redirectCurrentTab(savedEntityUrl);\r\n this.tabService.setRouteRedirect(currentRouteUrl, savedEntityUrl);\r\n this.router.navigateByUrl(savedEntityUrl).then(() => {\r\n this.navigateToNew();\r\n });\r\n } else {\r\n // Router is already at /{id}. Navigate to /new directly.\r\n // The /{id} component is cached by the reuse strategy.\r\n this.navigateToNew();\r\n }\r\n break;\r\n }\r\n default: {\r\n this.dataProviderService.updateModel(model);\r\n\r\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\r\n this.router.routerState.root.snapshot,\r\n FRAMEWORK_VIEW_TYPE,\r\n FrameworkViewType.Details,\r\n );\r\n const url = `${RouteHelper.getRouteURL(targetRoute!.parent!)}/${model.id}`;\r\n\r\n if (!this.tabService.isUrlActive(url)) {\r\n const currentRoute: string = RouteHelper.getRouteURL(targetRoute!);\r\n this.tabService.redirectCurrentTab(url);\r\n\r\n // Sync the Angular router to /{id} invisibly. Without this, the router\r\n // stays at the old URL (e.g., /new) and subsequent navigations to that\r\n // URL become no-ops (the New button would stop working after Save).\r\n if (currentRoute !== url) {\r\n this.tabService.setRouteRedirect(currentRoute, url);\r\n this.router.navigateByUrl(url);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n },\r\n error: (e: HttpErrorResponse) => {\r\n this.finishLoading('warning');\r\n this.formService.enableForm();\r\n\r\n if (e.status === 400) {\r\n this.formService.setValidationErrorsFromHttpResponse(e);\r\n } else {\r\n let errorMessage = 'Modal-Failed-DefaultMessage';\r\n if (typeof e.error === 'string') {\r\n errorMessage = e.error;\r\n }\r\n this.errorModal()?.showModal(errorMessage);\r\n }\r\n },\r\n complete: () => {\r\n this.formService.loading = false;\r\n },\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n public override finishLoading(status: 'failure' | 'warning' | 'success'): void {\r\n super.finishLoading(status);\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n private navigateToNew(): void {\r\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\r\n this.router.routerState.root.snapshot,\r\n FRAMEWORK_VIEW_TYPE,\r\n FrameworkViewType.Details,\r\n );\r\n\r\n const url: string = targetRoute\r\n ? RouteHelper.getRouteURL(targetRoute.parent!)\r\n : RouteHelper.getRouteURL(this.router.routerState.root.snapshot, true);\r\n\r\n const tab: ITab = new Tab({ entityBaseUrl: `${url}/new`, url: `${url}/new` });\r\n this.tabService.navigateCurrentTab(tab);\r\n }\r\n\r\n private saveModel(): Observable<any> {\r\n this.formService.disableForm();\r\n const model: any = this.formService.getModelFromForm();\r\n return this.dataProviderService.saveModel(model);\r\n }\r\n //#endregion\r\n}\r\n","@if (isVisible()) {\r\n <lib-ribbon-button\r\n label=\"Button-Save\"\r\n icon=\"fa-save\"\r\n [defaultOption]=\"defaultOption()\"\r\n [disabled]=\"disabled() || !isAccessLoaded() || !isFormEditMode || isFormLoading\"\r\n [loading]=\"loading()\"\r\n [options]=\"options()\"\r\n (action)=\"onButtonClicked($event)\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n\r\n<framework-error-modal></framework-error-modal>\r\n","import { Component, forwardRef, inject, input, InputSignal, OnInit, signal, WritableSignal } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, NavigationEnd, Route, Router, UrlSegment } from '@angular/router';\r\nimport {\r\n DataProviderService,\r\n IRibbonButtonOption,\r\n RibbonButtonComponent,\r\n RibbonGroupChild,\r\n} from '@zambon-dev/ui/library';\r\nimport { filter, takeUntil } from 'rxjs';\r\nimport { RouteHelper } from '../../../helpers';\r\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\r\nimport { TabService, TabViewService } from '../../../services';\r\nimport { BaseButton } from '../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-views',\r\n templateUrl: './button-views.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonViewsComponent) }],\r\n})\r\nexport class ButtonViewsComponent extends BaseButton implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n public readonly detailsViewRoute: InputSignal<ActivatedRouteSnapshot | null> = input<ActivatedRouteSnapshot | null>(\r\n null,\r\n );\r\n //#endregion\r\n\r\n //#region Variables\r\n private baseUrlPath?: string;\r\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\r\n private isInternalNavigation = false;\r\n private router: Router = inject(Router);\r\n // A signal rather than a field: switching views changes which option the dropdown marks as the\r\n // current one, and the switch arrives from a router event.\r\n private readonly selectedViewId: WritableSignal<string | undefined> = signal(undefined);\r\n private tabService: TabService = inject(TabService);\r\n private tabViewService: TabViewService = inject(TabViewService);\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get hasOptions(): boolean {\r\n return this.options().some(\r\n (option: IRibbonButtonOption) =>\r\n (option.isVisible ?? true) &&\r\n (option.allowedActions === undefined ||\r\n option.allowedActions.length === 0 ||\r\n option.isAccessAllowed === true ||\r\n (option.isAccessAllowed === undefined && option.allowedActions?.length > 0)),\r\n );\r\n }\r\n\r\n protected get isNewEntity(): boolean {\r\n return !(this.dataProviderService?.hasEntityID ?? false);\r\n }\r\n\r\n protected get selectedView(): IRibbonButtonOption | undefined {\r\n return this.options().find((option: IRibbonButtonOption) => option.id === this.selectedViewId());\r\n }\r\n\r\n private get defaultViewId(): string {\r\n return this.options()[0].id ?? '';\r\n }\r\n\r\n private get selectedViewUrl(): string {\r\n let url: string = this.baseUrlPath ?? '';\r\n\r\n const selectedView: IRibbonButtonOption | undefined = this.selectedView;\r\n if (selectedView && selectedView.id) {\r\n url += `/${selectedView.id}`;\r\n }\r\n\r\n return url;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n\r\n public ngOnInit(): void {\r\n const detailsViewRoute: ActivatedRouteSnapshot | null = this.detailsViewRoute();\r\n if (detailsViewRoute) {\r\n this.options.set(\r\n detailsViewRoute.routeConfig?.children\r\n ?.filter((route: Route) => !!route.data && route.data['ignoreRoute'] !== true)\r\n ?.map((route: Route) => {\r\n const data: { [key: string | symbol]: any } = route.data ?? {};\r\n\r\n const option: IRibbonButtonOption = {\r\n id: route.path ?? '',\r\n isDisabled: false,\r\n isVisible: true,\r\n label: data['title'] ?? '',\r\n };\r\n\r\n const icon: string | undefined = data['icon'];\r\n if (icon) {\r\n option.icon = icon;\r\n }\r\n\r\n const allowedActions: string[] | undefined = data['allowedActions'];\r\n if (allowedActions && allowedActions.length > 0) {\r\n option.allowedActions = allowedActions;\r\n }\r\n\r\n return option;\r\n }) ?? [],\r\n );\r\n\r\n const url: string = RouteHelper.getRouteURL(detailsViewRoute);\r\n this.baseUrlPath = url;\r\n\r\n const option: string =\r\n detailsViewRoute.children[0]?.url?.map((segment: UrlSegment) => segment.path)?.join('/') ?? '';\r\n if (option === this.defaultViewId) {\r\n // We just need to check if the current option is the default, otherwise the router.events will handle the option selection.\r\n this.changeSelectedView(this.defaultViewId);\r\n }\r\n }\r\n\r\n this.router.events\r\n .pipe(\r\n filter((event: any) => event instanceof NavigationEnd),\r\n takeUntil(this.destroy$),\r\n )\r\n .subscribe((event: NavigationEnd) => {\r\n if (this.detailsViewRoute()) {\r\n // Use the current router state to get the up-to-date URL, since the stored\r\n // detailsViewRoute snapshot is immutable and becomes stale after save redirects\r\n // (e.g., /new → /:id).\r\n const currentRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\r\n this.router.routerState.root.snapshot,\r\n FRAMEWORK_VIEW_TYPE,\r\n FrameworkViewType.Details,\r\n );\r\n\r\n // Every details tab keeps this subscription alive, including the ones the reuse\r\n // strategy has detached, and the lookup above reads the *router*, which names\r\n // whichever tab the navigation went to. Without this guard a detached tab adopted\r\n // the base path of the tab being opened and then switched itself to that tab's view,\r\n // tearing its own ribbon down and rebuilding it -- which is how an active filter lost\r\n // its Clear filters button while the grid stayed filtered. Comparing the route\r\n // definition rather than the URL keeps the one navigation that legitimately changes\r\n // this tab's path: the redirect from /new to /:id after a save.\r\n if (currentRoute && currentRoute.routeConfig === this.detailsViewRoute()!.routeConfig) {\r\n const url: string = RouteHelper.getRouteURL(currentRoute);\r\n this.baseUrlPath = url;\r\n\r\n const activeViewId: string = this.getActiveOption(event.url);\r\n\r\n if (!this.isInternalNavigation) {\r\n if (this.selectedViewId() !== activeViewId) {\r\n this.changeSelectedView(activeViewId);\r\n }\r\n } else {\r\n this.isInternalNavigation = false;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onViewClicked(selectedOption: string | undefined): void {\r\n this.changeSelectedView(selectedOption);\r\n this.isInternalNavigation = true;\r\n\r\n if (selectedOption === this.defaultViewId) {\r\n // Default view: remove sub-view entry, navigate back to detail view\r\n this.tabService.replaceCurrentTabSubView(this.baseUrlPath!);\r\n } else {\r\n const tab: ITab = new Tab({\r\n title: this.selectedView?.label,\r\n url: this.selectedViewUrl,\r\n });\r\n this.tabService.replaceCurrentTabSubView(this.baseUrlPath!, tab);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n /**\r\n * Marks the chosen view as the current one, which is how the dropdown greys its own entry out.\r\n *\r\n * The options are rebuilt rather than edited in place: the ribbon button takes the list as an\r\n * input, so a field changed inside it is a change nothing can see.\r\n */\r\n private changeSelectedView(viewId: string | undefined): void {\r\n this.selectedViewId.set(viewId);\r\n this.tabViewService.setActiveView(viewId ?? '');\r\n\r\n this.options.update((options: IRibbonButtonOption[]) =>\r\n options.map((option: IRibbonButtonOption) =>\r\n option.isDisabled === (option.id === viewId) ? option : { ...option, isDisabled: option.id === viewId },\r\n ),\r\n );\r\n }\r\n\r\n private getActiveOption(url: string): string {\r\n const option: string = url.replace(this.baseUrlPath ?? '', '').substring(1);\r\n\r\n if (this.options().some((o: IRibbonButtonOption) => o.id === option)) {\r\n return option;\r\n }\r\n\r\n return this.defaultViewId;\r\n }\r\n //#endregion\r\n}\r\n","@if (hasOptions) {\r\n <lib-ribbon-button\r\n icon=\"fa-eye\"\r\n label=\"Button-Views\"\r\n [disabled]=\"!isAccessLoaded() || isNewEntity\"\r\n [options]=\"options()\"\r\n (action)=\"onViewClicked($event)\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n","import { Component, forwardRef, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\r\nimport { RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { BaseButton } from '../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button',\r\n templateUrl: './button.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonComponent) }],\r\n})\r\nexport class ButtonComponent extends BaseButton {\r\n //#region ViewChilds, Inputs, Outputs\r\n public readonly color: InputSignal<string> = input('text-primary-500');\r\n public readonly icon: InputSignal<string | undefined> = input<string>();\r\n public readonly label: InputSignal<string> = input('');\r\n\r\n public readonly action: OutputEmitterRef<void> = output<void>();\r\n //#endregion\r\n\r\n //#region Variables\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onButtonClicked(): void {\r\n if (this.disabled() || !this.isAccessLoaded() || !this.isVisible()) {\r\n return;\r\n }\r\n\r\n this.action.emit();\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","@if (isVisible()) {\r\n <lib-ribbon-button\r\n [color]=\"color()\"\r\n [disabled]=\"disabled() || !isAccessLoaded()\"\r\n [icon]=\"icon()\"\r\n [iconSize]=\"iconSize()\"\r\n [label]=\"label()\"\r\n [loading]=\"loading()\"\r\n [options]=\"options()\"\r\n (action)=\"onButtonClicked()\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n","import { Component, forwardRef, input, InputSignal } from '@angular/core';\r\nimport { RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { LegacySubViewForm, ModalBase } from '../../../../views';\r\nimport { BaseButton } from '../../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-edit-legacy',\r\n templateUrl: './button-edit.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonEditLegacyComponent) }],\r\n})\r\n/**\r\n * @deprecated Use standalone {@link ButtonEditComponent} instead.\r\n * Migrate by replacing this legacy component with the standalone equivalent\r\n * and using inject() for dependency injection.\r\n */\r\nexport class ButtonEditLegacyComponent extends BaseButton {\r\n //#region ViewChilds, Inputs, Outputs\r\n public readonly cancelColor: InputSignal<string> = input('text-red-500');\r\n public readonly cancelIcon: InputSignal<string> = input('fa-ban');\r\n public readonly cancelLabel: InputSignal<string> = input('Button-Cancel-Edit');\r\n public readonly editIcon: InputSignal<string> = input('fa-edit');\r\n public readonly editLabel: InputSignal<string> = input('Button-Edit');\r\n public readonly form: InputSignal<LegacySubViewForm | undefined> = input<LegacySubViewForm>();\r\n public readonly modal: InputSignal<ModalBase | undefined> = input<ModalBase>();\r\n //#endregion\r\n\r\n //#region Variables\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onCancelAction(): void {\r\n this.form()?.cancelEdit();\r\n }\r\n\r\n protected onEditAction(): void {\r\n const form: LegacySubViewForm | undefined = this.form();\r\n if (form) {\r\n form.beginEdit();\r\n } else {\r\n this.modal()?.toggle();\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","@let legacyForm = form();\r\n\r\n@if (isVisible() && (!legacyForm || legacyForm.viewMode !== 'edit')) {\r\n <lib-ribbon-button\r\n [disabled]=\"disabled() || (!!legacyForm && legacyForm.loading)\"\r\n [icon]=\"editIcon()\"\r\n [iconSize]=\"iconSize()\"\r\n [label]=\"editLabel()\"\r\n [loading]=\"loading()\"\r\n (action)=\"onEditAction()\"\r\n ></lib-ribbon-button>\r\n}\r\n@if (isVisible() && legacyForm && legacyForm.viewMode === 'edit' && !legacyForm.isNew) {\r\n <lib-ribbon-button\r\n [color]=\"cancelColor()\"\r\n [disabled]=\"disabled() || legacyForm.loading\"\r\n [icon]=\"cancelIcon()\"\r\n [label]=\"cancelLabel()\"\r\n [loading]=\"loading()\"\r\n (action)=\"onCancelAction()\"\r\n ></lib-ribbon-button>\r\n}\r\n","import { Component, forwardRef, inject, input, InputSignal } from '@angular/core';\r\nimport { ITabView, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { Tab } from '../../../../models';\r\nimport { TabService } from '../../../../services';\r\nimport { BaseButton } from '../../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-new-legacy',\r\n templateUrl: './button-new.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonNewLegacyComponent) }],\r\n})\r\n/**\r\n * @deprecated Use standalone {@link ButtonNewComponent} instead.\r\n * Migrate by replacing this legacy component with the standalone equivalent\r\n * and using inject() for dependency injection.\r\n */\r\nexport class ButtonNewLegacyComponent extends BaseButton {\r\n //#region ViewChilds, Inputs, Outputs\r\n public readonly endpoint: InputSignal<string> = input('new');\r\n public readonly path: InputSignal<string> = input('');\r\n public readonly tabView: InputSignal<ITabView | undefined> = input<ITabView>();\r\n //#endregion\r\n\r\n //#region Variables\r\n private tabService: TabService = inject(TabService);\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public clicked(): void {\r\n this.tabService.navigateTo(new Tab({ url: `${this.path()}/${this.endpoint()}` }));\r\n // this.tabService.navigateTab(this.tabView, `${this.path}/${this.endpoint}`);\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","@if (isVisible()) {\r\n <lib-ribbon-button\r\n [label]=\"'Button-New'\"\r\n [icon]=\"'fa-plus'\"\r\n [disabled]=\"disabled()\"\r\n [loading]=\"loading()\"\r\n (action)=\"clicked()\"\r\n ></lib-ribbon-button>\r\n}\r\n","import { Component, forwardRef, inject, input, InputSignal, OnInit, signal, WritableSignal } from '@angular/core';\r\nimport { DataGridDataset, ITabView, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { takeUntil } from 'rxjs';\r\nimport { Tab } from '../../../../models';\r\nimport { TabService } from '../../../../services';\r\nimport { BaseButton } from '../../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-open-record-legacy',\r\n templateUrl: './button-open-record.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonOpenRecordLegacyComponent) }],\r\n})\r\n/**\r\n * @deprecated Use standalone {@link ButtonOpenRecordComponent} instead.\r\n * Migrate by replacing this legacy component with the standalone equivalent\r\n * and using inject() for dependency injection.\r\n */\r\nexport class ButtonOpenRecordLegacyComponent extends BaseButton implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n public readonly endpoint: InputSignal<string> = input('new');\r\n public readonly path: InputSignal<string> = input('');\r\n public readonly tabView: InputSignal<ITabView | undefined> = input<ITabView>();\r\n //#endregion\r\n\r\n //#region Variables\r\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\r\n // A signal rather than a field: the grid announces a selection change from a subscription.\r\n protected readonly selectionCount: WritableSignal<number> = signal(0);\r\n\r\n private tabService: TabService = inject(TabService);\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n public ngOnInit(): void {\r\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.selectionCount.set(this.dataGridDataset.selectedRowKeys.length);\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public clicked(): void {\r\n if (this.dataGridDataset.hasSelectedRows && this.selectionCount() === 1) {\r\n const selectedKey: string = this.dataGridDataset.selectedRowKeys[0];\r\n const selectedID: any = this.dataGridDataset.getRowID(selectedKey);\r\n\r\n this.tabService.navigateTo(new Tab({ url: `${this.path()}/${selectedID}` }));\r\n // this.tabService.navigateTab(this.tabView, `${this.path}/${this.dataGridDataset.selectedRows[0]}`);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","@if (isVisible()) {\r\n <lib-ribbon-button\r\n [label]=\"'Button-Open-Record'\"\r\n [icon]=\"'fa-eye'\"\r\n [disabled]=\"disabled() || selectionCount() !== 1\"\r\n [loading]=\"loading()\"\r\n (action)=\"clicked()\"\r\n ></lib-ribbon-button>\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Component, forwardRef, inject, input, InputSignal, Signal, viewChild } from '@angular/core';\r\nimport { FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { take } from 'rxjs';\r\nimport { BackendFormValidationHelper } from '../../../../helpers';\r\nimport { TabService } from '../../../../services';\r\nimport { LegacySubViewForm, LegacyTabViewDetails } from '../../../../views';\r\nimport { ErrorModalComponent } from '../../../modals/error-modal/error-modal.component';\r\nimport { BaseButton } from '../../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-save-legacy',\r\n templateUrl: './button-save.component.html',\r\n imports: [ErrorModalComponent, RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonSaveLegacyComponent) }],\r\n})\r\n/**\r\n * @deprecated Use standalone {@link ButtonSaveComponent} instead.\r\n * Migrate by replacing this legacy component with the standalone equivalent\r\n * and using inject() for dependency injection.\r\n */\r\nexport class ButtonSaveLegacyComponent extends BaseButton {\r\n //#region ViewChilds, Inputs, Outputs\r\n private readonly errorModal: Signal<ErrorModalComponent | undefined> = viewChild(ErrorModalComponent);\r\n\r\n public readonly defaultOption: InputSignal<number> = input(0);\r\n public readonly form: InputSignal<LegacySubViewForm | undefined> = input<LegacySubViewForm>();\r\n public readonly tabView: InputSignal<LegacyTabViewDetails | undefined> = input<LegacyTabViewDetails>();\r\n //#endregion\r\n\r\n //#region Variables\r\n private formService: FormService = inject(FormService);\r\n private tabService: TabService = inject(TabService);\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.options.set([\r\n { id: 'save', label: 'Button-Save', icon: 'fa-save' },\r\n { id: 'save-and-close', label: 'Button-Save-And-Close', icon: 'fa-save' },\r\n { id: 'save-and-new', label: 'Button-Save-And-New', icon: 'fa-save' },\r\n ]);\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onButtonClick(option?: string): void {\r\n const form: LegacySubViewForm | undefined = this.form();\r\n if (!form) {\r\n return;\r\n }\r\n\r\n this.startLoading();\r\n this.setTabViewLoading(true);\r\n\r\n form\r\n .save()\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (model: any) => {\r\n this.finishLoading('success');\r\n\r\n this.formService.model = model;\r\n form.cancelEdit();\r\n\r\n switch (option) {\r\n case 'save-and-close':\r\n this.tabService.closeActiveTab();\r\n // this.tabService.closeTab(this.tabView);\r\n break;\r\n case 'save-and-new':\r\n this.tabView()?.buttonNew?.clicked();\r\n break;\r\n }\r\n },\r\n error: (e: HttpErrorResponse) => {\r\n this.finishLoading('warning');\r\n form.beginEdit(false);\r\n\r\n if (e.status === 400) {\r\n BackendFormValidationHelper.validateAllFormFields(e, form.dataForm);\r\n } else {\r\n let errorMessage = 'Modal-Failed-DefaultMessage';\r\n if (typeof e.error === 'string') {\r\n errorMessage = e.error;\r\n }\r\n\r\n this.errorModal()?.showModal(errorMessage);\r\n }\r\n },\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n public override finishLoading(status: 'failure' | 'warning' | 'success'): void {\r\n this.setTabViewLoading(false);\r\n super.finishLoading(status);\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n private setTabViewLoading(isLoading: boolean): void {\r\n const tabView: LegacyTabViewDetails | undefined = this.tabView();\r\n if (tabView) {\r\n tabView.loading = isLoading;\r\n }\r\n }\r\n //#endregion\r\n}\r\n","@let legacyForm = form();\r\n\r\n@if (isVisible()) {\r\n <lib-ribbon-button\r\n label=\"Button-Save\"\r\n icon=\"fa-save\"\r\n [defaultOption]=\"defaultOption()\"\r\n [disabled]=\"disabled() || legacyForm?.viewMode !== 'edit' || (legacyForm?.loading ?? false)\"\r\n [loading]=\"loading()\"\r\n [options]=\"options()\"\r\n (action)=\"onButtonClick($event)\"\r\n >\r\n </lib-ribbon-button>\r\n}\r\n\r\n<framework-error-modal></framework-error-modal>\r\n","import { Component, forwardRef, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\r\nimport { IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\r\nimport { BaseButton } from '../../base-button';\r\n\r\n@Component({\r\n selector: 'framework-button-views-legacy',\r\n templateUrl: './button-views.component.html',\r\n imports: [RibbonButtonComponent],\r\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonViewsLegacyComponent) }],\r\n})\r\n/**\r\n * @deprecated Use standalone {@link ButtonViewsComponent} instead.\r\n * Migrate by replacing this legacy component with the standalone equivalent\r\n * and using inject() for dependency injection.\r\n */\r\nexport class ButtonViewsLegacyComponent extends BaseButton {\r\n public readonly views: InputSignal<IRibbonButtonOption[]> = input<IRibbonButtonOption[]>([]);\r\n\r\n public readonly viewChanged: OutputEmitterRef<string | undefined> = output<string | undefined>();\r\n\r\n clicked(option?: string): void {\r\n this.viewChanged.emit(option);\r\n }\r\n}\r\n","<lib-ribbon-button\r\n [label]=\"'Button-Views'\"\r\n [icon]=\"'fa-eye'\"\r\n [options]=\"views()\"\r\n (action)=\"clicked($event)\"\r\n></lib-ribbon-button>\r\n","import { NgModule } from '@angular/core';\r\nimport { ButtonDeleteComponent } from './button-delete/button-delete.component';\r\nimport { ButtonEditComponent } from './button-edit/button-edit.component';\r\nimport { ButtonExportComponent } from './button-export/button-export.component';\r\nimport { ButtonFiltersComponent } from './button-filters/button-filters.component';\r\nimport { ButtonNewComponent } from './button-new/button-new.component';\r\nimport { ButtonOpenRecordComponent } from './button-open-record/button-open-record.component';\r\nimport { ButtonRefreshComponent } from './button-refresh/button-refresh.component';\r\nimport { ButtonSaveComponent } from './button-save/button-save.component';\r\nimport { ButtonViewsComponent } from './button-views/button-views.component';\r\nimport {\r\n ButtonEditLegacyComponent,\r\n ButtonNewLegacyComponent,\r\n ButtonOpenRecordLegacyComponent,\r\n ButtonSaveLegacyComponent,\r\n ButtonViewsLegacyComponent,\r\n} from './legacy';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n ButtonDeleteComponent,\r\n ButtonEditComponent,\r\n ButtonExportComponent,\r\n ButtonFiltersComponent,\r\n ButtonNewComponent,\r\n ButtonOpenRecordComponent,\r\n ButtonRefreshComponent,\r\n ButtonSaveComponent,\r\n ButtonViewsComponent,\r\n\r\n ButtonNewLegacyComponent,\r\n ButtonEditLegacyComponent,\r\n ButtonSaveLegacyComponent,\r\n ButtonViewsLegacyComponent,\r\n ButtonOpenRecordLegacyComponent,\r\n ],\r\n exports: [\r\n ButtonDeleteComponent,\r\n ButtonEditComponent,\r\n ButtonExportComponent,\r\n ButtonFiltersComponent,\r\n ButtonNewComponent,\r\n ButtonOpenRecordComponent,\r\n ButtonRefreshComponent,\r\n ButtonSaveComponent,\r\n ButtonViewsComponent,\r\n\r\n ButtonNewLegacyComponent,\r\n ButtonEditLegacyComponent,\r\n ButtonSaveLegacyComponent,\r\n ButtonViewsLegacyComponent,\r\n ButtonOpenRecordLegacyComponent,\r\n ],\r\n})\r\n/**\r\n * @deprecated Use standalone component imports instead of FrameworkButtonsModule.\r\n * Import individual button components directly in your component's `imports` array.\r\n */\r\nexport class FrameworkButtonsModule {}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { Component, inject, OnDestroy, OnInit, signal, TemplateRef, WritableSignal } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { RibbonComponent } from '@zambon-dev/ui/library';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { TabViewService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'framework-default-tab-view',\r\n templateUrl: './default-tab-view.component.html',\r\n styleUrls: ['./default-tab-view.component.scss'],\r\n imports: [NgTemplateOutlet, RibbonComponent, RouterModule],\r\n providers: [{ provide: TabViewService }],\r\n})\r\nexport class DefaultTabViewComponent implements OnDestroy, OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n protected destroy$: Subject<boolean> = new Subject<boolean>();\r\n protected readonly ribbonTemplate: WritableSignal<TemplateRef<any> | undefined> = signal(undefined);\r\n\r\n private hasNamedAView = false;\r\n private ribbonViewTemplate: { [viewId: string]: TemplateRef<any> | undefined } = {};\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n protected tabViewService: TabViewService = inject(TabViewService);\r\n\r\n public ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.tabViewService.onUpdateRibbonTemplate\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((template: TemplateRef<any> | undefined) => {\r\n this.ribbonViewTemplate[this.tabViewService.activeView] = template;\r\n this.updateRibbonTemplate(template);\r\n });\r\n\r\n this.tabViewService.onViewChanged.pipe(takeUntil(this.destroy$)).subscribe((viewId: string) => {\r\n this.claimUnnamedRibbon(viewId);\r\n\r\n this.updateRibbonTemplate(this.ribbonViewTemplate[viewId]);\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n /**\r\n * Claims the ribbon published before the active view had a name.\r\n *\r\n * A child view publishes its ribbon from ngAfterViewInit, and the view is only named afterwards,\r\n * so the first template of a tab is always cached under an empty id. For a tab opened straight\r\n * at a non-default view that id is never looked up again, the ribbon is emptied, and nothing\r\n * refills it -- a tab being re-activated has its child re-attached rather than re-created, so\r\n * ngAfterViewInit does not run a second time.\r\n *\r\n * Only the very first naming may claim it. The empty id is not a spare bucket: it is the default\r\n * view's own id, because that view is the one whose URL carries no sub-path. Once the user\r\n * starts switching views the unnamed template belongs to the view being *left*, and handing it\r\n * to the view being entered showed the previous view's buttons on the new one and left the\r\n * previous one with no buttons at all.\r\n *\r\n * @param viewId The view that has just become active.\r\n */\r\n private claimUnnamedRibbon(viewId: string): void {\r\n const isFirstNaming = !this.hasNamedAView;\r\n this.hasNamedAView = true;\r\n\r\n if (\r\n !isFirstNaming ||\r\n !viewId ||\r\n this.ribbonViewTemplate[viewId] !== undefined ||\r\n this.ribbonViewTemplate[''] === undefined\r\n ) {\r\n return;\r\n }\r\n\r\n this.ribbonViewTemplate[viewId] = this.ribbonViewTemplate[''];\r\n delete this.ribbonViewTemplate[''];\r\n }\r\n\r\n /**\r\n * One signal write, where there used to be a detectChanges()/markForCheck() pair.\r\n *\r\n * Those existed to render a real template at once while deferring a clear, so switching views\r\n * did not tear an already rendered ribbon down for a frame before the incoming view pushed its\r\n * own. A signal gets both for free: writes coalesce into the next pass, so a clear followed by\r\n * a set moments later is one render, not two. The NG0100 hazard goes with it -- a signal write\r\n * after the outlet has been checked schedules another pass instead of throwing.\r\n */\r\n private updateRibbonTemplate(template: TemplateRef<any> | undefined): void {\r\n this.ribbonTemplate.set(template);\r\n }\r\n //#endregion\r\n}\r\n","<lib-ribbon>\r\n <ng-container *ngTemplateOutlet=\"ribbonTemplate() ?? null\"></ng-container>\r\n</lib-ribbon>\r\n\r\n<router-outlet> </router-outlet>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { Component, inject, OnDestroy, OnInit, signal, Signal, viewChild, WritableSignal } from '@angular/core';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router, RouterModule } from '@angular/router';\r\nimport {\r\n DataProviderService,\r\n FormService,\r\n GroupContainerComponent,\r\n RibbonComponent,\r\n RibbonGroupComponent,\r\n} from '@zambon-dev/ui/library';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { takeUntil } from 'rxjs';\r\nimport { RouteHelper } from '../../../helpers';\r\nimport { ITab } from '../../../models';\r\nimport { TabService, TabViewService } from '../../../services';\r\n// Imported by concrete path, not through the buttons barrel: that barrel re-exports\r\n// ./legacy, whose buttons import the views barrel, which re-exports this file. Going\r\n// through it leaves one of this component's imports undefined at evaluation time.\r\nimport { ButtonViewsComponent } from '../../buttons/button-views/button-views.component';\r\nimport { ErrorModalComponent } from '../../modals/error-modal/error-modal.component';\r\nimport { DefaultTabViewComponent } from '../default-tab-view/default-tab-view.component';\r\n\r\nfunction dataProviderFactory(route: ActivatedRoute): DataProviderService<any> {\r\n return <DataProviderService<any>>route.snapshot.data['dataProvider']();\r\n}\r\n\r\n@Component({\r\n selector: 'framework-default-details-tab-view',\r\n templateUrl: './default-details-tab-view.component.html',\r\n styleUrls: ['./default-details-tab-view.component.scss'],\r\n imports: [\r\n ButtonViewsComponent,\r\n ErrorModalComponent,\r\n GroupContainerComponent,\r\n NgTemplateOutlet,\r\n RibbonComponent,\r\n RibbonGroupComponent,\r\n RouterModule,\r\n TranslatePipe,\r\n ],\r\n providers: [\r\n { provide: TabViewService },\r\n { provide: DataProviderService, useFactory: dataProviderFactory, deps: [ActivatedRoute] },\r\n // A record's views are siblings: the form is one route, a child list is another, and only the\r\n // form provides a FormService of its own. So anything a non-form view renders has to find one\r\n // here or not at all -- and framework-button-edit asks for FormService and DataProviderService\r\n // together, of which this shell supplied only the second. Opening a child-list view threw\r\n // NG0201 before the component rendered at all.\r\n //\r\n // A form view's own provider shadows this one inside its subtree, so nothing changes there.\r\n // What reaches this instance is a view that has no form of its own, where the service sits\r\n // idle: the edit button reads `loading` and listens for `editCanceled`, and in modal mode --\r\n // which is why a child list has that button -- it never begins an edit on it.\r\n { provide: FormService },\r\n ],\r\n})\r\nexport class DefaultDetailsTabViewComponent extends DefaultTabViewComponent implements OnDestroy, OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n private readonly errorModal: Signal<ErrorModalComponent | undefined> = viewChild(ErrorModalComponent);\r\n //#endregion\r\n\r\n //#region Variables\r\n // Signals rather than fields: the record's title arrives from the data provider's stream,\r\n // and the route it is read from is recomputed in that same subscription. Both are rendered\r\n // here -- the container heading and the views button -- with nothing else marking this view.\r\n protected readonly containerIcon: WritableSignal<string | undefined> = signal(undefined);\r\n protected readonly containerTitle: WritableSignal<string | undefined> = signal(undefined);\r\n protected readonly detailsViewRoute: WritableSignal<ActivatedRouteSnapshot | null> = signal(null);\r\n\r\n protected dataProviderClassName?: any;\r\n\r\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\r\n private hasEntityID: boolean | null = null;\r\n private hasLoadError = false;\r\n private router: Router = inject(Router);\r\n private tabService: TabService = inject(TabService);\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get componentName(): string {\r\n return DefaultDetailsTabViewComponent.name;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n this.detailsViewRoute.set(\r\n RouteHelper.getRouteWithComponent(this.router.routerState.root.snapshot, DefaultDetailsTabViewComponent),\r\n );\r\n this.hasEntityID = this.dataProviderService?.hasEntityID ?? null;\r\n\r\n this.dataProviderService\r\n ?.getModel$()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((model: any) => {\r\n if (this.hasEntityID !== this.dataProviderService!.hasEntityID || !this.detailsViewRoute()) {\r\n // If the entity ID changes, we need update the detailsViewRoute to get the correct route URL later.\r\n this.hasEntityID = this.dataProviderService!.hasEntityID;\r\n this.detailsViewRoute.set(\r\n RouteHelper.getRouteWithComponent(this.router.routerState.root.snapshot, DefaultDetailsTabViewComponent),\r\n );\r\n }\r\n\r\n const detailsViewRoute: ActivatedRouteSnapshot | null = this.detailsViewRoute();\r\n if (detailsViewRoute) {\r\n let title: string = detailsViewRoute.data['defaultTitle'];\r\n if (this.dataProviderService!.hasEntityID) {\r\n title = this.dataProviderService!.getTitle(model);\r\n }\r\n\r\n this.containerIcon.set('');\r\n this.containerTitle.set(title);\r\n\r\n const url: string = RouteHelper.getRouteURL(detailsViewRoute);\r\n this.tabService.updateTabTitle(url, title);\r\n }\r\n });\r\n\r\n this.dataProviderService\r\n ?.getError$()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((error: HttpErrorResponse) => {\r\n this.hasLoadError = true;\r\n\r\n if (error.status === 404) {\r\n this.errorModal()?.title.set('Modal-NotFound-Title');\r\n this.errorModal()?.subtitle.set('');\r\n this.errorModal()?.showModal('Modal-NotFound-Message');\r\n } else {\r\n this.errorModal()?.title.set('Modal-Failed-Title');\r\n this.errorModal()?.subtitle.set('Modal-Failed-Administrator');\r\n this.errorModal()?.showModal(error);\r\n }\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onErrorModalClosed(): void {\r\n if (!this.hasLoadError) {\r\n return;\r\n }\r\n\r\n const history: ITab[] = this.tabService.activeTabHistory;\r\n const entityBaseUrl: string | undefined = history[history.length - 1]?.entityBaseUrl;\r\n\r\n // Find the entry before the invalid entity in the tab history.\r\n if (entityBaseUrl && history.length > 1) {\r\n const entityIndex: number = history.findIndex((entry: ITab) => entry.entityBaseUrl === entityBaseUrl);\r\n if (entityIndex > 0) {\r\n this.tabService.navigateCurrentTabBack(history[entityIndex - 1]);\r\n return;\r\n }\r\n }\r\n\r\n this.tabService.closeActiveTab();\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","<lib-ribbon>\r\n <ng-container *ngTemplateOutlet=\"ribbonTemplate() ?? null\"></ng-container>\r\n\r\n <div right>\r\n <lib-ribbon-group [label]=\"'RibbonGroup-Page' | translate\">\r\n <framework-button-views [detailsViewRoute]=\"detailsViewRoute()\"> </framework-button-views>\r\n </lib-ribbon-group>\r\n </div>\r\n</lib-ribbon>\r\n\r\n<lib-group-container [icon]=\"containerIcon()\" [title]=\"containerTitle()\">\r\n <router-outlet> </router-outlet>\r\n</lib-group-container>\r\n\r\n<framework-error-modal (closed)=\"onErrorModalClosed()\"></framework-error-modal>\r\n","import { Component, inject } from '@angular/core';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { ITab } from '../../../models';\r\nimport { TabService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'framework-tab-breadcrumbs',\r\n templateUrl: './tab-breadcrumbs.component.html',\r\n styleUrls: ['./tab-breadcrumbs.component.scss'],\r\n imports: [TranslatePipe],\r\n})\r\nexport class TabBreadcrumbsComponent {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n private tabService: TabService = inject(TabService);\r\n //#endregion\r\n\r\n //#region Properties\r\n /**\r\n * Reads straight through to the service, which is the trap this component used to be the\r\n * example of: a getter over an array a service mutates elsewhere, with nothing to mark this\r\n * view dirty. TabService announces its own changes now, and that getter takes the dependency,\r\n * so no strategy is needed here.\r\n */\r\n protected get tabHistory(): ITab[] {\r\n return this.tabService.activeTabHistory;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onTitleClick(tab: ITab): void {\r\n this.tabService.navigateCurrentTabBack(tab);\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","<i class=\"fa-solid fa-angles-right\"></i>\r\n\r\n@for (history of tabHistory; track history) {\r\n <a\r\n role=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onTitleClick(history)\"\r\n (keydown.enter)=\"onTitleClick(history)\"\r\n (keydown.space)=\"onTitleClick(history); $event.preventDefault()\"\r\n >\r\n @if (!history.isTitleLoading) {\r\n <span>{{ history.title ?? '' | translate }}</span>\r\n }\r\n @if (history.isTitleLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\r\n <path\r\n class=\"opacity-75\"\r\n fill=\"currentColor\"\r\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\r\n ></path>\r\n </svg>\r\n }\r\n </a>\r\n}\r\n","import {\r\n afterEveryRender,\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n signal,\r\n ViewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { ActivatedRouteSnapshot, Route, Router } from '@angular/router';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { RouteHelper } from '../../../helpers';\r\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\r\nimport { ITabHistory } from '../../../models/tab-history';\r\nimport { TabService } from '../../../services/tab.service';\r\nimport { TabBreadcrumbsComponent } from '../tab-breadcrumbs/tab-breadcrumbs.component';\r\n\r\n/** Sub-pixel slack: scrollLeft is fractional, so an exact comparison never reaches the end. */\r\nconst SCROLL_EPSILON = 1;\r\n\r\n/** How much of the visible strip one press of a scroll button travels. */\r\nconst SCROLL_BUTTON_STEP = 0.8;\r\n\r\n@Component({\r\n selector: 'framework-tabs',\r\n templateUrl: './tabs.component.html',\r\n styleUrls: ['./tabs.component.scss'],\r\n imports: [TabBreadcrumbsComponent, TranslatePipe],\r\n})\r\nexport class TabsComponent implements AfterViewInit, OnDestroy, OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n @ViewChild('tabsNav') private tabsNav?: ElementRef<HTMLElement>;\r\n //#endregion\r\n\r\n //#region Host listeners\r\n //#endregion\r\n\r\n //#region Variables\r\n private static instances = 0;\r\n\r\n /** Unique per instance: the ids below are referenced by aria-controls/aria-labelledby. */\r\n private readonly instanceId: string = `framework-tabs-${TabsComponent.instances++}`;\r\n\r\n /**\r\n * Fingerprint of everything that can invalidate the strip's scroll position: which tab is\r\n * selected, how many there are, and the strip's own geometry. Deliberately does NOT include\r\n * scrollLeft -- the user scrolling by hand must not make us yank the strip back.\r\n */\r\n private lastStripSignature = '';\r\n private navResizeObserver?: ResizeObserver;\r\n private isDestroyed = false;\r\n\r\n /** Drive the scroll buttons. Only ever assigned outside a change-detection pass (see below). */\r\n protected readonly canScrollLeft: WritableSignal<boolean> = signal(false);\r\n protected readonly canScrollRight: WritableSignal<boolean> = signal(false);\r\n\r\n /**\r\n * Whether the strip holds more tabs than it has room for. This decides that the buttons exist;\r\n * canScrollLeft and canScrollRight only decide whether each one is enabled.\r\n *\r\n * They used to decide both, so a button vanished the moment you reached the end it pointed at.\r\n * The strip then changed width under the pointer, and a click could land after the button had\r\n * already unmounted and do nothing — which is what \"sometimes it does not move\" was.\r\n */\r\n protected readonly isOverflowing: WritableSignal<boolean> = signal(false);\r\n\r\n /**\r\n * Whether anything reaches the strip's right edge: a tab, or the right scroll button. While\r\n * something does, the panel's top-right corner is square, because the card's corner then belongs\r\n * to the strip. Rounding both leaves whatever sits at the edge standing over the sweep where the\r\n * panel has curved away and is not there yet — a piece floating past the corner.\r\n */\r\n protected readonly isFlushRight: WritableSignal<boolean> = signal(false);\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get activeHistory(): ITabHistory[] | null {\r\n return null; // this.tabService.activeHistory;\r\n }\r\n\r\n protected get activeTab(): string | null {\r\n return null; // this.tabService.activeTab;\r\n }\r\n\r\n protected get hasTabs(): boolean {\r\n return this.tabService.activeTabs.length > 0;\r\n }\r\n\r\n protected get openTabs(): ITab[] {\r\n return this.tabService.activeTabs ?? [];\r\n }\r\n\r\n protected get tabDisplayTitles(): (string | undefined)[] {\r\n return this.tabService.activeTabsDisplayTitles;\r\n }\r\n\r\n protected get tabLoadingStates(): boolean[] {\r\n return this.tabService.activeTabsLoadingStates;\r\n }\r\n\r\n /** Id of the panel these tabs control; referenced by each tab's aria-controls. */\r\n protected get panelId(): string {\r\n return `${this.instanceId}-panel`;\r\n }\r\n\r\n /** Id of the selected tab, so the panel can name the tab that labels it. */\r\n protected get activeTabId(): string | null {\r\n const index: number = this.openTabs.findIndex((tab: ITab) => this.isTabActive(tab));\r\n return index === -1 ? null : this.tabId(index);\r\n }\r\n\r\n protected trackByFn: (index: number, tab: ITab) => string = (_: number, tab: ITab): string => tab.url;\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor(\r\n private ngZone: NgZone,\r\n private router: Router,\r\n private tabService: TabService,\r\n ) {\r\n // Replaces ngAfterViewChecked + queueMicrotask. That pair only ever ran because zone.js\r\n // produced an ambient pass on every event; with no zone there is nothing to piggyback on and\r\n // the strip silently stopped re-measuring. afterEveryRender is the supported hook for reading\r\n // layout, and it runs after the bindings have been checked, so writing the affordance here\r\n // cannot raise NG0100 either.\r\n afterEveryRender(() => {\r\n const signature: string = this.stripSignature();\r\n if (signature === this.lastStripSignature) {\r\n return;\r\n }\r\n this.lastStripSignature = signature;\r\n this.remeasureStrip();\r\n });\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\r\n if (!nav) {\r\n return;\r\n }\r\n\r\n // Outside Angular: these fire continuously while scrolling or dragging a window edge, and\r\n // none of them need a change-detection pass unless a button's state actually flips.\r\n this.ngZone.runOutsideAngular(() => {\r\n nav.addEventListener('scroll', this.onNavScroll, { passive: true });\r\n nav.addEventListener('wheel', this.onNavWheel, { passive: false });\r\n\r\n // Catches the window resizing and the sidebar collapsing -- both change how many tabs\r\n // fit without changing the tab list, so nothing else would tell us to re-check.\r\n if (typeof ResizeObserver === 'function') {\r\n this.navResizeObserver = new ResizeObserver(() => this.remeasureStrip());\r\n this.navResizeObserver.observe(nav);\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.isDestroyed = true;\r\n this.navResizeObserver?.disconnect();\r\n\r\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\r\n nav?.removeEventListener('scroll', this.onNavScroll);\r\n nav?.removeEventListener('wheel', this.onNavWheel);\r\n }\r\n\r\n public ngOnInit(): void {\r\n const activatedDetailsTabView: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\r\n this.router.routerState.snapshot.root,\r\n FRAMEWORK_VIEW_TYPE,\r\n FrameworkViewType.Details,\r\n );\r\n if (activatedDetailsTabView) {\r\n const shouldIgnoreFirstChildRoute: boolean =\r\n !!activatedDetailsTabView.firstChild &&\r\n activatedDetailsTabView.firstChild.data &&\r\n activatedDetailsTabView.firstChild.data['ignoreRoute'] === true;\r\n\r\n const url: string = RouteHelper.getRouteURL(activatedDetailsTabView);\r\n const clones: string[] = [];\r\n\r\n if (shouldIgnoreFirstChildRoute) {\r\n clones.push(RouteHelper.getRouteURL(activatedDetailsTabView.firstChild!));\r\n } else if (activatedDetailsTabView.firstChild) {\r\n const childPath: string = activatedDetailsTabView.firstChild.url.map((s: any) => s.path).join('/');\r\n const defaultChildPath: string =\r\n activatedDetailsTabView.routeConfig?.children?.filter(\r\n (route: Route) => !!route.data && route.data['ignoreRoute'] !== true,\r\n )?.[0]?.path ?? '';\r\n\r\n if (childPath !== defaultChildPath) {\r\n const entityID = Number(activatedDetailsTabView.paramMap.get('id'));\r\n if (!entityID) {\r\n // New entity: inner views are not available, redirect to base URL.\r\n this.router.navigate([url], { replaceUrl: true });\r\n } else {\r\n // Non-default child route (e.g. direct navigation to /audit): add sub-view to history for breadcrumbs.\r\n const childTitle: string = activatedDetailsTabView.firstChild?.data?.['title'] ?? '';\r\n queueMicrotask(() => {\r\n const childUrl: string = RouteHelper.getRouteURL(activatedDetailsTabView.firstChild!);\r\n this.tabService.replaceCurrentTabSubView(\r\n url,\r\n new Tab({\r\n title: childTitle,\r\n url: childUrl,\r\n }),\r\n );\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.tabService.openTab(\r\n new Tab({\r\n clones: clones,\r\n entityBaseUrl: url,\r\n queryParams: activatedDetailsTabView.queryParams,\r\n url: url,\r\n }),\r\n );\r\n } else {\r\n const activatedTabView: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\r\n this.router.routerState.snapshot.root,\r\n FRAMEWORK_VIEW_TYPE,\r\n FrameworkViewType.List,\r\n );\r\n if (activatedTabView) {\r\n const url: string = RouteHelper.getRouteURL(activatedTabView);\r\n this.tabService.openTab(\r\n new Tab({\r\n queryParams: activatedTabView.queryParams,\r\n url: url,\r\n }),\r\n );\r\n } else {\r\n this.router.navigate(['/']);\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n protected onActivateTab(tab: ITab): void {\r\n this.tabService.activateTab(tab);\r\n }\r\n\r\n protected onCloseTab(index: number): void {\r\n this.tabService.closeTab(index);\r\n }\r\n\r\n /** Middle click closes a tab, the way it does in a browser. */\r\n protected onTabAuxClick(event: MouseEvent, index: number): void {\r\n if (event.button !== 1) {\r\n return;\r\n }\r\n // Chromium starts autoscroll on middle click unless the default is prevented.\r\n event.preventDefault();\r\n this.onCloseTab(index);\r\n }\r\n\r\n /**\r\n * Roving focus. A tablist is a single tab stop: Tab reaches the selected tab, and the\r\n * arrow keys move between tabs from there. A delta of 0 means go to `from` exactly,\r\n * which is what Home and End want.\r\n */\r\n protected onMoveFocus(from: number, delta: number): void {\r\n const count: number = this.openTabs.length;\r\n if (count === 0) {\r\n return;\r\n }\r\n const target: number = delta === 0 ? Math.min(Math.max(from, 0), count - 1) : (from + delta + count) % count;\r\n this.focusTab(target);\r\n }\r\n\r\n /** The scroll buttons at each end of the strip. `direction` is -1 for left, 1 for right. */\r\n protected onScrollStrip(direction: number): void {\r\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\r\n if (!nav) {\r\n return;\r\n }\r\n\r\n const step: number = nav.clientWidth * SCROLL_BUTTON_STEP * direction;\r\n if (typeof nav.scrollBy === 'function') {\r\n nav.scrollBy({ left: step, behavior: 'smooth' });\r\n } else {\r\n // jsdom, and any browser without smooth scrolling, still gets the movement.\r\n nav.scrollLeft += step;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Public methods\r\n protected isTabActive(tab: ITab): boolean {\r\n return this.tabService.isTabActive(tab);\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n /** Stable per index, so aria-controls and aria-labelledby have something to point at. */\r\n protected tabId(index: number): string {\r\n return `${this.instanceId}-tab-${index}`;\r\n }\r\n\r\n private tabElements(): HTMLElement[] {\r\n return Array.from(this.tabsNav?.nativeElement.querySelectorAll<HTMLElement>('[role=\"tab\"]') ?? []);\r\n }\r\n\r\n /** Moves focus AND selection: this tablist follows the automatic-activation pattern. */\r\n private focusTab(index: number): void {\r\n const element: HTMLElement | undefined = this.tabElements()[index];\r\n if (!element) {\r\n return;\r\n }\r\n element.focus();\r\n\r\n const tab: ITab | undefined = this.openTabs[index];\r\n if (tab) {\r\n this.onActivateTab(tab);\r\n }\r\n }\r\n\r\n /**\r\n * Everything that invalidates the scroll position, in one cheap string. The geometry is part\r\n * of it because the window resizing or the sidebar collapsing can push the selected tab out\r\n * of sight without the tab list changing at all -- which is precisely how you end up looking\r\n * at a panel whose tab is nowhere on screen.\r\n */\r\n private stripSignature(): string {\r\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\r\n const index: number = this.openTabs.findIndex((tab: ITab) => this.isTabActive(tab));\r\n return `${index}|${this.openTabs.length}|${nav?.clientWidth ?? 0}|${nav?.scrollWidth ?? 0}`;\r\n }\r\n\r\n /** Keeps the selected tab on screen. Called from a microtask, never mid-change-detection. */\r\n private scrollActiveTabIntoView(): void {\r\n const index: number = this.openTabs.findIndex((tab: ITab) => this.isTabActive(tab));\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n // Guarded: scrollIntoView is not implemented in jsdom, so an unguarded call throws in\r\n // any consumer's unit tests.\r\n const element: HTMLElement | undefined = this.tabElements()[index];\r\n if (typeof element?.scrollIntoView === 'function') {\r\n element.scrollIntoView({ block: 'nearest', inline: 'nearest' });\r\n }\r\n }\r\n\r\n /**\r\n * Recomputes whether either scroll button applies. Reads first and only enters the zone when\r\n * a button actually flips, so an ordinary scroll costs one layout read and no render.\r\n */\r\n private syncScrollAffordance(): void {\r\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\r\n if (!nav || this.isDestroyed) {\r\n return;\r\n }\r\n\r\n const canLeft: boolean = nav.scrollLeft > SCROLL_EPSILON;\r\n const canRight: boolean = nav.scrollLeft + nav.clientWidth < nav.scrollWidth - SCROLL_EPSILON;\r\n const overflowing: boolean = nav.scrollWidth > nav.clientWidth + SCROLL_EPSILON;\r\n\r\n // Overflowing means the right button holds the edge. Short of that, the last tab does if it\r\n // ends within a pixel of the strip — the case where the tabs happen to fill it exactly.\r\n const lastTab: Element | null = nav.lastElementChild;\r\n const flushRight: boolean =\r\n overflowing ||\r\n (lastTab !== null && lastTab.getBoundingClientRect().right >= nav.getBoundingClientRect().right - SCROLL_EPSILON);\r\n\r\n if (\r\n canLeft === this.canScrollLeft() &&\r\n canRight === this.canScrollRight() &&\r\n overflowing === this.isOverflowing() &&\r\n flushRight === this.isFlushRight()\r\n ) {\r\n return;\r\n }\r\n\r\n this.canScrollLeft.set(canLeft);\r\n this.canScrollRight.set(canRight);\r\n this.isOverflowing.set(overflowing);\r\n this.isFlushRight.set(flushRight);\r\n }\r\n\r\n /** Everything a geometry change implies: the selected tab may be off-screen, and the scroll\r\n * buttons may have appeared or gone. */\r\n private remeasureStrip(): void {\r\n this.scrollActiveTabIntoView();\r\n this.syncScrollAffordance();\r\n }\r\n\r\n /** Arrow function: registered and removed as a listener, so it must keep its `this`. */\r\n private onNavScroll = (): void => {\r\n this.syncScrollAffordance();\r\n };\r\n\r\n /**\r\n * A tab strip is horizontal but a mouse wheel is vertical, so without this the only way to\r\n * reach an off-screen tab with a plain wheel mouse is the buttons. Trackpads and shift+wheel\r\n * already produce deltaX, so those are left alone.\r\n */\r\n private onNavWheel = (event: WheelEvent): void => {\r\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\r\n if (!nav || event.deltaX !== 0 || event.deltaY === 0) {\r\n return;\r\n }\r\n if (nav.scrollWidth <= nav.clientWidth) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n nav.scrollLeft += event.deltaY;\r\n };\r\n //#endregion\r\n}\r\n","@if (hasTabs) {\r\n <div class=\"tabs-container\" [class.can-scroll-left]=\"canScrollLeft()\" [class.can-scroll-right]=\"canScrollRight()\">\r\n <!-- Both buttons are present whenever the strip overflows, and disabled rather than removed at\r\n the end they point at. Rendering them per-direction meant the one being reached for\r\n disappeared on arrival: the strip changed width under the pointer and the click landed on\r\n nothing. tabindex -1 because the tablist is already one tab stop and the arrow keys reach\r\n every tab -- these are a pointer affordance, not a second keyboard path. -->\r\n @if (isOverflowing()) {\r\n <button\r\n class=\"tabs-scroll left\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [disabled]=\"!canScrollLeft()\"\r\n [attr.aria-label]=\"'Tabs-ScrollLeft' | translate\"\r\n (click)=\"onScrollStrip(-1)\"\r\n >\r\n <i class=\"fas fa-chevron-left\"></i>\r\n </button>\r\n }\r\n\r\n <!-- Horizontally scrollable. This used to be overflow:hidden, so once the tabs were\r\n wider than the bar the ones past the right edge could not be reached at all. -->\r\n <ul #tabsNav class=\"tabs-nav\" role=\"tablist\">\r\n @for (tab of openTabs; track trackByFn(i, tab); let i = $index) {\r\n <li role=\"presentation\" [class.active]=\"isTabActive(tab)\">\r\n <a\r\n class=\"tab-item\"\r\n role=\"tab\"\r\n [id]=\"tabId(i)\"\r\n [attr.aria-controls]=\"panelId\"\r\n [attr.aria-selected]=\"isTabActive(tab)\"\r\n [attr.title]=\"tabDisplayTitles[i] ?? tab.title ?? null\"\r\n [attr.tabindex]=\"isTabActive(tab) ? 0 : -1\"\r\n (click)=\"onActivateTab(tab)\"\r\n (auxclick)=\"onTabAuxClick($event, i)\"\r\n (keydown.enter)=\"onActivateTab(tab)\"\r\n (keydown.space)=\"onActivateTab(tab); $event.preventDefault()\"\r\n (keydown.arrowleft)=\"onMoveFocus(i, -1); $event.preventDefault()\"\r\n (keydown.arrowright)=\"onMoveFocus(i, 1); $event.preventDefault()\"\r\n (keydown.home)=\"onMoveFocus(0, 0); $event.preventDefault()\"\r\n (keydown.end)=\"onMoveFocus(openTabs.length - 1, 0); $event.preventDefault()\"\r\n (keydown.delete)=\"onCloseTab(i); $event.preventDefault()\"\r\n >\r\n <!-- Rendered whether or not the title has resolved, so the tab keeps its width\r\n and the strip does not reflow as each title arrives. -->\r\n <span class=\"label\">{{ tabDisplayTitles[i] ?? tab.title ?? '' | translate }}</span>\r\n\r\n @if (tabLoadingStates[i]) {\r\n <svg class=\"spinner\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\r\n <path\r\n class=\"opacity-75\"\r\n fill=\"currentColor\"\r\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\r\n ></path>\r\n </svg>\r\n }\r\n </a>\r\n\r\n <!-- tabindex -1: the tablist is one tab stop, and the close control is reachable\r\n from the tab itself with Delete rather than by tabbing through every one. -->\r\n <button\r\n class=\"tab-close\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [attr.aria-label]=\"'Tabs-CloseTab' | translate: { title: tabDisplayTitles[i] ?? tab.title ?? '' }\"\r\n (click)=\"onCloseTab(i)\"\r\n >\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n\r\n @if (isOverflowing()) {\r\n <button\r\n class=\"tabs-scroll right\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [disabled]=\"!canScrollRight()\"\r\n [attr.aria-label]=\"'Tabs-ScrollRight' | translate\"\r\n (click)=\"onScrollStrip(1)\"\r\n >\r\n <i class=\"fas fa-chevron-right\"></i>\r\n </button>\r\n }\r\n </div>\r\n}\r\n@if (hasTabs) {\r\n <div\r\n class=\"tab-content\"\r\n [class.flush-right]=\"isFlushRight()\"\r\n role=\"tabpanel\"\r\n [id]=\"panelId\"\r\n [attr.aria-labelledby]=\"activeTabId\"\r\n >\r\n <framework-tab-breadcrumbs></framework-tab-breadcrumbs>\r\n <ng-content></ng-content>\r\n </div>\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { DefaultDetailsTabViewComponent } from './default-details-tab-view/default-details-tab-view.component';\r\nimport { DefaultTabViewComponent } from './default-tab-view/default-tab-view.component';\r\nimport { TabBreadcrumbsComponent } from './tab-breadcrumbs/tab-breadcrumbs.component';\r\nimport { TabsComponent } from './tabs/tabs.component';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [DefaultDetailsTabViewComponent, DefaultTabViewComponent, TabBreadcrumbsComponent, TabsComponent],\r\n exports: [DefaultDetailsTabViewComponent, DefaultTabViewComponent, TabsComponent],\r\n})\r\n/**\r\n * @deprecated Use standalone component imports instead of FrameworkViewsModule.\r\n * Import individual components directly in your component's `imports` array.\r\n */\r\nexport class FrameworkViewsModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { FrameworkButtonsModule } from './buttons/buttons.module';\r\nimport { FrameworkModalsModule } from './modals/modals.module';\r\nimport { FrameworkViewsModule } from './views/views.module';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [FrameworkButtonsModule, FrameworkModalsModule, FrameworkViewsModule],\r\n})\r\n/**\r\n * @deprecated Use standalone component imports instead of FrameworkComponentsModule.\r\n * Import individual components directly in your component's `imports` array.\r\n */\r\nexport class FrameworkComponentsModule {}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const APP_CONFIG: InjectionToken<AppConfig> = new InjectionToken<AppConfig>('Manually constructed AppConfig', {\r\n providedIn: 'root',\r\n factory: () => new AppConfig(''),\r\n});\r\n\r\nexport interface AppConfigOptions {\r\n appName?: string;\r\n companyName?: string;\r\n environment?: string;\r\n logoUrl?: string;\r\n notificationsEnabled?: boolean;\r\n notificationsUrl?: string;\r\n version?: string;\r\n}\r\n\r\nexport class AppConfig {\r\n public BASE_URL: string;\r\n\r\n /** Application name shown in the top bar brand block. */\r\n public appName: string;\r\n\r\n /** Company name shown beneath the application name. */\r\n public companyName: string;\r\n\r\n /** Environment key (e.g. 'DEV', 'QA', 'STG', 'PROD'). Empty string when unset. */\r\n public environment: string;\r\n\r\n /** Optional brand logo URL shown in the top bar. */\r\n public logoUrl?: string;\r\n\r\n /** Whether the top-bar notifications feature (bell + badge) is enabled. */\r\n public notificationsEnabled: boolean;\r\n\r\n /** SignalR hub URL the notifications service connects to when enabled. */\r\n public notificationsUrl: string;\r\n\r\n /** Application version string (e.g. '1.4.0'), shown at the bottom of the navigation. */\r\n public version: string;\r\n\r\n constructor(baseUrl: string, options?: AppConfigOptions) {\r\n this.BASE_URL = baseUrl;\r\n this.appName = options?.appName ?? '';\r\n this.companyName = options?.companyName ?? '';\r\n this.environment = options?.environment ?? '';\r\n this.logoUrl = options?.logoUrl;\r\n this.notificationsEnabled = options?.notificationsEnabled ?? false;\r\n this.notificationsUrl = options?.notificationsUrl ?? '';\r\n this.version = options?.version ?? '';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DataGridConfigs, DataGridConfigsProvider } from '@zambon-dev/ui/library';\r\n\r\n@Injectable()\r\nexport class FrameworkGridConfigsProvider extends DataGridConfigsProvider {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n Object.assign(this.configs, {\r\n loadingDisplayText: 'Grid-Loading',\r\n messageOnEmpty: 'Grid-Message-Empty',\r\n messageOnFailed: 'Grid-Message-Failed',\r\n messageOnLazyLoad: 'Grid-Message-LazyLoad',\r\n } as DataGridConfigs);\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { FrameworkComponentsModule } from './components';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [FrameworkComponentsModule],\r\n})\r\n/**\r\n * @deprecated Use standalone component imports instead of FrameworkModule.\r\n * Import individual components directly in your component's `imports` array.\r\n */\r\nexport class FrameworkModule {}\r\n","import { HttpBackend } from '@angular/common/http';\r\nimport { EnvironmentProviders, Provider } from '@angular/core';\r\nimport { provideTranslateService, TranslateLoader } from '@ngx-translate/core';\r\nimport { MultiTranslateHttpLoader, TranslationResource } from 'ngx-translate-multi-http-loader';\r\n\r\nimport { AngularAssetPattern } from '@zambon-dev/ui/library';\r\n\r\nexport const ZAMBON_FRAMEWORK_I18N_ASSET_PATH = 'assets/i18n/zambon-dev/framework';\r\n\r\nexport const ZAMBON_FRAMEWORK_I18N_ASSET: AngularAssetPattern = {\r\n glob: '**/*.json',\r\n input: 'node_modules/@zambon-dev/ui/i18n/framework',\r\n output: ZAMBON_FRAMEWORK_I18N_ASSET_PATH,\r\n};\r\n\r\nexport const ZAMBON_FRAMEWORK_I18N_RESOURCES: TranslationResource[] = [\r\n { prefix: `/${ZAMBON_FRAMEWORK_I18N_ASSET_PATH}/`, suffix: '.json' },\r\n];\r\n\r\nexport interface ZambonFrameworkTranslateConfig {\r\n defaultLanguage?: string;\r\n appResources?: (string | TranslationResource)[];\r\n}\r\n\r\nexport function createZambonFrameworkTranslateLoader(\r\n httpBackend: HttpBackend,\r\n appResources: (string | TranslationResource)[] = [],\r\n): MultiTranslateHttpLoader {\r\n return new MultiTranslateHttpLoader(httpBackend, [...ZAMBON_FRAMEWORK_I18N_RESOURCES, ...appResources]);\r\n}\r\n\r\nexport function provideZambonFrameworkTranslateLoader(appResources: (string | TranslationResource)[] = []): Provider {\r\n return {\r\n provide: TranslateLoader,\r\n useFactory: (httpBackend: HttpBackend) => createZambonFrameworkTranslateLoader(httpBackend, appResources),\r\n deps: [HttpBackend],\r\n };\r\n}\r\n\r\nexport function provideZambonFrameworkTranslateService(\r\n config: ZambonFrameworkTranslateConfig = {},\r\n): EnvironmentProviders {\r\n return provideTranslateService({\r\n defaultLanguage: config.defaultLanguage,\r\n loader: provideZambonFrameworkTranslateLoader(config.appResources),\r\n });\r\n}\r\n","import { Component, OnDestroy, signal, WritableSignal } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class ViewBase implements OnDestroy {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n protected destroy$: Subject<boolean> = new Subject<boolean>();\r\n\r\n // A signal rather than a field: a view's own template reads `loading` to show its spinner,\r\n // and every assignment here happens inside a subscription. The accessors below keep their\r\n // old shape, so a subclass reading or writing `this.loading` needs no change; a subclass\r\n // template is better off reading `loadingState()` directly.\r\n protected readonly loadingState: WritableSignal<boolean> = signal(false);\r\n //#endregion\r\n\r\n //#region Properties\r\n public get loading(): boolean {\r\n return this.loadingState();\r\n }\r\n public set loading(value: boolean) {\r\n this.loadingState.set(value);\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n public ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { DataGridDataset, DataProviderService, MultiSelectResultDataset } from '@zambon-dev/ui/library';\r\nimport { skip, takeUntil } from 'rxjs';\r\nimport { ViewBase } from './view-base';\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class ChildList<TEntityModel> extends ViewBase implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n protected dataGridDataset: DataGridDataset;\r\n protected dataProvider: DataProviderService<TEntityModel> | null;\r\n protected resultDataset: MultiSelectResultDataset | null;\r\n protected selectionCount = 0;\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get isLoading(): boolean {\r\n return this.loading;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.dataGridDataset = inject(DataGridDataset);\r\n this.dataProvider = inject(DataProviderService, { optional: true });\r\n this.resultDataset = inject(MultiSelectResultDataset, { optional: true });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.dataGridDataset.loadStarted.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.loading = true;\r\n });\r\n\r\n this.dataGridDataset.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.loading = false;\r\n });\r\n\r\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.selectedRowChanged();\r\n });\r\n\r\n this.resultDataset?.savedChanges?.pipe(takeUntil(this.destroy$))?.subscribe(() => {\r\n this.dataGridDataset.refresh();\r\n });\r\n\r\n this.dataProvider\r\n ?.getModel$()\r\n .pipe(skip(1), takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.dataGridDataset.refresh();\r\n });\r\n\r\n if (this.dataProvider?.hasEntityID) {\r\n this.dataGridDataset.parentEntityId = this.dataProvider.entityID;\r\n\r\n if (!this.dataGridDataset.loadedRows) {\r\n this.dataGridDataset.refresh();\r\n }\r\n\r\n if (this.resultDataset) {\r\n this.resultDataset.parentEntityId = this.dataProvider.entityID;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n protected selectedRowChanged(): void {\r\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\r\n }\r\n //#endregion\r\n}\r\n","import { Component, inject, Input, OnInit } from '@angular/core';\r\nimport { DataGridDataset, MultiSelectResultDataset } from '@zambon-dev/ui/library';\r\nimport { takeUntil } from 'rxjs';\r\nimport { ViewBase } from './view-base';\r\n\r\n/**\r\n * @deprecated Use standalone {@link ChildList} instead. Migrate by extending ChildList\r\n * and using standalone component imports with inject() for dependency injection.\r\n */\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class ChildListLegacy extends ViewBase implements OnInit {\r\n private _entityId?: number;\r\n\r\n protected selectionCount = 0;\r\n\r\n get entityId(): number | undefined {\r\n return this._entityId;\r\n }\r\n @Input() set entityId(value: number | undefined) {\r\n if (this._entityId !== value) {\r\n this._entityId = value;\r\n this.dataGridDataset.parentEntityId = value;\r\n\r\n if (!this.dataGridDataset.loadedRows) {\r\n this.dataGridDataset.refresh();\r\n }\r\n\r\n if (this.resultDataset) {\r\n this.resultDataset.parentEntityId = value;\r\n }\r\n }\r\n }\r\n\r\n @Input() disabled = false;\r\n\r\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\r\n protected resultDataset: MultiSelectResultDataset | null = inject(MultiSelectResultDataset, { optional: true });\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dataGridDataset.loadStarted.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.loading = true;\r\n });\r\n\r\n this.dataGridDataset.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.loading = false;\r\n });\r\n\r\n if (!this.dataGridDataset.loadedRows) {\r\n this.loading = true;\r\n }\r\n\r\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.selectedRowChanged();\r\n });\r\n }\r\n\r\n selectedRowChanged(): void {\r\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\r\n }\r\n}\r\n","import { AfterViewInit, Component, inject, TemplateRef, ViewChild } from '@angular/core';\r\nimport { TabViewService } from '../services';\r\nimport { ViewBase } from './view-base';\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class TabViewBase extends ViewBase implements AfterViewInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n @ViewChild('ribbon') private ribbonTemplate?: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Variables\r\n private tabViewService: TabViewService | null;\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n // This will force the screen to initialize with the buttons disabled.\r\n this.loading = true;\r\n this.tabViewService = inject(TabViewService, { optional: true });\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.tabViewService?.updateRibbonTemplate(this.ribbonTemplate);\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { DataProviderService, FormService } from '@zambon-dev/ui/library';\r\nimport { take, takeUntil } from 'rxjs';\r\nimport { TabViewBase } from './tabview-base';\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class FormView<TEntityModel> extends TabViewBase implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n protected dataForm!: FormGroup;\r\n protected dataProvider: DataProviderService<TEntityModel> | null;\r\n protected formBuilder: FormBuilder;\r\n protected formService: FormService;\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get hasEntityID(): boolean {\r\n return this.dataProvider?.hasEntityID ?? false;\r\n }\r\n\r\n protected get isLoading(): boolean {\r\n return this.formService.loading;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.dataProvider = inject(DataProviderService, { optional: true });\r\n this.formBuilder = inject(FormBuilder);\r\n this.formService = inject(FormService);\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.dataForm = this.formSetup();\r\n this.formService.initializeForm(this.dataForm);\r\n\r\n this.formService.loading = true;\r\n this.dataProvider\r\n ?.getModel$()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((model: TEntityModel | null) => {\r\n this.formService.loading = false;\r\n this.formService.model = model;\r\n this.formService.resetForm();\r\n\r\n if (!this.dataProvider?.hasEntityID) {\r\n this.formService.beginEdit();\r\n }\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n protected abstract formSetup(): FormGroup;\r\n //#endregion\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Component, inject, Input, OnInit, signal, WritableSignal } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { DataProviderService, FormService } from '@zambon-dev/ui/library';\r\nimport { Observable, take, tap, throwError } from 'rxjs';\r\nimport { ViewBase } from '../view-base';\r\n\r\n/**\r\n * @deprecated Use standalone {@link FormView} instead. Migrate by extending FormView\r\n * and using standalone component imports with inject() for dependency injection.\r\n */\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class LegacySubViewForm extends ViewBase implements OnInit {\r\n @Input() entityId?: number;\r\n @Input() set model(value: any | null) {\r\n if (this._model !== value) {\r\n this._model = value;\r\n\r\n if (this.dataForm) {\r\n this.dataForm.patchValue(this.model);\r\n }\r\n }\r\n }\r\n\r\n override get loading(): boolean {\r\n return false;\r\n return this.formService.loading;\r\n }\r\n\r\n override set loading(value: boolean) {\r\n this.formService.loading = value;\r\n }\r\n\r\n get isNew(): boolean {\r\n return !this.entityId;\r\n }\r\n\r\n // A signal rather than a field: the legacy edit and save buttons decide what to render from\r\n // `form.viewMode`, and this flips inside beginEdit/cancelEdit with nothing marking their views\r\n // dirty. The accessors keep the old shape.\r\n get viewMode(): 'view' | 'edit' {\r\n return this._viewMode();\r\n }\r\n\r\n set viewMode(value: 'view' | 'edit') {\r\n this._viewMode.set(value);\r\n }\r\n get model(): any | null {\r\n return this._model;\r\n }\r\n\r\n dataForm!: FormGroup;\r\n\r\n private _model: any | null = null;\r\n private readonly _viewMode: WritableSignal<'view' | 'edit'> = signal('view');\r\n\r\n protected dataProvider: DataProviderService<any> | null;\r\n\r\n constructor(\r\n protected formBuilder: FormBuilder,\r\n protected formService: FormService,\r\n ) {\r\n super();\r\n\r\n this.dataProvider = inject(DataProviderService, { optional: true });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dataForm = this.formSetup();\r\n\r\n this.updateModel(this.model);\r\n\r\n if (this.dataProvider) {\r\n this.formService.loading = true;\r\n\r\n this.dataProvider\r\n .getModel$()\r\n .pipe(take(1))\r\n .subscribe((_: any) => {\r\n this.formService.loading = false;\r\n });\r\n }\r\n }\r\n\r\n protected updateModel(model: any): void {\r\n this._model = model;\r\n\r\n if (this.isNew) {\r\n this.beginEdit();\r\n } else {\r\n this.cancelEdit();\r\n }\r\n }\r\n\r\n beginEdit(resetValues = true): void {\r\n setTimeout(() => {\r\n this.viewMode = 'edit';\r\n this.dataForm.enable();\r\n\r\n if (resetValues) {\r\n this.dataForm.patchValue(this.model);\r\n }\r\n });\r\n }\r\n\r\n cancelEdit(): void {\r\n this.viewMode = 'view';\r\n this.dataForm.patchValue(this.model);\r\n this.dataForm.disable();\r\n }\r\n\r\n /** Extension point: subclasses override this to validate before save. */\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars\r\n protected validate(_formModel: any): void {}\r\n\r\n save(): Observable<any> {\r\n this.validate(this.dataForm.getRawValue());\r\n\r\n if (this.dataForm.valid) {\r\n this.dataForm.disable();\r\n\r\n return this.saveModel().pipe(tap(() => this.dataForm.enable()));\r\n } else {\r\n this.dataForm.markAllAsTouched();\r\n return throwError(() => new HttpErrorResponse({ error: { message: 'Form invalid', errors: null }, status: 400 }));\r\n }\r\n }\r\n\r\n protected abstract formSetup(): FormGroup;\r\n protected abstract saveModel(): Observable<any>;\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { ITabView, RouterFormatter } from '@zambon-dev/ui/library';\r\nimport { TabService } from '../../services';\r\nimport { ViewBase } from '../view-base';\r\n\r\n/**\r\n * @deprecated Use standalone {@link TabViewBase} instead. Migrate by extending TabViewBase\r\n * and using standalone component imports with inject() for dependency injection.\r\n */\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class LegacyTabViewBase extends ViewBase implements OnInit, ITabView {\r\n title = '';\r\n url: string;\r\n activeView?: string;\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected tabService: TabService,\r\n ) {\r\n super();\r\n\r\n this.url = RouterFormatter.getURL(this.route.snapshot);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.openTabView();\r\n }\r\n\r\n protected openTabView() {\r\n // this.tabService.openView(this);\r\n }\r\n\r\n protected updateTitle(title: string): void {\r\n this.title = title;\r\n this.tabService.updateTabTitle(this.url, title);\r\n }\r\n}\r\n","import { AfterViewInit, Component, forwardRef, ViewChild, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { FormService, IRibbonButtonOption } from '@zambon-dev/ui/library';\r\nimport { Observable, takeUntil } from 'rxjs';\r\nimport { ButtonNewLegacyComponent } from '../../components';\r\nimport { Tab } from '../../models';\r\nimport { TabService } from '../../services';\r\nimport { LegacyTabViewBase } from './legacy-tabview-base';\r\n\r\n/**\r\n * @deprecated Use standalone {@link TabViewBase} with {@link DefaultDetailsTabViewComponent} pattern instead.\r\n * Migrate by extending TabViewBase and composing detail/history views as child routes\r\n * with standalone component imports.\r\n */\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class LegacyTabViewDetails extends LegacyTabViewBase implements AfterViewInit, OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n // A forward reference: the legacy buttons import the views barrel, so this class is defined before\r\n // ButtonNewLegacyComponent -- and in the published bundle it sits further down the file, where\r\n // reading it eagerly throws the moment a JIT runtime such as Jest loads the package.\r\n @ViewChild(forwardRef(() => ButtonNewLegacyComponent)) public buttonNew!: ButtonNewLegacyComponent;\r\n //#endregion\r\n\r\n //#region Variables\r\n public override title = '';\r\n\r\n protected defaultView = 'details';\r\n protected entityId?: number;\r\n protected views: IRibbonButtonOption[] = [\r\n { id: 'details', label: 'Button-Views-Details', icon: 'fa-dice-d6' },\r\n { id: 'history', label: 'Button-Views-History', icon: 'fa-history' },\r\n ];\r\n //#endregion\r\n\r\n //#region Properties\r\n public override get loading(): boolean {\r\n return super.loading;\r\n }\r\n\r\n public override set loading(value: boolean) {\r\n super.loading = value;\r\n this.formService.loading = value;\r\n }\r\n\r\n protected get currentView(): string {\r\n return this.activeView ?? this.defaultView;\r\n }\r\n\r\n protected get model(): any {\r\n return this.formService.model;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor(\r\n route: ActivatedRoute,\r\n tabService: TabService,\r\n protected formService: FormService,\r\n ) {\r\n super(route, tabService);\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.onViewVisible();\r\n }\r\n\r\n public override ngOnInit(): void {\r\n this.refreshParameters();\r\n\r\n super.ngOnInit();\r\n\r\n this.formService.modelRefreshed.pipe(takeUntil(this.destroy$)).subscribe((_: any) => {\r\n const id: number | null = this.getModelId();\r\n if (id && this.entityId !== id) {\r\n this.entityId = id;\r\n this.tabService.redirectCurrentTab(`${this.url.substring(0, this.url.indexOf('/new'))}/${id}`);\r\n }\r\n\r\n this.updateTitle(this.getModelDescription());\r\n });\r\n\r\n this.refresh();\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n protected override openTabView(): void {\r\n super.openTabView();\r\n\r\n const activeView: IRibbonButtonOption | undefined = this.views.find(\r\n (view: IRibbonButtonOption) => view.id === this.activeView,\r\n );\r\n if (activeView) {\r\n activeView.isDisabled = true;\r\n }\r\n }\r\n\r\n protected refresh(): void {\r\n this.loading = true;\r\n this.title = '';\r\n this.formService.model = null;\r\n\r\n this.loadModel()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((model) => {\r\n this.loading = false;\r\n this.formService.model = model;\r\n });\r\n }\r\n protected refreshParameters(): void {\r\n const currentID: string | null = this.route.snapshot.paramMap.get('id');\r\n this.entityId = currentID ? Number(currentID) : undefined;\r\n\r\n const viewID: string | null = this.route.snapshot.paramMap.get('view');\r\n if (!viewID || !this.views.some((view: IRibbonButtonOption) => view.id === viewID)) {\r\n this.switchView(this.defaultView);\r\n } else {\r\n this.activeView = viewID;\r\n }\r\n }\r\n protected switchView(viewId?: string): void {\r\n if (!viewId) {\r\n viewId = this.defaultView;\r\n }\r\n\r\n const activeView: IRibbonButtonOption | undefined = this.views.find(\r\n (view: IRibbonButtonOption) => view.id === (this.activeView ?? this.defaultView),\r\n );\r\n if (activeView) {\r\n activeView.isDisabled = false;\r\n }\r\n\r\n const newView: IRibbonButtonOption | undefined = this.views.find((view: IRibbonButtonOption) => view.id === viewId);\r\n if (newView) {\r\n newView.isDisabled = true;\r\n\r\n const urlViewPath: string = viewId === this.defaultView ? '' : `/${viewId}`;\r\n let url: string = this.url;\r\n if (this.activeView && url.endsWith(this.activeView)) {\r\n url = url.replace(`/${this.activeView}`, urlViewPath);\r\n } else {\r\n url += urlViewPath;\r\n }\r\n this.tabService.navigateCurrentTab(new Tab({ url }));\r\n // this.tabService.changeTabView(this, viewId !== this.defaultView ? viewId : undefined);\r\n\r\n this.activeView = newView.id;\r\n\r\n // if (!this.activeView) {\r\n // this.activeView = this.defaultView;\r\n // }\r\n }\r\n\r\n this.onViewVisible();\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n\r\n //#region Abstract methods\r\n protected abstract getModelDescription(): string;\r\n protected abstract getModelId(): number | null;\r\n protected abstract loadModel(): Observable<any | null>;\r\n protected abstract newModel(): any;\r\n protected abstract onViewVisible(): void;\r\n //#endregion\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { DataGridDataset } from '@zambon-dev/ui/library';\r\nimport { takeUntil } from 'rxjs';\r\nimport { TabService } from '../../services';\r\nimport { LegacyTabViewBase } from './legacy-tabview-base';\r\n\r\n/**\r\n * @deprecated Use standalone {@link TabViewList} instead. Migrate by extending TabViewList\r\n * and using standalone component imports with inject() for dependency injection.\r\n */\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class LegacyTabViewList<TListModel> extends LegacyTabViewBase implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n private _selectedItem?: TListModel;\r\n private selectedRows = 0;\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get hasRowsSelected(): boolean {\r\n return this.selectedRows > 0;\r\n }\r\n\r\n protected get selectedItem(): TListModel | undefined {\r\n return this._selectedItem;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor(\r\n protected dataGridDataset: DataGridDataset,\r\n route: ActivatedRoute,\r\n tabService: TabService,\r\n ) {\r\n super(route, tabService);\r\n\r\n // This will force the screen to initialize with the buttons disabled.\r\n this.loading = true;\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n this.dataGridDataset.loadStarted.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.loading = true;\r\n });\r\n\r\n this.dataGridDataset.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n setTimeout(() => (this.loading = false));\r\n });\r\n\r\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.selectedRowChanged();\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n protected selectedRowChanged(): void {\r\n this.selectedRows = this.dataGridDataset.selectedRowKeys.length;\r\n\r\n this._selectedItem = undefined;\r\n if (this.selectedRows === 1) {\r\n this._selectedItem = <TListModel>this.dataGridDataset.getRowData(this.dataGridDataset.selectedRowKeys[0]);\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { DataGridDataset } from '@zambon-dev/ui/library';\r\nimport { takeUntil } from 'rxjs';\r\nimport { TabViewBase } from './tabview-base';\r\n\r\n// The host class is inherited by every subclass (Angular merges hostAttrs from a base component\r\n// definition), which is what lets DefaultTabViewComponent give routed list screens a full-height\r\n// layout without each one declaring its own stylesheet. Plain class name, NOT Tailwind utilities:\r\n// library SCSS resolves @apply at library-build time, whereas a utility class named here would\r\n// have to be generated by each consumer's own Tailwind build.\r\n//\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ host: { class: 'framework-view-list' }, template: '' })\r\nexport abstract class TabViewList<TListModel> extends TabViewBase implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n protected dataGridDataset: DataGridDataset;\r\n\r\n private _selectedItem?: TListModel;\r\n private selectionCount = 0;\r\n //#endregion\r\n\r\n //#region Properties\r\n protected get hasRowsSelected(): boolean {\r\n return this.selectionCount > 0;\r\n }\r\n\r\n protected get selectedItem(): TListModel | undefined {\r\n return this._selectedItem;\r\n }\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.dataGridDataset = inject(DataGridDataset);\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.dataGridDataset.loadStarted.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.loading = true;\r\n });\r\n\r\n this.dataGridDataset.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n setTimeout(() => (this.loading = false));\r\n });\r\n\r\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.selectedRowChanged();\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n protected selectedRowChanged(): void {\r\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\r\n\r\n this._selectedItem = undefined;\r\n if (this.selectionCount === 1) {\r\n this._selectedItem = <TListModel>this.dataGridDataset.getRowData(this.dataGridDataset.selectedRowKeys[0]);\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { DataProviderService, MultiSelectResultDataset } from '@zambon-dev/ui/library';\r\nimport { TabViewList } from './tabview-list';\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class ListView<TEntityModel, TListModel> extends TabViewList<TListModel> implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n //#endregion\r\n\r\n //#region Variables\r\n protected dataProvider: DataProviderService<TEntityModel> | null;\r\n protected resultDataset: MultiSelectResultDataset | null;\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.dataProvider = inject(DataProviderService, { optional: true });\r\n this.resultDataset = inject(MultiSelectResultDataset, { optional: true });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n if (this.dataProvider?.hasEntityID) {\r\n this.dataGridDataset.parentEntityId = this.dataProvider.entityID;\r\n\r\n if (!this.dataGridDataset.loadedRows) {\r\n this.dataGridDataset.refresh();\r\n }\r\n\r\n if (this.resultDataset) {\r\n this.resultDataset.parentEntityId = this.dataProvider.entityID;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n //#endregion\r\n\r\n //#region Private methods\r\n //#endregion\r\n}\r\n","import { ViewBase } from '../view-base';\r\n\r\nexport abstract class ModalBase extends ViewBase {\r\n abstract toggle(): void;\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { DataGridDataset, MultiEditorComponent, MultiEditorDataset } from '@zambon-dev/ui/library';\r\nimport { takeUntil } from 'rxjs';\r\nimport { ModalBase } from './modal-base';\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class MultiEditorLegacyModal extends ModalBase implements OnInit {\r\n protected _entityId?: number;\r\n\r\n @ViewChild(MultiEditorComponent) multiEditor!: MultiEditorComponent;\r\n\r\n @Input() set entityId(value: number | undefined) {\r\n if (this._entityId !== value) {\r\n this._entityId = value;\r\n this.dataGridDataset.parentEntityId = value;\r\n this.multiEditorDataset.parentEntityId = value;\r\n }\r\n }\r\n\r\n @Output() savedChanges = new EventEmitter();\r\n\r\n form!: FormGroup;\r\n\r\n constructor(\r\n protected dataGridDataset: DataGridDataset,\r\n protected multiEditorDataset: MultiEditorDataset,\r\n protected formBuilder: FormBuilder,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form = this.formSetup();\r\n\r\n this.multiEditorDataset.savedChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.savedChanges.emit();\r\n });\r\n }\r\n\r\n toggle(): void {\r\n this.multiEditor.toggleModal();\r\n }\r\n\r\n abstract formSetup(): FormGroup;\r\n}\r\n","import { Component, EventEmitter, inject, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport {\r\n DataGridDataset,\r\n DataProviderService,\r\n FormService,\r\n MultiEditorComponent,\r\n MultiEditorDataset,\r\n} from '@zambon-dev/ui/library';\r\nimport { takeUntil } from 'rxjs';\r\nimport { ModalBase } from './modal-base';\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class MultiEditorModal<TEntityModel> extends ModalBase implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n @ViewChild(MultiEditorComponent) protected multiEditor!: MultiEditorComponent;\r\n\r\n @Input() public overrideParentID?: number;\r\n\r\n @Output() public savedChanges: EventEmitter<any> = new EventEmitter();\r\n //#endregion\r\n\r\n //#region Variables\r\n protected dataForm!: FormGroup;\r\n protected dataGridDataset: DataGridDataset;\r\n protected dataProvider: DataProviderService<TEntityModel> | null;\r\n protected formBuilder: FormBuilder;\r\n protected formService: FormService;\r\n protected multiEditorDataset: MultiEditorDataset;\r\n protected selectionCount = 0;\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.dataGridDataset = inject(DataGridDataset);\r\n this.dataProvider = inject(DataProviderService, { optional: true });\r\n this.formBuilder = inject(FormBuilder);\r\n this.formService = inject(FormService);\r\n this.multiEditorDataset = inject(MultiEditorDataset);\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.dataForm = this.formSetup();\r\n this.formService.initializeForm(this.dataForm);\r\n\r\n this.multiEditorDataset.savedChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n this.savedChanges.emit();\r\n });\r\n\r\n this.updateParentID();\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public toggle(): void {\r\n if (!this.multiEditor.isOpen()) {\r\n this.updateParentID();\r\n }\r\n\r\n this.multiEditor.toggleModal();\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n protected abstract formSetup(): FormGroup;\r\n\r\n private updateParentID(): void {\r\n let parentID: number | undefined = this.dataProvider?.entityID;\r\n if (this.overrideParentID) {\r\n parentID = this.overrideParentID;\r\n }\r\n\r\n if (parentID) {\r\n this.dataGridDataset.parentEntityId = parentID;\r\n this.multiEditorDataset.parentEntityId = parentID;\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\r\nimport { MultiSelectComponent } from '@zambon-dev/ui/library';\r\nimport { ModalBase } from './modal-base';\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class MultiSelectModal extends ModalBase {\r\n @ViewChild(MultiSelectComponent) multiSelect!: MultiSelectComponent;\r\n @Output() public savedChanges: EventEmitter<void> = new EventEmitter();\r\n\r\n toggle(): void {\r\n this.multiSelect.toggleModal();\r\n }\r\n}\r\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { FormService, IModal } from '@zambon-dev/ui/library';\r\nimport { Observable, Subject, switchMap, takeUntil } from 'rxjs';\r\nimport { ModalBase } from './modal-base';\r\n\r\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\r\n// describe a class that is never instantiated, while every subclass compiles to whatever it\r\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\r\n// Angular, never from this decorator. See docs/guides/reactivity.md.\r\n@Component({ template: '' })\r\nexport abstract class ViewModal<TEntityModel> extends ModalBase implements OnInit {\r\n //#region ViewChilds, Inputs, Outputs\r\n @ViewChild('modal') protected modalComponent!: IModal;\r\n //#endregion\r\n\r\n //#region Variables\r\n protected beginEditOnEntityLoad = false;\r\n protected data$: Observable<TEntityModel | null>;\r\n protected dataForm!: FormGroup;\r\n protected formBuilder: FormBuilder;\r\n protected formService: FormService;\r\n protected selectionCount = 0;\r\n\r\n private entityIdSubject: Subject<number | undefined> = new Subject<number | undefined>();\r\n //#endregion\r\n\r\n //#region Properties\r\n //#endregion\r\n\r\n //#region Constructor and Angular life cycle methods\r\n constructor() {\r\n super();\r\n\r\n this.formBuilder = inject(FormBuilder);\r\n this.formService = inject(FormService);\r\n\r\n this.data$ = this.entityIdSubject.pipe(switchMap((entityID: number | undefined) => this.loadData(entityID)));\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.dataForm = this.formSetup();\r\n this.formService.initializeForm(this.dataForm);\r\n\r\n this.data$.pipe(takeUntil(this.destroy$)).subscribe((data: TEntityModel | null) => {\r\n this.formService.model = data;\r\n this.formService.loading = false;\r\n this.dataForm.patchValue(<any>data);\r\n\r\n if (this.beginEditOnEntityLoad) {\r\n this.formService.beginEdit();\r\n }\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Event handlers\r\n //#endregion\r\n\r\n //#region Public methods\r\n public toggle(entityID?: number): void {\r\n this.formService.model = null;\r\n this.formService.loading = true;\r\n this.dataForm.reset();\r\n\r\n if (!this.modalComponent.isOpen()) {\r\n this.entityIdSubject.next(entityID);\r\n } else {\r\n this.formService.resetForm();\r\n }\r\n this.modalComponent.toggleModal();\r\n }\r\n //#endregion\r\n\r\n //#region Private methods\r\n protected abstract formSetup(): FormGroup;\r\n\r\n protected abstract loadData(entityID?: number): Observable<TEntityModel | null>;\r\n //#endregion\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i2.TabService","i3","i3.TabService"],"mappings":"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"}
1
+ {"version":3,"file":"zambon-dev-ui-framework.mjs","names":[],"sources":["../../../../libs/ui/src/framework/services/auth.service.ts","../../../../libs/ui/src/framework/services/custom-reuse-strategy.ts","../../../../libs/ui/src/framework/services/tab-view.service.ts","../../../../libs/ui/src/framework/services/tab.service.ts","../../../../libs/ui/src/framework/components/buttons/base-button.ts","../../../../libs/ui/src/framework/components/buttons/base-form-view-button.ts","../../../../libs/ui/src/framework/helpers/backend-form-validation-helper.ts","../../../../libs/ui/src/framework/helpers/route-helper.ts","../../../../libs/ui/src/framework/components/modals/confirm-modal/confirm-modal.component.ts","../../../../libs/ui/src/framework/components/modals/confirm-modal/confirm-modal.component.html","../../../../libs/ui/src/framework/components/modals/error-modal/error-modal.component.ts","../../../../libs/ui/src/framework/components/modals/error-modal/error-modal.component.html","../../../../libs/ui/src/framework/components/modals/modals.module.ts","../../../../libs/ui/src/framework/components/buttons/button-confirm/button-confirm.component.ts","../../../../libs/ui/src/framework/components/buttons/button-confirm/button-confirm.component.html","../../../../libs/ui/src/framework/components/buttons/button-delete/button-delete.component.ts","../../../../libs/ui/src/framework/components/buttons/button-delete/button-delete.component.html","../../../../libs/ui/src/framework/components/buttons/button-edit/button-edit.component.ts","../../../../libs/ui/src/framework/components/buttons/button-edit/button-edit.component.html","../../../../libs/ui/src/framework/components/buttons/button-export/button-export.component.ts","../../../../libs/ui/src/framework/components/buttons/button-export/button-export.component.html","../../../../libs/ui/src/framework/components/buttons/button-filters/button-filters.component.ts","../../../../libs/ui/src/framework/components/buttons/button-filters/button-filters.component.html","../../../../libs/ui/src/framework/models/route-data.ts","../../../../libs/ui/src/framework/models/tab.ts","../../../../libs/ui/src/framework/components/buttons/button-new/button-new.component.ts","../../../../libs/ui/src/framework/components/buttons/button-new/button-new.component.html","../../../../libs/ui/src/framework/components/buttons/button-open-record/button-open-record.component.ts","../../../../libs/ui/src/framework/components/buttons/button-open-record/button-open-record.component.html","../../../../libs/ui/src/framework/components/buttons/button-refresh/button-refresh.component.ts","../../../../libs/ui/src/framework/components/buttons/button-refresh/button-refresh.component.html","../../../../libs/ui/src/framework/components/buttons/button-save/button-save.component.ts","../../../../libs/ui/src/framework/components/buttons/button-save/button-save.component.html","../../../../libs/ui/src/framework/components/buttons/button-views/button-views.component.ts","../../../../libs/ui/src/framework/components/buttons/button-views/button-views.component.html","../../../../libs/ui/src/framework/components/buttons/button/button.component.ts","../../../../libs/ui/src/framework/components/buttons/button/button.component.html","../../../../libs/ui/src/framework/components/buttons/legacy/button-edit/button-edit.component.ts","../../../../libs/ui/src/framework/components/buttons/legacy/button-edit/button-edit.component.html","../../../../libs/ui/src/framework/components/buttons/legacy/button-new/button-new.component.ts","../../../../libs/ui/src/framework/components/buttons/legacy/button-new/button-new.component.html","../../../../libs/ui/src/framework/components/buttons/legacy/button-open-record/button-open-record.component.ts","../../../../libs/ui/src/framework/components/buttons/legacy/button-open-record/button-open-record.component.html","../../../../libs/ui/src/framework/components/buttons/legacy/button-save/button-save.component.ts","../../../../libs/ui/src/framework/components/buttons/legacy/button-save/button-save.component.html","../../../../libs/ui/src/framework/components/buttons/legacy/button-views/button-views.component.ts","../../../../libs/ui/src/framework/components/buttons/legacy/button-views/button-views.component.html","../../../../libs/ui/src/framework/components/buttons/buttons.module.ts","../../../../libs/ui/src/framework/components/views/default-tab-view/default-tab-view.component.ts","../../../../libs/ui/src/framework/components/views/default-tab-view/default-tab-view.component.html","../../../../libs/ui/src/framework/components/views/default-details-tab-view/default-details-tab-view.component.ts","../../../../libs/ui/src/framework/components/views/default-details-tab-view/default-details-tab-view.component.html","../../../../libs/ui/src/framework/components/views/tab-breadcrumbs/tab-breadcrumbs.component.ts","../../../../libs/ui/src/framework/components/views/tab-breadcrumbs/tab-breadcrumbs.component.html","../../../../libs/ui/src/framework/components/views/tabs/tabs.component.ts","../../../../libs/ui/src/framework/components/views/tabs/tabs.component.html","../../../../libs/ui/src/framework/components/views/views.module.ts","../../../../libs/ui/src/framework/components/components.module.ts","../../../../libs/ui/src/framework/configs/app-config.ts","../../../../libs/ui/src/framework/configs-providers/grid-configs.provider.ts","../../../../libs/ui/src/framework/framework.module.ts","../../../../libs/ui/src/framework/i18n/framework-i18n.ts","../../../../libs/ui/src/framework/views/view-base.ts","../../../../libs/ui/src/framework/views/child-list.ts","../../../../libs/ui/src/framework/views/child-list-legacy.ts","../../../../libs/ui/src/framework/views/tabview-base.ts","../../../../libs/ui/src/framework/views/form-view.ts","../../../../libs/ui/src/framework/views/legacy/legacy-sub-view-form.ts","../../../../libs/ui/src/framework/views/legacy/legacy-tabview-base.ts","../../../../libs/ui/src/framework/views/legacy/legacy-tabview-details.ts","../../../../libs/ui/src/framework/views/legacy/legacy-tabview-list.ts","../../../../libs/ui/src/framework/views/tabview-list.ts","../../../../libs/ui/src/framework/views/list-view.ts","../../../../libs/ui/src/framework/views/modals/modal-base.ts","../../../../libs/ui/src/framework/views/modals/multi-editor-legacy.modal.ts","../../../../libs/ui/src/framework/views/modals/multi-editor.modal.ts","../../../../libs/ui/src/framework/views/modals/multi-select.modal.ts","../../../../libs/ui/src/framework/views/modals/view.modal.ts"],"sourcesContent":["import { JwtHelperService } from '@auth0/angular-jwt';\nimport { map, Observable, of, ReplaySubject, switchMap, take } from 'rxjs';\nimport { TabService } from './tab.service';\n\nconst ADMINISTRATIVE_MASTER_ACTION = 'AdministrativeMaster';\n\nexport abstract class AuthService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private actionsCache$: ReplaySubject<string[]> = new ReplaySubject<string[]>(1);\n private isActionsCacheInitialized = false;\n //#endregion\n\n //#region Properties\n public abstract get adminAction(): string;\n public get isAuthenticated(): boolean {\n return this.username !== null;\n }\n public get isTokenExpired(): boolean {\n return this.token !== null && this.jwtHelper.isTokenExpired(this.token);\n }\n public get token(): string | null {\n return localStorage.getItem('token') ?? sessionStorage.getItem('token');\n }\n public get userID(): number | undefined {\n return 0;\n }\n protected get refreshToken(): string | null {\n return localStorage.getItem('refreshToken') ?? sessionStorage.getItem('refreshToken');\n }\n protected get userInfo(): string | null {\n return localStorage.getItem('userInfo') ?? sessionStorage.getItem('userInfo');\n }\n protected get username(): string | null {\n return localStorage.getItem('username') ?? sessionStorage.getItem('username');\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n protected jwtHelper: JwtHelperService,\n protected tabService: TabService,\n ) {}\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public checkActionIsAllowed(actionToCheck: string): Observable<boolean> {\n if (!this.isActionsCacheInitialized) {\n this.isActionsCacheInitialized = true;\n\n this.getActions()\n .pipe(take(1))\n .subscribe((actions: string[]) => {\n this.actionsCache$.next(actions);\n });\n }\n\n return this.actionsCache$.pipe(\n map((actions: string[]) => actions.includes(this.adminAction) || actions.includes(actionToCheck)),\n );\n }\n\n public checkActionsAreAllowed(actionsToCheck: string[], checkForAdministrativeMaster = true): Observable<boolean[]> {\n if (!this.isActionsCacheInitialized) {\n this.isActionsCacheInitialized = true;\n\n this.getActions()\n .pipe(take(1))\n .subscribe((actions: string[]) => {\n this.actionsCache$.next(actions);\n });\n }\n\n return this.actionsCache$.pipe(\n switchMap((actions: string[]) =>\n of(\n actionsToCheck.map(\n (actionsToCheck: string) =>\n (checkForAdministrativeMaster && actions.indexOf(ADMINISTRATIVE_MASTER_ACTION) >= 0) ||\n actions.indexOf(actionsToCheck) >= 0,\n ),\n ),\n ),\n );\n }\n\n public signOut(): void {\n localStorage.clear();\n sessionStorage.clear();\n\n this.tabService.closeAllTabs();\n this.resetActionsCache();\n }\n\n protected setStorage(\n key: 'username' | 'token' | 'refreshToken' | 'userInfo',\n value: string | null,\n useLocalStorage: boolean | null = null,\n ) {\n if (useLocalStorage === null) {\n useLocalStorage = sessionStorage.getItem(key) === null;\n }\n\n if (value) {\n if (useLocalStorage) {\n localStorage.setItem(key, value);\n } else {\n sessionStorage.setItem(key, value);\n }\n } else {\n localStorage.removeItem(key);\n sessionStorage.removeItem(key);\n }\n }\n //#endregion\n\n //#region Private methods\n protected resetActionsCache(): void {\n this.isActionsCacheInitialized = false;\n this.actionsCache$ = new ReplaySubject<string[]>(1);\n }\n //#endregion\n\n //#region Abstract methods\n public abstract getActions(): Observable<string[]>;\n //#endregion\n}\n","import { ApplicationRef, Inject, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy, UrlSegment } from '@angular/router';\nimport { TabService } from './tab.service';\n\n@Inject({})\nexport class CustomReuseStrategy implements RouteReuseStrategy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public clones: { [key: string]: string } = {};\n public redirects: { [key: string]: string } = {};\n public tabService?: TabService;\n\n private applicationRef: ApplicationRef = inject(ApplicationRef);\n private cachedHandles: { [key: string]: DetachedRouteHandle | null } = {};\n private componentIDs: WeakMap<object, number> = new WeakMap<object, number>();\n private nextComponentID = 1;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clearAllHandles(): void {\n this.cachedHandles = {};\n }\n\n public clearHandle(url: string): void {\n const keysToRemove: string[] = Object.keys(this.cachedHandles).filter((key: string) => key.startsWith(`${url}-`));\n\n keysToRemove.forEach((key: string) => {\n const handle: DetachedRouteHandle | null = this.cachedHandles[key];\n\n if (handle) {\n if ((<any>handle)?.componentRef?.instance?.ngOnDestroy) {\n (<any>handle).componentRef.instance.ngOnDestroy();\n }\n }\n delete this.cachedHandles[key];\n });\n }\n\n public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n if (!route.component) {\n return null;\n }\n\n const cacheKey: string = this.getCacheKey(route);\n const handle: DetachedRouteHandle | null = this.cachedHandles[cacheKey];\n\n if (handle) {\n // Schedule global change detection after Angular finishes reattaching the component.\n // Without this, reattached components may render stale views (e.g., empty ribbon)\n // because NgTemplateOutlet does not re-create its embedded view automatically.\n // ApplicationRef.tick() ensures the entire app tree is checked, including embedded views.\n setTimeout(() => {\n this.applicationRef.tick();\n });\n }\n\n return handle;\n }\n\n public shouldAttach(route: ActivatedRouteSnapshot): boolean {\n const url: string = this.getUrlFromRoute(route);\n const hasComponent = !!route.component;\n\n if ((this.tabService?.isUrlOpen(url) ?? false) && hasComponent) {\n const cacheKey: string = this.getCacheKey(route);\n const isCached = !!this.cachedHandles[cacheKey];\n return isCached;\n }\n return false;\n }\n\n public shouldDetach(route: ActivatedRouteSnapshot): boolean {\n const url: string = this.getUrlFromRoute(route);\n const hasComponent = !!route.component;\n\n return (this.tabService?.isUrlOpen(url) ?? false) && hasComponent;\n }\n\n public shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean {\n const futureUrl: string = this.getUrlFromRoute(future);\n const currentUrl: string = this.getUrlFromRoute(current);\n\n return (\n (futureUrl === currentUrl && future.routeConfig === current.routeConfig) ||\n this.redirects[currentUrl] === futureUrl ||\n this.clones[futureUrl] === currentUrl\n );\n }\n\n public store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {\n const cacheKey: string = this.getCacheKey(route);\n this.cachedHandles[cacheKey] = handle;\n }\n //#endregion\n\n //#region Private methods\n private getCacheKey(route: ActivatedRouteSnapshot): string {\n let url: string = this.getUrlFromRoute(route);\n if (this.clones[url]) {\n url = this.clones[url];\n }\n\n // The component is identified by identity, never by name. A production build renames every\n // class: esbuild wraps each component as `X = (() => { class i { } return i; })()`, so\n // `component.name` is a single mangled letter that the whole chunk shares. Nested empty-path\n // routes already resolve to the same URL, because an empty path contributes no segment, so a\n // key built from the name collapsed a screen's tab view and its list into one entry: storing\n // one overwrote the other, both levels were then handed the same detached view, and Angular\n // blew the stack building a router state whose node was its own descendant. That reproduced\n // only in a minified build, and only on the screens whose chunk happened to mangle to the\n // same letter as the framework's.\n //\n // The depth is part of the key too, so two sibling routes sharing a component type under one\n // URL cannot collide either.\n return `${url}-${this.getRouteDepth(route)}-${this.getComponentID(route.component)}`;\n }\n\n private getComponentID(component: ActivatedRouteSnapshot['component']): number {\n if (typeof component !== 'function') {\n return 0;\n }\n\n let componentID: number | undefined = this.componentIDs.get(component);\n if (componentID === undefined) {\n componentID = this.nextComponentID++;\n this.componentIDs.set(component, componentID);\n }\n\n return componentID;\n }\n\n private getRouteDepth(route: ActivatedRouteSnapshot): number {\n let depth = 0;\n let current: ActivatedRouteSnapshot | null = route.parent;\n\n while (current) {\n depth++;\n current = current.parent;\n }\n\n return depth;\n }\n\n private getUrlFromRoute(route: ActivatedRouteSnapshot): string {\n const segments: string[] = [];\n\n const buildRoute: (route: ActivatedRouteSnapshot | null) => void = (route: ActivatedRouteSnapshot | null): void => {\n if (route) {\n if (route.url.length) {\n segments.push(...route.url.map((segment: UrlSegment) => segment.path));\n }\n buildRoute(route.parent);\n }\n };\n\n buildRoute(route);\n\n return `/${segments.reverse().join('/')}`;\n }\n //#endregion\n}\n","import { Injectable, signal, TemplateRef, WritableSignal } from '@angular/core';\nimport { ReplaySubject, Subject } from 'rxjs';\n\n@Injectable()\nexport class TabViewService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public onUpdateRibbonTemplate: ReplaySubject<TemplateRef<any> | undefined> = new ReplaySubject<\n TemplateRef<any> | undefined\n >(1);\n public onViewChanged: Subject<string> = new Subject<string>();\n\n private readonly _activeView: WritableSignal<string | undefined> = signal(undefined);\n //#endregion\n\n //#region Properties\n public get activeView(): string {\n return this._activeView() ?? '';\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public setActiveView(viewId: string): void {\n if (viewId === this._activeView()) {\n return;\n }\n\n this._activeView.set(viewId);\n this.onViewChanged.next(viewId);\n }\n\n public updateRibbonTemplate(template: TemplateRef<any> | undefined): void {\n this.onUpdateRibbonTemplate.next(template);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","import { Location } from '@angular/common';\nimport { ApplicationRef, Injectable, signal, WritableSignal } from '@angular/core';\nimport { Router, RouteReuseStrategy } from '@angular/router';\nimport { CustomReuseStrategy } from './custom-reuse-strategy';\nimport { ITab } from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TabService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n // Tab state is a tree of arrays mutated in place -- spliced, pushed, and with ITab objects\n // whose titles are rewritten as they resolve. A signal over the array could not see any of\n // that, so this counter stands in for it: every write below bumps it, and the public getters\n // read it, which is what makes a template that reads them re-render. It is a bridge, not the\n // destination -- the tab state itself still wants to become signals. See\n // docs/guides/reactivity.md.\n private readonly revision: WritableSignal<number> = signal(0);\n\n private activeTabIndex = -1;\n private customReuseStrategy: CustomReuseStrategy;\n private displayTitleIndices: number[] = [];\n private openTabs: ITab[][] = [];\n //#endregion\n\n //#region Properties\n public get activeTabHistory(): ITab[] {\n this.revision();\n return this.openTabs[this.activeTabIndex] ?? [];\n }\n\n public get activeTabs(): ITab[] {\n this.revision();\n return this.openTabs.map((tabs: ITab[]) => tabs[0]) ?? [];\n }\n\n public get activeTabsDisplayTitles(): (string | undefined)[] {\n this.revision();\n return this.openTabs.map((tabs: ITab[], i: number) => {\n const displayIndex: number = this.displayTitleIndices[i] ?? 0;\n return tabs[displayIndex]?.title;\n });\n }\n\n public get activeTabsLoadingStates(): boolean[] {\n this.revision();\n return this.openTabs.map((tabs: ITab[], i: number) => {\n const displayIndex: number = this.displayTitleIndices[i] ?? 0;\n return tabs[displayIndex]?.isTitleLoading ?? true;\n });\n }\n\n private get activeTab(): ITab[] | null {\n if (this.activeTabIndex < 0) {\n return null;\n }\n return this.openTabs[this.activeTabIndex];\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n private applicationRef: ApplicationRef,\n private location: Location,\n private router: Router,\n routeReuseStrategy: RouteReuseStrategy,\n ) {\n this.customReuseStrategy = <CustomReuseStrategy>routeReuseStrategy;\n this.customReuseStrategy.tabService = this;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public activateTab(tab: ITab): void {\n this.activeTabIndex = this.activeTabs.indexOf(tab);\n this.touched();\n this.navigateTo(this.currentViewOf(this.activeTabIndex));\n }\n\n public cloneCurrentTab(url: string): void {\n if (!this.activeTab) {\n return;\n }\n\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\n\n this.customReuseStrategy.clones[url] = tab.url;\n if (tab.clones.indexOf(url) === -1) {\n tab.clones.push(url);\n }\n\n this.navigateTo(tab, url);\n }\n\n public closeActiveTab(): void {\n this.closeTab(this.activeTabIndex);\n }\n\n public closeAllTabs(): void {\n this.openTabs = [];\n this.touched();\n this.displayTitleIndices = [];\n this.touched();\n this.activeTabIndex = -1;\n this.touched();\n this.customReuseStrategy.clearAllHandles();\n }\n\n public closeTab(index: number): void {\n if (index > this.activeTabs.length - 1 || this.activeTabs.length === 0) {\n return;\n }\n\n const wasActive: boolean = index === this.activeTabIndex;\n const closedTab: ITab[] = this.openTabs[index];\n this.openTabs.splice(index, 1);\n this.touched();\n this.displayTitleIndices.splice(index, 1);\n this.touched();\n\n if (wasActive) {\n // Closed the active tab — pick an adjacent tab to focus, and put it back on the view it was\n // left on. This used to navigate to activeTabs[i], which is that tab's *root*: a tab opened\n // as a list and then drilled into a record went back to the list, under the record's own\n // tab, until the tab was clicked again.\n if (this.activeTabIndex >= this.openTabs.length) {\n this.activeTabIndex = this.openTabs.length - 1;\n this.touched();\n }\n\n // Undefined once the last tab is gone, which navigateTo answers with the home URL.\n this.navigateTo(this.currentViewOf(this.activeTabIndex));\n } else if (index < this.activeTabIndex) {\n // Closed a tab before the active one — shift index to keep the same tab active.\n this.activeTabIndex--;\n }\n\n closedTab.forEach((tab: ITab) => {\n if (!this.isUrlOpen(tab.url)) {\n // Tab is not in use by any other tab, we're clear to remove.\n this.customReuseStrategy.clearHandle(tab.url);\n }\n });\n }\n\n public isTabActive(tab: ITab): boolean {\n return this.activeTabs[this.activeTabIndex] === tab;\n }\n\n public isUrlActive(url: string, checkForClones = false): boolean {\n if (!this.activeTab) {\n return false;\n }\n\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\n\n if (tab.url === url) {\n return true;\n } else if (checkForClones) {\n return tab.clones.indexOf(url) !== -1;\n }\n\n return false;\n }\n\n public isUrlOpen(url: string): boolean {\n const tabs: ITab[] = this.openTabs.flatMap((tabs: ITab[]) => tabs);\n\n return this.isTabExists(tabs, url);\n }\n\n public navigateBackOrCloseActiveTab(): void {\n if (!this.activeTab || this.activeTab.length === 0) {\n return;\n }\n\n if (this.activeTab.length <= 1) {\n this.closeTab(this.activeTabIndex);\n } else {\n const previousEntry: ITab = this.activeTab[this.activeTab.length - 2];\n this.navigateCurrentTabBack(previousEntry);\n }\n }\n\n public navigateCurrentTab(tab: ITab): void {\n if (!this.activeTab) {\n return;\n }\n\n // Check other tabs for entity match first, then fall back to current behavior.\n if (tab.entityBaseUrl) {\n const entityMatchIndex: number = this.findTabIndexByEntityMatch(tab.entityBaseUrl, this.activeTabIndex);\n if (entityMatchIndex !== -1) {\n this.activeTabIndex = entityMatchIndex;\n this.touched();\n const otherTab: ITab[] = this.openTabs[entityMatchIndex];\n this.navigateTo(otherTab[otherTab.length - 1]);\n return;\n }\n } else {\n // Fallback for tabs without entityBaseUrl (existing behavior).\n const showingIndex: number = this.findTabIndexByCurrentView(tab.url, this.activeTabIndex, true);\n if (showingIndex !== -1) {\n this.activeTabIndex = showingIndex;\n this.touched();\n const otherTab: ITab[] = this.openTabs[showingIndex];\n this.navigateTo(otherTab[otherTab.length - 1]);\n return;\n }\n }\n\n // Check if URL already in current tab's stack — navigate back.\n const tabIsAlreadyOpen: ITab | undefined = this.findTab(this.activeTab, tab.url);\n if (tabIsAlreadyOpen) {\n this.navigateCurrentTabBack(tabIsAlreadyOpen);\n return;\n }\n\n // Inherit title from an existing tab entry with the same URL, if available.\n this.inheritTitleIfKnown(tab);\n\n // Push new entry onto the stack.\n let clonedUrl: string | undefined = undefined;\n if (tab.clones.length > 0) {\n clonedUrl = tab.clones[0];\n this.customReuseStrategy.clones[clonedUrl] = tab.url;\n }\n\n this.activeTab.push(tab);\n this.displayTitleIndices[this.activeTabIndex] = this.activeTab.length - 1;\n this.touched();\n\n this.navigateTo(tab, clonedUrl);\n }\n\n public navigateCurrentTabBack(tab: ITab): void {\n if (!this.activeTab) {\n return;\n }\n\n // If another tab is currently showing this URL, focus it instead.\n const otherTabIndex: number = this.findTabIndexByCurrentView(tab.url, this.activeTabIndex);\n if (otherTabIndex !== -1) {\n this.activeTabIndex = otherTabIndex;\n this.touched();\n const otherTab: ITab[] = this.openTabs[otherTabIndex];\n this.navigateTo(otherTab[otherTab.length - 1]);\n return;\n }\n\n const lastIndex: number = this.activeTab.lastIndexOf(tab);\n if (lastIndex !== -1) {\n const removedEntries: ITab[] = this.activeTab.slice(lastIndex + 1);\n\n this.openTabs[this.activeTabIndex] = this.activeTab.slice(0, lastIndex + 1);\n this.touched();\n\n if (this.displayTitleIndices[this.activeTabIndex] > lastIndex) {\n this.displayTitleIndices[this.activeTabIndex] = lastIndex;\n this.touched();\n }\n\n // Every open tab keeps its views in the reuse cache, the one it shows or one in its history,\n // so a view leaves the cache only once no tab has its URL open. This cleared every removed\n // URL unconditionally and could take a view out from under another tab; closeTab and\n // replaceCurrentTabSubView already made this check. The history is cut first, so the removed\n // entries no longer count as open themselves.\n removedEntries.forEach((entry: ITab) => {\n if (!this.isUrlOpen(entry.url)) {\n this.customReuseStrategy.clearHandle(entry.url);\n }\n });\n }\n\n this.navigateTo(tab);\n }\n\n public navigateTo(tab: ITab | undefined, clonedUrl?: string): void {\n let url: string = tab?.url ?? '/';\n if (clonedUrl) {\n url = clonedUrl;\n }\n\n this.router.navigate([url], { queryParams: tab?.queryParams }).then((navigated: boolean) => {\n this.customReuseStrategy.redirects = {};\n\n // Clean up clone mapping after successful clone-based navigation.\n if (navigated && this.customReuseStrategy.clones[url]) {\n delete this.customReuseStrategy.clones[url];\n }\n\n this.applicationRef.tick();\n });\n }\n\n public openTab(tab: ITab): void {\n // 1. Exact URL match at top-of-stack — focus that tab.\n const exactMatchIndex: number = this.findTabIndexByCurrentView(tab.url);\n if (exactMatchIndex !== -1) {\n this.activeTabIndex = exactMatchIndex;\n this.touched();\n const currentTab: ITab[] = this.openTabs[exactMatchIndex];\n this.navigateTo(currentTab[currentTab.length - 1]);\n return;\n }\n\n // 2. Entity match (only when entityBaseUrl is set) — focus that tab, keep current view.\n if (tab.entityBaseUrl) {\n const entityMatchIndex: number = this.findTabIndexByEntityMatch(tab.entityBaseUrl);\n if (entityMatchIndex !== -1) {\n this.activeTabIndex = entityMatchIndex;\n this.touched();\n const existingTab: ITab[] = this.openTabs[entityMatchIndex];\n this.navigateTo(existingTab[existingTab.length - 1]);\n return;\n }\n }\n\n // 3. No match — open a new tab.\n this.inheritTitleIfKnown(tab);\n this.openTabs.push([tab]);\n this.touched();\n this.displayTitleIndices.push(0);\n this.touched();\n this.activeTabIndex = this.openTabs.length - 1;\n this.touched();\n this.navigateTo(tab);\n }\n\n public replaceCurrentTabSubView(baseUrl: string, tab?: ITab): void {\n if (!this.activeTab || this.activeTab.length === 0) {\n return;\n }\n\n // Find the anchor entry (the detail view whose URL matches baseUrl).\n // Keep all entries up to and including the anchor.\n const anchorIndex: number = this.activeTab.findIndex((t: ITab) => t.url === baseUrl);\n const keepUntil: number = anchorIndex !== -1 ? anchorIndex + 1 : 1;\n\n const keptEntries: ITab[] = this.activeTab.slice(0, keepUntil);\n const removedEntries: ITab[] = this.activeTab.slice(keepUntil);\n\n // Update history: keep entries up to anchor, optionally add new sub-view\n if (tab) {\n // Propagate entityBaseUrl from the anchor so entity matching works on sub-views.\n const anchor: ITab | undefined = keptEntries[anchorIndex !== -1 ? anchorIndex : 0];\n if (!tab.entityBaseUrl && anchor?.entityBaseUrl) {\n tab.entityBaseUrl = anchor.entityBaseUrl;\n }\n\n this.openTabs[this.activeTabIndex] = [...keptEntries, tab];\n this.touched();\n } else {\n this.openTabs[this.activeTabIndex] = keptEntries;\n this.touched();\n }\n\n // Clear reuse-strategy handles for removed entries no longer open anywhere\n removedEntries.forEach((entry: ITab) => {\n if (!this.isUrlOpen(entry.url)) {\n this.customReuseStrategy.clearHandle(entry.url);\n }\n });\n\n // Navigate to the topmost entry\n const current: ITab[] = this.openTabs[this.activeTabIndex];\n this.navigateTo(current[current.length - 1]);\n }\n\n public redirectCurrentTab(url: string, updateLocation = true): void {\n if (!this.activeTab) {\n return;\n }\n\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\n\n // Update entityBaseUrl if it was pointing to the old URL (e.g., /new → /:id after save).\n if (tab.entityBaseUrl === tab.url) {\n tab.entityBaseUrl = url;\n }\n\n tab.url = url;\n tab.queryParams = {};\n\n if (updateLocation) {\n this.location.replaceState(url);\n }\n }\n\n public setRouteRedirect(fromUrl: string, toUrl: string): void {\n this.customReuseStrategy.redirects[fromUrl] = toUrl;\n }\n\n public updateActiveTabRootTitle(title: string): void {\n if (this.activeTab && this.activeTab.length > 0) {\n this.activeTab[0].title = title;\n this.touched();\n }\n }\n\n public updateTabTitle(url: string, title: string): void {\n this.openTabs\n .flatMap((tabs: ITab[]) => tabs)\n .filter((tab: ITab) => tab.url === url)\n .forEach((tab: ITab) => {\n tab.title = title;\n this.touched();\n });\n }\n //#endregion\n\n //#region Private methods\n /** Announces that the tab state changed, so views reading it re-render. */\n private touched(): void {\n this.revision.update((revision: number) => revision + 1);\n }\n\n /**\n * The view a tab is showing: the top of its history stack.\n *\n * Not `activeTabs[index]`, which is the stack's *root* -- the entry the strip takes each tab's\n * label from. The two are the same only for a tab nobody has drilled into, which is why\n * reaching for the wrong one survives most testing. Undefined for an index with no tab, which\n * is what closing the last tab leaves behind.\n */\n private currentViewOf(index: number): ITab | undefined {\n const history: ITab[] | undefined = this.openTabs[index];\n\n return history?.[history.length - 1];\n }\n\n private findTab(tabs: ITab[], url: string): ITab | undefined {\n return tabs.find((tab: ITab) => this.matchTabUrl(tab, url));\n }\n\n private findTabIndex(tabs: ITab[], url: string): number {\n return tabs.findIndex((tab: ITab) => this.matchTabUrl(tab, url));\n }\n\n private isTabExists(tabs: ITab[], url: string): boolean {\n return tabs.some((tab: ITab) => this.matchTabUrl(tab, url));\n }\n\n private findTabIndexByEntityMatch(entityBaseUrl: string, excludeIndex = -1): number {\n return this.openTabs.findIndex((tabStack: ITab[], index: number) => {\n if (index === excludeIndex) {\n return false;\n }\n // Only check the current view (top of stack), not the full history.\n const currentView: ITab = tabStack[tabStack.length - 1];\n return currentView.entityBaseUrl === entityBaseUrl || currentView.url === entityBaseUrl;\n });\n }\n\n private findTabIndexByCurrentView(url: string, excludeIndex = -1, includeChildRoutes = false): number {\n return this.openTabs.findIndex((tabStack: ITab[], index: number) => {\n if (index === excludeIndex) {\n return false;\n }\n const currentView: ITab = tabStack[tabStack.length - 1];\n return this.matchTabUrl(currentView, url) || (includeChildRoutes && this.isChildRoute(currentView.url, url));\n });\n }\n\n private inheritTitleIfKnown(tab: ITab): void {\n if (tab.title || !tab.isTitleLoading) {\n return;\n }\n\n const existing: ITab | undefined = this.openTabs\n .flatMap((stack: ITab[]) => stack)\n .find((entry: ITab) => entry.url === tab.url && !entry.isTitleLoading && !!entry.title);\n\n if (existing) {\n tab.title = existing.title;\n this.touched();\n tab.isTitleLoading = false;\n this.touched();\n }\n }\n\n private isChildRoute(currentUrl: string, parentUrl: string): boolean {\n return currentUrl.startsWith(parentUrl + '/');\n }\n\n private matchTabUrl(tab: ITab, url: string): boolean {\n return tab.url === url || tab.clones.indexOf(url) !== -1;\n }\n //#endregion\n}\n","import {\n Component,\n computed,\n effect,\n inject,\n input,\n InputSignal,\n model,\n ModelSignal,\n OnDestroy,\n Signal,\n viewChild,\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { map, Observable, of, startWith, Subject, switchMap, take } from 'rxjs';\nimport { AuthService } from '../../services';\n\n/** What the access check knows at a given moment. */\ninterface IAccessState {\n isLoaded: boolean;\n isVisible: boolean;\n}\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport class BaseButton extends RibbonGroupChild implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n protected readonly button: Signal<RibbonButtonComponent | undefined> = viewChild(RibbonButtonComponent);\n\n public readonly allowedActions: InputSignal<string[]> = input<string[]>([]);\n\n // Models rather than inputs: a subclass writes all three from a constructor, a lifecycle hook\n // or a subscription -- the filters button disables itself until its grid has loaded, the\n // refresh button drives its own spinner, and the export, save and views buttons build their own\n // option lists. A plain field told Angular nothing.\n public readonly disabled: ModelSignal<boolean> = model(false);\n public readonly loading: ModelSignal<boolean> = model(false);\n public readonly options: ModelSignal<IRibbonButtonOption[]> = model<IRibbonButtonOption[]>([]);\n\n public readonly iconSize: InputSignal<'small' | 'large'> = input<'small' | 'large'>('large');\n //#endregion\n\n //#region Variables\n protected authService: AuthService = inject(AuthService);\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n\n /**\n * Whether a button is allowed is one question asked of one input, so it is one stream rather\n * than two fields written from a subscription. It also runs once: the old setter fired the\n * check and the constructor fired it again, before any input had arrived.\n *\n * While the answer is outstanding the button is visible but not yet loaded, which is what\n * `RibbonButtonComponent` already does with an option whose access has not come back.\n */\n private readonly access: Signal<IAccessState> = toSignal(\n toObservable(this.allowedActions).pipe(\n switchMap((allowedActions: string[]) => this.checkAccessIsAllowed(allowedActions)),\n ),\n { initialValue: { isLoaded: true, isVisible: true } },\n );\n\n /**\n * The options whose access check has already been sent.\n *\n * Resolving one replaces that option with a copy carrying the answer, so the list below sees a\n * new array and the check runs again over it. The copy has an answer and is skipped; this set\n * is what stops an option still in flight from being asked a second time.\n */\n private readonly requestedOptions: WeakSet<IRibbonButtonOption> = new WeakSet<IRibbonButtonOption>();\n //#endregion\n\n //#region Properties\n public readonly isAccessLoaded: Signal<boolean> = computed(() => this.access().isLoaded);\n\n public override readonly isVisible: Signal<boolean> = computed(() => this.access().isVisible);\n\n protected get isButtonDisabled(): boolean {\n return this.disabled() || !this.isAccessLoaded();\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n /**\n * Asks for the access behind every option that declares one and has not been asked yet.\n *\n * An effect rather than a setter: `options` is written by this component's own subclasses as\n * well as bound by a host application, and both have to reach the check.\n */\n private readonly optionsAccess = effect(() => {\n const pendingOptions: IRibbonButtonOption[] = this.options().filter(\n (option: IRibbonButtonOption) =>\n (option.allowedActions?.length ?? 0) > 0 &&\n option.isAccessAllowed === undefined &&\n !this.requestedOptions.has(option),\n );\n\n for (const option of pendingOptions) {\n this.requestedOptions.add(option);\n\n this.authService\n .checkActionsAreAllowed(option.allowedActions!)\n .pipe(take(1))\n .subscribe((result: boolean[]) => {\n this.setOptionAccess(\n option,\n result.some((isAllowed: boolean) => isAllowed === true),\n );\n });\n }\n });\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public startLoading(): void {\n this.button()?.startLoading();\n }\n\n public finishLoading(status: 'failure' | 'warning' | 'success'): void {\n this.button()?.finishLoading(status);\n }\n //#endregion\n\n //#region Private methods\n private checkAccessIsAllowed(allowedActions: string[]): Observable<IAccessState> {\n if (allowedActions.length === 0) {\n return of<IAccessState>({ isLoaded: true, isVisible: true });\n }\n\n return this.authService.checkActionsAreAllowed(allowedActions).pipe(\n take(1),\n map((result: boolean[]) => ({\n isLoaded: true,\n isVisible: result.some((isAllowed: boolean) => isAllowed === true),\n })),\n startWith<IAccessState>({ isLoaded: false, isVisible: true }),\n );\n }\n\n /**\n * Replaces one option with a copy carrying its answer, leaving the others as they are.\n *\n * The list has to be a new array for the ribbon button to see it at all, and the untouched\n * options have to keep their identity so the dropdown does not rebuild every row.\n */\n private setOptionAccess(option: IRibbonButtonOption, isAccessAllowed: boolean): void {\n this.options.update((options: IRibbonButtonOption[]) =>\n options.map((candidate: IRibbonButtonOption) =>\n candidate === option ? { ...candidate, isAccessAllowed } : candidate,\n ),\n );\n }\n //#endregion\n}\n","import { Component, inject } from '@angular/core';\nimport { DataProviderService, FormService } from '@zambon-dev/ui/library';\nimport { BaseButton } from './base-button';\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class BaseFormViewButton extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataProviderService!: DataProviderService<any>;\n protected formService!: FormService;\n //#endregion\n\n //#region Properties\n protected override get isButtonDisabled(): boolean {\n return super.isButtonDisabled || this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataProviderService = inject(DataProviderService<any>);\n this.formService = inject(FormService);\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { FormGroup } from '@angular/forms';\n\nexport abstract class BackendFormValidationHelper {\n public static validateAllFormFields(httpErrorResponse: HttpErrorResponse, formGroup: FormGroup) {\n if (!httpErrorResponse || !formGroup) {\n return;\n }\n\n // Error 400 = Validation issues\n if (httpErrorResponse.status === 400 && httpErrorResponse.error && httpErrorResponse.error.errors) {\n const controls: string[] = Object.keys(formGroup.controls);\n const validationErrors: { [id: string]: string[] } = <{ [id: string]: string[] }>httpErrorResponse.error.errors;\n\n Object.keys(validationErrors).forEach((fieldName: string) => {\n setTimeout(() => {\n const controlName: string | undefined = controls.find(\n (controlName: string) => controlName.toLocaleLowerCase() === fieldName.toLocaleLowerCase(),\n );\n if (!controlName || !formGroup.get(controlName)) {\n return;\n }\n\n formGroup.get(controlName)!.setErrors({ [validationErrors[fieldName][0]]: true });\n formGroup.get(controlName)!.markAsTouched();\n });\n });\n }\n }\n}\n","import { ActivatedRouteSnapshot, UrlSegment } from '@angular/router';\n\nexport abstract class RouteHelper {\n public static getRouteByData(\n routeSnapshot: ActivatedRouteSnapshot | null,\n key: string,\n value: any,\n ): ActivatedRouteSnapshot | null {\n if (!routeSnapshot) {\n return null;\n }\n return routeSnapshot.data[key] === value\n ? routeSnapshot\n : this.getRouteByData(routeSnapshot.firstChild, key, value);\n }\n\n public static getRouteWithComponent(\n routeSnapshot: ActivatedRouteSnapshot | null,\n component: any,\n ): ActivatedRouteSnapshot | null {\n if (!routeSnapshot) {\n return null;\n }\n return routeSnapshot.component === component\n ? routeSnapshot\n : this.getRouteWithComponent(routeSnapshot.firstChild, component);\n }\n\n public static getRouteURL(route: ActivatedRouteSnapshot, rootLevel = false): string {\n let segments: string[] = [];\n\n const buildRoute: (route: ActivatedRouteSnapshot | null) => void = (route: ActivatedRouteSnapshot | null): void => {\n if (route) {\n if (route.url.length) {\n segments.push(...route.url.map((segment: UrlSegment) => segment.path));\n }\n buildRoute(rootLevel ? route.firstChild : route.parent);\n }\n };\n\n buildRoute(route);\n\n if (!rootLevel) {\n segments = segments.reverse();\n }\n\n return `/${segments.join('/')}`;\n }\n}\n","import { NgClass } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, computed, inject, input, InputSignal, model, ModelSignal, Signal, viewChild } from '@angular/core';\nimport { ControlContainer, FormGroup } from '@angular/forms';\nimport { FormService, IModal, ModalComponent, ModalSize } from '@zambon-dev/ui/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { BackendFormValidationHelper } from '../../../helpers';\n\n@Component({\n selector: 'framework-confirm-modal',\n templateUrl: './confirm-modal.component.html',\n styleUrls: ['./confirm-modal.component.scss'],\n imports: [ModalComponent, NgClass, TranslatePipe],\n})\nexport class ConfirmModalComponent implements IModal {\n //#region ViewChilds, Inputs, Outputs\n private readonly modal: Signal<ModalComponent | undefined> = viewChild(ModalComponent);\n\n // Models rather than inputs: this component writes both while confirming, from callbacks a\n // parent owns. As plain fields they landed with nothing marking this view dirty.\n public readonly errorMessage: ModelSignal<string> = model('');\n public readonly isLoading: ModelSignal<boolean> = model(false);\n\n public readonly message: InputSignal<string> = input('');\n public readonly messageIcon: InputSignal<string> = input('fa-regular fa-circle-question');\n public readonly messageIconColor: InputSignal<string> = input('text-cyan-500');\n public readonly showMessageIcon: InputSignal<boolean> = input(true);\n public readonly size: InputSignal<ModalSize> = input<ModalSize>('xl');\n public readonly title: InputSignal<string> = input('');\n //#endregion\n\n //#region Variables\n\n protected formService: FormService | undefined = inject(FormService, { optional: true }) ?? undefined;\n //#endregion\n\n //#region Properties\n /**\n * Delegates to the inner modal. A signal view query, not @ViewChild: a computed reading a plain\n * query would never re-run when the query resolves, so the wrapper would answer against an\n * undefined child for ever.\n */\n public readonly isOpen: Signal<boolean> = computed(() => this.modal()?.isOpen() ?? false);\n\n protected get hasErrorMessage(): boolean {\n return !!this.errorMessage() && this.errorMessage().length > 0;\n }\n\n protected get hasMessage(): boolean {\n return !!this.message() && this.message().length > 0;\n }\n\n private controlContainer: ControlContainer | null = inject(ControlContainer, { optional: true });\n\n private get formGroup(): FormGroup | null {\n return (this.controlContainer?.control as FormGroup) ?? null;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public beginLoading(): void {\n this.clearErrorMessage();\n this.isLoading.set(true);\n }\n\n public clearErrorMessage(): void {\n this.errorMessage.set('');\n }\n\n public closeModal(): void {\n this.modal()?.closeModal();\n }\n\n public finishLoading(closeModal?: boolean): void {\n this.isLoading.set(false);\n\n if (this.formGroup && this.formGroup.disabled) {\n this.formGroup.enable();\n }\n\n if (closeModal) {\n this.closeModal();\n }\n }\n\n public setErrorMessage(httpErrorResponse: HttpErrorResponse): void {\n this.finishLoading();\n\n if (httpErrorResponse.status === 400 && !!this.formGroup) {\n BackendFormValidationHelper.validateAllFormFields(httpErrorResponse, this.formGroup);\n } else {\n if (typeof httpErrorResponse.error === 'string') {\n this.errorMessage.set(httpErrorResponse.error);\n } else {\n this.errorMessage.set('Modal-Failed-DefaultMessage');\n }\n }\n }\n\n public toggleModal(): void {\n if (!!this.formService && this.formService.loading) {\n return;\n }\n\n if (this.formGroup) {\n // TODO: TEST THIS CHANGE\n this.formGroup.reset();\n this.formService?.resetForm();\n }\n\n this.clearErrorMessage();\n this.modal()?.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-modal\n position=\"top\"\n [closeButtonText]=\"'Button-Modal-Cancel' | translate\"\n [size]=\"size()\"\n [title]=\"title() | translate\"\n>\n <div body>\n @if (hasMessage) {\n <div class=\"message\">\n @if (showMessageIcon()) {\n <i class=\"fa-3x\" [ngClass]=\"[messageIcon(), messageIconColor()]\"></i>\n }\n <h4 [innerHTML]=\"message() | translate\"></h4>\n </div>\n }\n\n <ng-content></ng-content>\n\n @if (hasErrorMessage) {\n <div class=\"erro\">\n <h4>{{ errorMessage() | translate }}</h4>\n <span>{{ 'Modal-Failed-Administrator' | translate }}</span>\n </div>\n }\n </div>\n <div footer>\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n</lib-modal>\n","import { HttpErrorResponse } from '@angular/common/http';\nimport {\n Component,\n computed,\n input,\n InputSignal,\n model,\n ModelSignal,\n output,\n OutputEmitterRef,\n Signal,\n viewChild,\n} from '@angular/core';\nimport { ModalComponent, ModalSize } from '@zambon-dev/ui/library';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'framework-error-modal',\n templateUrl: './error-modal.component.html',\n styleUrls: ['./error-modal.component.scss'],\n imports: [ModalComponent, TranslatePipe],\n})\nexport class ErrorModalComponent {\n //#region ViewChilds, Inputs, Outputs\n private readonly modal: Signal<ModalComponent | undefined> = viewChild(ModalComponent);\n\n // A model rather than an input: showModal() writes it, and a parent calls that from its own\n // subscription. As a plain field the message landed with nothing marking this view dirty.\n public readonly errorMessage: ModelSignal<string> = model('');\n\n public readonly size: InputSignal<ModalSize> = input<ModalSize>('xl');\n // Models too: DefaultDetailsTabViewComponent sets both before showing the modal, so that a 404\n // reads as \"record not found\" rather than as a server error.\n public readonly subtitle: ModelSignal<string> = model('Modal-Failed-Administrator');\n public readonly title: ModelSignal<string> = model('Modal-Failed-Title');\n\n public readonly closed: OutputEmitterRef<void> = output<void>();\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n /**\n * Delegates to the inner modal. A signal view query, not @ViewChild: a computed reading a plain\n * query would never re-run when the query resolves, so the wrapper would answer against an\n * undefined child for ever.\n */\n public readonly isOpen: Signal<boolean> = computed(() => this.modal()?.isOpen() ?? false);\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public closeModal(): void {\n this.modal()?.closeModal();\n }\n\n public showModal(error: string | HttpErrorResponse): void {\n let errorMessage = 'Modal-Failed-DefaultMessage';\n if (typeof error === 'string') {\n errorMessage = error;\n } else if (typeof error.error === 'string') {\n errorMessage = error.error;\n }\n this.errorMessage.set(errorMessage);\n this.modal()?.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-modal\n position=\"top\"\n [closeButtonText]=\"'Button-Modal-Close' | translate\"\n [size]=\"size()\"\n [title]=\"title() | translate\"\n (closed)=\"closed.emit()\"\n>\n <div body>\n <div class=\"erro\">\n <h4>{{ errorMessage() | translate }}</h4>\n @if (subtitle()) {\n <span>{{ subtitle() | translate }}</span>\n }\n </div>\n </div>\n</lib-modal>\n","import { NgModule } from '@angular/core';\nimport { ConfirmModalComponent } from './confirm-modal/confirm-modal.component';\nimport { ErrorModalComponent } from './error-modal/error-modal.component';\n\n@NgModule({\n declarations: [],\n imports: [ConfirmModalComponent, ErrorModalComponent],\n exports: [ConfirmModalComponent, ErrorModalComponent],\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkModalsModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkModalsModule {}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, input, InputSignal, Signal, viewChild } from '@angular/core';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable, take } from 'rxjs';\nimport { ConfirmModalComponent } from '../../modals';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-confirm',\n templateUrl: './button-confirm.component.html',\n imports: [ConfirmModalComponent, RibbonButtonComponent, TranslatePipe],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonConfirmComponent) }],\n})\nexport class ButtonConfirmComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n private readonly confirmModal: Signal<ConfirmModalComponent | undefined> = viewChild(ConfirmModalComponent);\n\n public readonly action: InputSignal<Observable<any>> = input.required<Observable<any>>();\n public readonly color: InputSignal<string> = input('text-primary-500');\n public readonly icon: InputSignal<string> = input('');\n public readonly label: InputSignal<string> = input('');\n public readonly modalConfirmButtonColor: InputSignal<string> = input('');\n public readonly modalConfirmButtonLabel: InputSignal<string> = input('');\n public readonly modalMessage: InputSignal<string> = input('');\n public readonly modalMessageIcon: InputSignal<string> = input('fa-solid fa-circle-question');\n public readonly modalMessageIconColor: InputSignal<string> = input('');\n public readonly modalTitle: InputSignal<string> = input('');\n //#endregion\n\n //#region Variables\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.disabled.set(true);\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n this.confirmModal()?.toggleModal();\n }\n\n protected onDelete(): void {\n const confirmModal: ConfirmModalComponent | undefined = this.confirmModal();\n if (!confirmModal || confirmModal.isLoading() || !confirmModal.isOpen()) {\n return;\n }\n\n confirmModal.beginLoading();\n\n this.action()\n .pipe(take(1))\n .subscribe({\n next: () => {\n this.finishLoading('success');\n confirmModal.finishLoading(true);\n this.gridDataset.refresh();\n },\n error: (e: HttpErrorResponse) => {\n confirmModal.setErrorMessage(e);\n },\n });\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","@if (isVisible()) {\n <lib-ribbon-button\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n [icon]=\"icon()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<framework-confirm-modal\n #modal\n [message]=\"modalMessage()\"\n [messageIcon]=\"modalMessageIcon()\"\n [messageIconColor]=\"modalMessageIconColor()\"\n [title]=\"modalTitle()\"\n>\n <div footer>\n <button\n class=\"btn {{ modalConfirmButtonColor() }}\"\n type=\"button\"\n [class.loading]=\"modal.isLoading()\"\n (click)=\"onDelete()\"\n >\n {{ modalConfirmButtonLabel() | translate }}\n </button>\n </div>\n</framework-confirm-modal>\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, input, InputSignal, Signal, viewChild } from '@angular/core';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable, take } from 'rxjs';\nimport { ConfirmModalComponent } from '../../modals';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-delete',\n templateUrl: './button-delete.component.html',\n imports: [ConfirmModalComponent, RibbonButtonComponent, TranslatePipe],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonDeleteComponent) }],\n})\nexport class ButtonDeleteComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n private readonly confirmModal: Signal<ConfirmModalComponent | undefined> = viewChild(ConfirmModalComponent);\n\n public readonly action: InputSignal<Observable<any>> = input.required<Observable<any>>();\n public readonly label: InputSignal<string> = input('Button-Delete');\n public readonly modalConfirmButtonLabel: InputSignal<string> = input('Modal-Delete-Confirm');\n public readonly modalMessage: InputSignal<string> = input('Modal-Delete-Message');\n public readonly modalTitle: InputSignal<string> = input('Modal-Delete-Title');\n //#endregion\n\n //#region Variables\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.disabled.set(true);\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n this.confirmModal()?.toggleModal();\n }\n\n protected onDelete(): void {\n const confirmModal: ConfirmModalComponent | undefined = this.confirmModal();\n if (!confirmModal || confirmModal.isLoading() || !confirmModal.isOpen()) {\n return;\n }\n\n confirmModal.beginLoading();\n\n this.action()\n .pipe(take(1))\n .subscribe({\n next: () => {\n this.finishLoading('success');\n confirmModal.finishLoading(true);\n this.gridDataset.refresh();\n },\n error: (e: HttpErrorResponse) => {\n confirmModal.setErrorMessage(e);\n },\n });\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","@if (isVisible()) {\n <lib-ribbon-button\n color=\"text-red-500\"\n icon=\"fa-trash-alt\"\n [disabled]=\"disabled()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<framework-confirm-modal\n #modal\n messageIcon=\"fa-solid fa-circle-exclamation\"\n messageIconColor=\"text-red-500\"\n [message]=\"modalMessage()\"\n [title]=\"modalTitle()\"\n>\n <div footer>\n <button class=\"btn red-500\" type=\"button\" [class.loading]=\"modal.isLoading()\" (click)=\"onDelete()\">\n {{ modalConfirmButtonLabel() | translate }}\n </button>\n </div>\n</framework-confirm-modal>\n","import { Component, forwardRef, inject, input, InputSignal, OnInit, signal, WritableSignal } from '@angular/core';\nimport { DataProviderService, FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { takeUntil } from 'rxjs';\nimport { ModalBase } from '../../../views/modals/modal-base';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-edit',\n templateUrl: './button-edit.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonEditComponent) }],\n})\nexport class ButtonEditComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n public readonly cancelColor: InputSignal<string> = input('text-red-500');\n public readonly cancelIcon: InputSignal<string> = input('fa-ban');\n public readonly cancelLabel: InputSignal<string> = input('Button-Cancel-Edit');\n public readonly editIcon: InputSignal<string> = input('fa-edit');\n public readonly editLabel: InputSignal<string> = input('Button-Edit');\n public readonly modal: InputSignal<ModalBase | undefined> = input<ModalBase>();\n //#endregion\n\n //#region Variables\n // A signal rather than a field: the form cancelling an edit flips this from a subscription,\n // which swaps Edit back in for Cancel.\n protected readonly isButtonCancelVisible: WritableSignal<boolean> = signal(false);\n\n private dataProviderService: DataProviderService<any> = inject(DataProviderService);\n private formService: FormService = inject(FormService);\n //#endregion\n\n //#region Properties\n protected get hasDataProviderEntityID(): boolean {\n return this.dataProviderService?.hasEntityID ?? false;\n }\n\n protected get isFormLoading(): boolean {\n return this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n this.formService.editCanceled.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.isButtonCancelVisible.set(false);\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onCancelClicked(): void {\n if (this.isButtonCancelVisible()) {\n this.isButtonCancelVisible.set(false);\n this.formService.cancelEdit();\n }\n }\n\n protected onEditClicked(): void {\n const modal: ModalBase | undefined = this.modal();\n if (modal) {\n modal.toggle();\n } else {\n this.isButtonCancelVisible.set(true);\n this.formService.beginEdit();\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","@if (isVisible() && !isButtonCancelVisible() && hasDataProviderEntityID) {\n <lib-ribbon-button\n [disabled]=\"disabled() || !isAccessLoaded() || isFormLoading\"\n [icon]=\"editIcon()\"\n [iconSize]=\"iconSize()\"\n [label]=\"editLabel()\"\n [loading]=\"loading()\"\n (action)=\"onEditClicked()\"\n >\n </lib-ribbon-button>\n}\n@if (isVisible() && isButtonCancelVisible() && hasDataProviderEntityID) {\n <lib-ribbon-button\n [color]=\"cancelColor()\"\n [disabled]=\"disabled() || !isAccessLoaded() || isFormLoading\"\n [icon]=\"cancelIcon()\"\n [label]=\"cancelLabel()\"\n [loading]=\"loading()\"\n (action)=\"onCancelClicked()\"\n >\n </lib-ribbon-button>\n}\n","import { HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, input, InputSignal } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DataGridDataset, IListParameters, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { take } from 'rxjs';\nimport { BaseButton } from '../base-button';\n\nexport type ExportFormat = 'xlsx' | 'pdf' | 'csv' | 'xml' | 'mhtml';\n\nexport const MaxExportRows = 50000;\n\n@Component({\n selector: 'framework-button-export',\n templateUrl: './button-export.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonExportComponent) }],\n})\nexport class ButtonExportComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n /**\n * Index into `options` exported when the main button is clicked, defaulting to Excel.\n * `RibbonButtonComponent` treats -1 as \"no default\" and merely toggles the dropdown, which left\n * Export needing two clicks for the common case while Save (which sets 0) needed one. Set -1 to\n * restore the dropdown-only behaviour.\n */\n public readonly defaultOption: InputSignal<number> = input(0);\n public readonly fileBaseName: InputSignal<string> = input('export');\n //#endregion\n\n //#region Variables\n private dataGridDataset: DataGridDataset | null = inject(DataGridDataset, { optional: true });\n private translateService: TranslateService = inject(TranslateService);\n //#endregion\n\n //#region Properties\n protected override get isButtonDisabled(): boolean {\n return super.isButtonDisabled || this.isExceedingExportLimit;\n }\n\n protected get tooltip(): string {\n if (this.isExceedingExportLimit) {\n return this.translateService.instant('Button-Export-LimitExceeded', { max: MaxExportRows });\n }\n return '';\n }\n\n private get isExceedingExportLimit(): boolean {\n const totalRows: number | undefined = this.dataGridDataset?.totalRows;\n return totalRows !== undefined && totalRows > MaxExportRows;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.options.set([\n { id: 'xlsx', label: 'Button-Export-Excel', icon: 'fa-file-excel' },\n { id: 'pdf', label: 'Button-Export-PDF', icon: 'fa-file-pdf' },\n { id: 'csv', label: 'Button-Export-CSV', icon: 'fa-file-csv' },\n { id: 'xml', label: 'Button-Export-XML', icon: 'fa-file-code' },\n { id: 'mhtml', label: 'Button-Export-MHTML', icon: 'fa-file-archive' },\n ]);\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(format?: string): void {\n if (!this.dataGridDataset) {\n return;\n }\n\n const resolvedFormat: ExportFormat = (format as ExportFormat) ?? 'xlsx';\n\n this.startLoading();\n\n const parameters: IListParameters = {\n endRow: 0,\n filters: this.dataGridDataset.filters,\n startRow: 0,\n };\n\n this.dataGridDataset\n .export(resolvedFormat, parameters)\n .pipe(take(1))\n .subscribe({\n next: (response: HttpResponse<Blob>) => {\n this.download(response);\n this.finishLoading('success');\n },\n error: (_: HttpErrorResponse) => {\n this.finishLoading('failure');\n },\n });\n }\n //#endregion\n\n //#region Private methods\n private download(response: HttpResponse<Blob>): void {\n if (!response.body) {\n return;\n }\n\n const contentDisposition: string = response.headers.get('Content-Disposition') ?? '';\n const match: RegExpExecArray | null = /filename\\*?=(?:UTF-8'')?\"?([^\";]+)\"?/i.exec(contentDisposition);\n const fileName: string = match ? decodeURIComponent(match[1]) : this.fileBaseName();\n\n const url: string = URL.createObjectURL(response.body);\n const anchor: HTMLAnchorElement = document.createElement('a');\n anchor.href = url;\n anchor.download = fileName;\n anchor.click();\n URL.revokeObjectURL(url);\n }\n //#endregion\n}\n","@if (isVisible()) {\n <lib-ribbon-button\n label=\"Button-Export\"\n icon=\"fa-file-export\"\n [defaultOption]=\"defaultOption()\"\n [disabled]=\"isButtonDisabled\"\n [loading]=\"loading()\"\n [iconSize]=\"iconSize()\"\n [options]=\"options()\"\n [tooltip]=\"tooltip\"\n (action)=\"onButtonClicked($event)\"\n >\n </lib-ribbon-button>\n}\n","import {\n Component,\n forwardRef,\n inject,\n input,\n InputSignal,\n OnInit,\n signal,\n Signal,\n viewChild,\n WritableSignal,\n} from '@angular/core';\nimport { FormGroupDirective } from '@angular/forms';\nimport {\n DataGridDataset,\n DisplayControls,\n FormService,\n ModalComponent,\n ModalSize,\n RibbonButtonComponent,\n RibbonGroupChild,\n} from '@zambon-dev/ui/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-filters',\n templateUrl: './button-filters.component.html',\n styleUrls: ['./button-filters.component.scss'],\n imports: [ModalComponent, RibbonButtonComponent, TranslatePipe],\n providers: [FormService, { provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonFiltersComponent) }],\n})\nexport class ButtonFiltersComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n public readonly modal: Signal<ModalComponent | undefined> = viewChild(ModalComponent);\n\n public readonly modalSize: InputSignal<ModalSize> = input<ModalSize>('xl');\n public readonly modalTitle: InputSignal<string> = input('');\n public readonly validateFormFunction: InputSignal<(() => void) | undefined> = input<() => void>();\n //#endregion\n\n //#region Variables\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\n protected readonly formGroup: FormGroupDirective = inject(FormGroupDirective);\n\n // A signal rather than a field: submitting or clearing the filters changes which buttons the\n // ribbon shows, and both happen from a click handler deep inside the modal.\n private readonly filters: WritableSignal<{ [key: string]: string }> = signal({});\n //#endregion\n\n //#region Properties\n protected get hasFiltersApplied(): boolean {\n return Object.keys(this.filters()).length > 0;\n }\n\n protected get singleColumn(): boolean {\n const modalSize: ModalSize = this.modalSize();\n return modalSize === 'sm' || modalSize === 'md' || modalSize === 'lg' || modalSize === 'xl';\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n // This will force the screen to initialize with the filter disabled.\n this.disabled.set(true);\n }\n\n public ngOnInit(): void {\n // The constructor disables the button and the two subscriptions below are what re-enable it,\n // which is right only for a button that exists before its grid first loads. A ribbon template\n // is re-created whenever a record's views are switched, so a button built then arrives at a\n // grid that finished loading long ago, waits for an event that has already passed, and stays\n // unclickable until something makes the grid load again. The dataset knows either way.\n this.disabled.set(this.gridDataset.isLoading || !this.gridDataset.hasBeenLoaded);\n\n this.gridDataset.loadStarted.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.disabled.set(true);\n this.finishLoadingIfStarted();\n });\n\n this.gridDataset.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.disabled.set(false);\n this.finishLoadingIfStarted();\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onFiltersButtonClicked(): void {\n this.modal()?.toggleModal();\n this.formGroup.form.reset();\n this.formGroup.form.patchValue(this.filters(), { emitEvent: false });\n }\n\n protected onFiltersSubmitClicked(): void {\n const validateFormFunction: (() => void) | undefined = this.validateFormFunction();\n if (validateFormFunction) {\n validateFormFunction();\n }\n\n if (this.formGroup.form.valid) {\n this.startLoading();\n this.modal()?.toggleModal();\n\n const formValue: any = this.formGroup.form.getRawValue();\n const formFilters: { [key: string]: any } = Object.fromEntries(\n Object.entries(formValue).filter(([_, v]) => (!!v && v !== '') || v === 0),\n );\n\n this.setFilters(formFilters);\n }\n }\n\n protected onResetButtonClicked(): void {\n this.startLoading();\n\n this.formGroup.form.reset();\n this.filters.set({});\n\n this.gridDataset.setFilters();\n }\n //#endregion\n\n //#region Public methods\n public setFilters(filters: { [key: string]: any }): void {\n // Kept whole, because reopening the modal patches this straight back into the form and a\n // catalog select backed by a search endpoint cannot recover its label from the identifier --\n // it only resolves a display from a local entries list. Dropping the labels here would leave\n // the field showing a selection with no text.\n this.filters.set(filters);\n\n if (this.hasFiltersApplied) {\n this.gridDataset.setFilters(this.withoutDisplayControls(filters));\n } else {\n this.gridDataset.setFilters();\n }\n }\n //#endregion\n\n //#region Private methods\n private finishLoadingIfStarted(): void {\n if (this.button()?.loading()) {\n this.finishLoading('success');\n }\n }\n\n /**\n * Drops the controls that only hold a catalog selection's label.\n *\n * They are half of how `lib-catalog-select` works and are created by it, so a screen never asked\n * for them and a backend has no filter behind them. Sent anyway they are dead weight, and worse:\n * the day a service does filter by a name, it would receive the formatted label rather than the\n * stored value and quietly match nothing.\n *\n * @param filters The filters as submitted.\n * @returns The filters a backend should receive.\n */\n private withoutDisplayControls(filters: { [key: string]: string }): { [key: string]: string } {\n return Object.fromEntries(\n Object.entries(filters).filter(\n ([key]: [string, string]) => !DisplayControls.isDisplayControl(this.formGroup.form.get(key)),\n ),\n );\n }\n //#endregion\n}\n","<lib-ribbon-button\n [color]=\"hasFiltersApplied ? 'text-amber-500' : 'text-primary-500'\"\n [disabled]=\"disabled()\"\n [icon]=\"'fa-filter'\"\n [iconSize]=\"iconSize()\"\n [label]=\"'Button-Filters'\"\n [loading]=\"loading()\"\n (action)=\"onFiltersButtonClicked()\"\n>\n</lib-ribbon-button>\n\n@if (hasFiltersApplied) {\n <lib-ribbon-button\n [color]=\"'text-red-500'\"\n [disabled]=\"disabled()\"\n [icon]=\"'fa-broom'\"\n [iconSize]=\"iconSize()\"\n [label]=\"'Button-Filters-Clear'\"\n [loading]=\"loading()\"\n (action)=\"onResetButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<lib-modal\n position=\"top\"\n [size]=\"modalSize()\"\n [title]=\"modalTitle() | translate\"\n [closeButtonText]=\"'Button-Modal-Cancel' | translate\"\n>\n <ng-container body>\n <ng-content></ng-content>\n </ng-container>\n <div footer>\n <button type=\"submit\" class=\"btn blue-500\" (click)=\"onFiltersSubmitClicked()\">\n {{ 'Button-Filters-Modal-Confirm' | translate }}\n </button>\n </div>\n</lib-modal>\n","/**\n * Key used in Angular route `data` to identify the framework tab view type.\n *\n * Usage in route config:\n * ```ts\n * {\n * path: ':id',\n * component: MyDetailsViewComponent,\n * data: { [FRAMEWORK_VIEW_TYPE]: FrameworkViewType.Details, ... },\n * }\n * ```\n */\nexport const FRAMEWORK_VIEW_TYPE = 'frameworkViewType';\n\n/**\n * Values for the {@link FRAMEWORK_VIEW_TYPE} route data key.\n */\nexport enum FrameworkViewType {\n /** A details/edit view with data provider and sub-views (breadcrumbs, save, etc.). */\n Details = 'details',\n /** A list/grid view (no data provider, no sub-views). */\n List = 'list',\n}\n","export interface ITab {\n clones: string[];\n entityBaseUrl?: string;\n isTitleLoading: boolean;\n queryParams?: { [key: string]: string };\n title?: string;\n url: string;\n}\n\nexport class Tab implements ITab {\n private _title?: string | undefined;\n\n public clones: string[] = [];\n\n public entityBaseUrl?: string;\n\n public isTitleLoading = true;\n\n public queryParams?: { [key: string]: string };\n\n public get title(): string | undefined {\n return this._title;\n }\n public set title(value: string | undefined) {\n if (this._title !== value) {\n this._title = value;\n\n if (value) {\n this.isTitleLoading = false;\n }\n }\n }\n\n public url = '';\n\n constructor(init?: Partial<Tab>) {\n Object.assign(this, init);\n }\n}\n","import { Component, forwardRef, inject, input, InputSignal } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport {\n DataProviderService,\n IRibbonButtonOption,\n RibbonButtonComponent,\n RibbonGroupChild,\n} from '@zambon-dev/ui/library';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { TabService } from '../../../services';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-new',\n templateUrl: './button-new.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonNewComponent) }],\n})\nexport class ButtonNewComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n public readonly endpoint: InputSignal<string> = input('new');\n public readonly parameters: InputSignal<{ [key: string]: string } | undefined> = input<{ [key: string]: string }>();\n public readonly path: InputSignal<string | undefined> = input<string>();\n //#endregion\n\n //#region Variables\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n private router: Router = inject(Router);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get hasDataProvider(): boolean {\n return !!this.dataProviderService;\n }\n\n protected get hasDataProviderEntityID(): boolean {\n return this.dataProviderService?.hasEntityID ?? false;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(optionId?: string): void {\n let option: IRibbonButtonOption | undefined = undefined;\n if (optionId) {\n option = this.options().find((o) => o.id === optionId);\n }\n\n let path: string | undefined = this.path();\n if (option && option.path && option.path.length > 0) {\n path = option.path ?? optionId;\n }\n\n let queryParameters: { [key: string]: string } | undefined = this.parameters();\n if (option && option.parameters && Object.keys(option.parameters).length > 0) {\n queryParameters = { ...queryParameters, ...option.parameters };\n }\n\n // Try to find the route with ':id' parameters; fall back to the current route.\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\n this.router.routerState.root.snapshot,\n FRAMEWORK_VIEW_TYPE,\n FrameworkViewType.Details,\n );\n let url: string = targetRoute\n ? RouteHelper.getRouteURL(targetRoute.parent!)\n : RouteHelper.getRouteURL(this.router.routerState.root.snapshot, true);\n\n if (path && path.length > 0) {\n url += `/${path}`;\n }\n\n const entityUrl = `${url}/${this.endpoint()}`;\n const tab: ITab = new Tab({\n entityBaseUrl: entityUrl,\n queryParams: queryParameters,\n url: entityUrl,\n });\n\n this.tabService.navigateCurrentTab(tab);\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","@if (isVisible() && (!hasDataProvider || hasDataProviderEntityID)) {\n <lib-ribbon-button\n icon=\"fa-plus\"\n label=\"Button-New\"\n [disabled]=\"disabled() || !isAccessLoaded()\"\n [loading]=\"loading()\"\n [options]=\"options()\"\n (action)=\"onButtonClicked($event)\"\n >\n </lib-ribbon-button>\n}\n","import { Component, forwardRef, inject, input, InputSignal, OnInit, signal, WritableSignal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { takeUntil } from 'rxjs';\nimport { Tab } from '../../../models';\nimport { TabService } from '../../../services';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-open-record',\n templateUrl: './button-open-record.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonOpenRecordComponent) }],\n})\nexport class ButtonOpenRecordComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n public readonly elementPath: InputSignal<string | undefined> = input<string>();\n public readonly rootPath: InputSignal<string | undefined> = input<string>();\n //#endregion\n\n //#region Variables\n private dataGridDataset: DataGridDataset = inject(DataGridDataset);\n private router: Router = inject(Router);\n // A signal rather than a field: the grid announces a selection change from a subscription, and\n // this is what enables the button.\n private readonly selectionCount: WritableSignal<number> = signal(0);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get isSelectedOneRecord(): boolean {\n return this.selectionCount() === 1;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.selectionCount.set(this.dataGridDataset.selectedRowKeys.length);\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n if (this.disabled() || !this.isAccessLoaded() || !this.isSelectedOneRecord || !this.isVisible()) {\n return;\n }\n\n let path: string = this.rootPath() ?? this.router.url;\n\n const elementPath: string | undefined = this.elementPath();\n if (elementPath) {\n path += `/${elementPath}`;\n }\n\n const selectedKey: string = this.dataGridDataset.selectedRowKeys[0];\n const selectedID: any = this.dataGridDataset.getRowID(selectedKey);\n path += `/${selectedID}`;\n\n this.tabService.navigateCurrentTab(new Tab({ entityBaseUrl: path, url: path }));\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","@if (isVisible()) {\n <lib-ribbon-button\n icon=\"fa-eye\"\n label=\"Button-Open-Record\"\n [disabled]=\"disabled() || !isAccessLoaded() || !isSelectedOneRecord\"\n [iconSize]=\"iconSize()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n","import { Component, forwardRef, inject, OnInit } from '@angular/core';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { takeUntil } from 'rxjs';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-refresh',\n templateUrl: './button-refresh.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonRefreshComponent) }],\n})\nexport class ButtonRefreshComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private dataGridDataset: DataGridDataset | null = inject(DataGridDataset, { optional: true });\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.disabled.set(false);\n }\n\n public ngOnInit(): void {\n this.dataGridDataset?.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.loading.set(false);\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n this.loading.set(true);\n this.dataGridDataset?.refresh();\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon-button\n label=\"Button-Refresh\"\n icon=\"fa-sync-alt\"\n [disabled]=\"disabled()\"\n [loading]=\"loading()\"\n [iconSize]=\"iconSize()\"\n (action)=\"onButtonClicked()\"\n></lib-ribbon-button>\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, input, InputSignal, Signal, viewChild } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { DataProviderService, FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { Observable, take, throwError } from 'rxjs';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { TabService } from '../../../services';\nimport { ErrorModalComponent } from '../../modals/error-modal/error-modal.component';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-save',\n templateUrl: './button-save.component.html',\n imports: [ErrorModalComponent, RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonSaveComponent) }],\n})\nexport class ButtonSaveComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n private readonly errorModal: Signal<ErrorModalComponent | undefined> = viewChild(ErrorModalComponent);\n\n public readonly defaultOption: InputSignal<number> = input(0);\n //#endregion\n\n //#region Variables\n private dataProviderService: DataProviderService<any> = inject(DataProviderService);\n private formService: FormService = inject(FormService);\n private router: Router = inject(Router);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get isFormEditMode(): boolean {\n return this.formService.isEditMode;\n }\n\n protected get isFormLoading(): boolean {\n return this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.options.set([\n { id: 'save', label: 'Button-Save', icon: 'fa-save' },\n { id: 'save-and-close', label: 'Button-Save-And-Close', icon: 'fa-save' },\n { id: 'save-and-new', label: 'Button-Save-And-New', icon: 'fa-save' },\n ]);\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(option?: string): void {\n this.startLoading();\n\n this.formService.markAllAsTouched();\n if (!this.formService.isValid) {\n this.finishLoading('warning');\n return;\n }\n\n this.saveModel()\n .pipe(take(1))\n .subscribe({\n next: (model: any) => {\n this.finishLoading('success');\n this.formService.enableForm();\n this.formService.model = model;\n this.formService.cancelEdit();\n\n switch (option) {\n case 'save-and-close':\n this.tabService.navigateBackOrCloseActiveTab();\n break;\n case 'save-and-new': {\n this.dataProviderService.updateModel(model);\n\n const detailsRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\n this.router.routerState.root.snapshot,\n FRAMEWORK_VIEW_TYPE,\n FrameworkViewType.Details,\n );\n const savedEntityUrl = `${RouteHelper.getRouteURL(detailsRoute!.parent!)}/${model.id}`;\n const currentRouteUrl: string = RouteHelper.getRouteURL(detailsRoute!);\n\n if (currentRouteUrl !== savedEntityUrl) {\n // Router URL differs from saved entity (new entity, or regular save\n // that only used location.replaceState). Redirect to sync the router\n // to /{id} invisibly, then navigate to /new normally. The real second\n // navigation detaches and caches the /{id} component so back-navigation\n // reattaches it instantly without reloading from the server.\n this.tabService.redirectCurrentTab(savedEntityUrl);\n this.tabService.setRouteRedirect(currentRouteUrl, savedEntityUrl);\n this.router.navigateByUrl(savedEntityUrl).then(() => {\n this.navigateToNew();\n });\n } else {\n // Router is already at /{id}. Navigate to /new directly.\n // The /{id} component is cached by the reuse strategy.\n this.navigateToNew();\n }\n break;\n }\n default: {\n this.dataProviderService.updateModel(model);\n\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\n this.router.routerState.root.snapshot,\n FRAMEWORK_VIEW_TYPE,\n FrameworkViewType.Details,\n );\n const url = `${RouteHelper.getRouteURL(targetRoute!.parent!)}/${model.id}`;\n\n if (!this.tabService.isUrlActive(url)) {\n const currentRoute: string = RouteHelper.getRouteURL(targetRoute!);\n this.tabService.redirectCurrentTab(url);\n\n // Sync the Angular router to /{id} invisibly. Without this, the router\n // stays at the old URL (e.g., /new) and subsequent navigations to that\n // URL become no-ops (the New button would stop working after Save).\n if (currentRoute !== url) {\n this.tabService.setRouteRedirect(currentRoute, url);\n this.router.navigateByUrl(url);\n }\n }\n break;\n }\n }\n },\n error: (e: HttpErrorResponse) => {\n this.finishLoading('warning');\n this.formService.enableForm();\n\n if (e.status === 400) {\n this.formService.setValidationErrorsFromHttpResponse(e);\n } else {\n let errorMessage = 'Modal-Failed-DefaultMessage';\n if (typeof e.error === 'string') {\n errorMessage = e.error;\n }\n this.errorModal()?.showModal(errorMessage);\n }\n },\n complete: () => {\n this.formService.loading = false;\n },\n });\n }\n //#endregion\n\n //#region Public methods\n public override finishLoading(status: 'failure' | 'warning' | 'success'): void {\n super.finishLoading(status);\n }\n //#endregion\n\n //#region Private methods\n private navigateToNew(): void {\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\n this.router.routerState.root.snapshot,\n FRAMEWORK_VIEW_TYPE,\n FrameworkViewType.Details,\n );\n\n const url: string = targetRoute\n ? RouteHelper.getRouteURL(targetRoute.parent!)\n : RouteHelper.getRouteURL(this.router.routerState.root.snapshot, true);\n\n const tab: ITab = new Tab({ entityBaseUrl: `${url}/new`, url: `${url}/new` });\n this.tabService.navigateCurrentTab(tab);\n }\n\n private saveModel(): Observable<any> {\n this.formService.disableForm();\n const model: any = this.formService.getModelFromForm();\n return this.dataProviderService.saveModel(model);\n }\n //#endregion\n}\n","@if (isVisible()) {\n <lib-ribbon-button\n label=\"Button-Save\"\n icon=\"fa-save\"\n [defaultOption]=\"defaultOption()\"\n [disabled]=\"disabled() || !isAccessLoaded() || !isFormEditMode || isFormLoading\"\n [loading]=\"loading()\"\n [options]=\"options()\"\n (action)=\"onButtonClicked($event)\"\n >\n </lib-ribbon-button>\n}\n\n<framework-error-modal></framework-error-modal>\n","import { Component, forwardRef, inject, input, InputSignal, OnInit, signal, WritableSignal } from '@angular/core';\nimport { ActivatedRouteSnapshot, NavigationEnd, Route, Router, UrlSegment } from '@angular/router';\nimport {\n DataProviderService,\n IRibbonButtonOption,\n RibbonButtonComponent,\n RibbonGroupChild,\n} from '@zambon-dev/ui/library';\nimport { filter, takeUntil } from 'rxjs';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { TabService, TabViewService } from '../../../services';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-views',\n templateUrl: './button-views.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonViewsComponent) }],\n})\nexport class ButtonViewsComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n public readonly detailsViewRoute: InputSignal<ActivatedRouteSnapshot | null> = input<ActivatedRouteSnapshot | null>(\n null,\n );\n //#endregion\n\n //#region Variables\n private baseUrlPath?: string;\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n private isInternalNavigation = false;\n private router: Router = inject(Router);\n // A signal rather than a field: switching views changes which option the dropdown marks as the\n // current one, and the switch arrives from a router event.\n private readonly selectedViewId: WritableSignal<string | undefined> = signal(undefined);\n private tabService: TabService = inject(TabService);\n private tabViewService: TabViewService = inject(TabViewService);\n //#endregion\n\n //#region Properties\n protected get hasOptions(): boolean {\n return this.options().some(\n (option: IRibbonButtonOption) =>\n (option.isVisible ?? true) &&\n (option.allowedActions === undefined ||\n option.allowedActions.length === 0 ||\n option.isAccessAllowed === true ||\n (option.isAccessAllowed === undefined && option.allowedActions?.length > 0)),\n );\n }\n\n protected get isNewEntity(): boolean {\n return !(this.dataProviderService?.hasEntityID ?? false);\n }\n\n protected get selectedView(): IRibbonButtonOption | undefined {\n return this.options().find((option: IRibbonButtonOption) => option.id === this.selectedViewId());\n }\n\n private get defaultViewId(): string {\n return this.options()[0].id ?? '';\n }\n\n private get selectedViewUrl(): string {\n let url: string = this.baseUrlPath ?? '';\n\n const selectedView: IRibbonButtonOption | undefined = this.selectedView;\n if (selectedView && selectedView.id) {\n url += `/${selectedView.id}`;\n }\n\n return url;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n const detailsViewRoute: ActivatedRouteSnapshot | null = this.detailsViewRoute();\n if (detailsViewRoute) {\n this.options.set(\n detailsViewRoute.routeConfig?.children\n ?.filter((route: Route) => !!route.data && route.data['ignoreRoute'] !== true)\n ?.map((route: Route) => {\n const data: { [key: string | symbol]: any } = route.data ?? {};\n\n const option: IRibbonButtonOption = {\n id: route.path ?? '',\n isDisabled: false,\n isVisible: true,\n label: data['title'] ?? '',\n };\n\n const icon: string | undefined = data['icon'];\n if (icon) {\n option.icon = icon;\n }\n\n const allowedActions: string[] | undefined = data['allowedActions'];\n if (allowedActions && allowedActions.length > 0) {\n option.allowedActions = allowedActions;\n }\n\n return option;\n }) ?? [],\n );\n\n const url: string = RouteHelper.getRouteURL(detailsViewRoute);\n this.baseUrlPath = url;\n\n const option: string =\n detailsViewRoute.children[0]?.url?.map((segment: UrlSegment) => segment.path)?.join('/') ?? '';\n if (option === this.defaultViewId) {\n // We just need to check if the current option is the default, otherwise the router.events will handle the option selection.\n this.changeSelectedView(this.defaultViewId);\n }\n }\n\n this.router.events\n .pipe(\n filter((event: any) => event instanceof NavigationEnd),\n takeUntil(this.destroy$),\n )\n .subscribe((event: NavigationEnd) => {\n if (this.detailsViewRoute()) {\n // Use the current router state to get the up-to-date URL, since the stored\n // detailsViewRoute snapshot is immutable and becomes stale after save redirects\n // (e.g., /new → /:id).\n const currentRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\n this.router.routerState.root.snapshot,\n FRAMEWORK_VIEW_TYPE,\n FrameworkViewType.Details,\n );\n\n // Every details tab keeps this subscription alive, including the ones the reuse\n // strategy has detached, and the lookup above reads the *router*, which names\n // whichever tab the navigation went to. Without this guard a detached tab adopted\n // the base path of the tab being opened and then switched itself to that tab's view,\n // tearing its own ribbon down and rebuilding it -- which is how an active filter lost\n // its Clear filters button while the grid stayed filtered. Comparing the route\n // definition rather than the URL keeps the one navigation that legitimately changes\n // this tab's path: the redirect from /new to /:id after a save.\n if (currentRoute && currentRoute.routeConfig === this.detailsViewRoute()!.routeConfig) {\n const url: string = RouteHelper.getRouteURL(currentRoute);\n this.baseUrlPath = url;\n\n const activeViewId: string = this.getActiveOption(event.url);\n\n if (!this.isInternalNavigation) {\n if (this.selectedViewId() !== activeViewId) {\n this.changeSelectedView(activeViewId);\n }\n } else {\n this.isInternalNavigation = false;\n }\n }\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onViewClicked(selectedOption: string | undefined): void {\n this.changeSelectedView(selectedOption);\n this.isInternalNavigation = true;\n\n if (selectedOption === this.defaultViewId) {\n // Default view: remove sub-view entry, navigate back to detail view\n this.tabService.replaceCurrentTabSubView(this.baseUrlPath!);\n } else {\n const tab: ITab = new Tab({\n title: this.selectedView?.label,\n url: this.selectedViewUrl,\n });\n this.tabService.replaceCurrentTabSubView(this.baseUrlPath!, tab);\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n /**\n * Marks the chosen view as the current one, which is how the dropdown greys its own entry out.\n *\n * The options are rebuilt rather than edited in place: the ribbon button takes the list as an\n * input, so a field changed inside it is a change nothing can see.\n */\n private changeSelectedView(viewId: string | undefined): void {\n this.selectedViewId.set(viewId);\n this.tabViewService.setActiveView(viewId ?? '');\n\n this.options.update((options: IRibbonButtonOption[]) =>\n options.map((option: IRibbonButtonOption) =>\n option.isDisabled === (option.id === viewId) ? option : { ...option, isDisabled: option.id === viewId },\n ),\n );\n }\n\n private getActiveOption(url: string): string {\n const option: string = url.replace(this.baseUrlPath ?? '', '').substring(1);\n\n if (this.options().some((o: IRibbonButtonOption) => o.id === option)) {\n return option;\n }\n\n return this.defaultViewId;\n }\n //#endregion\n}\n","@if (hasOptions) {\n <lib-ribbon-button\n icon=\"fa-eye\"\n label=\"Button-Views\"\n [disabled]=\"!isAccessLoaded() || isNewEntity\"\n [options]=\"options()\"\n (action)=\"onViewClicked($event)\"\n >\n </lib-ribbon-button>\n}\n","import { Component, forwardRef, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\nimport { RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button',\n templateUrl: './button.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonComponent) }],\n})\nexport class ButtonComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n public readonly color: InputSignal<string> = input('text-primary-500');\n public readonly icon: InputSignal<string | undefined> = input<string>();\n public readonly label: InputSignal<string> = input('');\n\n public readonly action: OutputEmitterRef<void> = output<void>();\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n if (this.disabled() || !this.isAccessLoaded() || !this.isVisible()) {\n return;\n }\n\n this.action.emit();\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","@if (isVisible()) {\n <lib-ribbon-button\n [color]=\"color()\"\n [disabled]=\"disabled() || !isAccessLoaded()\"\n [icon]=\"icon()\"\n [iconSize]=\"iconSize()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n [options]=\"options()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n","import { Component, forwardRef, input, InputSignal } from '@angular/core';\nimport { RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { LegacySubViewForm, ModalBase } from '../../../../views';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-edit-legacy',\n templateUrl: './button-edit.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonEditLegacyComponent) }],\n})\n/**\n * @deprecated Use standalone {@link ButtonEditComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonEditLegacyComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n public readonly cancelColor: InputSignal<string> = input('text-red-500');\n public readonly cancelIcon: InputSignal<string> = input('fa-ban');\n public readonly cancelLabel: InputSignal<string> = input('Button-Cancel-Edit');\n public readonly editIcon: InputSignal<string> = input('fa-edit');\n public readonly editLabel: InputSignal<string> = input('Button-Edit');\n public readonly form: InputSignal<LegacySubViewForm | undefined> = input<LegacySubViewForm>();\n public readonly modal: InputSignal<ModalBase | undefined> = input<ModalBase>();\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onCancelAction(): void {\n this.form()?.cancelEdit();\n }\n\n protected onEditAction(): void {\n const form: LegacySubViewForm | undefined = this.form();\n if (form) {\n form.beginEdit();\n } else {\n this.modal()?.toggle();\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","@let legacyForm = form();\n\n@if (isVisible() && (!legacyForm || legacyForm.viewMode !== 'edit')) {\n <lib-ribbon-button\n [disabled]=\"disabled() || (!!legacyForm && legacyForm.loading)\"\n [icon]=\"editIcon()\"\n [iconSize]=\"iconSize()\"\n [label]=\"editLabel()\"\n [loading]=\"loading()\"\n (action)=\"onEditAction()\"\n ></lib-ribbon-button>\n}\n@if (isVisible() && legacyForm && legacyForm.viewMode === 'edit' && !legacyForm.isNew) {\n <lib-ribbon-button\n [color]=\"cancelColor()\"\n [disabled]=\"disabled() || legacyForm.loading\"\n [icon]=\"cancelIcon()\"\n [label]=\"cancelLabel()\"\n [loading]=\"loading()\"\n (action)=\"onCancelAction()\"\n ></lib-ribbon-button>\n}\n","import { Component, forwardRef, inject, input, InputSignal } from '@angular/core';\nimport { ITabView, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { Tab } from '../../../../models';\nimport { TabService } from '../../../../services';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-new-legacy',\n templateUrl: './button-new.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonNewLegacyComponent) }],\n})\n/**\n * @deprecated Use standalone {@link ButtonNewComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonNewLegacyComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n public readonly endpoint: InputSignal<string> = input('new');\n public readonly path: InputSignal<string> = input('');\n public readonly tabView: InputSignal<ITabView | undefined> = input<ITabView>();\n //#endregion\n\n //#region Variables\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clicked(): void {\n this.tabService.navigateTo(new Tab({ url: `${this.path()}/${this.endpoint()}` }));\n // this.tabService.navigateTab(this.tabView, `${this.path}/${this.endpoint}`);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","@if (isVisible()) {\n <lib-ribbon-button\n [label]=\"'Button-New'\"\n [icon]=\"'fa-plus'\"\n [disabled]=\"disabled()\"\n [loading]=\"loading()\"\n (action)=\"clicked()\"\n ></lib-ribbon-button>\n}\n","import { Component, forwardRef, inject, input, InputSignal, OnInit, signal, WritableSignal } from '@angular/core';\nimport { DataGridDataset, ITabView, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { takeUntil } from 'rxjs';\nimport { Tab } from '../../../../models';\nimport { TabService } from '../../../../services';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-open-record-legacy',\n templateUrl: './button-open-record.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonOpenRecordLegacyComponent) }],\n})\n/**\n * @deprecated Use standalone {@link ButtonOpenRecordComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonOpenRecordLegacyComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n public readonly endpoint: InputSignal<string> = input('new');\n public readonly path: InputSignal<string> = input('');\n public readonly tabView: InputSignal<ITabView | undefined> = input<ITabView>();\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n // A signal rather than a field: the grid announces a selection change from a subscription.\n protected readonly selectionCount: WritableSignal<number> = signal(0);\n\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngOnInit(): void {\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.selectionCount.set(this.dataGridDataset.selectedRowKeys.length);\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clicked(): void {\n if (this.dataGridDataset.hasSelectedRows && this.selectionCount() === 1) {\n const selectedKey: string = this.dataGridDataset.selectedRowKeys[0];\n const selectedID: any = this.dataGridDataset.getRowID(selectedKey);\n\n this.tabService.navigateTo(new Tab({ url: `${this.path()}/${selectedID}` }));\n // this.tabService.navigateTab(this.tabView, `${this.path}/${this.dataGridDataset.selectedRows[0]}`);\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","@if (isVisible()) {\n <lib-ribbon-button\n [label]=\"'Button-Open-Record'\"\n [icon]=\"'fa-eye'\"\n [disabled]=\"disabled() || selectionCount() !== 1\"\n [loading]=\"loading()\"\n (action)=\"clicked()\"\n ></lib-ribbon-button>\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, input, InputSignal, Signal, viewChild } from '@angular/core';\nimport { FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { take } from 'rxjs';\nimport { BackendFormValidationHelper } from '../../../../helpers';\nimport { TabService } from '../../../../services';\nimport { LegacySubViewForm, LegacyTabViewDetails } from '../../../../views';\nimport { ErrorModalComponent } from '../../../modals/error-modal/error-modal.component';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-save-legacy',\n templateUrl: './button-save.component.html',\n imports: [ErrorModalComponent, RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonSaveLegacyComponent) }],\n})\n/**\n * @deprecated Use standalone {@link ButtonSaveComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonSaveLegacyComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n private readonly errorModal: Signal<ErrorModalComponent | undefined> = viewChild(ErrorModalComponent);\n\n public readonly defaultOption: InputSignal<number> = input(0);\n public readonly form: InputSignal<LegacySubViewForm | undefined> = input<LegacySubViewForm>();\n public readonly tabView: InputSignal<LegacyTabViewDetails | undefined> = input<LegacyTabViewDetails>();\n //#endregion\n\n //#region Variables\n private formService: FormService = inject(FormService);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.options.set([\n { id: 'save', label: 'Button-Save', icon: 'fa-save' },\n { id: 'save-and-close', label: 'Button-Save-And-Close', icon: 'fa-save' },\n { id: 'save-and-new', label: 'Button-Save-And-New', icon: 'fa-save' },\n ]);\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClick(option?: string): void {\n const form: LegacySubViewForm | undefined = this.form();\n if (!form) {\n return;\n }\n\n this.startLoading();\n this.setTabViewLoading(true);\n\n form\n .save()\n .pipe(take(1))\n .subscribe({\n next: (model: any) => {\n this.finishLoading('success');\n\n this.formService.model = model;\n form.cancelEdit();\n\n switch (option) {\n case 'save-and-close':\n this.tabService.closeActiveTab();\n // this.tabService.closeTab(this.tabView);\n break;\n case 'save-and-new':\n this.tabView()?.buttonNew?.clicked();\n break;\n }\n },\n error: (e: HttpErrorResponse) => {\n this.finishLoading('warning');\n form.beginEdit(false);\n\n if (e.status === 400) {\n BackendFormValidationHelper.validateAllFormFields(e, form.dataForm);\n } else {\n let errorMessage = 'Modal-Failed-DefaultMessage';\n if (typeof e.error === 'string') {\n errorMessage = e.error;\n }\n\n this.errorModal()?.showModal(errorMessage);\n }\n },\n });\n }\n //#endregion\n\n //#region Public methods\n public override finishLoading(status: 'failure' | 'warning' | 'success'): void {\n this.setTabViewLoading(false);\n super.finishLoading(status);\n }\n //#endregion\n\n //#region Private methods\n private setTabViewLoading(isLoading: boolean): void {\n const tabView: LegacyTabViewDetails | undefined = this.tabView();\n if (tabView) {\n tabView.loading = isLoading;\n }\n }\n //#endregion\n}\n","@let legacyForm = form();\n\n@if (isVisible()) {\n <lib-ribbon-button\n label=\"Button-Save\"\n icon=\"fa-save\"\n [defaultOption]=\"defaultOption()\"\n [disabled]=\"disabled() || legacyForm?.viewMode !== 'edit' || (legacyForm?.loading ?? false)\"\n [loading]=\"loading()\"\n [options]=\"options()\"\n (action)=\"onButtonClick($event)\"\n >\n </lib-ribbon-button>\n}\n\n<framework-error-modal></framework-error-modal>\n","import { Component, forwardRef, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\nimport { IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/ui/library';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-views-legacy',\n templateUrl: './button-views.component.html',\n imports: [RibbonButtonComponent],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonViewsLegacyComponent) }],\n})\n/**\n * @deprecated Use standalone {@link ButtonViewsComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonViewsLegacyComponent extends BaseButton {\n public readonly views: InputSignal<IRibbonButtonOption[]> = input<IRibbonButtonOption[]>([]);\n\n public readonly viewChanged: OutputEmitterRef<string | undefined> = output<string | undefined>();\n\n clicked(option?: string): void {\n this.viewChanged.emit(option);\n }\n}\n","<lib-ribbon-button\n [label]=\"'Button-Views'\"\n [icon]=\"'fa-eye'\"\n [options]=\"views()\"\n (action)=\"clicked($event)\"\n></lib-ribbon-button>\n","import { NgModule } from '@angular/core';\nimport { ButtonDeleteComponent } from './button-delete/button-delete.component';\nimport { ButtonEditComponent } from './button-edit/button-edit.component';\nimport { ButtonExportComponent } from './button-export/button-export.component';\nimport { ButtonFiltersComponent } from './button-filters/button-filters.component';\nimport { ButtonNewComponent } from './button-new/button-new.component';\nimport { ButtonOpenRecordComponent } from './button-open-record/button-open-record.component';\nimport { ButtonRefreshComponent } from './button-refresh/button-refresh.component';\nimport { ButtonSaveComponent } from './button-save/button-save.component';\nimport { ButtonViewsComponent } from './button-views/button-views.component';\nimport {\n ButtonEditLegacyComponent,\n ButtonNewLegacyComponent,\n ButtonOpenRecordLegacyComponent,\n ButtonSaveLegacyComponent,\n ButtonViewsLegacyComponent,\n} from './legacy';\n\n@NgModule({\n declarations: [],\n imports: [\n ButtonDeleteComponent,\n ButtonEditComponent,\n ButtonExportComponent,\n ButtonFiltersComponent,\n ButtonNewComponent,\n ButtonOpenRecordComponent,\n ButtonRefreshComponent,\n ButtonSaveComponent,\n ButtonViewsComponent,\n\n ButtonNewLegacyComponent,\n ButtonEditLegacyComponent,\n ButtonSaveLegacyComponent,\n ButtonViewsLegacyComponent,\n ButtonOpenRecordLegacyComponent,\n ],\n exports: [\n ButtonDeleteComponent,\n ButtonEditComponent,\n ButtonExportComponent,\n ButtonFiltersComponent,\n ButtonNewComponent,\n ButtonOpenRecordComponent,\n ButtonRefreshComponent,\n ButtonSaveComponent,\n ButtonViewsComponent,\n\n ButtonNewLegacyComponent,\n ButtonEditLegacyComponent,\n ButtonSaveLegacyComponent,\n ButtonViewsLegacyComponent,\n ButtonOpenRecordLegacyComponent,\n ],\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkButtonsModule.\n * Import individual button components directly in your component's `imports` array.\n */\nexport class FrameworkButtonsModule {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, inject, OnDestroy, OnInit, signal, TemplateRef, WritableSignal } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RibbonComponent } from '@zambon-dev/ui/library';\nimport { Subject, takeUntil } from 'rxjs';\nimport { TabViewService } from '../../../services';\n\n@Component({\n selector: 'framework-default-tab-view',\n templateUrl: './default-tab-view.component.html',\n styleUrls: ['./default-tab-view.component.scss'],\n imports: [NgTemplateOutlet, RibbonComponent, RouterModule],\n providers: [{ provide: TabViewService }],\n})\nexport class DefaultTabViewComponent implements OnDestroy, OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n protected readonly ribbonTemplate: WritableSignal<TemplateRef<any> | undefined> = signal(undefined);\n\n private hasNamedAView = false;\n private ribbonViewTemplate: { [viewId: string]: TemplateRef<any> | undefined } = {};\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n protected tabViewService: TabViewService = inject(TabViewService);\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n public ngOnInit(): void {\n this.tabViewService.onUpdateRibbonTemplate\n .pipe(takeUntil(this.destroy$))\n .subscribe((template: TemplateRef<any> | undefined) => {\n this.ribbonViewTemplate[this.tabViewService.activeView] = template;\n this.updateRibbonTemplate(template);\n });\n\n this.tabViewService.onViewChanged.pipe(takeUntil(this.destroy$)).subscribe((viewId: string) => {\n this.claimUnnamedRibbon(viewId);\n\n this.updateRibbonTemplate(this.ribbonViewTemplate[viewId]);\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n /**\n * Claims the ribbon published before the active view had a name.\n *\n * A child view publishes its ribbon from ngAfterViewInit, and the view is only named afterwards,\n * so the first template of a tab is always cached under an empty id. For a tab opened straight\n * at a non-default view that id is never looked up again, the ribbon is emptied, and nothing\n * refills it -- a tab being re-activated has its child re-attached rather than re-created, so\n * ngAfterViewInit does not run a second time.\n *\n * Only the very first naming may claim it. The empty id is not a spare bucket: it is the default\n * view's own id, because that view is the one whose URL carries no sub-path. Once the user\n * starts switching views the unnamed template belongs to the view being *left*, and handing it\n * to the view being entered showed the previous view's buttons on the new one and left the\n * previous one with no buttons at all.\n *\n * @param viewId The view that has just become active.\n */\n private claimUnnamedRibbon(viewId: string): void {\n const isFirstNaming = !this.hasNamedAView;\n this.hasNamedAView = true;\n\n if (\n !isFirstNaming ||\n !viewId ||\n this.ribbonViewTemplate[viewId] !== undefined ||\n this.ribbonViewTemplate[''] === undefined\n ) {\n return;\n }\n\n this.ribbonViewTemplate[viewId] = this.ribbonViewTemplate[''];\n delete this.ribbonViewTemplate[''];\n }\n\n /**\n * One signal write, where there used to be a detectChanges()/markForCheck() pair.\n *\n * Those existed to render a real template at once while deferring a clear, so switching views\n * did not tear an already rendered ribbon down for a frame before the incoming view pushed its\n * own. A signal gets both for free: writes coalesce into the next pass, so a clear followed by\n * a set moments later is one render, not two. The NG0100 hazard goes with it -- a signal write\n * after the outlet has been checked schedules another pass instead of throwing.\n */\n private updateRibbonTemplate(template: TemplateRef<any> | undefined): void {\n this.ribbonTemplate.set(template);\n }\n //#endregion\n}\n","<lib-ribbon>\n <ng-container *ngTemplateOutlet=\"ribbonTemplate() ?? null\"></ng-container>\n</lib-ribbon>\n\n<router-outlet> </router-outlet>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, inject, OnDestroy, OnInit, signal, Signal, viewChild, WritableSignal } from '@angular/core';\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router, RouterModule } from '@angular/router';\nimport {\n DataProviderService,\n FormService,\n GroupContainerComponent,\n RibbonComponent,\n RibbonGroupComponent,\n} from '@zambon-dev/ui/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs';\nimport { RouteHelper } from '../../../helpers';\nimport { ITab } from '../../../models';\nimport { TabService, TabViewService } from '../../../services';\n// Imported by concrete path, not through the buttons barrel: that barrel re-exports\n// ./legacy, whose buttons import the views barrel, which re-exports this file. Going\n// through it leaves one of this component's imports undefined at evaluation time.\nimport { ButtonViewsComponent } from '../../buttons/button-views/button-views.component';\nimport { ErrorModalComponent } from '../../modals/error-modal/error-modal.component';\nimport { DefaultTabViewComponent } from '../default-tab-view/default-tab-view.component';\n\nfunction dataProviderFactory(route: ActivatedRoute): DataProviderService<any> {\n return <DataProviderService<any>>route.snapshot.data['dataProvider']();\n}\n\n@Component({\n selector: 'framework-default-details-tab-view',\n templateUrl: './default-details-tab-view.component.html',\n styleUrls: ['./default-details-tab-view.component.scss'],\n imports: [\n ButtonViewsComponent,\n ErrorModalComponent,\n GroupContainerComponent,\n NgTemplateOutlet,\n RibbonComponent,\n RibbonGroupComponent,\n RouterModule,\n TranslatePipe,\n ],\n providers: [\n { provide: TabViewService },\n { provide: DataProviderService, useFactory: dataProviderFactory, deps: [ActivatedRoute] },\n // A record's views are siblings: the form is one route, a child list is another, and only the\n // form provides a FormService of its own. So anything a non-form view renders has to find one\n // here or not at all -- and framework-button-edit asks for FormService and DataProviderService\n // together, of which this shell supplied only the second. Opening a child-list view threw\n // NG0201 before the component rendered at all.\n //\n // A form view's own provider shadows this one inside its subtree, so nothing changes there.\n // What reaches this instance is a view that has no form of its own, where the service sits\n // idle: the edit button reads `loading` and listens for `editCanceled`, and in modal mode --\n // which is why a child list has that button -- it never begins an edit on it.\n { provide: FormService },\n ],\n})\nexport class DefaultDetailsTabViewComponent extends DefaultTabViewComponent implements OnDestroy, OnInit {\n //#region ViewChilds, Inputs, Outputs\n private readonly errorModal: Signal<ErrorModalComponent | undefined> = viewChild(ErrorModalComponent);\n //#endregion\n\n //#region Variables\n // Signals rather than fields: the record's title arrives from the data provider's stream,\n // and the route it is read from is recomputed in that same subscription. Both are rendered\n // here -- the container heading and the views button -- with nothing else marking this view.\n protected readonly containerIcon: WritableSignal<string | undefined> = signal(undefined);\n protected readonly containerTitle: WritableSignal<string | undefined> = signal(undefined);\n protected readonly detailsViewRoute: WritableSignal<ActivatedRouteSnapshot | null> = signal(null);\n\n protected dataProviderClassName?: any;\n\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n private hasEntityID: boolean | null = null;\n private hasLoadError = false;\n private router: Router = inject(Router);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get componentName(): string {\n return DefaultDetailsTabViewComponent.name;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.detailsViewRoute.set(\n RouteHelper.getRouteWithComponent(this.router.routerState.root.snapshot, DefaultDetailsTabViewComponent),\n );\n this.hasEntityID = this.dataProviderService?.hasEntityID ?? null;\n\n this.dataProviderService\n ?.getModel$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((model: any) => {\n if (this.hasEntityID !== this.dataProviderService!.hasEntityID || !this.detailsViewRoute()) {\n // If the entity ID changes, we need update the detailsViewRoute to get the correct route URL later.\n this.hasEntityID = this.dataProviderService!.hasEntityID;\n this.detailsViewRoute.set(\n RouteHelper.getRouteWithComponent(this.router.routerState.root.snapshot, DefaultDetailsTabViewComponent),\n );\n }\n\n const detailsViewRoute: ActivatedRouteSnapshot | null = this.detailsViewRoute();\n if (detailsViewRoute) {\n let title: string = detailsViewRoute.data['defaultTitle'];\n if (this.dataProviderService!.hasEntityID) {\n title = this.dataProviderService!.getTitle(model);\n }\n\n this.containerIcon.set('');\n this.containerTitle.set(title);\n\n const url: string = RouteHelper.getRouteURL(detailsViewRoute);\n this.tabService.updateTabTitle(url, title);\n }\n });\n\n this.dataProviderService\n ?.getError$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((error: HttpErrorResponse) => {\n this.hasLoadError = true;\n\n if (error.status === 404) {\n this.errorModal()?.title.set('Modal-NotFound-Title');\n this.errorModal()?.subtitle.set('');\n this.errorModal()?.showModal('Modal-NotFound-Message');\n } else {\n this.errorModal()?.title.set('Modal-Failed-Title');\n this.errorModal()?.subtitle.set('Modal-Failed-Administrator');\n this.errorModal()?.showModal(error);\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onErrorModalClosed(): void {\n if (!this.hasLoadError) {\n return;\n }\n\n const history: ITab[] = this.tabService.activeTabHistory;\n const entityBaseUrl: string | undefined = history[history.length - 1]?.entityBaseUrl;\n\n // Find the entry before the invalid entity in the tab history.\n if (entityBaseUrl && history.length > 1) {\n const entityIndex: number = history.findIndex((entry: ITab) => entry.entityBaseUrl === entityBaseUrl);\n if (entityIndex > 0) {\n this.tabService.navigateCurrentTabBack(history[entityIndex - 1]);\n return;\n }\n }\n\n this.tabService.closeActiveTab();\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon>\n <ng-container *ngTemplateOutlet=\"ribbonTemplate() ?? null\"></ng-container>\n\n <div right>\n <lib-ribbon-group [label]=\"'RibbonGroup-Page' | translate\">\n <framework-button-views [detailsViewRoute]=\"detailsViewRoute()\"> </framework-button-views>\n </lib-ribbon-group>\n </div>\n</lib-ribbon>\n\n<lib-group-container [icon]=\"containerIcon()\" [title]=\"containerTitle()\">\n <router-outlet> </router-outlet>\n</lib-group-container>\n\n<framework-error-modal (closed)=\"onErrorModalClosed()\"></framework-error-modal>\n","import { Component, inject } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ITab } from '../../../models';\nimport { TabService } from '../../../services';\n\n@Component({\n selector: 'framework-tab-breadcrumbs',\n templateUrl: './tab-breadcrumbs.component.html',\n styleUrls: ['./tab-breadcrumbs.component.scss'],\n imports: [TranslatePipe],\n})\nexport class TabBreadcrumbsComponent {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n /**\n * Reads straight through to the service, which is the trap this component used to be the\n * example of: a getter over an array a service mutates elsewhere, with nothing to mark this\n * view dirty. TabService announces its own changes now, and that getter takes the dependency,\n * so no strategy is needed here.\n */\n protected get tabHistory(): ITab[] {\n return this.tabService.activeTabHistory;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onTitleClick(tab: ITab): void {\n this.tabService.navigateCurrentTabBack(tab);\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<i class=\"fa-solid fa-angles-right\"></i>\n\n@for (history of tabHistory; track history) {\n <a\n role=\"button\"\n tabindex=\"0\"\n (click)=\"onTitleClick(history)\"\n (keydown.enter)=\"onTitleClick(history)\"\n (keydown.space)=\"onTitleClick(history); $event.preventDefault()\"\n >\n @if (!history.isTitleLoading) {\n <span>{{ history.title ?? '' | translate }}</span>\n }\n @if (history.isTitleLoading) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n }\n </a>\n}\n","import {\n afterEveryRender,\n AfterViewInit,\n Component,\n ElementRef,\n NgZone,\n OnDestroy,\n OnInit,\n signal,\n ViewChild,\n WritableSignal,\n} from '@angular/core';\nimport { ActivatedRouteSnapshot, Route, Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { ITabHistory } from '../../../models/tab-history';\nimport { TabService } from '../../../services/tab.service';\nimport { TabBreadcrumbsComponent } from '../tab-breadcrumbs/tab-breadcrumbs.component';\n\n/** Sub-pixel slack: scrollLeft is fractional, so an exact comparison never reaches the end. */\nconst SCROLL_EPSILON = 1;\n\n/** How much of the visible strip one press of a scroll button travels. */\nconst SCROLL_BUTTON_STEP = 0.8;\n\n@Component({\n selector: 'framework-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n imports: [TabBreadcrumbsComponent, TranslatePipe],\n})\nexport class TabsComponent implements AfterViewInit, OnDestroy, OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('tabsNav') private tabsNav?: ElementRef<HTMLElement>;\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n private static instances = 0;\n\n /** Unique per instance: the ids below are referenced by aria-controls/aria-labelledby. */\n private readonly instanceId: string = `framework-tabs-${TabsComponent.instances++}`;\n\n /**\n * Fingerprint of everything that can invalidate the strip's scroll position: which tab is\n * selected, how many there are, and the strip's own geometry. Deliberately does NOT include\n * scrollLeft -- the user scrolling by hand must not make us yank the strip back.\n */\n private lastStripSignature = '';\n private navResizeObserver?: ResizeObserver;\n private isDestroyed = false;\n\n /** Drive the scroll buttons. Only ever assigned outside a change-detection pass (see below). */\n protected readonly canScrollLeft: WritableSignal<boolean> = signal(false);\n protected readonly canScrollRight: WritableSignal<boolean> = signal(false);\n\n /**\n * Whether the strip holds more tabs than it has room for. This decides that the buttons exist;\n * canScrollLeft and canScrollRight only decide whether each one is enabled.\n *\n * They used to decide both, so a button vanished the moment you reached the end it pointed at.\n * The strip then changed width under the pointer, and a click could land after the button had\n * already unmounted and do nothing — which is what \"sometimes it does not move\" was.\n */\n protected readonly isOverflowing: WritableSignal<boolean> = signal(false);\n\n /**\n * Whether anything reaches the strip's right edge: a tab, or the right scroll button. While\n * something does, the panel's top-right corner is square, because the card's corner then belongs\n * to the strip. Rounding both leaves whatever sits at the edge standing over the sweep where the\n * panel has curved away and is not there yet — a piece floating past the corner.\n */\n protected readonly isFlushRight: WritableSignal<boolean> = signal(false);\n //#endregion\n\n //#region Properties\n protected get activeHistory(): ITabHistory[] | null {\n return null; // this.tabService.activeHistory;\n }\n\n protected get activeTab(): string | null {\n return null; // this.tabService.activeTab;\n }\n\n protected get hasTabs(): boolean {\n return this.tabService.activeTabs.length > 0;\n }\n\n protected get openTabs(): ITab[] {\n return this.tabService.activeTabs ?? [];\n }\n\n protected get tabDisplayTitles(): (string | undefined)[] {\n return this.tabService.activeTabsDisplayTitles;\n }\n\n protected get tabLoadingStates(): boolean[] {\n return this.tabService.activeTabsLoadingStates;\n }\n\n /** Id of the panel these tabs control; referenced by each tab's aria-controls. */\n protected get panelId(): string {\n return `${this.instanceId}-panel`;\n }\n\n /** Id of the selected tab, so the panel can name the tab that labels it. */\n protected get activeTabId(): string | null {\n const index: number = this.openTabs.findIndex((tab: ITab) => this.isTabActive(tab));\n return index === -1 ? null : this.tabId(index);\n }\n\n protected trackByFn: (index: number, tab: ITab) => string = (_: number, tab: ITab): string => tab.url;\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n private ngZone: NgZone,\n private router: Router,\n private tabService: TabService,\n ) {\n // Replaces ngAfterViewChecked + queueMicrotask. That pair only ever ran because zone.js\n // produced an ambient pass on every event; with no zone there is nothing to piggyback on and\n // the strip silently stopped re-measuring. afterEveryRender is the supported hook for reading\n // layout, and it runs after the bindings have been checked, so writing the affordance here\n // cannot raise NG0100 either.\n afterEveryRender(() => {\n const signature: string = this.stripSignature();\n if (signature === this.lastStripSignature) {\n return;\n }\n this.lastStripSignature = signature;\n this.remeasureStrip();\n });\n }\n\n public ngAfterViewInit(): void {\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\n if (!nav) {\n return;\n }\n\n // Outside Angular: these fire continuously while scrolling or dragging a window edge, and\n // none of them need a change-detection pass unless a button's state actually flips.\n this.ngZone.runOutsideAngular(() => {\n nav.addEventListener('scroll', this.onNavScroll, { passive: true });\n nav.addEventListener('wheel', this.onNavWheel, { passive: false });\n\n // Catches the window resizing and the sidebar collapsing -- both change how many tabs\n // fit without changing the tab list, so nothing else would tell us to re-check.\n if (typeof ResizeObserver === 'function') {\n this.navResizeObserver = new ResizeObserver(() => this.remeasureStrip());\n this.navResizeObserver.observe(nav);\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.isDestroyed = true;\n this.navResizeObserver?.disconnect();\n\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\n nav?.removeEventListener('scroll', this.onNavScroll);\n nav?.removeEventListener('wheel', this.onNavWheel);\n }\n\n public ngOnInit(): void {\n const activatedDetailsTabView: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\n this.router.routerState.snapshot.root,\n FRAMEWORK_VIEW_TYPE,\n FrameworkViewType.Details,\n );\n if (activatedDetailsTabView) {\n const shouldIgnoreFirstChildRoute: boolean =\n !!activatedDetailsTabView.firstChild &&\n activatedDetailsTabView.firstChild.data &&\n activatedDetailsTabView.firstChild.data['ignoreRoute'] === true;\n\n const url: string = RouteHelper.getRouteURL(activatedDetailsTabView);\n const clones: string[] = [];\n\n if (shouldIgnoreFirstChildRoute) {\n clones.push(RouteHelper.getRouteURL(activatedDetailsTabView.firstChild!));\n } else if (activatedDetailsTabView.firstChild) {\n const childPath: string = activatedDetailsTabView.firstChild.url.map((s: any) => s.path).join('/');\n const defaultChildPath: string =\n activatedDetailsTabView.routeConfig?.children?.filter(\n (route: Route) => !!route.data && route.data['ignoreRoute'] !== true,\n )?.[0]?.path ?? '';\n\n if (childPath !== defaultChildPath) {\n const entityID = Number(activatedDetailsTabView.paramMap.get('id'));\n if (!entityID) {\n // New entity: inner views are not available, redirect to base URL.\n this.router.navigate([url], { replaceUrl: true });\n } else {\n // Non-default child route (e.g. direct navigation to /audit): add sub-view to history for breadcrumbs.\n const childTitle: string = activatedDetailsTabView.firstChild?.data?.['title'] ?? '';\n queueMicrotask(() => {\n const childUrl: string = RouteHelper.getRouteURL(activatedDetailsTabView.firstChild!);\n this.tabService.replaceCurrentTabSubView(\n url,\n new Tab({\n title: childTitle,\n url: childUrl,\n }),\n );\n });\n }\n }\n }\n\n this.tabService.openTab(\n new Tab({\n clones: clones,\n entityBaseUrl: url,\n queryParams: activatedDetailsTabView.queryParams,\n url: url,\n }),\n );\n } else {\n const activatedTabView: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\n this.router.routerState.snapshot.root,\n FRAMEWORK_VIEW_TYPE,\n FrameworkViewType.List,\n );\n if (activatedTabView) {\n const url: string = RouteHelper.getRouteURL(activatedTabView);\n this.tabService.openTab(\n new Tab({\n queryParams: activatedTabView.queryParams,\n url: url,\n }),\n );\n } else {\n this.router.navigate(['/']);\n }\n }\n }\n //#endregion\n\n //#region Event handlers\n protected onActivateTab(tab: ITab): void {\n this.tabService.activateTab(tab);\n }\n\n protected onCloseTab(index: number): void {\n this.tabService.closeTab(index);\n }\n\n /** Middle click closes a tab, the way it does in a browser. */\n protected onTabAuxClick(event: MouseEvent, index: number): void {\n if (event.button !== 1) {\n return;\n }\n // Chromium starts autoscroll on middle click unless the default is prevented.\n event.preventDefault();\n this.onCloseTab(index);\n }\n\n /**\n * Roving focus. A tablist is a single tab stop: Tab reaches the selected tab, and the\n * arrow keys move between tabs from there. A delta of 0 means go to `from` exactly,\n * which is what Home and End want.\n */\n protected onMoveFocus(from: number, delta: number): void {\n const count: number = this.openTabs.length;\n if (count === 0) {\n return;\n }\n const target: number = delta === 0 ? Math.min(Math.max(from, 0), count - 1) : (from + delta + count) % count;\n this.focusTab(target);\n }\n\n /** The scroll buttons at each end of the strip. `direction` is -1 for left, 1 for right. */\n protected onScrollStrip(direction: number): void {\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\n if (!nav) {\n return;\n }\n\n const step: number = nav.clientWidth * SCROLL_BUTTON_STEP * direction;\n if (typeof nav.scrollBy === 'function') {\n nav.scrollBy({ left: step, behavior: 'smooth' });\n } else {\n // jsdom, and any browser without smooth scrolling, still gets the movement.\n nav.scrollLeft += step;\n }\n }\n //#endregion\n\n //#region Public methods\n protected isTabActive(tab: ITab): boolean {\n return this.tabService.isTabActive(tab);\n }\n //#endregion\n\n //#region Private methods\n /** Stable per index, so aria-controls and aria-labelledby have something to point at. */\n protected tabId(index: number): string {\n return `${this.instanceId}-tab-${index}`;\n }\n\n private tabElements(): HTMLElement[] {\n return Array.from(this.tabsNav?.nativeElement.querySelectorAll<HTMLElement>('[role=\"tab\"]') ?? []);\n }\n\n /** Moves focus AND selection: this tablist follows the automatic-activation pattern. */\n private focusTab(index: number): void {\n const element: HTMLElement | undefined = this.tabElements()[index];\n if (!element) {\n return;\n }\n element.focus();\n\n const tab: ITab | undefined = this.openTabs[index];\n if (tab) {\n this.onActivateTab(tab);\n }\n }\n\n /**\n * Everything that invalidates the scroll position, in one cheap string. The geometry is part\n * of it because the window resizing or the sidebar collapsing can push the selected tab out\n * of sight without the tab list changing at all -- which is precisely how you end up looking\n * at a panel whose tab is nowhere on screen.\n */\n private stripSignature(): string {\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\n const index: number = this.openTabs.findIndex((tab: ITab) => this.isTabActive(tab));\n return `${index}|${this.openTabs.length}|${nav?.clientWidth ?? 0}|${nav?.scrollWidth ?? 0}`;\n }\n\n /** Keeps the selected tab on screen. Called from a microtask, never mid-change-detection. */\n private scrollActiveTabIntoView(): void {\n const index: number = this.openTabs.findIndex((tab: ITab) => this.isTabActive(tab));\n if (index === -1) {\n return;\n }\n\n // Guarded: scrollIntoView is not implemented in jsdom, so an unguarded call throws in\n // any consumer's unit tests.\n const element: HTMLElement | undefined = this.tabElements()[index];\n if (typeof element?.scrollIntoView === 'function') {\n element.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n }\n\n /**\n * Recomputes whether either scroll button applies. Reads first and only enters the zone when\n * a button actually flips, so an ordinary scroll costs one layout read and no render.\n */\n private syncScrollAffordance(): void {\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\n if (!nav || this.isDestroyed) {\n return;\n }\n\n const canLeft: boolean = nav.scrollLeft > SCROLL_EPSILON;\n const canRight: boolean = nav.scrollLeft + nav.clientWidth < nav.scrollWidth - SCROLL_EPSILON;\n const overflowing: boolean = nav.scrollWidth > nav.clientWidth + SCROLL_EPSILON;\n\n // Overflowing means the right button holds the edge. Short of that, the last tab does if it\n // ends within a pixel of the strip — the case where the tabs happen to fill it exactly.\n const lastTab: Element | null = nav.lastElementChild;\n const flushRight: boolean =\n overflowing ||\n (lastTab !== null && lastTab.getBoundingClientRect().right >= nav.getBoundingClientRect().right - SCROLL_EPSILON);\n\n if (\n canLeft === this.canScrollLeft() &&\n canRight === this.canScrollRight() &&\n overflowing === this.isOverflowing() &&\n flushRight === this.isFlushRight()\n ) {\n return;\n }\n\n this.canScrollLeft.set(canLeft);\n this.canScrollRight.set(canRight);\n this.isOverflowing.set(overflowing);\n this.isFlushRight.set(flushRight);\n }\n\n /** Everything a geometry change implies: the selected tab may be off-screen, and the scroll\n * buttons may have appeared or gone. */\n private remeasureStrip(): void {\n this.scrollActiveTabIntoView();\n this.syncScrollAffordance();\n }\n\n /** Arrow function: registered and removed as a listener, so it must keep its `this`. */\n private onNavScroll = (): void => {\n this.syncScrollAffordance();\n };\n\n /**\n * A tab strip is horizontal but a mouse wheel is vertical, so without this the only way to\n * reach an off-screen tab with a plain wheel mouse is the buttons. Trackpads and shift+wheel\n * already produce deltaX, so those are left alone.\n */\n private onNavWheel = (event: WheelEvent): void => {\n const nav: HTMLElement | undefined = this.tabsNav?.nativeElement;\n if (!nav || event.deltaX !== 0 || event.deltaY === 0) {\n return;\n }\n if (nav.scrollWidth <= nav.clientWidth) {\n return;\n }\n\n event.preventDefault();\n nav.scrollLeft += event.deltaY;\n };\n //#endregion\n}\n","@if (hasTabs) {\n <div class=\"tabs-container\" [class.can-scroll-left]=\"canScrollLeft()\" [class.can-scroll-right]=\"canScrollRight()\">\n <!-- Both buttons are present whenever the strip overflows, and disabled rather than removed at\n the end they point at. Rendering them per-direction meant the one being reached for\n disappeared on arrival: the strip changed width under the pointer and the click landed on\n nothing. tabindex -1 because the tablist is already one tab stop and the arrow keys reach\n every tab -- these are a pointer affordance, not a second keyboard path. -->\n @if (isOverflowing()) {\n <button\n class=\"tabs-scroll left\"\n type=\"button\"\n tabindex=\"-1\"\n [disabled]=\"!canScrollLeft()\"\n [attr.aria-label]=\"'Tabs-ScrollLeft' | translate\"\n (click)=\"onScrollStrip(-1)\"\n >\n <i class=\"fas fa-chevron-left\"></i>\n </button>\n }\n\n <!-- Horizontally scrollable. This used to be overflow:hidden, so once the tabs were\n wider than the bar the ones past the right edge could not be reached at all. -->\n <ul #tabsNav class=\"tabs-nav\" role=\"tablist\">\n @for (tab of openTabs; track trackByFn(i, tab); let i = $index) {\n <li role=\"presentation\" [class.active]=\"isTabActive(tab)\">\n <a\n class=\"tab-item\"\n role=\"tab\"\n [id]=\"tabId(i)\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [attr.title]=\"tabDisplayTitles[i] ?? tab.title ?? null\"\n [attr.tabindex]=\"isTabActive(tab) ? 0 : -1\"\n (click)=\"onActivateTab(tab)\"\n (auxclick)=\"onTabAuxClick($event, i)\"\n (keydown.enter)=\"onActivateTab(tab)\"\n (keydown.space)=\"onActivateTab(tab); $event.preventDefault()\"\n (keydown.arrowleft)=\"onMoveFocus(i, -1); $event.preventDefault()\"\n (keydown.arrowright)=\"onMoveFocus(i, 1); $event.preventDefault()\"\n (keydown.home)=\"onMoveFocus(0, 0); $event.preventDefault()\"\n (keydown.end)=\"onMoveFocus(openTabs.length - 1, 0); $event.preventDefault()\"\n (keydown.delete)=\"onCloseTab(i); $event.preventDefault()\"\n >\n <!-- Rendered whether or not the title has resolved, so the tab keeps its width\n and the strip does not reflow as each title arrives. -->\n <span class=\"label\">{{ tabDisplayTitles[i] ?? tab.title ?? '' | translate }}</span>\n\n @if (tabLoadingStates[i]) {\n <svg class=\"spinner\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n }\n </a>\n\n <!-- tabindex -1: the tablist is one tab stop, and the close control is reachable\n from the tab itself with Delete rather than by tabbing through every one. -->\n <button\n class=\"tab-close\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Tabs-CloseTab' | translate: { title: tabDisplayTitles[i] ?? tab.title ?? '' }\"\n (click)=\"onCloseTab(i)\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n </li>\n }\n </ul>\n\n @if (isOverflowing()) {\n <button\n class=\"tabs-scroll right\"\n type=\"button\"\n tabindex=\"-1\"\n [disabled]=\"!canScrollRight()\"\n [attr.aria-label]=\"'Tabs-ScrollRight' | translate\"\n (click)=\"onScrollStrip(1)\"\n >\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n }\n </div>\n}\n@if (hasTabs) {\n <div\n class=\"tab-content\"\n [class.flush-right]=\"isFlushRight()\"\n role=\"tabpanel\"\n [id]=\"panelId\"\n [attr.aria-labelledby]=\"activeTabId\"\n >\n <framework-tab-breadcrumbs></framework-tab-breadcrumbs>\n <ng-content></ng-content>\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { DefaultDetailsTabViewComponent } from './default-details-tab-view/default-details-tab-view.component';\nimport { DefaultTabViewComponent } from './default-tab-view/default-tab-view.component';\nimport { TabBreadcrumbsComponent } from './tab-breadcrumbs/tab-breadcrumbs.component';\nimport { TabsComponent } from './tabs/tabs.component';\n\n@NgModule({\n declarations: [],\n imports: [DefaultDetailsTabViewComponent, DefaultTabViewComponent, TabBreadcrumbsComponent, TabsComponent],\n exports: [DefaultDetailsTabViewComponent, DefaultTabViewComponent, TabsComponent],\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkViewsModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkViewsModule {}\n","import { NgModule } from '@angular/core';\nimport { FrameworkButtonsModule } from './buttons/buttons.module';\nimport { FrameworkModalsModule } from './modals/modals.module';\nimport { FrameworkViewsModule } from './views/views.module';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [FrameworkButtonsModule, FrameworkModalsModule, FrameworkViewsModule],\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkComponentsModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkComponentsModule {}\n","import { InjectionToken } from '@angular/core';\n\nexport const APP_CONFIG: InjectionToken<AppConfig> = new InjectionToken<AppConfig>('Manually constructed AppConfig', {\n providedIn: 'root',\n factory: () => new AppConfig(''),\n});\n\nexport interface AppConfigOptions {\n appName?: string;\n companyName?: string;\n environment?: string;\n logoUrl?: string;\n notificationsEnabled?: boolean;\n notificationsUrl?: string;\n version?: string;\n}\n\nexport class AppConfig {\n public BASE_URL: string;\n\n /** Application name shown in the top bar brand block. */\n public appName: string;\n\n /** Company name shown beneath the application name. */\n public companyName: string;\n\n /** Environment key (e.g. 'DEV', 'QA', 'STG', 'PROD'). Empty string when unset. */\n public environment: string;\n\n /** Optional brand logo URL shown in the top bar. */\n public logoUrl?: string;\n\n /** Whether the top-bar notifications feature (bell + badge) is enabled. */\n public notificationsEnabled: boolean;\n\n /** SignalR hub URL the notifications service connects to when enabled. */\n public notificationsUrl: string;\n\n /** Application version string (e.g. '1.4.0'), shown at the bottom of the navigation. */\n public version: string;\n\n constructor(baseUrl: string, options?: AppConfigOptions) {\n this.BASE_URL = baseUrl;\n this.appName = options?.appName ?? '';\n this.companyName = options?.companyName ?? '';\n this.environment = options?.environment ?? '';\n this.logoUrl = options?.logoUrl;\n this.notificationsEnabled = options?.notificationsEnabled ?? false;\n this.notificationsUrl = options?.notificationsUrl ?? '';\n this.version = options?.version ?? '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DataGridConfigs, DataGridConfigsProvider } from '@zambon-dev/ui/library';\n\n@Injectable()\nexport class FrameworkGridConfigsProvider extends DataGridConfigsProvider {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n Object.assign(this.configs, {\n loadingDisplayText: 'Grid-Loading',\n messageOnEmpty: 'Grid-Message-Empty',\n messageOnFailed: 'Grid-Message-Failed',\n messageOnLazyLoad: 'Grid-Message-LazyLoad',\n } as DataGridConfigs);\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","import { NgModule } from '@angular/core';\nimport { FrameworkComponentsModule } from './components';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [FrameworkComponentsModule],\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkModule {}\n","import { HttpBackend } from '@angular/common/http';\nimport { EnvironmentProviders, Provider } from '@angular/core';\nimport { provideTranslateService, TranslateLoader } from '@ngx-translate/core';\nimport { MultiTranslateHttpLoader, TranslationResource } from 'ngx-translate-multi-http-loader';\n\nimport { AngularAssetPattern } from '@zambon-dev/ui/library';\n\nexport const ZAMBON_FRAMEWORK_I18N_ASSET_PATH = 'assets/i18n/zambon-dev/framework';\n\nexport const ZAMBON_FRAMEWORK_I18N_ASSET: AngularAssetPattern = {\n glob: '**/*.json',\n input: 'node_modules/@zambon-dev/ui/i18n/framework',\n output: ZAMBON_FRAMEWORK_I18N_ASSET_PATH,\n};\n\nexport const ZAMBON_FRAMEWORK_I18N_RESOURCES: TranslationResource[] = [\n { prefix: `/${ZAMBON_FRAMEWORK_I18N_ASSET_PATH}/`, suffix: '.json' },\n];\n\nexport interface ZambonFrameworkTranslateConfig {\n defaultLanguage?: string;\n appResources?: (string | TranslationResource)[];\n}\n\nexport function createZambonFrameworkTranslateLoader(\n httpBackend: HttpBackend,\n appResources: (string | TranslationResource)[] = [],\n): MultiTranslateHttpLoader {\n return new MultiTranslateHttpLoader(httpBackend, [...ZAMBON_FRAMEWORK_I18N_RESOURCES, ...appResources]);\n}\n\nexport function provideZambonFrameworkTranslateLoader(appResources: (string | TranslationResource)[] = []): Provider {\n return {\n provide: TranslateLoader,\n useFactory: (httpBackend: HttpBackend) => createZambonFrameworkTranslateLoader(httpBackend, appResources),\n deps: [HttpBackend],\n };\n}\n\nexport function provideZambonFrameworkTranslateService(\n config: ZambonFrameworkTranslateConfig = {},\n): EnvironmentProviders {\n return provideTranslateService({\n defaultLanguage: config.defaultLanguage,\n loader: provideZambonFrameworkTranslateLoader(config.appResources),\n });\n}\n","import { Component, OnDestroy, signal, WritableSignal } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class ViewBase implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n\n // A signal rather than a field: a view's own template reads `loading` to show its spinner,\n // and every assignment here happens inside a subscription. The accessors below keep their\n // old shape, so a subclass reading or writing `this.loading` needs no change; a subclass\n // template is better off reading `loadingState()` directly.\n protected readonly loadingState: WritableSignal<boolean> = signal(false);\n //#endregion\n\n //#region Properties\n public get loading(): boolean {\n return this.loadingState();\n }\n public set loading(value: boolean) {\n this.loadingState.set(value);\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { DataGridDataset, DataProviderService, MultiSelectResultDataset } from '@zambon-dev/ui/library';\nimport { skip, takeUntil } from 'rxjs';\nimport { ViewBase } from './view-base';\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class ChildList<TEntityModel> extends ViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset;\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected resultDataset: MultiSelectResultDataset | null;\n protected selectionCount = 0;\n //#endregion\n\n //#region Properties\n protected get isLoading(): boolean {\n return this.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.resultDataset = inject(MultiSelectResultDataset, { optional: true });\n }\n\n public ngOnInit(): void {\n this.dataGridDataset.loadStarted.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.loading = false;\n });\n\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.selectedRowChanged();\n });\n\n this.resultDataset?.savedChanges?.pipe(takeUntil(this.destroy$))?.subscribe(() => {\n this.dataGridDataset.refresh();\n });\n\n this.dataProvider\n ?.getModel$()\n .pipe(skip(1), takeUntil(this.destroy$))\n .subscribe(() => {\n this.dataGridDataset.refresh();\n });\n\n if (this.dataProvider?.hasEntityID) {\n this.dataGridDataset.parentEntityId = this.dataProvider.entityID;\n\n if (!this.dataGridDataset.loadedRows) {\n this.dataGridDataset.refresh();\n }\n\n if (this.resultDataset) {\n this.resultDataset.parentEntityId = this.dataProvider.entityID;\n }\n }\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected selectedRowChanged(): void {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n }\n //#endregion\n}\n","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { DataGridDataset, MultiSelectResultDataset } from '@zambon-dev/ui/library';\nimport { takeUntil } from 'rxjs';\nimport { ViewBase } from './view-base';\n\n/**\n * @deprecated Use standalone {@link ChildList} instead. Migrate by extending ChildList\n * and using standalone component imports with inject() for dependency injection.\n */\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class ChildListLegacy extends ViewBase implements OnInit {\n private _entityId?: number;\n\n protected selectionCount = 0;\n\n get entityId(): number | undefined {\n return this._entityId;\n }\n @Input() set entityId(value: number | undefined) {\n if (this._entityId !== value) {\n this._entityId = value;\n this.dataGridDataset.parentEntityId = value;\n\n if (!this.dataGridDataset.loadedRows) {\n this.dataGridDataset.refresh();\n }\n\n if (this.resultDataset) {\n this.resultDataset.parentEntityId = value;\n }\n }\n }\n\n @Input() disabled = false;\n\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected resultDataset: MultiSelectResultDataset | null = inject(MultiSelectResultDataset, { optional: true });\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n this.dataGridDataset.loadStarted.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.loading = false;\n });\n\n if (!this.dataGridDataset.loadedRows) {\n this.loading = true;\n }\n\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.selectedRowChanged();\n });\n }\n\n selectedRowChanged(): void {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n }\n}\n","import { AfterViewInit, Component, inject, TemplateRef, ViewChild } from '@angular/core';\nimport { TabViewService } from '../services';\nimport { ViewBase } from './view-base';\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class TabViewBase extends ViewBase implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('ribbon') private ribbonTemplate?: TemplateRef<any>;\n //#endregion\n\n //#region Variables\n private tabViewService: TabViewService | null;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n // This will force the screen to initialize with the buttons disabled.\n this.loading = true;\n this.tabViewService = inject(TabViewService, { optional: true });\n }\n\n public ngAfterViewInit(): void {\n this.tabViewService?.updateRibbonTemplate(this.ribbonTemplate);\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataProviderService, FormService } from '@zambon-dev/ui/library';\nimport { take, takeUntil } from 'rxjs';\nimport { TabViewBase } from './tabview-base';\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class FormView<TEntityModel> extends TabViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataForm!: FormGroup;\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected formBuilder: FormBuilder;\n protected formService: FormService;\n //#endregion\n\n //#region Properties\n protected get hasEntityID(): boolean {\n return this.dataProvider?.hasEntityID ?? false;\n }\n\n protected get isLoading(): boolean {\n return this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.formBuilder = inject(FormBuilder);\n this.formService = inject(FormService);\n }\n\n public ngOnInit(): void {\n this.dataForm = this.formSetup();\n this.formService.initializeForm(this.dataForm);\n\n this.formService.loading = true;\n this.dataProvider\n ?.getModel$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((model: TEntityModel | null) => {\n this.formService.loading = false;\n this.formService.model = model;\n this.formService.resetForm();\n\n if (!this.dataProvider?.hasEntityID) {\n this.formService.beginEdit();\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected abstract formSetup(): FormGroup;\n //#endregion\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, inject, Input, OnInit, signal, WritableSignal } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataProviderService, FormService } from '@zambon-dev/ui/library';\nimport { Observable, take, tap, throwError } from 'rxjs';\nimport { ViewBase } from '../view-base';\n\n/**\n * @deprecated Use standalone {@link FormView} instead. Migrate by extending FormView\n * and using standalone component imports with inject() for dependency injection.\n */\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class LegacySubViewForm extends ViewBase implements OnInit {\n @Input() entityId?: number;\n @Input() set model(value: any | null) {\n if (this._model !== value) {\n this._model = value;\n\n if (this.dataForm) {\n this.dataForm.patchValue(this.model);\n }\n }\n }\n\n override get loading(): boolean {\n return false;\n return this.formService.loading;\n }\n\n override set loading(value: boolean) {\n this.formService.loading = value;\n }\n\n get isNew(): boolean {\n return !this.entityId;\n }\n\n // A signal rather than a field: the legacy edit and save buttons decide what to render from\n // `form.viewMode`, and this flips inside beginEdit/cancelEdit with nothing marking their views\n // dirty. The accessors keep the old shape.\n get viewMode(): 'view' | 'edit' {\n return this._viewMode();\n }\n\n set viewMode(value: 'view' | 'edit') {\n this._viewMode.set(value);\n }\n get model(): any | null {\n return this._model;\n }\n\n dataForm!: FormGroup;\n\n private _model: any | null = null;\n private readonly _viewMode: WritableSignal<'view' | 'edit'> = signal('view');\n\n protected dataProvider: DataProviderService<any> | null;\n\n constructor(\n protected formBuilder: FormBuilder,\n protected formService: FormService,\n ) {\n super();\n\n this.dataProvider = inject(DataProviderService, { optional: true });\n }\n\n ngOnInit(): void {\n this.dataForm = this.formSetup();\n\n this.updateModel(this.model);\n\n if (this.dataProvider) {\n this.formService.loading = true;\n\n this.dataProvider\n .getModel$()\n .pipe(take(1))\n .subscribe((_: any) => {\n this.formService.loading = false;\n });\n }\n }\n\n protected updateModel(model: any): void {\n this._model = model;\n\n if (this.isNew) {\n this.beginEdit();\n } else {\n this.cancelEdit();\n }\n }\n\n beginEdit(resetValues = true): void {\n setTimeout(() => {\n this.viewMode = 'edit';\n this.dataForm.enable();\n\n if (resetValues) {\n this.dataForm.patchValue(this.model);\n }\n });\n }\n\n cancelEdit(): void {\n this.viewMode = 'view';\n this.dataForm.patchValue(this.model);\n this.dataForm.disable();\n }\n\n /** Extension point: subclasses override this to validate before save. */\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars\n protected validate(_formModel: any): void {}\n\n save(): Observable<any> {\n this.validate(this.dataForm.getRawValue());\n\n if (this.dataForm.valid) {\n this.dataForm.disable();\n\n return this.saveModel().pipe(tap(() => this.dataForm.enable()));\n } else {\n this.dataForm.markAllAsTouched();\n return throwError(() => new HttpErrorResponse({ error: { message: 'Form invalid', errors: null }, status: 400 }));\n }\n }\n\n protected abstract formSetup(): FormGroup;\n protected abstract saveModel(): Observable<any>;\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ITabView, RouterFormatter } from '@zambon-dev/ui/library';\nimport { TabService } from '../../services';\nimport { ViewBase } from '../view-base';\n\n/**\n * @deprecated Use standalone {@link TabViewBase} instead. Migrate by extending TabViewBase\n * and using standalone component imports with inject() for dependency injection.\n */\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class LegacyTabViewBase extends ViewBase implements OnInit, ITabView {\n title = '';\n url: string;\n activeView?: string;\n\n constructor(\n protected route: ActivatedRoute,\n protected tabService: TabService,\n ) {\n super();\n\n this.url = RouterFormatter.getURL(this.route.snapshot);\n }\n\n ngOnInit(): void {\n this.openTabView();\n }\n\n protected openTabView() {\n // this.tabService.openView(this);\n }\n\n protected updateTitle(title: string): void {\n this.title = title;\n this.tabService.updateTabTitle(this.url, title);\n }\n}\n","import { AfterViewInit, Component, forwardRef, ViewChild, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { FormService, IRibbonButtonOption } from '@zambon-dev/ui/library';\nimport { Observable, takeUntil } from 'rxjs';\nimport { ButtonNewLegacyComponent } from '../../components';\nimport { Tab } from '../../models';\nimport { TabService } from '../../services';\nimport { LegacyTabViewBase } from './legacy-tabview-base';\n\n/**\n * @deprecated Use standalone {@link TabViewBase} with {@link DefaultDetailsTabViewComponent} pattern instead.\n * Migrate by extending TabViewBase and composing detail/history views as child routes\n * with standalone component imports.\n */\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class LegacyTabViewDetails extends LegacyTabViewBase implements AfterViewInit, OnInit {\n //#region ViewChilds, Inputs, Outputs\n // A forward reference: the legacy buttons import the views barrel, so this class is defined before\n // ButtonNewLegacyComponent -- and in the published bundle it sits further down the file, where\n // reading it eagerly throws the moment a JIT runtime such as Jest loads the package.\n @ViewChild(forwardRef(() => ButtonNewLegacyComponent)) public buttonNew!: ButtonNewLegacyComponent;\n //#endregion\n\n //#region Variables\n public override title = '';\n\n protected defaultView = 'details';\n protected entityId?: number;\n protected views: IRibbonButtonOption[] = [\n { id: 'details', label: 'Button-Views-Details', icon: 'fa-dice-d6' },\n { id: 'history', label: 'Button-Views-History', icon: 'fa-history' },\n ];\n //#endregion\n\n //#region Properties\n public override get loading(): boolean {\n return super.loading;\n }\n\n public override set loading(value: boolean) {\n super.loading = value;\n this.formService.loading = value;\n }\n\n protected get currentView(): string {\n return this.activeView ?? this.defaultView;\n }\n\n protected get model(): any {\n return this.formService.model;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n route: ActivatedRoute,\n tabService: TabService,\n protected formService: FormService,\n ) {\n super(route, tabService);\n }\n\n public ngAfterViewInit(): void {\n this.onViewVisible();\n }\n\n public override ngOnInit(): void {\n this.refreshParameters();\n\n super.ngOnInit();\n\n this.formService.modelRefreshed.pipe(takeUntil(this.destroy$)).subscribe((_: any) => {\n const id: number | null = this.getModelId();\n if (id && this.entityId !== id) {\n this.entityId = id;\n this.tabService.redirectCurrentTab(`${this.url.substring(0, this.url.indexOf('/new'))}/${id}`);\n }\n\n this.updateTitle(this.getModelDescription());\n });\n\n this.refresh();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n protected override openTabView(): void {\n super.openTabView();\n\n const activeView: IRibbonButtonOption | undefined = this.views.find(\n (view: IRibbonButtonOption) => view.id === this.activeView,\n );\n if (activeView) {\n activeView.isDisabled = true;\n }\n }\n\n protected refresh(): void {\n this.loading = true;\n this.title = '';\n this.formService.model = null;\n\n this.loadModel()\n .pipe(takeUntil(this.destroy$))\n .subscribe((model) => {\n this.loading = false;\n this.formService.model = model;\n });\n }\n protected refreshParameters(): void {\n const currentID: string | null = this.route.snapshot.paramMap.get('id');\n this.entityId = currentID ? Number(currentID) : undefined;\n\n const viewID: string | null = this.route.snapshot.paramMap.get('view');\n if (!viewID || !this.views.some((view: IRibbonButtonOption) => view.id === viewID)) {\n this.switchView(this.defaultView);\n } else {\n this.activeView = viewID;\n }\n }\n protected switchView(viewId?: string): void {\n if (!viewId) {\n viewId = this.defaultView;\n }\n\n const activeView: IRibbonButtonOption | undefined = this.views.find(\n (view: IRibbonButtonOption) => view.id === (this.activeView ?? this.defaultView),\n );\n if (activeView) {\n activeView.isDisabled = false;\n }\n\n const newView: IRibbonButtonOption | undefined = this.views.find((view: IRibbonButtonOption) => view.id === viewId);\n if (newView) {\n newView.isDisabled = true;\n\n const urlViewPath: string = viewId === this.defaultView ? '' : `/${viewId}`;\n let url: string = this.url;\n if (this.activeView && url.endsWith(this.activeView)) {\n url = url.replace(`/${this.activeView}`, urlViewPath);\n } else {\n url += urlViewPath;\n }\n this.tabService.navigateCurrentTab(new Tab({ url }));\n // this.tabService.changeTabView(this, viewId !== this.defaultView ? viewId : undefined);\n\n this.activeView = newView.id;\n\n // if (!this.activeView) {\n // this.activeView = this.defaultView;\n // }\n }\n\n this.onViewVisible();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n\n //#region Abstract methods\n protected abstract getModelDescription(): string;\n protected abstract getModelId(): number | null;\n protected abstract loadModel(): Observable<any | null>;\n protected abstract newModel(): any;\n protected abstract onViewVisible(): void;\n //#endregion\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { DataGridDataset } from '@zambon-dev/ui/library';\nimport { takeUntil } from 'rxjs';\nimport { TabService } from '../../services';\nimport { LegacyTabViewBase } from './legacy-tabview-base';\n\n/**\n * @deprecated Use standalone {@link TabViewList} instead. Migrate by extending TabViewList\n * and using standalone component imports with inject() for dependency injection.\n */\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class LegacyTabViewList<TListModel> extends LegacyTabViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private _selectedItem?: TListModel;\n private selectedRows = 0;\n //#endregion\n\n //#region Properties\n protected get hasRowsSelected(): boolean {\n return this.selectedRows > 0;\n }\n\n protected get selectedItem(): TListModel | undefined {\n return this._selectedItem;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n protected dataGridDataset: DataGridDataset,\n route: ActivatedRoute,\n tabService: TabService,\n ) {\n super(route, tabService);\n\n // This will force the screen to initialize with the buttons disabled.\n this.loading = true;\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.dataGridDataset.loadStarted.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\n setTimeout(() => (this.loading = false));\n });\n\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.selectedRowChanged();\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected selectedRowChanged(): void {\n this.selectedRows = this.dataGridDataset.selectedRowKeys.length;\n\n this._selectedItem = undefined;\n if (this.selectedRows === 1) {\n this._selectedItem = <TListModel>this.dataGridDataset.getRowData(this.dataGridDataset.selectedRowKeys[0]);\n }\n }\n //#endregion\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { DataGridDataset } from '@zambon-dev/ui/library';\nimport { takeUntil } from 'rxjs';\nimport { TabViewBase } from './tabview-base';\n\n// The host class is inherited by every subclass (Angular merges hostAttrs from a base component\n// definition), which is what lets DefaultTabViewComponent give routed list screens a full-height\n// layout without each one declaring its own stylesheet. Plain class name, NOT Tailwind utilities:\n// library SCSS resolves @apply at library-build time, whereas a utility class named here would\n// have to be generated by each consumer's own Tailwind build.\n//\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ host: { class: 'framework-view-list' }, template: '' })\nexport abstract class TabViewList<TListModel> extends TabViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset;\n\n private _selectedItem?: TListModel;\n private selectionCount = 0;\n //#endregion\n\n //#region Properties\n protected get hasRowsSelected(): boolean {\n return this.selectionCount > 0;\n }\n\n protected get selectedItem(): TListModel | undefined {\n return this._selectedItem;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n }\n\n public ngOnInit(): void {\n this.dataGridDataset.loadStarted.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished.pipe(takeUntil(this.destroy$)).subscribe(() => {\n setTimeout(() => (this.loading = false));\n });\n\n this.dataGridDataset.selectedRowsChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.selectedRowChanged();\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected selectedRowChanged(): void {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n\n this._selectedItem = undefined;\n if (this.selectionCount === 1) {\n this._selectedItem = <TListModel>this.dataGridDataset.getRowData(this.dataGridDataset.selectedRowKeys[0]);\n }\n }\n //#endregion\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { DataProviderService, MultiSelectResultDataset } from '@zambon-dev/ui/library';\nimport { TabViewList } from './tabview-list';\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class ListView<TEntityModel, TListModel> extends TabViewList<TListModel> implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected resultDataset: MultiSelectResultDataset | null;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.resultDataset = inject(MultiSelectResultDataset, { optional: true });\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n if (this.dataProvider?.hasEntityID) {\n this.dataGridDataset.parentEntityId = this.dataProvider.entityID;\n\n if (!this.dataGridDataset.loadedRows) {\n this.dataGridDataset.refresh();\n }\n\n if (this.resultDataset) {\n this.resultDataset.parentEntityId = this.dataProvider.entityID;\n }\n }\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","import { ViewBase } from '../view-base';\n\nexport abstract class ModalBase extends ViewBase {\n abstract toggle(): void;\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataGridDataset, MultiEditorComponent, MultiEditorDataset } from '@zambon-dev/ui/library';\nimport { takeUntil } from 'rxjs';\nimport { ModalBase } from './modal-base';\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class MultiEditorLegacyModal extends ModalBase implements OnInit {\n protected _entityId?: number;\n\n @ViewChild(MultiEditorComponent) multiEditor!: MultiEditorComponent;\n\n @Input() set entityId(value: number | undefined) {\n if (this._entityId !== value) {\n this._entityId = value;\n this.dataGridDataset.parentEntityId = value;\n this.multiEditorDataset.parentEntityId = value;\n }\n }\n\n @Output() savedChanges = new EventEmitter();\n\n form!: FormGroup;\n\n constructor(\n protected dataGridDataset: DataGridDataset,\n protected multiEditorDataset: MultiEditorDataset,\n protected formBuilder: FormBuilder,\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.form = this.formSetup();\n\n this.multiEditorDataset.savedChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.savedChanges.emit();\n });\n }\n\n toggle(): void {\n this.multiEditor.toggleModal();\n }\n\n abstract formSetup(): FormGroup;\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport {\n DataGridDataset,\n DataProviderService,\n FormService,\n MultiEditorComponent,\n MultiEditorDataset,\n} from '@zambon-dev/ui/library';\nimport { takeUntil } from 'rxjs';\nimport { ModalBase } from './modal-base';\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class MultiEditorModal<TEntityModel> extends ModalBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(MultiEditorComponent) protected multiEditor!: MultiEditorComponent;\n\n @Input() public overrideParentID?: number;\n\n @Output() public savedChanges: EventEmitter<any> = new EventEmitter();\n //#endregion\n\n //#region Variables\n protected dataForm!: FormGroup;\n protected dataGridDataset: DataGridDataset;\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected formBuilder: FormBuilder;\n protected formService: FormService;\n protected multiEditorDataset: MultiEditorDataset;\n protected selectionCount = 0;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.formBuilder = inject(FormBuilder);\n this.formService = inject(FormService);\n this.multiEditorDataset = inject(MultiEditorDataset);\n }\n\n public ngOnInit(): void {\n this.dataForm = this.formSetup();\n this.formService.initializeForm(this.dataForm);\n\n this.multiEditorDataset.savedChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.savedChanges.emit();\n });\n\n this.updateParentID();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public toggle(): void {\n if (!this.multiEditor.isOpen()) {\n this.updateParentID();\n }\n\n this.multiEditor.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n protected abstract formSetup(): FormGroup;\n\n private updateParentID(): void {\n let parentID: number | undefined = this.dataProvider?.entityID;\n if (this.overrideParentID) {\n parentID = this.overrideParentID;\n }\n\n if (parentID) {\n this.dataGridDataset.parentEntityId = parentID;\n this.multiEditorDataset.parentEntityId = parentID;\n }\n }\n //#endregion\n}\n","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { MultiSelectComponent } from '@zambon-dev/ui/library';\nimport { ModalBase } from './modal-base';\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class MultiSelectModal extends ModalBase {\n @ViewChild(MultiSelectComponent) multiSelect!: MultiSelectComponent;\n @Output() public savedChanges: EventEmitter<void> = new EventEmitter();\n\n toggle(): void {\n this.multiSelect.toggleModal();\n }\n}\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { FormService, IModal } from '@zambon-dev/ui/library';\nimport { Observable, Subject, switchMap, takeUntil } from 'rxjs';\nimport { ModalBase } from './modal-base';\n\n// No strategy on purpose: Angular never inherits `changeDetection`, so one declared here would\n// describe a class that is never instantiated, while every subclass compiles to whatever it\n// declares -- which in v22 means OnPush. Correctness comes from the state below notifying\n// Angular, never from this decorator. See docs/guides/reactivity.md.\n@Component({ template: '' })\nexport abstract class ViewModal<TEntityModel> extends ModalBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('modal') protected modalComponent!: IModal;\n //#endregion\n\n //#region Variables\n protected beginEditOnEntityLoad = false;\n protected data$: Observable<TEntityModel | null>;\n protected dataForm!: FormGroup;\n protected formBuilder: FormBuilder;\n protected formService: FormService;\n protected selectionCount = 0;\n\n private entityIdSubject: Subject<number | undefined> = new Subject<number | undefined>();\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.formBuilder = inject(FormBuilder);\n this.formService = inject(FormService);\n\n this.data$ = this.entityIdSubject.pipe(switchMap((entityID: number | undefined) => this.loadData(entityID)));\n }\n\n public ngOnInit(): void {\n this.dataForm = this.formSetup();\n this.formService.initializeForm(this.dataForm);\n\n this.data$.pipe(takeUntil(this.destroy$)).subscribe((data: TEntityModel | null) => {\n this.formService.model = data;\n this.formService.loading = false;\n this.dataForm.patchValue(<any>data);\n\n if (this.beginEditOnEntityLoad) {\n this.formService.beginEdit();\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public toggle(entityID?: number): void {\n this.formService.model = null;\n this.formService.loading = true;\n this.dataForm.reset();\n\n if (!this.modalComponent.isOpen()) {\n this.entityIdSubject.next(entityID);\n } else {\n this.formService.resetForm();\n }\n this.modalComponent.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n protected abstract formSetup(): FormGroup;\n\n protected abstract loadData(entityID?: number): Observable<TEntityModel | null>;\n //#endregion\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAIA,MAAM,+BAA+B;AAErC,IAAsB,cAAtB,MAAiC;CAoCnB;CACA;CAhCJ,gBAAyC,IAAI,cAAwB,CAAC;CACtE,4BAA4B;CAKpC,IAAW,kBAAe;EACxB,OAAO,KAAK,aAAa;CAC3B;CACA,IAAW,iBAAc;EACvB,OAAO,KAAK,UAAU,QAAQ,KAAK,UAAU,eAAe,KAAK,KAAK;CACxE;CACA,IAAW,QAAK;EACd,OAAO,aAAa,QAAQ,OAAO,KAAK,eAAe,QAAQ,OAAO;CACxE;CACA,IAAW,SAAM;EACf,OAAO;CACT;CACA,IAAc,eAAY;EACxB,OAAO,aAAa,QAAQ,cAAc,KAAK,eAAe,QAAQ,cAAc;CACtF;CACA,IAAc,WAAQ;EACpB,OAAO,aAAa,QAAQ,UAAU,KAAK,eAAe,QAAQ,UAAU;CAC9E;CACA,IAAc,WAAQ;EACpB,OAAO,aAAa,QAAQ,UAAU,KAAK,eAAe,QAAQ,UAAU;CAC9E;CAIA,YACY,WACA,YAAsB;EADtB,KAAA,YAAA;EACA,KAAA,aAAA;CACT;CAOI,qBAAqB,eAAqB;EAC/C,IAAI,CAAC,KAAK,2BAA2B;GACnC,KAAK,4BAA4B;GAEjC,KAAK,WAAU,CAAE,CACd,KAAK,KAAK,CAAC,CAAC,CAAC,CACb,WAAW,YAAqB;IAC/B,KAAK,cAAc,KAAK,OAAO;GACjC,CAAC;EACL;EAEA,OAAO,KAAK,cAAc,KACxB,KAAK,YAAsB,QAAQ,SAAS,KAAK,WAAW,KAAK,QAAQ,SAAS,aAAa,CAAC,CAAC;CAErG;CAEO,uBAAuB,gBAA0B,+BAA+B,MAAI;EACzF,IAAI,CAAC,KAAK,2BAA2B;GACnC,KAAK,4BAA4B;GAEjC,KAAK,WAAU,CAAE,CACd,KAAK,KAAK,CAAC,CAAC,CAAC,CACb,WAAW,YAAqB;IAC/B,KAAK,cAAc,KAAK,OAAO;GACjC,CAAC;EACL;EAEA,OAAO,KAAK,cAAc,KACxB,WAAW,YACT,GACE,eAAe,KACZ,mBACE,gCAAgC,QAAQ,QAAQ,4BAA4B,KAAK,KAClF,QAAQ,QAAQ,cAAc,KAAK,CAAC,CACvC,CACF,CACF;CAEL;CAEO,UAAO;EACZ,aAAa,MAAK;EAClB,eAAe,MAAK;EAEpB,KAAK,WAAW,aAAY;EAC5B,KAAK,kBAAiB;CACxB;CAEU,WACR,KACA,OACA,kBAAkC,MAAI;EAEtC,IAAI,oBAAoB,MACtB,kBAAkB,eAAe,QAAQ,GAAG,MAAM;EAGpD,IAAI,OAAO;GACT,IAAI,iBACF,aAAa,QAAQ,KAAK,KAAK;QAE/B,eAAe,QAAQ,KAAK,KAAK;EAErC,OAAO;GACL,aAAa,WAAW,GAAG;GAC3B,eAAe,WAAW,GAAG;EAC/B;CACF;CAIU,oBAAiB;EACzB,KAAK,4BAA4B;EACjC,KAAK,gBAAgB,IAAI,cAAwB,CAAC;CACpD;AAMD;AC9HM,IAAM,sBAAN,MAAM,oBAAmB;CAKvB,SAAoC,CAAA;CACpC,YAAuC,CAAA;CACvC;CAEC,iBAAiC,OAAO,cAAc;CACtD,gBAA+D,CAAA;CAC/D,+BAAwC,IAAI,QAAO;CACnD,kBAAkB;CAanB,kBAAe;EACpB,KAAK,gBAAgB,CAAA;CACvB;CAEO,YAAY,KAAW;EAG5B,AAF+B,OAAO,KAAK,KAAK,aAAa,CAAC,CAAC,QAAQ,QAAgB,IAAI,WAAW,GAAG,IAAG,EAAG,CAE/G,CAAA,CAAa,SAAS,QAAe;GACnC,MAAM,SAAqC,KAAK,cAAc;GAE9D,IAAI,QACF;QAAU,QAAS,cAAc,UAAU,aACnC,OAAQ,aAAa,SAAS,YAAW;GACjD;GAEF,OAAO,KAAK,cAAc;EAC5B,CAAC;CACH;CAEO,SAAS,OAA6B;EAC3C,IAAI,CAAC,MAAM,WACT,OAAO;EAGT,MAAM,WAAmB,KAAK,YAAY,KAAK;EAC/C,MAAM,SAAqC,KAAK,cAAc;EAE9D,IAAI,QAKF,iBAAgB;GACd,KAAK,eAAe,KAAI;EAC1B,CAAC;EAGH,OAAO;CACT;CAEO,aAAa,OAA6B;EAC/C,MAAM,MAAc,KAAK,gBAAgB,KAAK;EAC9C,MAAM,eAAe,CAAC,CAAC,MAAM;EAE7B,KAAK,KAAK,YAAY,UAAU,GAAG,KAAK,UAAU,cAAc;GAC9D,MAAM,WAAmB,KAAK,YAAY,KAAK;GAE/C,OAAO,CADW,CAAC,KAAK,cAAc;EAExC;EACA,OAAO;CACT;CAEO,aAAa,OAA6B;EAC/C,MAAM,MAAc,KAAK,gBAAgB,KAAK;EAC9C,MAAM,eAAe,CAAC,CAAC,MAAM;EAE7B,QAAQ,KAAK,YAAY,UAAU,GAAG,KAAK,UAAU;CACvD;CAEO,iBAAiB,QAAgC,SAA+B;EACrF,MAAM,YAAoB,KAAK,gBAAgB,MAAM;EACrD,MAAM,aAAqB,KAAK,gBAAgB,OAAO;EAEvD,OACG,cAAc,cAAc,OAAO,gBAAgB,QAAQ,eAC5D,KAAK,UAAU,gBAAgB,aAC/B,KAAK,OAAO,eAAe;CAE/B;CAEO,MAAM,OAA+B,QAA2B;EACrE,MAAM,WAAmB,KAAK,YAAY,KAAK;EAC/C,KAAK,cAAc,YAAY;CACjC;CAIQ,YAAY,OAA6B;EAC/C,IAAI,MAAc,KAAK,gBAAgB,KAAK;EAC5C,IAAI,KAAK,OAAO,MACd,MAAM,KAAK,OAAO;EAepB,OAAO,GAAG,IAAG,GAAI,KAAK,cAAc,KAAK,EAAC,GAAI,KAAK,eAAe,MAAM,SAAS;CACnF;CAEQ,eAAe,WAA8C;EACnE,IAAI,OAAO,cAAc,YACvB,OAAO;EAGT,IAAI,cAAkC,KAAK,aAAa,IAAI,SAAS;EACrE,IAAI,gBAAgB,QAAW;GAC7B,cAAc,KAAK;GACnB,KAAK,aAAa,IAAI,WAAW,WAAW;EAC9C;EAEA,OAAO;CACT;CAEQ,cAAc,OAA6B;EACjD,IAAI,QAAQ;EACZ,IAAI,UAAyC,MAAM;EAEnD,OAAO,SAAS;GACd;GACA,UAAU,QAAQ;EACpB;EAEA,OAAO;CACT;CAEQ,gBAAgB,OAA6B;EACnD,MAAM,WAAqB,CAAA;EAE3B,MAAM,cAA8D,UAA8C;GAChH,IAAI,OAAO;IACT,IAAI,MAAM,IAAI,QACZ,SAAS,KAAK,GAAG,MAAM,IAAI,KAAK,YAAwB,QAAQ,IAAI,CAAC;IAEvE,WAAW,MAAM,MAAM;GACzB;EACF;EAEA,WAAW,KAAK;EAEhB,OAAO,IAAI,SAAS,QAAO,CAAE,CAAC,KAAK,GAAG;CACxC;AAED;AAtKY,sBAAmB,WAAA,CAD/B,OAAO,CAAA,CAAE,CACG,GAAA,mBAAmB;ACDhC,IAAa,iBAAb,MAAa,eAAc;CAKlB,yBAAsE,IAAI,cAE/E,CAAC;CACI,gBAAiC,IAAI,QAAO;CAElC,cAAkD,OAAO,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAIpF,IAAW,aAAU;EACnB,OAAO,KAAK,YAAW,KAAM;CAC/B;CAUO,cAAc,QAAc;EACjC,IAAI,WAAW,KAAK,YAAW,GAC7B;EAGF,KAAK,YAAY,IAAI,MAAM;EAC3B,KAAK,cAAc,KAAK,MAAM;CAChC;CAEO,qBAAqB,UAAsC;EAChE,KAAK,uBAAuB,KAAK,QAAQ;CAC3C;CArCW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAc,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAd,OAAA,QAAA,GAAA,sBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;CAAc,CAAA;;AAAd,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAc,YAAA,CAAA,EAD1B,MAAA,WAAA,CAAA;;ACMD,IAAa,aAAb,MAAa,WAAU;CAwDX;CACA;CACA;CA/CO,WAAmC,OAAO,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAErD,iBAAiB;CACjB;CACA,sBAAgC,CAAA;CAChC,WAAqB,CAAA;CAI7B,IAAW,mBAAgB;EACzB,KAAK,SAAQ;EACb,OAAO,KAAK,SAAS,KAAK,mBAAmB,CAAA;CAC/C;CAEA,IAAW,aAAU;EACnB,KAAK,SAAQ;EACb,OAAO,KAAK,SAAS,KAAK,SAAiB,KAAK,EAAE,KAAK,CAAA;CACzD;CAEA,IAAW,0BAAuB;EAChC,KAAK,SAAQ;EACb,OAAO,KAAK,SAAS,KAAK,MAAc,MAAa;GAEnD,OAAO,KADsB,KAAK,oBAAoB,MAAM,EACnC,EAAE;EAC7B,CAAC;CACH;CAEA,IAAW,0BAAuB;EAChC,KAAK,SAAQ;EACb,OAAO,KAAK,SAAS,KAAK,MAAc,MAAa;GAEnD,OAAO,KADsB,KAAK,oBAAoB,MAAM,EACnC,EAAE,kBAAkB;EAC/C,CAAC;CACH;CAEA,IAAY,YAAS;EACnB,IAAI,KAAK,iBAAiB,GACxB,OAAO;EAET,OAAO,KAAK,SAAS,KAAK;CAC5B;CAIA,YACU,gBACA,UACA,QACR,oBAAsC;EAH9B,KAAA,iBAAA;EACA,KAAA,WAAA;EACA,KAAA,SAAA;EAGR,KAAK,sBAA2C;EAChD,KAAK,oBAAoB,aAAa;CACxC;CAOO,YAAY,KAAS;EAC1B,KAAK,iBAAiB,KAAK,WAAW,QAAQ,GAAG;EACjD,KAAK,QAAO;EACZ,KAAK,WAAW,KAAK,cAAc,KAAK,cAAc,CAAC;CACzD;CAEO,gBAAgB,KAAW;EAChC,IAAI,CAAC,KAAK,WACR;EAGF,MAAM,MAAY,KAAK,UAAU,KAAK,UAAU,SAAS;EAEzD,KAAK,oBAAoB,OAAO,OAAO,IAAI;EAC3C,IAAI,IAAI,OAAO,QAAQ,GAAG,MAAM,IAC9B,IAAI,OAAO,KAAK,GAAG;EAGrB,KAAK,WAAW,KAAK,GAAG;CAC1B;CAEO,iBAAc;EACnB,KAAK,SAAS,KAAK,cAAc;CACnC;CAEO,eAAY;EACjB,KAAK,WAAW,CAAA;EAChB,KAAK,QAAO;EACZ,KAAK,sBAAsB,CAAA;EAC3B,KAAK,QAAO;EACZ,KAAK,iBAAiB;EACtB,KAAK,QAAO;EACZ,KAAK,oBAAoB,gBAAe;CAC1C;CAEO,SAAS,OAAa;EAC3B,IAAI,QAAQ,KAAK,WAAW,SAAS,KAAK,KAAK,WAAW,WAAW,GACnE;EAGF,MAAM,YAAqB,UAAU,KAAK;EAC1C,MAAM,YAAoB,KAAK,SAAS;EACxC,KAAK,SAAS,OAAO,OAAO,CAAC;EAC7B,KAAK,QAAO;EACZ,KAAK,oBAAoB,OAAO,OAAO,CAAC;EACxC,KAAK,QAAO;EAEZ,IAAI,WAAW;GAKb,IAAI,KAAK,kBAAkB,KAAK,SAAS,QAAQ;IAC/C,KAAK,iBAAiB,KAAK,SAAS,SAAS;IAC7C,KAAK,QAAO;GACd;GAGA,KAAK,WAAW,KAAK,cAAc,KAAK,cAAc,CAAC;EACzD,OAAO,IAAI,QAAQ,KAAK,gBAEtB,KAAK;EAGP,UAAU,SAAS,QAAa;GAC9B,IAAI,CAAC,KAAK,UAAU,IAAI,GAAG,GAEzB,KAAK,oBAAoB,YAAY,IAAI,GAAG;EAEhD,CAAC;CACH;CAEO,YAAY,KAAS;EAC1B,OAAO,KAAK,WAAW,KAAK,oBAAoB;CAClD;CAEO,YAAY,KAAa,iBAAiB,OAAK;EACpD,IAAI,CAAC,KAAK,WACR,OAAO;EAGT,MAAM,MAAY,KAAK,UAAU,KAAK,UAAU,SAAS;EAEzD,IAAI,IAAI,QAAQ,KACd,OAAO;OACF,IAAI,gBACT,OAAO,IAAI,OAAO,QAAQ,GAAG,MAAM;EAGrC,OAAO;CACT;CAEO,UAAU,KAAW;EAC1B,MAAM,OAAe,KAAK,SAAS,SAAS,SAAiB,IAAI;EAEjE,OAAO,KAAK,YAAY,MAAM,GAAG;CACnC;CAEO,+BAA4B;EACjC,IAAI,CAAC,KAAK,aAAa,KAAK,UAAU,WAAW,GAC/C;EAGF,IAAI,KAAK,UAAU,UAAU,GAC3B,KAAK,SAAS,KAAK,cAAc;OAC5B;GACL,MAAM,gBAAsB,KAAK,UAAU,KAAK,UAAU,SAAS;GACnE,KAAK,uBAAuB,aAAa;EAC3C;CACF;CAEO,mBAAmB,KAAS;EACjC,IAAI,CAAC,KAAK,WACR;EAIF,IAAI,IAAI,eAAe;GACrB,MAAM,mBAA2B,KAAK,0BAA0B,IAAI,eAAe,KAAK,cAAc;GACtG,IAAI,qBAAqB,IAAI;IAC3B,KAAK,iBAAiB;IACtB,KAAK,QAAO;IACZ,MAAM,WAAmB,KAAK,SAAS;IACvC,KAAK,WAAW,SAAS,SAAS,SAAS,EAAE;IAC7C;GACF;EACF,OAAO;GAEL,MAAM,eAAuB,KAAK,0BAA0B,IAAI,KAAK,KAAK,gBAAgB,IAAI;GAC9F,IAAI,iBAAiB,IAAI;IACvB,KAAK,iBAAiB;IACtB,KAAK,QAAO;IACZ,MAAM,WAAmB,KAAK,SAAS;IACvC,KAAK,WAAW,SAAS,SAAS,SAAS,EAAE;IAC7C;GACF;EACF;EAGA,MAAM,mBAAqC,KAAK,QAAQ,KAAK,WAAW,IAAI,GAAG;EAC/E,IAAI,kBAAkB;GACpB,KAAK,uBAAuB,gBAAgB;GAC5C;EACF;EAGA,KAAK,oBAAoB,GAAG;EAG5B,IAAI,YAAgC;EACpC,IAAI,IAAI,OAAO,SAAS,GAAG;GACzB,YAAY,IAAI,OAAO;GACvB,KAAK,oBAAoB,OAAO,aAAa,IAAI;EACnD;EAEA,KAAK,UAAU,KAAK,GAAG;EACvB,KAAK,oBAAoB,KAAK,kBAAkB,KAAK,UAAU,SAAS;EACxE,KAAK,QAAO;EAEZ,KAAK,WAAW,KAAK,SAAS;CAChC;CAEO,uBAAuB,KAAS;EACrC,IAAI,CAAC,KAAK,WACR;EAIF,MAAM,gBAAwB,KAAK,0BAA0B,IAAI,KAAK,KAAK,cAAc;EACzF,IAAI,kBAAkB,IAAI;GACxB,KAAK,iBAAiB;GACtB,KAAK,QAAO;GACZ,MAAM,WAAmB,KAAK,SAAS;GACvC,KAAK,WAAW,SAAS,SAAS,SAAS,EAAE;GAC7C;EACF;EAEA,MAAM,YAAoB,KAAK,UAAU,YAAY,GAAG;EACxD,IAAI,cAAc,IAAI;GACpB,MAAM,iBAAyB,KAAK,UAAU,MAAM,YAAY,CAAC;GAEjE,KAAK,SAAS,KAAK,kBAAkB,KAAK,UAAU,MAAM,GAAG,YAAY,CAAC;GAC1E,KAAK,QAAO;GAEZ,IAAI,KAAK,oBAAoB,KAAK,kBAAkB,WAAW;IAC7D,KAAK,oBAAoB,KAAK,kBAAkB;IAChD,KAAK,QAAO;GACd;GAOA,eAAe,SAAS,UAAe;IACrC,IAAI,CAAC,KAAK,UAAU,MAAM,GAAG,GAC3B,KAAK,oBAAoB,YAAY,MAAM,GAAG;GAElD,CAAC;EACH;EAEA,KAAK,WAAW,GAAG;CACrB;CAEO,WAAW,KAAuB,WAAkB;EACzD,IAAI,MAAc,KAAK,OAAO;EAC9B,IAAI,WACF,MAAM;EAGR,KAAK,OAAO,SAAS,CAAC,GAAG,GAAG,EAAE,aAAa,KAAK,YAAW,CAAE,CAAC,CAAC,MAAM,cAAsB;GACzF,KAAK,oBAAoB,YAAY,CAAA;GAGrC,IAAI,aAAa,KAAK,oBAAoB,OAAO,MAC/C,OAAO,KAAK,oBAAoB,OAAO;GAGzC,KAAK,eAAe,KAAI;EAC1B,CAAC;CACH;CAEO,QAAQ,KAAS;EAEtB,MAAM,kBAA0B,KAAK,0BAA0B,IAAI,GAAG;EACtE,IAAI,oBAAoB,IAAI;GAC1B,KAAK,iBAAiB;GACtB,KAAK,QAAO;GACZ,MAAM,aAAqB,KAAK,SAAS;GACzC,KAAK,WAAW,WAAW,WAAW,SAAS,EAAE;GACjD;EACF;EAGA,IAAI,IAAI,eAAe;GACrB,MAAM,mBAA2B,KAAK,0BAA0B,IAAI,aAAa;GACjF,IAAI,qBAAqB,IAAI;IAC3B,KAAK,iBAAiB;IACtB,KAAK,QAAO;IACZ,MAAM,cAAsB,KAAK,SAAS;IAC1C,KAAK,WAAW,YAAY,YAAY,SAAS,EAAE;IACnD;GACF;EACF;EAGA,KAAK,oBAAoB,GAAG;EAC5B,KAAK,SAAS,KAAK,CAAC,GAAG,CAAC;EACxB,KAAK,QAAO;EACZ,KAAK,oBAAoB,KAAK,CAAC;EAC/B,KAAK,QAAO;EACZ,KAAK,iBAAiB,KAAK,SAAS,SAAS;EAC7C,KAAK,QAAO;EACZ,KAAK,WAAW,GAAG;CACrB;CAEO,yBAAyB,SAAiB,KAAU;EACzD,IAAI,CAAC,KAAK,aAAa,KAAK,UAAU,WAAW,GAC/C;EAKF,MAAM,cAAsB,KAAK,UAAU,WAAW,MAAY,EAAE,QAAQ,OAAO;EACnF,MAAM,YAAoB,gBAAgB,KAAK,cAAc,IAAI;EAEjE,MAAM,cAAsB,KAAK,UAAU,MAAM,GAAG,SAAS;EAC7D,MAAM,iBAAyB,KAAK,UAAU,MAAM,SAAS;EAG7D,IAAI,KAAK;GAEP,MAAM,SAA2B,YAAY,gBAAgB,KAAK,cAAc;GAChF,IAAI,CAAC,IAAI,iBAAiB,QAAQ,eAChC,IAAI,gBAAgB,OAAO;GAG7B,KAAK,SAAS,KAAK,kBAAkB,CAAC,GAAG,aAAa,GAAG;GACzD,KAAK,QAAO;EACd,OAAO;GACL,KAAK,SAAS,KAAK,kBAAkB;GACrC,KAAK,QAAO;EACd;EAGA,eAAe,SAAS,UAAe;GACrC,IAAI,CAAC,KAAK,UAAU,MAAM,GAAG,GAC3B,KAAK,oBAAoB,YAAY,MAAM,GAAG;EAElD,CAAC;EAGD,MAAM,UAAkB,KAAK,SAAS,KAAK;EAC3C,KAAK,WAAW,QAAQ,QAAQ,SAAS,EAAE;CAC7C;CAEO,mBAAmB,KAAa,iBAAiB,MAAI;EAC1D,IAAI,CAAC,KAAK,WACR;EAGF,MAAM,MAAY,KAAK,UAAU,KAAK,UAAU,SAAS;EAGzD,IAAI,IAAI,kBAAkB,IAAI,KAC5B,IAAI,gBAAgB;EAGtB,IAAI,MAAM;EACV,IAAI,cAAc,CAAA;EAElB,IAAI,gBACF,KAAK,SAAS,aAAa,GAAG;CAElC;CAEO,iBAAiB,SAAiB,OAAa;EACpD,KAAK,oBAAoB,UAAU,WAAW;CAChD;CAEO,yBAAyB,OAAa;EAC3C,IAAI,KAAK,aAAa,KAAK,UAAU,SAAS,GAAG;GAC/C,KAAK,UAAU,EAAE,CAAC,QAAQ;GAC1B,KAAK,QAAO;EACd;CACF;CAEO,eAAe,KAAa,OAAa;EAC9C,KAAK,SACF,SAAS,SAAiB,IAAI,CAAC,CAC/B,QAAQ,QAAc,IAAI,QAAQ,GAAG,CAAC,CACtC,SAAS,QAAa;GACrB,IAAI,QAAQ;GACZ,KAAK,QAAO;EACd,CAAC;CACL;CAKQ,UAAO;EACb,KAAK,SAAS,QAAQ,aAAqB,WAAW,CAAC;CACzD;CAUQ,cAAc,OAAa;EACjC,MAAM,UAA8B,KAAK,SAAS;EAElD,OAAO,UAAU,QAAQ,SAAS;CACpC;CAEQ,QAAQ,MAAc,KAAW;EACvC,OAAO,KAAK,MAAM,QAAc,KAAK,YAAY,KAAK,GAAG,CAAC;CAC5D;CAEQ,aAAa,MAAc,KAAW;EAC5C,OAAO,KAAK,WAAW,QAAc,KAAK,YAAY,KAAK,GAAG,CAAC;CACjE;CAEQ,YAAY,MAAc,KAAW;EAC3C,OAAO,KAAK,MAAM,QAAc,KAAK,YAAY,KAAK,GAAG,CAAC;CAC5D;CAEQ,0BAA0B,eAAuB,eAAe,IAAE;EACxE,OAAO,KAAK,SAAS,WAAW,UAAkB,UAAiB;GACjE,IAAI,UAAU,cACZ,OAAO;GAGT,MAAM,cAAoB,SAAS,SAAS,SAAS;GACrD,OAAO,YAAY,kBAAkB,iBAAiB,YAAY,QAAQ;EAC5E,CAAC;CACH;CAEQ,0BAA0B,KAAa,eAAe,IAAI,qBAAqB,OAAK;EAC1F,OAAO,KAAK,SAAS,WAAW,UAAkB,UAAiB;GACjE,IAAI,UAAU,cACZ,OAAO;GAET,MAAM,cAAoB,SAAS,SAAS,SAAS;GACrD,OAAO,KAAK,YAAY,aAAa,GAAG,KAAM,sBAAsB,KAAK,aAAa,YAAY,KAAK,GAAG;EAC5G,CAAC;CACH;CAEQ,oBAAoB,KAAS;EACnC,IAAI,IAAI,SAAS,CAAC,IAAI,gBACpB;EAGF,MAAM,WAA6B,KAAK,SACrC,SAAS,UAAkB,KAAK,CAAC,CACjC,MAAM,UAAgB,MAAM,QAAQ,IAAI,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC,MAAM,KAAK;EAExF,IAAI,UAAU;GACZ,IAAI,QAAQ,SAAS;GACrB,KAAK,QAAO;GACZ,IAAI,iBAAiB;GACrB,KAAK,QAAO;EACd;CACF;CAEQ,aAAa,YAAoB,WAAiB;EACxD,OAAO,WAAW,WAAW,YAAY,GAAG;CAC9C;CAEQ,YAAY,KAAW,KAAW;EACxC,OAAO,IAAI,QAAQ,OAAO,IAAI,OAAO,QAAQ,GAAG,MAAM;CACxD;CApeW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,MAAA;GAAA,EAAA,OAAA,GAAA,eAAA;GAAA,EAAA,OAAA,KAAA,SAAA;GAAA,EAAA,OAAA,KAAA,OAAA;GAAA,EAAA,OAAA,KAAA,mBAAA;EAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,QAAA,GAAA,sBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,YAFT;CAAM,CAAA;;AAEP,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EAHtB,MAAA;EAAW,MAAA,CAAA,EACV,YAAY,OACb,CAAA;;;;;;;;;ACqBD,IAAa,aAAb,MAAa,mBAAmB,iBAAgB;CAE3B,SAAoD,UAAU,uBAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAEvF,iBAAwC,MAAgB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAM3D,WAAiC,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAC7C,UAAgC,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAC5C,UAA8C,MAA6B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAE9E,WAA2C,MAAyB,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAIlF,cAA2B,OAAO,WAAW;CAC7C,WAA6B,IAAI,QAAO;CAUjC,SAA+B,SAC9C,aAAa,KAAK,cAAc,CAAC,CAAC,KAChC,WAAW,mBAA6B,KAAK,qBAAqB,cAAc,CAAC,CAAC,GAEpF,EAAE,cAAc;EAAE,UAAU;EAAM,WAAW;CAAI,EAAE,CAAE;CAUtC,mCAAiD,IAAI,QAAO;CAI7D,iBAAkC,eAAe,KAAK,OAAM,CAAE,CAAC,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAE/D,YAA6B,eAAe,KAAK,OAAM,CAAE,CAAC,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAE7F,IAAc,mBAAgB;EAC5B,OAAO,KAAK,SAAQ,KAAM,CAAC,KAAK,eAAc;CAChD;CAUiB,gBAAgB,aAAY;EAC3C,MAAM,iBAAwC,KAAK,QAAO,CAAE,CAAC,QAC1D,YACE,OAAO,gBAAgB,UAAU,KAAK,KACvC,OAAO,oBAAoB,UAC3B,CAAC,KAAK,iBAAiB,IAAI,MAAM,CAAC;EAGtC,KAAK,MAAM,UAAU,gBAAgB;GACnC,KAAK,iBAAiB,IAAI,MAAM;GAEhC,KAAK,YACF,uBAAuB,OAAO,cAAe,CAAC,CAC9C,KAAK,KAAK,CAAC,CAAC,CAAC,CACb,WAAW,WAAqB;IAC/B,KAAK,gBACH,QACA,OAAO,MAAM,cAAuB,cAAc,IAAI,CAAC;GAE3D,CAAC;EACL;CACF,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAEK,cAAW;EAChB,KAAK,SAAS,KAAK,IAAI;EACvB,KAAK,SAAS,SAAQ;CACxB;CAOO,eAAY;EACjB,KAAK,OAAM,CAAE,EAAE,aAAY;CAC7B;CAEO,cAAc,QAAyC;EAC5D,KAAK,OAAM,CAAE,EAAE,cAAc,MAAM;CACrC;CAIQ,qBAAqB,gBAAwB;EACnD,IAAI,eAAe,WAAW,GAC5B,OAAO,GAAiB;GAAE,UAAU;GAAM,WAAW;EAAI,CAAE;EAG7D,OAAO,KAAK,YAAY,uBAAuB,cAAc,CAAC,CAAC,KAC7D,KAAK,CAAC,GACN,KAAK,YAAuB;GAC1B,UAAU;GACV,WAAW,OAAO,MAAM,cAAuB,cAAc,IAAI;EAClE,EAAC,GACF,UAAwB;GAAE,UAAU;GAAO,WAAW;EAAI,CAAE,CAAC;CAEjE;CAQQ,gBAAgB,QAA6B,iBAAwB;EAC3E,KAAK,QAAQ,QAAQ,YACnB,QAAQ,KAAK,cACX,cAAc,SAAS;GAAE,GAAG;GAAW;EAAe,IAAK,SAAS,CACrE;CAEL;CArIW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAU,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,UAAA;GAAA,SAAA;GAAA,SAAA;EAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAE4D;GAAqB,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UAHjF;EAAE,UAAA;CAAA,CAAA;;AACZ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EADtB,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;CAGwD,CAAA;CAAA,gBAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,qBAAqB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,gBAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,eAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,eAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA;ACtBxG,IAAsB,qBAAtB,MAAsB,2BAA2B,WAAU;CAK/C;CACA;CAIV,IAAuB,mBAAgB;EACrC,OAAO,MAAM,oBAAoB,KAAK,YAAY;CACpD;CAIA,cAAA;EACE,MAAK;EAEL,KAAK,sBAAsB,OAAO,mBAAwB;EAC1D,KAAK,cAAc,OAAO,WAAW;CACvC;CArBoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAkB,cAAA;EAAA,UAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UADjB;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EADvC,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;ACL3B,IAAsB,8BAAtB,MAAiD;CACxC,OAAO,sBAAsB,mBAAsC,WAAoB;EAC5F,IAAI,CAAC,qBAAqB,CAAC,WACzB;EAIF,IAAI,kBAAkB,WAAW,OAAO,kBAAkB,SAAS,kBAAkB,MAAM,QAAQ;GACjG,MAAM,WAAqB,OAAO,KAAK,UAAU,QAAQ;GACzD,MAAM,mBAA2E,kBAAkB,MAAM;GAEzG,OAAO,KAAK,gBAAgB,CAAC,CAAC,SAAS,cAAqB;IAC1D,iBAAgB;KACd,MAAM,cAAkC,SAAS,MAC9C,gBAAwB,YAAY,kBAAiB,MAAO,UAAU,kBAAiB,CAAE;KAE5F,IAAI,CAAC,eAAe,CAAC,UAAU,IAAI,WAAW,GAC5C;KAGF,UAAU,IAAI,WAAW,CAAE,CAAC,UAAU,GAAG,iBAAiB,UAAU,CAAC,KAAK,KAAI,CAAE;KAChF,UAAU,IAAI,WAAW,CAAE,CAAC,cAAa;IAC3C,CAAC;GACH,CAAC;EACH;CACF;AACD;AC3BD,IAAsB,cAAtB,MAAiC;CACxB,OAAO,eACZ,eACA,KACA,OAAU;EAEV,IAAI,CAAC,eACH,OAAO;EAET,OAAO,cAAc,KAAK,SAAS,QAC/B,gBACA,KAAK,eAAe,cAAc,YAAY,KAAK,KAAK;CAC9D;CAEO,OAAO,sBACZ,eACA,WAAc;EAEd,IAAI,CAAC,eACH,OAAO;EAET,OAAO,cAAc,cAAc,YAC/B,gBACA,KAAK,sBAAsB,cAAc,YAAY,SAAS;CACpE;CAEO,OAAO,YAAY,OAA+B,YAAY,OAAK;EACxE,IAAI,WAAqB,CAAA;EAEzB,MAAM,cAA8D,UAA8C;GAChH,IAAI,OAAO;IACT,IAAI,MAAM,IAAI,QACZ,SAAS,KAAK,GAAG,MAAM,IAAI,KAAK,YAAwB,QAAQ,IAAI,CAAC;IAEvE,WAAW,YAAY,MAAM,aAAa,MAAM,MAAM;GACxD;EACF;EAEA,WAAW,KAAK;EAEhB,IAAI,CAAC,WACH,WAAW,SAAS,QAAO;EAG7B,OAAO,IAAI,SAAS,KAAK,GAAG;CAC9B;AACD;AClCD,IAAa,wBAAb,MAAa,sBAAqB;CAEf,QAA4C,UAAU,gBAAe,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAItE,eAAoC,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAC7C,YAAkC,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAE9C,UAA+B,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CACxC,cAAmC,MAAM,iCAAgC,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CACzE,mBAAwC,MAAM,iBAAgB,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;CAC9D,kBAAwC,MAAM,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,+BAAA,CAAA,CAAA;CACnD,OAA+B,MAAiB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACrD,QAA6B,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAK5C,cAAuC,OAAO,aAAa,EAAE,UAAU,KAAI,CAAE,KAAK;CAS5E,SAA0B,eAAe,KAAK,MAAK,CAAE,EAAE,OAAM,KAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAEzF,IAAc,kBAAe;EAC3B,OAAO,CAAC,CAAC,KAAK,aAAY,KAAM,KAAK,aAAY,CAAE,CAAC,SAAS;CAC/D;CAEA,IAAc,aAAU;EACtB,OAAO,CAAC,CAAC,KAAK,QAAO,KAAM,KAAK,QAAO,CAAE,CAAC,SAAS;CACrD;CAEQ,mBAA4C,OAAO,kBAAkB,EAAE,UAAU,KAAI,CAAE;CAE/F,IAAY,YAAS;EACnB,OAAQ,KAAK,kBAAkB,WAAyB;CAC1D;CAUO,eAAY;EACjB,KAAK,kBAAiB;EACtB,KAAK,UAAU,IAAI,IAAI;CACzB;CAEO,oBAAiB;EACtB,KAAK,aAAa,IAAI,EAAE;CAC1B;CAEO,aAAU;EACf,KAAK,MAAK,CAAE,EAAE,WAAU;CAC1B;CAEO,cAAc,YAAoB;EACvC,KAAK,UAAU,IAAI,KAAK;EAExB,IAAI,KAAK,aAAa,KAAK,UAAU,UACnC,KAAK,UAAU,OAAM;EAGvB,IAAI,YACF,KAAK,WAAU;CAEnB;CAEO,gBAAgB,mBAAoC;EACzD,KAAK,cAAa;EAElB,IAAI,kBAAkB,WAAW,OAAO,CAAC,CAAC,KAAK,WAC7C,4BAA4B,sBAAsB,mBAAmB,KAAK,SAAS;OAEnF,IAAI,OAAO,kBAAkB,UAAU,UACrC,KAAK,aAAa,IAAI,kBAAkB,KAAK;OAE7C,KAAK,aAAa,IAAI,6BAA6B;CAGzD;CAEO,cAAW;EAChB,IAAI,CAAC,CAAC,KAAK,eAAe,KAAK,YAAY,SACzC;EAGF,IAAI,KAAK,WAAW;GAElB,KAAK,UAAU,MAAK;GACpB,KAAK,aAAa,UAAS;EAC7B;EAEA,KAAK,kBAAiB;EACtB,KAAK,MAAK,CAAE,EAAE,YAAW;CAC3B;CAxGW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,kBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,iBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,cAAA;GAAA,WAAA;EAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAEuC;GAAc,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,UAAA;EAAA,UChBvF;EA6BA,QAAA,CAAA,swCAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDjBY;IAAc,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAO,UAAA;IAAA,QAAA,CAAA,SAAA,SAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAa,MAAA;GAAA;EAAA;CAAA,CAAA;;AAErC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EANjC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAyB,SAG1B;IAAC;IAAgB;IAAS;GAAa;GAAC,UAAA;GAAA,QAAA,CAAA,swCAAA;EAAA,CAAA;CAIsB,CAAA;CAAA,gBAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,cAAc,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,oBAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,iBAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,kBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,iBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA;AEMvF,IAAa,sBAAb,MAAa,oBAAmB;CAEb,QAA4C,UAAU,gBAAe,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAItE,eAAoC,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAE7C,OAA+B,MAAiB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAGrD,WAAgC,MAAM,8BAA6B,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CACnE,QAA6B,MAAM,sBAAqB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAExD,SAAiC,OAAM;CAYvC,SAA0B,eAAe,KAAK,MAAK,CAAE,EAAE,OAAM,KAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAUlF,aAAU;EACf,KAAK,MAAK,CAAE,EAAE,WAAU;CAC1B;CAEO,UAAU,OAAiC;EAChD,IAAI,eAAe;EACnB,IAAI,OAAO,UAAU,UACnB,eAAe;OACV,IAAI,OAAO,MAAM,UAAU,UAChC,eAAe,MAAM;EAEvB,KAAK,aAAa,IAAI,YAAY;EAClC,KAAK,MAAK,CAAE,EAAE,YAAW;CAC3B;CAjDW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,cAAA;GAAA,UAAA;GAAA,OAAA;GAAA,QAAA;EAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAEyC;GAAc,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,UAAA;EAAA,UCxBvF;EAgBA,QAAA,CAAA,0vCAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MDIY;GAAc,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA;IAAA;IAAA;IAAA;GAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAa,MAAA;EAAA,CAAA;CAAA,CAAA;;AAE5B,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAN/B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAuB,SAGxB,CAAC,gBAAgB,aAAa;GAAC,UAAA;GAAA,QAAA,CAAA,0vCAAA;EAAA,CAAA;CAI+B,CAAA;CAAA,gBAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,cAAc,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,oBAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,gBAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,aAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,QAAA;EAAA,CAAA;CAAA;AAAA,CAAA;AEXvF,IAAa,wBAAb,MAAa,sBAAqB;CAArB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,SAAA,CAPtB,uBAAuB,mBAAmB;EAAA,SAAA,CAC1C,uBAAuB,mBAAmB;CAAA,CAAA;CAMzC,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,SAAA,CAPtB,uBAAuB,mBAAmB;CAAA,CAAA;;AAOzC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EATjC,MAAA;EAAS,MAAA,CAAA;GACR,cAAc,CAAA;GACd,SAAS,CAAC,uBAAuB,mBAAmB;GACpD,SAAS,CAAC,uBAAuB,mBAAmB;EACrD,CAAA;;;ACMD,IAAa,yBAAb,MAAa,+BAA+B,WAAU;CAEnC,eAA0D,UAAU,uBAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAE3F,SAAuC,MAAM,SAA2B,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACxE,QAA6B,MAAM,oBAAmB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACtD,OAA4B,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,QAA6B,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACtC,0BAA+C,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,0BAAA,CAAA,+BAAA,CAAA,CAAA;CACxD,0BAA+C,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,0BAAA,CAAA,+BAAA,CAAA,CAAA;CACxD,eAAoC,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAC7C,mBAAwC,MAAM,+BAA8B,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;CAC5E,wBAA6C,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,wBAAA,CAAA,+BAAA,CAAA,CAAA;CACtD,aAAkC,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAIjD,cAA+B,OAAO,eAAe;CAO/D,cAAA;EACE,MAAK;EAEL,KAAK,SAAS,IAAI,IAAI;CACxB;CAIU,kBAAe;EACvB,KAAK,aAAY,CAAE,EAAE,YAAW;CAClC;CAEU,WAAQ;EAChB,MAAM,eAAkD,KAAK,aAAY;EACzE,IAAI,CAAC,gBAAgB,aAAa,UAAS,KAAM,CAAC,aAAa,OAAM,GACnE;EAGF,aAAa,aAAY;EAEzB,KAAK,OAAM,CAAE,CACV,KAAK,KAAK,CAAC,CAAC,CAAC,CACb,UAAU;GACT,YAAW;IACT,KAAK,cAAc,SAAS;IAC5B,aAAa,cAAc,IAAI;IAC/B,KAAK,YAAY,QAAO;GAC1B;GACA,QAAQ,MAAwB;IAC9B,aAAa,gBAAgB,CAAC;GAChC;EACD,CAAA;CACL;CAxDW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAsB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAtB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAsB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,yBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,yBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,kBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,uBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAFtB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,sBAAsB;EAAC,CAAE;EAAC,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAIZ;GAAqB,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UChB5G;EA8BA,cAAA;GAAA;IAAA,MAAA;IAAA,MDnBY;IAAqB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,sBAAA,iBAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAqB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,iBAAA,QAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAa,MAAA;GAAA;EAAA;CAAA,CAAA;;AAG1D,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAsB,YAAA,CAAA;EANlC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA0B,SAE3B;IAAC;IAAuB;IAAuB;GAAa;GAAC,WAC3D,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,sBAAuB;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;CAIZ,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,qBAAqB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,yBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,yBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,kBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,uBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA;AEF5G,IAAa,wBAAb,MAAa,8BAA8B,WAAU;CAElC,eAA0D,UAAU,uBAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAE3F,SAAuC,MAAM,SAA2B,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACxE,QAA6B,MAAM,iBAAgB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACnD,0BAA+C,MAAM,wBAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,0BAAA,CAAA,+BAAA,CAAA,CAAA;CAC5E,eAAoC,MAAM,wBAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CACjE,aAAkC,MAAM,sBAAqB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAInE,cAA+B,OAAO,eAAe;CAO/D,cAAA;EACE,MAAK;EAEL,KAAK,SAAS,IAAI,IAAI;CACxB;CAIU,kBAAe;EACvB,KAAK,aAAY,CAAE,EAAE,YAAW;CAClC;CAEU,WAAQ;EAChB,MAAM,eAAkD,KAAK,aAAY;EACzE,IAAI,CAAC,gBAAgB,aAAa,UAAS,KAAM,CAAC,aAAa,OAAM,GACnE;EAGF,aAAa,aAAY;EAEzB,KAAK,OAAM,CAAE,CACV,KAAK,KAAK,CAAC,CAAC,CAAC,CACb,UAAU;GACT,YAAW;IACT,KAAK,cAAc,SAAS;IAC5B,aAAa,cAAc,IAAI;IAC/B,KAAK,YAAY,QAAO;GAC1B;GACA,QAAQ,MAAwB;IAC9B,aAAa,gBAAgB,CAAC;GAChC;EACD,CAAA;CACL;CAnDW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,yBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAFrB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,qBAAqB;EAAC,CAAE;EAAC,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAIX;GAAqB,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UChB5G;EAyBA,cAAA;GAAA;IAAA,MAAA;IAAA,MDdY;IAAqB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,sBAAA,iBAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAqB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,iBAAA,QAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAa,MAAA;GAAA;EAAA;CAAA,CAAA;;AAG1D,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EANjC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAyB,SAE1B;IAAC;IAAuB;IAAuB;GAAa;GAAC,WAC3D,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,qBAAsB;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;CAIX,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,qBAAqB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,yBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA;AEJ5G,IAAa,sBAAb,MAAa,4BAA4B,WAAU;CAEjC,cAAmC,MAAM,gBAAe,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CACxD,aAAkC,MAAM,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACjD,cAAmC,MAAM,sBAAqB,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAC9D,WAAgC,MAAM,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAChD,YAAiC,MAAM,eAAc,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACrD,QAA4C,MAAkB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAM3D,wBAAiD,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,wBAAA,CAAA,+BAAA,CAAA,CAAA;CAEzE,sBAAgD,OAAO,mBAAmB;CAC1E,cAA2B,OAAO,WAAW;CAIrD,IAAc,0BAAuB;EACnC,OAAO,KAAK,qBAAqB,eAAe;CAClD;CAEA,IAAc,gBAAa;EACzB,OAAO,KAAK,YAAY;CAC1B;CAKO,WAAQ;EACb,KAAK,YAAY,aAAa,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC1E,KAAK,sBAAsB,IAAI,KAAK;EACtC,CAAC;CACH;CAIU,kBAAe;EACvB,IAAI,KAAK,sBAAqB,GAAI;GAChC,KAAK,sBAAsB,IAAI,KAAK;GACpC,KAAK,YAAY,WAAU;EAC7B;CACF;CAEU,gBAAa;EACrB,MAAM,QAA+B,KAAK,MAAK;EAC/C,IAAI,OACF,MAAM,OAAM;OACP;GACL,KAAK,sBAAsB,IAAI,IAAI;GACnC,KAAK,YAAY,UAAS;EAC5B;CACF;CAtDW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAFnB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,mBAAmB;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UCVhG;EAsBA,cAAA,CAAA;GAAA,MAAA;GAAA,MDbY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAGpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAN/B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAuB,SAExB,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,mBAAoB;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEDhG,MAAa,gBAAgB;AAQ7B,IAAa,wBAAb,MAAa,8BAA8B,WAAU;CAQnC,gBAAqC,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAC7C,eAAoC,MAAM,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAI3D,kBAA0C,OAAO,iBAAiB,EAAE,UAAU,KAAI,CAAE;CACpF,mBAAqC,OAAO,gBAAgB;CAIpE,IAAuB,mBAAgB;EACrC,OAAO,MAAM,oBAAoB,KAAK;CACxC;CAEA,IAAc,UAAO;EACnB,IAAI,KAAK,wBACP,OAAO,KAAK,iBAAiB,QAAQ,+BAA+B,EAAE,KAAK,cAAa,CAAE;EAE5F,OAAO;CACT;CAEA,IAAY,yBAAsB;EAChC,MAAM,YAAgC,KAAK,iBAAiB;EAC5D,OAAO,cAAc,UAAa,YAAA;CACpC;CAIA,cAAA;EACE,MAAK;EAEL,KAAK,QAAQ,IAAI;GACf;IAAE,IAAI;IAAQ,OAAO;IAAuB,MAAM;GAAe;GACjE;IAAE,IAAI;IAAO,OAAO;IAAqB,MAAM;GAAa;GAC5D;IAAE,IAAI;IAAO,OAAO;IAAqB,MAAM;GAAa;GAC5D;IAAE,IAAI;IAAO,OAAO;IAAqB,MAAM;GAAc;GAC7D;IAAE,IAAI;IAAS,OAAO;IAAuB,MAAM;GAAiB;EACrE,CAAA;CACH;CAIU,gBAAgB,QAAe;EACvC,IAAI,CAAC,KAAK,iBACR;EAGF,MAAM,iBAAgC,UAA2B;EAEjE,KAAK,aAAY;EAEjB,MAAM,aAA8B;GAClC,QAAQ;GACR,SAAS,KAAK,gBAAgB;GAC9B,UAAU;EACX;EAED,KAAK,gBACF,OAAO,gBAAgB,UAAU,CAAC,CAClC,KAAK,KAAK,CAAC,CAAC,CAAC,CACb,UAAU;GACT,OAAO,aAAgC;IACrC,KAAK,SAAS,QAAQ;IACtB,KAAK,cAAc,SAAS;GAC9B;GACA,QAAQ,MAAwB;IAC9B,KAAK,cAAc,SAAS;GAC9B;EACD,CAAA;CACL;CAIQ,SAAS,UAA4B;EAC3C,IAAI,CAAC,SAAS,MACZ;EAGF,MAAM,qBAA6B,SAAS,QAAQ,IAAI,qBAAqB,KAAK;EAClF,MAAM,QAAgC,wCAAwC,KAAK,kBAAkB;EACrG,MAAM,WAAmB,QAAQ,mBAAmB,MAAM,EAAE,IAAI,KAAK,aAAY;EAEjF,MAAM,MAAc,IAAI,gBAAgB,SAAS,IAAI;EACrD,MAAM,SAA4B,SAAS,cAAc,GAAG;EAC5D,OAAO,OAAO;EACd,OAAO,WAAW;EAClB,OAAO,MAAK;EACZ,IAAI,gBAAgB,GAAG;CACzB;CAhGW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAFrB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,qBAAqB;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UCflG;EAcA,cAAA,CAAA;GAAA,MAAA;GAAA,MDAY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAGpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EANjC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAyB,SAE1B,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,qBAAsB;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;AEkBlG,IAAa,yBAAb,MAAa,+BAA+B,WAAU;CAEpC,QAA4C,UAAU,gBAAe,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAErE,YAAoC,MAAiB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAC1D,aAAkC,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAC3C,uBAA8D,MAAmB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,uBAAA,CAAA,+BAAA,CAAA,CAAA;CAIvF,cAA+B,OAAO,eAAe;CAC5C,YAAgC,OAAO,kBAAkB;CAI3D,UAAqD,OAAO,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAIhF,IAAc,oBAAiB;EAC7B,OAAO,OAAO,KAAK,KAAK,QAAO,CAAE,CAAC,CAAC,SAAS;CAC9C;CAEA,IAAc,eAAY;EACxB,MAAM,YAAuB,KAAK,UAAS;EAC3C,OAAO,cAAc,QAAQ,cAAc,QAAQ,cAAc,QAAQ,cAAc;CACzF;CAIA,cAAA;EACE,MAAK;EAGL,KAAK,SAAS,IAAI,IAAI;CACxB;CAEO,WAAQ;EAMb,KAAK,SAAS,IAAI,KAAK,YAAY,aAAa,CAAC,KAAK,YAAY,aAAa;EAE/E,KAAK,YAAY,YAAY,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GACzE,KAAK,SAAS,IAAI,IAAI;GACtB,KAAK,uBAAsB;EAC7B,CAAC;EAED,KAAK,YAAY,aAAa,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC1E,KAAK,SAAS,IAAI,KAAK;GACvB,KAAK,uBAAsB;EAC7B,CAAC;CACH;CAIU,yBAAsB;EAC9B,KAAK,MAAK,CAAE,EAAE,YAAW;EACzB,KAAK,UAAU,KAAK,MAAK;EACzB,KAAK,UAAU,KAAK,WAAW,KAAK,QAAO,GAAI,EAAE,WAAW,MAAK,CAAE;CACrE;CAEU,yBAAsB;EAC9B,MAAM,uBAAiD,KAAK,qBAAoB;EAChF,IAAI,sBACF,qBAAoB;EAGtB,IAAI,KAAK,UAAU,KAAK,OAAO;GAC7B,KAAK,aAAY;GACjB,KAAK,MAAK,CAAE,EAAE,YAAW;GAEzB,MAAM,YAAiB,KAAK,UAAU,KAAK,YAAW;GACtD,MAAM,cAAsC,OAAO,YACjD,OAAO,QAAQ,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAQ,CAAC,CAAC,KAAK,MAAM,MAAO,MAAM,CAAC,CAAC;GAG5E,KAAK,WAAW,WAAW;EAC7B;CACF;CAEU,uBAAoB;EAC5B,KAAK,aAAY;EAEjB,KAAK,UAAU,KAAK,MAAK;EACzB,KAAK,QAAQ,IAAI,CAAA,CAAE;EAEnB,KAAK,YAAY,WAAU;CAC7B;CAIO,WAAW,SAA+B;EAK/C,KAAK,QAAQ,IAAI,OAAO;EAExB,IAAI,KAAK,mBACP,KAAK,YAAY,WAAW,KAAK,uBAAuB,OAAO,CAAC;OAEhE,KAAK,YAAY,WAAU;CAE/B;CAIQ,yBAAsB;EAC5B,IAAI,KAAK,OAAM,CAAE,EAAE,QAAO,GACxB,KAAK,cAAc,SAAS;CAEhC;CAaQ,uBAAuB,SAAkC;EAC/D,OAAO,OAAO,YACZ,OAAO,QAAQ,OAAO,CAAC,CAAC,QACrB,CAAC,SAA2B,CAAC,gBAAgB,iBAAiB,KAAK,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC,CAC7F;CAEL;CArIW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAsB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAtB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAsB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,sBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAFtB,CAAC,aAAa;GAAE,SAAS;GAAkB,aAAa,iBAAiB,sBAAsB;EAAC,CAAE;EAAC,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAIxC;GAAc,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UCnCtF;EAuCA,QAAA,CAAA,uIAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDTY;IAAc,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAqB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,iBAAA,QAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAa,MAAA;GAAA;EAAA;CAAA,CAAA;;AAGnD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAsB,YAAA,CAAA;EAPlC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA0B,SAG3B;IAAC;IAAgB;IAAuB;GAAa;GAAC,WACpD,CAAC,aAAa;IAAE,SAAS;IAAkB,aAAa,iBAAgB,sBAAuB;GAAC,CAAE;GAAC,UAAA;GAAA,QAAA,CAAA,uIAAA;EAAA,CAAA;CAIxC,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,cAAc,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,sBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA;AEvBtF,MAAa,sBAAsB;AAKnC,IAAY;CAAZ,SAAY,mBAAiB;CAE3B,kBAAA,aAAA;CAEA,kBAAA,UAAA;AACF,EAAA,CALY,sBAAA,oBAAiB,CAAA,EAAA;ACR7B,IAAa,MAAb,MAAgB;CACN;CAED,SAAmB,CAAA;CAEnB;CAEA,iBAAiB;CAEjB;CAEP,IAAW,QAAK;EACd,OAAO,KAAK;CACd;CACA,IAAW,MAAM,OAAyB;EACxC,IAAI,KAAK,WAAW,OAAO;GACzB,KAAK,SAAS;GAEd,IAAI,OACF,KAAK,iBAAiB;EAE1B;CACF;CAEO,MAAM;CAEb,YAAY,MAAmB;EAC7B,OAAO,OAAO,MAAM,IAAI;CAC1B;AACD;ACnBD,IAAa,qBAAb,MAAa,2BAA2B,WAAU;CAEhC,WAAgC,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAC5C,aAAiE,MAAkC,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACnG,OAAwC,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAI/D,sBAAuD,OAAO,qBAAqB,EAAE,UAAU,KAAI,CAAE;CACrG,SAAiB,OAAO,MAAM;CAC9B,aAAyB,OAAO,UAAU;CAIlD,IAAc,kBAAe;EAC3B,OAAO,CAAC,CAAC,KAAK;CAChB;CAEA,IAAc,0BAAuB;EACnC,OAAO,KAAK,qBAAqB,eAAe;CAClD;CAOU,gBAAgB,UAAiB;EACzC,IAAI,SAA0C;EAC9C,IAAI,UACF,SAAS,KAAK,QAAO,CAAE,CAAC,MAAM,MAAM,EAAE,OAAO,QAAQ;EAGvD,IAAI,OAA2B,KAAK,KAAI;EACxC,IAAI,UAAU,OAAO,QAAQ,OAAO,KAAK,SAAS,GAChD,OAAO,OAAO,QAAQ;EAGxB,IAAI,kBAAyD,KAAK,WAAU;EAC5E,IAAI,UAAU,OAAO,cAAc,OAAO,KAAK,OAAO,UAAU,CAAC,CAAC,SAAS,GACzE,kBAAkB;GAAE,GAAG;GAAiB,GAAG,OAAO;EAAU;EAI9D,MAAM,cAA6C,YAAY,eAC7D,KAAK,OAAO,YAAY,KAAK,UAC7B,qBACA,kBAAkB,OAAO;EAE3B,IAAI,MAAc,cACd,YAAY,YAAY,YAAY,MAAO,IAC3C,YAAY,YAAY,KAAK,OAAO,YAAY,KAAK,UAAU,IAAI;EAEvE,IAAI,QAAQ,KAAK,SAAS,GACxB,OAAO,IAAI;EAGb,MAAM,YAAY,GAAG,IAAG,GAAI,KAAK,SAAQ;EACzC,MAAM,MAAY,IAAI,IAAI;GACxB,eAAe;GACf,aAAa;GACb,KAAK;EACN,CAAA;EAED,KAAK,WAAW,mBAAmB,GAAG;CACxC;CAjEW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAkB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAFlB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,kBAAkB;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UCjB/F;EAWA,cAAA,CAAA;GAAA,MAAA;GAAA,MDKY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAGpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAN9B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAsB,SAEvB,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,kBAAmB;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEH/F,IAAa,4BAAb,MAAa,kCAAkC,WAAU;CAEvC,cAA+C,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAC9D,WAA4C,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAInE,kBAAmC,OAAO,eAAe;CACzD,SAAiB,OAAO,MAAM;CAGrB,iBAAyC,OAAO,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAC3D,aAAyB,OAAO,UAAU;CAIlD,IAAc,sBAAmB;EAC/B,OAAO,KAAK,eAAc,MAAO;CACnC;CAKO,WAAQ;EACb,KAAK,gBAAgB,oBAAoB,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GACrF,KAAK,eAAe,IAAI,KAAK,gBAAgB,gBAAgB,MAAM;EACrE,CAAC;CACH;CAIU,kBAAe;EACvB,IAAI,KAAK,SAAQ,KAAM,CAAC,KAAK,eAAc,KAAM,CAAC,KAAK,uBAAuB,CAAC,KAAK,UAAS,GAC3F;EAGF,IAAI,OAAe,KAAK,SAAQ,KAAM,KAAK,OAAO;EAElD,MAAM,cAAkC,KAAK,YAAW;EACxD,IAAI,aACF,QAAQ,IAAI;EAGd,MAAM,cAAsB,KAAK,gBAAgB,gBAAgB;EACjE,MAAM,aAAkB,KAAK,gBAAgB,SAAS,WAAW;EACjE,QAAQ,IAAI;EAEZ,KAAK,WAAW,mBAAmB,IAAI,IAAI;GAAE,eAAe;GAAM,KAAK;EAAI,CAAE,CAAC;CAChF;CAhDW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAyB,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAzB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAyB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAFzB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,yBAAyB;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UCZtG;EAWA,cAAA,CAAA;GAAA,MAAA;GAAA,MDAY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAGpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAyB,YAAA,CAAA;EANrC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA8B,SAE/B,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,yBAA0B;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;AEDtG,IAAa,yBAAb,MAAa,+BAA+B,WAAU;CAK5C,kBAA0C,OAAO,iBAAiB,EAAE,UAAU,KAAI,CAAE;CAO5F,cAAA;EACE,MAAK;EAEL,KAAK,SAAS,IAAI,KAAK;CACzB;CAEO,WAAQ;EACb,KAAK,iBAAiB,aAAa,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC/E,KAAK,QAAQ,IAAI,KAAK;EACxB,CAAC;CACH;CAIU,kBAAe;EACvB,KAAK,QAAQ,IAAI,IAAI;EACrB,KAAK,iBAAiB,QAAO;CAC/B;CA7BW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAsB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAtB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAsB,cAAA;EAAA,UAAA;EAAA,WAFtB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,sBAAsB;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UCTnG;EAQA,cAAA,CAAA;GAAA,MAAA;GAAA,MDAY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAGpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAsB,YAAA,CAAA;EANlC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA0B,SAE3B,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,sBAAuB;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;AEQnG,IAAa,sBAAb,MAAa,4BAA4B,WAAU;CAEhC,aAAsD,UAAU,qBAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAErF,gBAAqC,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAIrD,sBAAgD,OAAO,mBAAmB;CAC1E,cAA2B,OAAO,WAAW;CAC7C,SAAiB,OAAO,MAAM;CAC9B,aAAyB,OAAO,UAAU;CAIlD,IAAc,iBAAc;EAC1B,OAAO,KAAK,YAAY;CAC1B;CAEA,IAAc,gBAAa;EACzB,OAAO,KAAK,YAAY;CAC1B;CAIA,cAAA;EACE,MAAK;EAEL,KAAK,QAAQ,IAAI;GACf;IAAE,IAAI;IAAQ,OAAO;IAAe,MAAM;GAAS;GACnD;IAAE,IAAI;IAAkB,OAAO;IAAyB,MAAM;GAAS;GACvE;IAAE,IAAI;IAAgB,OAAO;IAAuB,MAAM;GAAS;EACpE,CAAA;CACH;CAIU,gBAAgB,QAAe;EACvC,KAAK,aAAY;EAEjB,KAAK,YAAY,iBAAgB;EACjC,IAAI,CAAC,KAAK,YAAY,SAAS;GAC7B,KAAK,cAAc,SAAS;GAC5B;EACF;EAEA,KAAK,UAAS,CAAE,CACb,KAAK,KAAK,CAAC,CAAC,CAAC,CACb,UAAU;GACT,OAAO,UAAc;IACnB,KAAK,cAAc,SAAS;IAC5B,KAAK,YAAY,WAAU;IAC3B,KAAK,YAAY,QAAQ;IACzB,KAAK,YAAY,WAAU;IAE3B,QAAQ,QAAR;KACE,KAAK;MACH,KAAK,WAAW,6BAA4B;MAC5C;KACF,KAAK,gBAAgB;MACnB,KAAK,oBAAoB,YAAY,KAAK;MAE1C,MAAM,eAA8C,YAAY,eAC9D,KAAK,OAAO,YAAY,KAAK,UAC7B,qBACA,kBAAkB,OAAO;MAE3B,MAAM,iBAAiB,GAAG,YAAY,YAAY,aAAc,MAAO,EAAC,GAAI,MAAM;MAClF,MAAM,kBAA0B,YAAY,YAAY,YAAa;MAErE,IAAI,oBAAoB,gBAAgB;OAMtC,KAAK,WAAW,mBAAmB,cAAc;OACjD,KAAK,WAAW,iBAAiB,iBAAiB,cAAc;OAChE,KAAK,OAAO,cAAc,cAAc,CAAC,CAAC,WAAU;QAClD,KAAK,cAAa;OACpB,CAAC;MACH,OAGE,KAAK,cAAa;MAEpB;KACF;KACA,SAAS;MACP,KAAK,oBAAoB,YAAY,KAAK;MAE1C,MAAM,cAA6C,YAAY,eAC7D,KAAK,OAAO,YAAY,KAAK,UAC7B,qBACA,kBAAkB,OAAO;MAE3B,MAAM,MAAM,GAAG,YAAY,YAAY,YAAa,MAAO,EAAC,GAAI,MAAM;MAEtE,IAAI,CAAC,KAAK,WAAW,YAAY,GAAG,GAAG;OACrC,MAAM,eAAuB,YAAY,YAAY,WAAY;OACjE,KAAK,WAAW,mBAAmB,GAAG;OAKtC,IAAI,iBAAiB,KAAK;QACxB,KAAK,WAAW,iBAAiB,cAAc,GAAG;QAClD,KAAK,OAAO,cAAc,GAAG;OAC/B;MACF;MACA;KACF;IACF;GACF;GACA,QAAQ,MAAwB;IAC9B,KAAK,cAAc,SAAS;IAC5B,KAAK,YAAY,WAAU;IAE3B,IAAI,EAAE,WAAW,KACf,KAAK,YAAY,oCAAoC,CAAC;SACjD;KACL,IAAI,eAAe;KACnB,IAAI,OAAO,EAAE,UAAU,UACrB,eAAe,EAAE;KAEnB,KAAK,WAAU,CAAE,EAAE,UAAU,YAAY;IAC3C;GACF;GACA,gBAAe;IACb,KAAK,YAAY,UAAU;GAC7B;EACD,CAAA;CACL;CAIgB,cAAc,QAAyC;EACrE,MAAM,cAAc,MAAM;CAC5B;CAIQ,gBAAa;EACnB,MAAM,cAA6C,YAAY,eAC7D,KAAK,OAAO,YAAY,KAAK,UAC7B,qBACA,kBAAkB,OAAO;EAG3B,MAAM,MAAc,cAChB,YAAY,YAAY,YAAY,MAAO,IAC3C,YAAY,YAAY,KAAK,OAAO,YAAY,KAAK,UAAU,IAAI;EAEvE,MAAM,MAAY,IAAI,IAAI;GAAE,eAAe,GAAG,IAAG;GAAQ,KAAK,GAAG,IAAG;EAAM,CAAE;EAC5E,KAAK,WAAW,mBAAmB,GAAG;CACxC;CAEQ,YAAS;EACf,KAAK,YAAY,YAAW;EAC5B,MAAM,QAAa,KAAK,YAAY,iBAAgB;EACpD,OAAO,KAAK,oBAAoB,UAAU,KAAK;CACjD;CAjKW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,eAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,WAFnB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,mBAAmB;EAAC,CAAE;EAAC,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAIb;GAAmB,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UCnBtG;EAcA,cAAA,CAAA;GAAA,MAAA;GAAA,MDAY;GAAmB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA;IAAA;IAAA;IAAA;IAAA;GAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAGzC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAN/B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAuB,SAExB,CAAC,qBAAqB,qBAAqB;GAAC,WAC1C,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,mBAAoB;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;CAIb,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,mBAAmB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA;AECtG,IAAa,uBAAb,MAAa,6BAA6B,WAAU;CAElC,mBAA+D,MAC7E,MACD,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;CAIO;CACA,sBAAuD,OAAO,qBAAqB,EAAE,UAAU,KAAI,CAAE;CACrG,uBAAuB;CACvB,SAAiB,OAAO,MAAM;CAGrB,iBAAqD,OAAO,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAC/E,aAAyB,OAAO,UAAU;CAC1C,iBAAiC,OAAO,cAAc;CAI9D,IAAc,aAAU;EACtB,OAAO,KAAK,QAAO,CAAE,CAAC,MACnB,YACE,OAAO,aAAa,UACpB,OAAO,mBAAmB,UACzB,OAAO,eAAe,WAAW,KACjC,OAAO,oBAAoB,QAC1B,OAAO,oBAAoB,UAAa,OAAO,gBAAgB,SAAS,EAAG;CAEpF;CAEA,IAAc,cAAW;EACvB,OAAO,EAAE,KAAK,qBAAqB,eAAe;CACpD;CAEA,IAAc,eAAY;EACxB,OAAO,KAAK,QAAO,CAAE,CAAC,MAAM,WAAgC,OAAO,OAAO,KAAK,eAAc,CAAE;CACjG;CAEA,IAAY,gBAAa;EACvB,OAAO,KAAK,QAAO,CAAE,CAAC,EAAE,CAAC,MAAM;CACjC;CAEA,IAAY,kBAAe;EACzB,IAAI,MAAc,KAAK,eAAe;EAEtC,MAAM,eAAgD,KAAK;EAC3D,IAAI,gBAAgB,aAAa,IAC/B,OAAO,IAAI,aAAa;EAG1B,OAAO;CACT;CAKO,WAAQ;EACb,MAAM,mBAAkD,KAAK,iBAAgB;EAC7E,IAAI,kBAAkB;GACpB,KAAK,QAAQ,IACX,iBAAiB,aAAa,UAC1B,QAAQ,UAAiB,CAAC,CAAC,MAAM,QAAQ,MAAM,KAAK,mBAAmB,IAAI,CAAC,EAC5E,KAAK,UAAgB;IACrB,MAAM,OAAwC,MAAM,QAAQ,CAAA;IAE5D,MAAM,SAA8B;KAClC,IAAI,MAAM,QAAQ;KAClB,YAAY;KACZ,WAAW;KACX,OAAO,KAAK,YAAY;IACzB;IAED,MAAM,OAA2B,KAAK;IACtC,IAAI,MACF,OAAO,OAAO;IAGhB,MAAM,iBAAuC,KAAK;IAClD,IAAI,kBAAkB,eAAe,SAAS,GAC5C,OAAO,iBAAiB;IAG1B,OAAO;GACT,CAAC,KAAK,CAAA,CAAE;GAGZ,MAAM,MAAc,YAAY,YAAY,gBAAgB;GAC5D,KAAK,cAAc;GAInB,KADE,iBAAiB,SAAS,EAAE,EAAE,KAAK,KAAK,YAAwB,QAAQ,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,QAC/E,KAAK,eAElB,KAAK,mBAAmB,KAAK,aAAa;EAE9C;EAEA,KAAK,OAAO,OACT,KACC,QAAQ,UAAe,iBAAiB,aAAa,GACrD,UAAU,KAAK,QAAQ,CAAC,CACzB,CACA,WAAW,UAAwB;GAClC,IAAI,KAAK,iBAAgB,GAAI;IAI3B,MAAM,eAA8C,YAAY,eAC9D,KAAK,OAAO,YAAY,KAAK,UAC7B,qBACA,kBAAkB,OAAO;IAW3B,IAAI,gBAAgB,aAAa,gBAAgB,KAAK,iBAAgB,CAAG,CAAC,aAAa;KACrF,MAAM,MAAc,YAAY,YAAY,YAAY;KACxD,KAAK,cAAc;KAEnB,MAAM,eAAuB,KAAK,gBAAgB,MAAM,GAAG;KAE3D,IAAI,CAAC,KAAK,sBACR;UAAI,KAAK,eAAc,MAAO,cAC5B,KAAK,mBAAmB,YAAY;KACtC,OAEA,KAAK,uBAAuB;IAEhC;GACF;EACF,CAAC;CACL;CAIU,cAAc,gBAAkC;EACxD,KAAK,mBAAmB,cAAc;EACtC,KAAK,uBAAuB;EAE5B,IAAI,mBAAmB,KAAK,eAE1B,KAAK,WAAW,yBAAyB,KAAK,WAAY;OACrD;GACL,MAAM,MAAY,IAAI,IAAI;IACxB,OAAO,KAAK,cAAc;IAC1B,KAAK,KAAK;GACX,CAAA;GACD,KAAK,WAAW,yBAAyB,KAAK,aAAc,GAAG;EACjE;CACF;CAaQ,mBAAmB,QAA0B;EACnD,KAAK,eAAe,IAAI,MAAM;EAC9B,KAAK,eAAe,cAAc,UAAU,EAAE;EAE9C,KAAK,QAAQ,QAAQ,YACnB,QAAQ,KAAK,WACX,OAAO,gBAAgB,OAAO,OAAO,UAAU,SAAS;GAAE,GAAG;GAAQ,YAAY,OAAO,OAAO;EAAM,CAAE,CACxG;CAEL;CAEQ,gBAAgB,KAAW;EACjC,MAAM,SAAiB,IAAI,QAAQ,KAAK,eAAe,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC;EAE1E,IAAI,KAAK,QAAO,CAAE,CAAC,MAAM,MAA2B,EAAE,OAAO,MAAM,GACjE,OAAO;EAGT,OAAO,KAAK;CACd;CA5LW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAoB,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAApB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAoB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,kBAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,WAFpB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,oBAAoB;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UClBjG;EAUA,cAAA,CAAA;GAAA,MAAA;GAAA,MDOY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAGpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAoB,YAAA,CAAA;EANhC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAwB,SAEzB,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,oBAAqB;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;;;;;;;;AERjG,IAAa,kBAAb,MAAa,wBAAwB,WAAU;CAE7B,QAA6B,MAAM,oBAAmB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACtD,OAAwC,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACvD,QAA6B,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAEtC,SAAiC,OAAM;CAa7C,kBAAe;EACvB,IAAI,KAAK,SAAQ,KAAM,CAAC,KAAK,eAAc,KAAM,CAAC,KAAK,UAAS,GAC9D;EAGF,KAAK,OAAO,KAAI;CAClB;CAzBW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAe,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAf,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAe,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA,EAAA,QAAA,SAAA;EAAA,WAFf,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,eAAe;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UCR5F;EAaA,cAAA,CAAA;GAAA,MAAA;GAAA,MDNY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAGpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAe,YAAA,CAAA;EAN3B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAkB,SAEnB,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,eAAgB;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEQ5F,IAAa,4BAAb,MAAa,kCAAkC,WAAU;CAEvC,cAAmC,MAAM,gBAAe,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CACxD,aAAkC,MAAM,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACjD,cAAmC,MAAM,sBAAqB,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAC9D,WAAgC,MAAM,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAChD,YAAiC,MAAM,eAAc,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACrD,OAAmD,MAA0B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAC7E,QAA4C,MAAkB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAapE,iBAAc;EACtB,KAAK,KAAI,CAAE,EAAE,WAAU;CACzB;CAEU,eAAY;EACpB,MAAM,OAAsC,KAAK,KAAI;EACrD,IAAI,MACF,KAAK,UAAS;OAEd,KAAK,MAAK,CAAE,EAAE,OAAM;CAExB;CAhCW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAyB,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAzB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAyB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAPzB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,yBAAyB;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UCTtG;EAsBA,cAAA,CAAA;GAAA,MAAA;GAAA,MDdY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAQpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAyB,YAAA,CAAA;EAXrC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA8B,SAE/B,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,yBAA0B;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEQtG,IAAa,2BAAb,MAAa,iCAAiC,WAAU;CAEtC,WAAgC,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAC5C,OAA4B,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,UAA6C,MAAiB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAItE,aAAyB,OAAO,UAAU;CAa3C,UAAO;EACZ,KAAK,WAAW,WAAW,IAAI,IAAI,EAAE,KAAK,GAAG,KAAK,KAAI,EAAE,GAAI,KAAK,SAAQ,IAAI,CAAE,CAAC;CAElF;CAxBW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAwB,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAxB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAwB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAPxB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,wBAAwB;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UCVrG;EASA,cAAA,CAAA;GAAA,MAAA;GAAA,MDAY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAQpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAwB,YAAA,CAAA;EAXpC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA6B,SAE9B,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,wBAAyB;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEQrG,IAAa,kCAAb,MAAa,wCAAwC,WAAU;CAE7C,WAAgC,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAC5C,OAA4B,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,UAA6C,MAAiB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAIpE,kBAAmC,OAAO,eAAe;CAEhD,iBAAyC,OAAO,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAE7D,aAAyB,OAAO,UAAU;CAO3C,WAAQ;EACb,KAAK,gBAAgB,oBAAoB,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GACrF,KAAK,eAAe,IAAI,KAAK,gBAAgB,gBAAgB,MAAM;EACrE,CAAC;CACH;CAOO,UAAO;EACZ,IAAI,KAAK,gBAAgB,mBAAmB,KAAK,eAAc,MAAO,GAAG;GACvE,MAAM,cAAsB,KAAK,gBAAgB,gBAAgB;GACjE,MAAM,aAAkB,KAAK,gBAAgB,SAAS,WAAW;GAEjE,KAAK,WAAW,WAAW,IAAI,IAAI,EAAE,KAAK,GAAG,KAAK,KAAI,EAAE,GAAI,aAAY,CAAE,CAAC;EAE7E;CACF;CAtCW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAA+B,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAA/B,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAA+B,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAP/B,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,+BAA+B;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UCX5G;EASA,cAAA,CAAA;GAAA,MAAA;GAAA,MDCY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAQpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA+B,YAAA,CAAA;EAX3C,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAqC,SAEtC,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,+BAAgC;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEU5G,IAAa,4BAAb,MAAa,kCAAkC,WAAU;CAEtC,aAAsD,UAAU,qBAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAErF,gBAAqC,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAC7C,OAAmD,MAA0B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAC7E,UAAyD,MAA6B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAI9F,cAA2B,OAAO,WAAW;CAC7C,aAAyB,OAAO,UAAU;CAOlD,cAAA;EACE,MAAK;EAEL,KAAK,QAAQ,IAAI;GACf;IAAE,IAAI;IAAQ,OAAO;IAAe,MAAM;GAAS;GACnD;IAAE,IAAI;IAAkB,OAAO;IAAyB,MAAM;GAAS;GACvE;IAAE,IAAI;IAAgB,OAAO;IAAuB,MAAM;GAAS;EACpE,CAAA;CACH;CAIU,cAAc,QAAe;EACrC,MAAM,OAAsC,KAAK,KAAI;EACrD,IAAI,CAAC,MACH;EAGF,KAAK,aAAY;EACjB,KAAK,kBAAkB,IAAI;EAE3B,KACG,KAAI,CAAE,CACN,KAAK,KAAK,CAAC,CAAC,CAAC,CACb,UAAU;GACT,OAAO,UAAc;IACnB,KAAK,cAAc,SAAS;IAE5B,KAAK,YAAY,QAAQ;IACzB,KAAK,WAAU;IAEf,QAAQ,QAAR;KACE,KAAK;MACH,KAAK,WAAW,eAAc;MAE9B;KACF,KAAK,gBACH,KAAK,QAAO,CAAE,EAAE,WAAW,QAAO;IAEtC;GACF;GACA,QAAQ,MAAwB;IAC9B,KAAK,cAAc,SAAS;IAC5B,KAAK,UAAU,KAAK;IAEpB,IAAI,EAAE,WAAW,KACf,4BAA4B,sBAAsB,GAAG,KAAK,QAAQ;SAC7D;KACL,IAAI,eAAe;KACnB,IAAI,OAAO,EAAE,UAAU,UACrB,eAAe,EAAE;KAGnB,KAAK,WAAU,CAAE,EAAE,UAAU,YAAY;IAC3C;GACF;EACD,CAAA;CACL;CAIgB,cAAc,QAAyC;EACrE,KAAK,kBAAkB,KAAK;EAC5B,MAAM,cAAc,MAAM;CAC5B;CAIQ,kBAAkB,WAAkB;EAC1C,MAAM,UAA4C,KAAK,QAAO;EAC9D,IAAI,SACF,QAAQ,UAAU;CAEtB;CA3FW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAyB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAzB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAyB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,WAPzB,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,yBAAyB;EAAC,CAAE;EAAC,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WASnB;GAAmB,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UCvBtG;EAgBA,cAAA,CAAA;GAAA,MAAA;GAAA,MDHY;GAAmB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA;IAAA;IAAA;IAAA;IAAA;GAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAQzC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAyB,YAAA,CAAA;EAXrC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA8B,SAE/B,CAAC,qBAAqB,qBAAqB;GAAC,WAC1C,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,yBAA0B;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;CASnB,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,mBAAmB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA;AERtG,IAAa,6BAAb,MAAa,mCAAmC,WAAU;CACxC,QAA4C,MAA6B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAE5E,cAAoD,OAAM;CAE1E,QAAQ,QAAe;EACrB,KAAK,YAAY,KAAK,MAAM;CAC9B;CAPW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAA0B,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAA1B,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAA0B,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,OAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,SAAA,EAAA,aAAA,cAAA;EAAA,WAP1B,CAAC;GAAE,SAAS;GAAkB,aAAa,iBAAiB,0BAA0B;EAAC,CAAE;EAAC,iBAAA;EAAA,UAAA;EAAA,UCRvG;EAMA,cAAA,CAAA;GAAA,MAAA;GAAA,MDCY;GAAqB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,SAAA,CAAA,iBAAA,QAAA;EAAA,CAAA;CAAA,CAAA;;AAQpB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA0B,YAAA,CAAA;EAXtC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA+B,SAEhC,CAAC,qBAAqB;GAAC,WACrB,CAAC;IAAE,SAAS;IAAkB,aAAa,iBAAgB,0BAA2B;GAAC,CAAE;GAAC,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;AEmDvG,IAAa,yBAAb,MAAa,uBAAsB;CAAtB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAsB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAtB,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAsB,SAAA;GAtC/B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;EAA+B;EAAA,SAAA;GAG/B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;EAA+B;CAAA,CAAA;CAOtB,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAsB,SAAA;GAtC/B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;EAA+B;CAAA,CAAA;;AAwBtB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAsB,YAAA,CAAA;EAzClC,MAAA;EAAS,MAAA,CAAA;GACR,cAAc,CAAA;GACd,SAAS;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;GACD;GACD,SAAS;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;GACD;EACF,CAAA;;;ACxCD,IAAa,0BAAb,MAAa,wBAAuB;CAKxB,WAA6B,IAAI,QAAO;CAC/B,iBAA+D,OAAO,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAE3F,gBAAgB;CAChB,qBAAyE,CAAA;CAOvE,iBAAiC,OAAO,cAAc;CAEzD,cAAW;EAChB,KAAK,SAAS,KAAK,IAAI;EACvB,KAAK,SAAS,SAAQ;CACxB;CAEO,WAAQ;EACb,KAAK,eAAe,uBACjB,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAC9B,WAAW,aAA0C;GACpD,KAAK,mBAAmB,KAAK,eAAe,cAAc;GAC1D,KAAK,qBAAqB,QAAQ;EACpC,CAAC;EAEH,KAAK,eAAe,cAAc,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,WAAkB;GAC5F,KAAK,mBAAmB,MAAM;GAE9B,KAAK,qBAAqB,KAAK,mBAAmB,OAAO;EAC3D,CAAC;CACH;CA2BQ,mBAAmB,QAAc;EACvC,MAAM,gBAAgB,CAAC,KAAK;EAC5B,KAAK,gBAAgB;EAErB,IACE,CAAC,iBACD,CAAC,UACD,KAAK,mBAAmB,YAAY,UACpC,KAAK,mBAAmB,QAAQ,QAEhC;EAGF,KAAK,mBAAmB,UAAU,KAAK,mBAAmB;EAC1D,OAAO,KAAK,mBAAmB;CACjC;CAWQ,qBAAqB,UAAsC;EACjE,KAAK,eAAe,IAAI,QAAQ;CAClC;CA3FW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAuB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAvB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAuB,cAAA;EAAA,UAAA;EAAA,WAFvB,CAAC,EAAE,SAAS,eAAc,CAAE;EAAC,UAAA;EAAA,UCZ1C;EAKA,QAAA,CAAA,+YAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDMY;IAAgB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAe,UAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA,CAAA,QAAA,kBAAA;IAAA,SAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,UAAA,CAAA,QAAA;GAAA;EAAA;CAAA,CAAA;;AAG9C,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAuB,YAAA,CAAA;EAPnC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA4B,SAG7B;IAAC;IAAkB;IAAiB;GAAY;GAAC,WAC/C,CAAC,EAAE,SAAS,eAAc,CAAE;GAAC,UAAA;GAAA,QAAA,CAAA,+YAAA;EAAA,CAAA;;;AEW1C,SAAS,oBAAoB,OAAqB;CAChD,OAAiC,MAAM,SAAS,KAAK,eAAe,CAAA;AACtE;AAgCA,IAAa,iCAAb,MAAa,uCAAuC,wBAAuB;CAExD,aAAsD,UAAU,qBAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAOlF,gBAAoD,OAAO,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CACrE,iBAAqD,OAAO,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CACtE,mBAAkE,OAAO,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;CAEvF;CAEF,sBAAuD,OAAO,qBAAqB,EAAE,UAAU,KAAI,CAAE;CACrG,cAA8B;CAC9B,eAAe;CACf,SAAiB,OAAO,MAAM;CAC9B,aAAyB,OAAO,UAAU;CAIlD,IAAc,gBAAa;EACzB,OAAO,+BAA+B;CACxC;CAIgB,WAAQ;EACtB,MAAM,SAAQ;EAEd,KAAK,iBAAiB,IACpB,YAAY,sBAAsB,KAAK,OAAO,YAAY,KAAK,UAAU,8BAA8B,CAAC;EAE1G,KAAK,cAAc,KAAK,qBAAqB,eAAe;EAE5D,KAAK,qBACD,UAAS,CAAE,CACZ,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAC9B,WAAW,UAAc;GACxB,IAAI,KAAK,gBAAgB,KAAK,oBAAqB,eAAe,CAAC,KAAK,iBAAgB,GAAI;IAE1F,KAAK,cAAc,KAAK,oBAAqB;IAC7C,KAAK,iBAAiB,IACpB,YAAY,sBAAsB,KAAK,OAAO,YAAY,KAAK,UAAU,8BAA8B,CAAC;GAE5G;GAEA,MAAM,mBAAkD,KAAK,iBAAgB;GAC7E,IAAI,kBAAkB;IACpB,IAAI,QAAgB,iBAAiB,KAAK;IAC1C,IAAI,KAAK,oBAAqB,aAC5B,QAAQ,KAAK,oBAAqB,SAAS,KAAK;IAGlD,KAAK,cAAc,IAAI,EAAE;IACzB,KAAK,eAAe,IAAI,KAAK;IAE7B,MAAM,MAAc,YAAY,YAAY,gBAAgB;IAC5D,KAAK,WAAW,eAAe,KAAK,KAAK;GAC3C;EACF,CAAC;EAEH,KAAK,qBACD,UAAS,CAAE,CACZ,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAC9B,WAAW,UAA4B;GACtC,KAAK,eAAe;GAEpB,IAAI,MAAM,WAAW,KAAK;IACxB,KAAK,WAAU,CAAE,EAAE,MAAM,IAAI,sBAAsB;IACnD,KAAK,WAAU,CAAE,EAAE,SAAS,IAAI,EAAE;IAClC,KAAK,WAAU,CAAE,EAAE,UAAU,wBAAwB;GACvD,OAAO;IACL,KAAK,WAAU,CAAE,EAAE,MAAM,IAAI,oBAAoB;IACjD,KAAK,WAAU,CAAE,EAAE,SAAS,IAAI,4BAA4B;IAC5D,KAAK,WAAU,CAAE,EAAE,UAAU,KAAK;GACpC;EACF,CAAC;CACL;CAIU,qBAAkB;EAC1B,IAAI,CAAC,KAAK,cACR;EAGF,MAAM,UAAkB,KAAK,WAAW;EACxC,MAAM,gBAAoC,QAAQ,QAAQ,SAAS,EAAE,EAAE;EAGvE,IAAI,iBAAiB,QAAQ,SAAS,GAAG;GACvC,MAAM,cAAsB,QAAQ,WAAW,UAAgB,MAAM,kBAAkB,aAAa;GACpG,IAAI,cAAc,GAAG;IACnB,KAAK,WAAW,uBAAuB,QAAQ,cAAc,EAAE;IAC/D;GACF;EACF;EAEA,KAAK,WAAW,eAAc;CAChC;CAtGW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAA8B,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAA9B,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAA8B,cAAA;EAAA,UAAA;EAAA,WAhB9B;GACT,EAAE,SAAS,eAAc;GACzB;IAAE,SAAS;IAAqB,YAAY;IAAqB,MAAM,CAAC,cAAc;GAAC;GAWvF,EAAE,SAAS,YAAW;EACvB;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAIgF;GAAmB,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UC3DtG;EAeA,QAAA,CAAA,4MAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDiBI;IAAoB,UAAA;IAAA,QAAA,CAAA,kBAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACpB;IAAmB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACnB;IAAuB,UAAA;IAAA,QAAA,CAAA,SAAA,MAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACvB;IAAgB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAChB;IAAe,UAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACf;IAAoB,UAAA;IAAA,QAAA,CAAA,OAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACpB;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA,CAAA,QAAA,kBAAA;IAAA,SAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,UAAA,CAAA,QAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACZ;IAAa,MAAA;GAAA;EAAA;CAAA,CAAA;;AAkBJ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA8B,YAAA,CAAA;EA9B1C,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAoC,SAGrC;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GAAA,WACU;IACT,EAAE,SAAS,eAAc;IACzB;KAAE,SAAS;KAAqB,YAAY;KAAqB,MAAM,CAAC,cAAc;IAAC;IAWvF,EAAE,SAAS,YAAW;GACvB;GAAA,UAAA;GAAA,QAAA,CAAA,4MAAA;EAAA,CAAA;CAIgF,CAAA;CAAA,gBAAA,EAAA,YAAA,CAAA;EAAA,MAAA,GAAA;EAAA,MAAA,CAAA,GAAA,iBAAA,mBAAmB,GAAA,EAAA,UAAA,KAAA,CAAA;CAAA,CAAA,EAAA;AAAA,CAAA;AEhDtG,IAAa,0BAAb,MAAa,wBAAuB;CAK1B,aAAyB,OAAO,UAAU;CAUlD,IAAc,aAAU;EACtB,OAAO,KAAK,WAAW;CACzB;CAOU,aAAa,KAAS;EAC9B,KAAK,WAAW,uBAAuB,GAAG;CAC5C;CA1BW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAuB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAvB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAuB,cAAA;EAAA,UAAA;EAAA,UAAA;EAAA,UCXpC;EAyBA,QAAA,CAAA,2wIAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MDhBY;GAAa,MAAA;EAAA,CAAA;CAAA,CAAA;;AAEZ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAuB,YAAA,CAAA;EANnC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA2B,SAG5B,CAAC,aAAa;GAAC,UAAA;GAAA,QAAA,CAAA,2wIAAA;EAAA,CAAA;;;AEY1B,MAAM,iBAAiB;AAGvB,MAAM,qBAAqB;AAQ3B,IAAa,gBAAb,MAAa,cAAa;CAuFd;CACA;CACA;CAvFoB;CAOtB,OAAO,YAAY;CAGV,aAAqB,kBAAkB,cAAc;CAO9D,qBAAqB;CACrB;CACA,cAAc;CAGH,gBAAyC,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CACtD,iBAA0C,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAUvD,gBAAyC,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAQtD,eAAwC,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAIxE,IAAc,gBAAa;EACzB,OAAO;CACT;CAEA,IAAc,YAAS;EACrB,OAAO;CACT;CAEA,IAAc,UAAO;EACnB,OAAO,KAAK,WAAW,WAAW,SAAS;CAC7C;CAEA,IAAc,WAAQ;EACpB,OAAO,KAAK,WAAW,cAAc,CAAA;CACvC;CAEA,IAAc,mBAAgB;EAC5B,OAAO,KAAK,WAAW;CACzB;CAEA,IAAc,mBAAgB;EAC5B,OAAO,KAAK,WAAW;CACzB;CAGA,IAAc,UAAO;EACnB,OAAO,GAAG,KAAK,WAAU;CAC3B;CAGA,IAAc,cAAW;EACvB,MAAM,QAAgB,KAAK,SAAS,WAAW,QAAc,KAAK,YAAY,GAAG,CAAC;EAClF,OAAO,UAAU,KAAK,OAAO,KAAK,MAAM,KAAK;CAC/C;CAEU,aAAmD,GAAW,QAAsB,IAAI;CAIlG,YACU,QACA,QACA,YAAsB;EAFtB,KAAA,SAAA;EACA,KAAA,SAAA;EACA,KAAA,aAAA;EAOR,uBAAsB;GACpB,MAAM,YAAoB,KAAK,eAAc;GAC7C,IAAI,cAAc,KAAK,oBACrB;GAEF,KAAK,qBAAqB;GAC1B,KAAK,eAAc;EACrB,CAAC;CACH;CAEO,kBAAe;EACpB,MAAM,MAA+B,KAAK,SAAS;EACnD,IAAI,CAAC,KACH;EAKF,KAAK,OAAO,wBAAuB;GACjC,IAAI,iBAAiB,UAAU,KAAK,aAAa,EAAE,SAAS,KAAI,CAAE;GAClE,IAAI,iBAAiB,SAAS,KAAK,YAAY,EAAE,SAAS,MAAK,CAAE;GAIjE,IAAI,OAAO,mBAAmB,YAAY;IACxC,KAAK,oBAAoB,IAAI,qBAAqB,KAAK,eAAc,CAAE;IACvE,KAAK,kBAAkB,QAAQ,GAAG;GACpC;EACF,CAAC;CACH;CAEO,cAAW;EAChB,KAAK,cAAc;EACnB,KAAK,mBAAmB,WAAU;EAElC,MAAM,MAA+B,KAAK,SAAS;EACnD,KAAK,oBAAoB,UAAU,KAAK,WAAW;EACnD,KAAK,oBAAoB,SAAS,KAAK,UAAU;CACnD;CAEO,WAAQ;EACb,MAAM,0BAAyD,YAAY,eACzE,KAAK,OAAO,YAAY,SAAS,MACjC,qBACA,kBAAkB,OAAO;EAE3B,IAAI,yBAAyB;GAC3B,MAAM,8BACJ,CAAC,CAAC,wBAAwB,cAC1B,wBAAwB,WAAW,QACnC,wBAAwB,WAAW,KAAK,mBAAmB;GAE7D,MAAM,MAAc,YAAY,YAAY,uBAAuB;GACnE,MAAM,SAAmB,CAAA;GAEzB,IAAI,6BACF,OAAO,KAAK,YAAY,YAAY,wBAAwB,UAAW,CAAC;QACnE,IAAI,wBAAwB,YAOjC;QAN0B,wBAAwB,WAAW,IAAI,KAAK,MAAW,EAAE,IAAI,CAAC,CAAC,KAAK,GAM1F,OAJF,wBAAwB,aAAa,UAAU,QAC5C,UAAiB,CAAC,CAAC,MAAM,QAAQ,MAAM,KAAK,mBAAmB,IAAI,CACrE,GAAG,EAAE,EAAE,QAAQ,KAEkB;KAElC,IAAI,CADa,OAAO,wBAAwB,SAAS,IAAI,IAAI,CAC5D,GAEH,KAAK,OAAO,SAAS,CAAC,GAAG,GAAG,EAAE,YAAY,KAAI,CAAE;UAC3C;MAEL,MAAM,aAAqB,wBAAwB,YAAY,OAAO,YAAY;MAClF,qBAAoB;OAClB,MAAM,WAAmB,YAAY,YAAY,wBAAwB,UAAW;OACpF,KAAK,WAAW,yBACd,KACA,IAAI,IAAI;QACN,OAAO;QACP,KAAK;OACN,CAAA,CAAC;MAEN,CAAC;KACH;IACF;;GAGF,KAAK,WAAW,QACd,IAAI,IAAI;IACE;IACR,eAAe;IACf,aAAa,wBAAwB;IAChC;GACN,CAAA,CAAC;EAEN,OAAO;GACL,MAAM,mBAAkD,YAAY,eAClE,KAAK,OAAO,YAAY,SAAS,MACjC,qBACA,kBAAkB,IAAI;GAExB,IAAI,kBAAkB;IACpB,MAAM,MAAc,YAAY,YAAY,gBAAgB;IAC5D,KAAK,WAAW,QACd,IAAI,IAAI;KACN,aAAa,iBAAiB;KACzB;IACN,CAAA,CAAC;GAEN,OACE,KAAK,OAAO,SAAS,CAAC,GAAG,CAAC;EAE9B;CACF;CAIU,cAAc,KAAS;EAC/B,KAAK,WAAW,YAAY,GAAG;CACjC;CAEU,WAAW,OAAa;EAChC,KAAK,WAAW,SAAS,KAAK;CAChC;CAGU,cAAc,OAAmB,OAAa;EACtD,IAAI,MAAM,WAAW,GACnB;EAGF,MAAM,eAAc;EACpB,KAAK,WAAW,KAAK;CACvB;CAOU,YAAY,MAAc,OAAa;EAC/C,MAAM,QAAgB,KAAK,SAAS;EACpC,IAAI,UAAU,GACZ;EAEF,MAAM,SAAiB,UAAU,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,OAAO,QAAQ,SAAS;EACvG,KAAK,SAAS,MAAM;CACtB;CAGU,cAAc,WAAiB;EACvC,MAAM,MAA+B,KAAK,SAAS;EACnD,IAAI,CAAC,KACH;EAGF,MAAM,OAAe,IAAI,cAAc,qBAAqB;EAC5D,IAAI,OAAO,IAAI,aAAa,YAC1B,IAAI,SAAS;GAAE,MAAM;GAAM,UAAU;EAAQ,CAAE;OAG/C,IAAI,cAAc;CAEtB;CAIU,YAAY,KAAS;EAC7B,OAAO,KAAK,WAAW,YAAY,GAAG;CACxC;CAKU,MAAM,OAAa;EAC3B,OAAO,GAAG,KAAK,WAAU,OAAQ;CACnC;CAEQ,cAAW;EACjB,OAAO,MAAM,KAAK,KAAK,SAAS,cAAc,iBAA8B,gBAAc,KAAK,CAAA,CAAE;CACnG;CAGQ,SAAS,OAAa;EAC5B,MAAM,UAAmC,KAAK,YAAW,CAAE,CAAC;EAC5D,IAAI,CAAC,SACH;EAEF,QAAQ,MAAK;EAEb,MAAM,MAAwB,KAAK,SAAS;EAC5C,IAAI,KACF,KAAK,cAAc,GAAG;CAE1B;CAQQ,iBAAc;EACpB,MAAM,MAA+B,KAAK,SAAS;EAEnD,OAAO,GADe,KAAK,SAAS,WAAW,QAAc,KAAK,YAAY,GAAG,CACvE,EAAK,GAAI,KAAK,SAAS,OAAM,GAAI,KAAK,eAAe,EAAC,GAAI,KAAK,eAAe;CAC1F;CAGQ,0BAAuB;EAC7B,MAAM,QAAgB,KAAK,SAAS,WAAW,QAAc,KAAK,YAAY,GAAG,CAAC;EAClF,IAAI,UAAU,IACZ;EAKF,MAAM,UAAmC,KAAK,YAAW,CAAE,CAAC;EAC5D,IAAI,OAAO,SAAS,mBAAmB,YACrC,QAAQ,eAAe;GAAE,OAAO;GAAW,QAAQ;EAAS,CAAE;CAElE;CAMQ,uBAAoB;EAC1B,MAAM,MAA+B,KAAK,SAAS;EACnD,IAAI,CAAC,OAAO,KAAK,aACf;EAGF,MAAM,UAAmB,IAAI,aAAa;EAC1C,MAAM,WAAoB,IAAI,aAAa,IAAI,cAAc,IAAI,cAAc;EAC/E,MAAM,cAAuB,IAAI,cAAc,IAAI,cAAc;EAIjE,MAAM,UAA0B,IAAI;EACpC,MAAM,aACJ,eACC,YAAY,QAAQ,QAAQ,sBAAqB,CAAE,CAAC,SAAS,IAAI,sBAAqB,CAAE,CAAC,QAAQ;EAEpG,IACE,YAAY,KAAK,cAAa,KAC9B,aAAa,KAAK,eAAc,KAChC,gBAAgB,KAAK,cAAa,KAClC,eAAe,KAAK,aAAY,GAEhC;EAGF,KAAK,cAAc,IAAI,OAAO;EAC9B,KAAK,eAAe,IAAI,QAAQ;EAChC,KAAK,cAAc,IAAI,WAAW;EAClC,KAAK,aAAa,IAAI,UAAU;CAClC;CAIQ,iBAAc;EACpB,KAAK,wBAAuB;EAC5B,KAAK,qBAAoB;CAC3B;CAGQ,oBAAyB;EAC/B,KAAK,qBAAoB;CAC3B;CAOQ,cAAc,UAA2B;EAC/C,MAAM,MAA+B,KAAK,SAAS;EACnD,IAAI,CAAC,OAAO,MAAM,WAAW,KAAK,MAAM,WAAW,GACjD;EAEF,IAAI,IAAI,eAAe,IAAI,aACzB;EAGF,MAAM,eAAc;EACpB,IAAI,cAAc,MAAM;CAC1B;CA9XW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAa,MAAA;GAAA,EAAA,OAAA,GAAA,OAAA;GAAA,EAAA,OAAA,KAAA,OAAA;GAAA,EAAA,OAAA,WAAA;EAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAb,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAa,cAAA;EAAA,UAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAAA,CAAA,SAAA;GAAA,aAAA;EAAA,CAAA;EAAA,UAAA;EAAA,UChC1B;EAoGA,QAAA,CAAA,owSAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MDtEY;GAAuB,UAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAa,MAAA;EAAA,CAAA;CAAA,CAAA;;AAErC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EANzB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAgB,SAGjB,CAAC,yBAAyB,aAAa;GAAC,UAAA;GAAA,QAAA,CAAA,owSAAA;EAAA,CAAA;;;;;;;;EAIhD,MAAA;EAAU,MAAA,CAAA,SAAS;;;AEnBtB,IAAa,uBAAb,MAAa,qBAAoB;CAApB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAoB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAApB,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAoB,SAAA;GAPrB;GAAgC;GAAyB;GAAyB;EAAa;EAAA,SAAA;GAC/F;GAAgC;GAAyB;EAAa;CAAA,CAAA;CAMrE,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAoB,SAAA,CAPrB,gCAAgC,uBAAuB;CAAA,CAAA;;AAOtD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAoB,YAAA,CAAA;EAThC,MAAA;EAAS,MAAA,CAAA;GACR,cAAc,CAAA;GACd,SAAS;IAAC;IAAgC;IAAyB;IAAyB;GAAa;GACzG,SAAS;IAAC;IAAgC;IAAyB;GAAa;EACjF,CAAA;;;ACID,IAAa,4BAAb,MAAa,0BAAyB;CAAzB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAyB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAzB,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAyB,SAAA;GAN1B;GAAwB;GAAuB;EAAoB;CAAA,CAAA;CAMlE,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAyB,SAAA;GAN1B;GAAwB;GAAuB;EAAoB;CAAA,CAAA;;AAMlE,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAyB,YAAA,CAAA;EATrC,MAAA;EAAS,MAAA,CAAA;GACR,cAAc,CAAA;GACd,SAAS,CAAA;GACT,SAAS;IAAC;IAAwB;IAAuB;GAAoB;EAC9E,CAAA;;;ACPD,MAAa,aAAwC,IAAI,eAA0B,kCAAkC;CACnH,YAAY;CACZ,eAAe,IAAI,UAAU,EAAE;AAChC,CAAA;AAYD,IAAa,YAAb,MAAsB;CACb;CAGA;CAGA;CAGA;CAGA;CAGA;CAGA;CAGA;CAEP,YAAY,SAAiB,SAA0B;EACrD,KAAK,WAAW;EAChB,KAAK,UAAU,SAAS,WAAW;EACnC,KAAK,cAAc,SAAS,eAAe;EAC3C,KAAK,cAAc,SAAS,eAAe;EAC3C,KAAK,UAAU,SAAS;EACxB,KAAK,uBAAuB,SAAS,wBAAwB;EAC7D,KAAK,mBAAmB,SAAS,oBAAoB;EACrD,KAAK,UAAU,SAAS,WAAW;CACrC;AACD;AC/CD,IAAa,+BAAb,MAAa,qCAAqC,wBAAuB;CAWvE,cAAA;EACE,MAAK;EAEL,OAAO,OAAO,KAAK,SAAS;GAC1B,oBAAoB;GACpB,gBAAgB;GAChB,iBAAiB;GACjB,mBAAmB;EACD,CAAA;CACtB;CApBW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAA4B,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAA5B,OAAA,QAAA,GAAA,sBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;CAA4B,CAAA;;AAA5B,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA4B,YAAA,CAAA,EADxC,MAAA,WAAA,CAAA;;;ACSD,IAAa,kBAAb,MAAa,gBAAe;CAAf,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAe,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAf,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAe,SAAA,CANhB,yBAAyB;CAAA,CAAA;CAMxB,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAe,SAAA,CANhB,yBAAyB;CAAA,CAAA;;AAMxB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAe,YAAA,CAAA;EAT3B,MAAA;EAAS,MAAA,CAAA;GACR,cAAc,CAAA;GACd,SAAS,CAAA;GACT,SAAS,CAAC,yBAAyB;EACpC,CAAA;;;ACAD,MAAa,mCAAmC;AAEhD,MAAa,8BAAmD;CAC9D,MAAM;CACN,OAAO;CACP,QAAQ;AACT;AAED,MAAa,kCAAyD,CACpE;CAAE,QAAQ,IAAI,iCAAgC;CAAK,QAAQ;AAAO,CACnE;AAOD,SAAgB,qCACd,aACA,eAAiD,CAAA,GAAE;CAEnD,OAAO,IAAI,yBAAyB,aAAa,CAAC,GAAG,iCAAiC,GAAG,YAAY,CAAC;AACxG;AAEA,SAAgB,sCAAsC,eAAiD,CAAA,GAAE;CACvG,OAAO;EACL,SAAS;EACT,aAAa,gBAA6B,qCAAqC,aAAa,YAAY;EACxG,MAAM,CAAC,WAAW;CACnB;AACH;AAEA,SAAgB,uCACd,SAAyC,CAAA,GAAE;CAE3C,OAAO,wBAAwB;EAC7B,iBAAiB,OAAO;EACxB,QAAQ,sCAAsC,OAAO,YAAY;CAClE,CAAA;AACH;ACtCA,IAAsB,WAAtB,MAAsB,SAAQ;CAKlB,WAA6B,IAAI,QAAO;CAM/B,eAAwC,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAIxE,IAAW,UAAO;EAChB,OAAO,KAAK,aAAY;CAC1B;CACA,IAAW,QAAQ,OAAc;EAC/B,KAAK,aAAa,IAAI,KAAK;CAC7B;CAIO,cAAW;EAChB,KAAK,SAAS,KAAK,IAAI;EACvB,KAAK,SAAS,SAAQ;CACxB;CA3BoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAQ,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAR,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAQ,cAAA;EAAA,UAAA;EAAA,UAAA;EAAA,UADP;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAQ,YAAA,CAAA;EAD7B,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;ACG3B,IAAsB,YAAtB,MAAsB,kBAAgC,SAAQ;CAKlD;CACA;CACA;CACA,iBAAiB;CAI3B,IAAc,YAAS;EACrB,OAAO,KAAK;CACd;CAIA,cAAA;EACE,MAAK;EAEL,KAAK,kBAAkB,OAAO,eAAe;EAC7C,KAAK,eAAe,OAAO,qBAAqB,EAAE,UAAU,KAAI,CAAE;EAClE,KAAK,gBAAgB,OAAO,0BAA0B,EAAE,UAAU,KAAI,CAAE;CAC1E;CAEO,WAAQ;EACb,KAAK,gBAAgB,YAAY,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC7E,KAAK,UAAU;EACjB,CAAC;EAED,KAAK,gBAAgB,aAAa,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC9E,KAAK,UAAU;EACjB,CAAC;EAED,KAAK,gBAAgB,oBAAoB,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GACrF,KAAK,mBAAkB;EACzB,CAAC;EAED,KAAK,eAAe,cAAc,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,EAAE,gBAAe;GAC/E,KAAK,gBAAgB,QAAO;EAC9B,CAAC;EAED,KAAK,cACD,UAAS,CAAE,CACZ,KAAK,KAAK,CAAC,GAAG,UAAU,KAAK,QAAQ,CAAC,CAAC,CACvC,gBAAe;GACd,KAAK,gBAAgB,QAAO;EAC9B,CAAC;EAEH,IAAI,KAAK,cAAc,aAAa;GAClC,KAAK,gBAAgB,iBAAiB,KAAK,aAAa;GAExD,IAAI,CAAC,KAAK,gBAAgB,YACxB,KAAK,gBAAgB,QAAO;GAG9B,IAAI,KAAK,eACP,KAAK,cAAc,iBAAiB,KAAK,aAAa;EAE1D;CACF;CAUU,qBAAkB;EAC1B,KAAK,iBAAiB,KAAK,gBAAgB,gBAAgB;CAC7D;CAzEoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAS,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAT,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAS,cAAA;EAAA,UAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UADR;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAS,YAAA,CAAA;EAD9B,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;ACK3B,IAAsB,kBAAtB,MAAsB,wBAAwB,SAAQ;CAC5C;CAEE,iBAAiB;CAE3B,IAAI,WAAQ;EACV,OAAO,KAAK;CACd;CACA,IAAa,SAAS,OAAyB;EAC7C,IAAI,KAAK,cAAc,OAAO;GAC5B,KAAK,YAAY;GACjB,KAAK,gBAAgB,iBAAiB;GAEtC,IAAI,CAAC,KAAK,gBAAgB,YACxB,KAAK,gBAAgB,QAAO;GAG9B,IAAI,KAAK,eACP,KAAK,cAAc,iBAAiB;EAExC;CACF;CAES,WAAW;CAEV,kBAAmC,OAAO,eAAe;CACzD,gBAAiD,OAAO,0BAA0B,EAAE,UAAU,KAAI,CAAE;CAE9G,cAAA;EACE,MAAK;CACP;CAEA,WAAQ;EACN,KAAK,gBAAgB,YAAY,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC7E,KAAK,UAAU;EACjB,CAAC;EAED,KAAK,gBAAgB,aAAa,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC9E,KAAK,UAAU;EACjB,CAAC;EAED,IAAI,CAAC,KAAK,gBAAgB,YACxB,KAAK,UAAU;EAGjB,KAAK,gBAAgB,oBAAoB,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GACrF,KAAK,mBAAkB;EACzB,CAAC;CACH;CAEA,qBAAkB;EAChB,KAAK,iBAAiB,KAAK,gBAAgB,gBAAgB;CAC7D;CApDoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAe,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAf,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAe,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;GAAA,UAAA;EAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UADd;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAe,YAAA,CAAA;EADpC,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;EASxB,UAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAeA,UAAA,CAAA,EAAA,MAAA,MAAA,CAAA;;;AC5BH,IAAsB,cAAtB,MAAsB,oBAAoB,SAAQ;CAEnB;CAIrB;CAOR,cAAA;EACE,MAAK;EAGL,KAAK,UAAU;EACf,KAAK,iBAAiB,OAAO,gBAAgB,EAAE,UAAU,KAAI,CAAE;CACjE;CAEO,kBAAe;EACpB,KAAK,gBAAgB,qBAAqB,KAAK,cAAc;CAC/D;CAvBoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAW,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAX,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAW,cAAA;EAAA,UAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAAA,CAAA,QAAA;GAAA,aAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UADV;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAW,YAAA,CAAA;EADhC,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;EAGxB,MAAA;EAAU,MAAA,CAAA,QAAQ;;;ACArB,IAAsB,WAAtB,MAAsB,iBAA+B,YAAW;CAKpD;CACA;CACA;CACA;CAIV,IAAc,cAAW;EACvB,OAAO,KAAK,cAAc,eAAe;CAC3C;CAEA,IAAc,YAAS;EACrB,OAAO,KAAK,YAAY;CAC1B;CAIA,cAAA;EACE,MAAK;EAEL,KAAK,eAAe,OAAO,qBAAqB,EAAE,UAAU,KAAI,CAAE;EAClE,KAAK,cAAc,OAAO,WAAW;EACrC,KAAK,cAAc,OAAO,WAAW;CACvC;CAEO,WAAQ;EACb,KAAK,WAAW,KAAK,UAAS;EAC9B,KAAK,YAAY,eAAe,KAAK,QAAQ;EAE7C,KAAK,YAAY,UAAU;EAC3B,KAAK,cACD,UAAS,CAAE,CACZ,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAC9B,WAAW,UAA8B;GACxC,KAAK,YAAY,UAAU;GAC3B,KAAK,YAAY,QAAQ;GACzB,KAAK,YAAY,UAAS;GAE1B,IAAI,CAAC,KAAK,cAAc,aACtB,KAAK,YAAY,UAAS;EAE9B,CAAC;CACL;CA/CoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAQ,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAR,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAQ,cAAA;EAAA,UAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UADP;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAQ,YAAA,CAAA;EAD7B,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;ACM3B,IAAsB,oBAAtB,MAAsB,0BAA0B,SAAQ;CA+C1C;CACA;CA/CH;CACT,IAAa,MAAM,OAAiB;EAClC,IAAI,KAAK,WAAW,OAAO;GACzB,KAAK,SAAS;GAEd,IAAI,KAAK,UACP,KAAK,SAAS,WAAW,KAAK,KAAK;EAEvC;CACF;CAEA,IAAa,UAAO;EAClB,OAAO;CAET;CAEA,IAAa,QAAQ,OAAc;EACjC,KAAK,YAAY,UAAU;CAC7B;CAEA,IAAI,QAAK;EACP,OAAO,CAAC,KAAK;CACf;CAKA,IAAI,WAAQ;EACV,OAAO,KAAK,UAAS;CACvB;CAEA,IAAI,SAAS,OAAsB;EACjC,KAAK,UAAU,IAAI,KAAK;CAC1B;CACA,IAAI,QAAK;EACP,OAAO,KAAK;CACd;CAEA;CAEQ,SAAqB;CACZ,YAA6C,OAAO,QAAO,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAElE;CAEV,YACY,aACA,aAAwB;EAElC,MAAK;EAHK,KAAA,cAAA;EACA,KAAA,cAAA;EAIV,KAAK,eAAe,OAAO,qBAAqB,EAAE,UAAU,KAAI,CAAE;CACpE;CAEA,WAAQ;EACN,KAAK,WAAW,KAAK,UAAS;EAE9B,KAAK,YAAY,KAAK,KAAK;EAE3B,IAAI,KAAK,cAAc;GACrB,KAAK,YAAY,UAAU;GAE3B,KAAK,aACF,UAAS,CAAE,CACX,KAAK,KAAK,CAAC,CAAC,CAAC,CACb,WAAW,MAAU;IACpB,KAAK,YAAY,UAAU;GAC7B,CAAC;EACL;CACF;CAEU,YAAY,OAAU;EAC9B,KAAK,SAAS;EAEd,IAAI,KAAK,OACP,KAAK,UAAS;OAEd,KAAK,WAAU;CAEnB;CAEA,UAAU,cAAc,MAAI;EAC1B,iBAAgB;GACd,KAAK,WAAW;GAChB,KAAK,SAAS,OAAM;GAEpB,IAAI,aACF,KAAK,SAAS,WAAW,KAAK,KAAK;EAEvC,CAAC;CACH;CAEA,aAAU;EACR,KAAK,WAAW;EAChB,KAAK,SAAS,WAAW,KAAK,KAAK;EACnC,KAAK,SAAS,QAAO;CACvB;CAIU,SAAS,YAAe,CAAS;CAE3C,OAAI;EACF,KAAK,SAAS,KAAK,SAAS,YAAW,CAAE;EAEzC,IAAI,KAAK,SAAS,OAAO;GACvB,KAAK,SAAS,QAAO;GAErB,OAAO,KAAK,UAAS,CAAE,CAAC,KAAK,UAAU,KAAK,SAAS,OAAM,CAAE,CAAC;EAChE,OAAO;GACL,KAAK,SAAS,iBAAgB;GAC9B,OAAO,iBAAiB,IAAI,kBAAkB;IAAE,OAAO;KAAE,SAAS;KAAgB,QAAQ;IAAI;IAAI,QAAQ;GAAG,CAAE,CAAC;EAClH;CACF;CAlHoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA,EAAA,OAAA,GAAA,YAAA,GAAA,EAAA,OAAA,GAAA,YAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;GAAA,OAAA;EAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UADhB;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EADtC,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;EAExB,UAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,OAAA,CAAA,EAAA,MAAA,MAAA,CAAA;;;ACHH,IAAsB,oBAAtB,MAAsB,0BAA0B,SAAQ;CAM1C;CACA;CANZ,QAAQ;CACR;CACA;CAEA,YACY,OACA,YAAsB;EAEhC,MAAK;EAHK,KAAA,QAAA;EACA,KAAA,aAAA;EAIV,KAAK,MAAM,gBAAgB,OAAO,KAAK,MAAM,QAAQ;CACvD;CAEA,WAAQ;EACN,KAAK,YAAW;CAClB;CAEU,cAAW,CAErB;CAEU,YAAY,OAAa;EACjC,KAAK,QAAQ;EACb,KAAK,WAAW,eAAe,KAAK,KAAK,KAAK;CAChD;CAzBoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA,EAAA,OAAA,KAAA,eAAA,GAAA,EAAA,OAAA,WAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UADhB;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EADtC,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;ACK3B,IAAsB,uBAAtB,MAAsB,6BAA6B,kBAAiB;CA0CtD;CArCkD;CAI9C,QAAQ;CAEd,cAAc;CACd;CACA,QAA+B,CACvC;EAAE,IAAI;EAAW,OAAO;EAAwB,MAAM;CAAY,GAClE;EAAE,IAAI;EAAW,OAAO;EAAwB,MAAM;CAAY,CACnE;CAID,IAAoB,UAAO;EACzB,OAAO,MAAM;CACf;CAEA,IAAoB,QAAQ,OAAc;EACxC,MAAM,UAAU;EAChB,KAAK,YAAY,UAAU;CAC7B;CAEA,IAAc,cAAW;EACvB,OAAO,KAAK,cAAc,KAAK;CACjC;CAEA,IAAc,QAAK;EACjB,OAAO,KAAK,YAAY;CAC1B;CAIA,YACE,OACA,YACU,aAAwB;EAElC,MAAM,OAAO,UAAU;EAFb,KAAA,cAAA;CAGZ;CAEO,kBAAe;EACpB,KAAK,cAAa;CACpB;CAEgB,WAAQ;EACtB,KAAK,kBAAiB;EAEtB,MAAM,SAAQ;EAEd,KAAK,YAAY,eAAe,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,MAAU;GAClF,MAAM,KAAoB,KAAK,WAAU;GACzC,IAAI,MAAM,KAAK,aAAa,IAAI;IAC9B,KAAK,WAAW;IAChB,KAAK,WAAW,mBAAmB,GAAG,KAAK,IAAI,UAAU,GAAG,KAAK,IAAI,QAAQ,MAAM,CAAC,EAAC,GAAI,IAAI;GAC/F;GAEA,KAAK,YAAY,KAAK,oBAAmB,CAAE;EAC7C,CAAC;EAED,KAAK,QAAO;CACd;CAOmB,cAAW;EAC5B,MAAM,YAAW;EAEjB,MAAM,aAA8C,KAAK,MAAM,MAC5D,SAA8B,KAAK,OAAO,KAAK,UAAU;EAE5D,IAAI,YACF,WAAW,aAAa;CAE5B;CAEU,UAAO;EACf,KAAK,UAAU;EACf,KAAK,QAAQ;EACb,KAAK,YAAY,QAAQ;EAEzB,KAAK,UAAS,CAAE,CACb,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAC9B,WAAW,UAAS;GACnB,KAAK,UAAU;GACf,KAAK,YAAY,QAAQ;EAC3B,CAAC;CACL;CACU,oBAAiB;EACzB,MAAM,YAA2B,KAAK,MAAM,SAAS,SAAS,IAAI,IAAI;EACtE,KAAK,WAAW,YAAY,OAAO,SAAS,IAAI;EAEhD,MAAM,SAAwB,KAAK,MAAM,SAAS,SAAS,IAAI,MAAM;EACrE,IAAI,CAAC,UAAU,CAAC,KAAK,MAAM,MAAM,SAA8B,KAAK,OAAO,MAAM,GAC/E,KAAK,WAAW,KAAK,WAAW;OAEhC,KAAK,aAAa;CAEtB;CACU,WAAW,QAAe;EAClC,IAAI,CAAC,QACH,SAAS,KAAK;EAGhB,MAAM,aAA8C,KAAK,MAAM,MAC5D,SAA8B,KAAK,QAAQ,KAAK,cAAc,KAAK,YAAY;EAElF,IAAI,YACF,WAAW,aAAa;EAG1B,MAAM,UAA2C,KAAK,MAAM,MAAM,SAA8B,KAAK,OAAO,MAAM;EAClH,IAAI,SAAS;GACX,QAAQ,aAAa;GAErB,MAAM,cAAsB,WAAW,KAAK,cAAc,KAAK,IAAI;GACnE,IAAI,MAAc,KAAK;GACvB,IAAI,KAAK,cAAc,IAAI,SAAS,KAAK,UAAU,GACjD,MAAM,IAAI,QAAQ,IAAI,KAAK,cAAc,WAAW;QAEpD,OAAO;GAET,KAAK,WAAW,mBAAmB,IAAI,IAAI,EAAE,IAAG,CAAE,CAAC;GAGnD,KAAK,aAAa,QAAQ;EAK5B;EAEA,KAAK,cAAa;CACpB;CA9IoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAoB,MAAA;GAAA,EAAA,OAAA,KAAA,eAAA;GAAA,EAAA,OAAA,WAAA;GAAA,EAAA,OAAA,GAAA,YAAA;EAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAApB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAoB,cAAA;EAAA,UAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAAA,GAAA,iBAKZ,wBAAwB;GAAA,aAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UAN/B;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAoB,YAAA,CAAA;EADzC,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;;;;;EAMxB,MAAA;EAAU,MAAA,CAAA,iBAAiB,wBAAwB,CAAC;;;ACRvD,IAAsB,oBAAtB,MAAsB,0BAAsC,kBAAiB;CAqB/D;CAhBJ;CACA,eAAe;CAIvB,IAAc,kBAAe;EAC3B,OAAO,KAAK,eAAe;CAC7B;CAEA,IAAc,eAAY;EACxB,OAAO,KAAK;CACd;CAIA,YACY,iBACV,OACA,YAAsB;EAEtB,MAAM,OAAO,UAAU;EAJb,KAAA,kBAAA;EAOV,KAAK,UAAU;CACjB;CAEgB,WAAQ;EACtB,MAAM,SAAQ;EAEd,KAAK,gBAAgB,YAAY,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC7E,KAAK,UAAU;EACjB,CAAC;EAED,KAAK,gBAAgB,aAAa,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC9E,iBAAkB,KAAK,UAAU,KAAM;EACzC,CAAC;EAED,KAAK,gBAAgB,oBAAoB,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GACrF,KAAK,mBAAkB;EACzB,CAAC;CACH;CAUU,qBAAkB;EAC1B,KAAK,eAAe,KAAK,gBAAgB,gBAAgB;EAEzD,KAAK,gBAAgB;EACrB,IAAI,KAAK,iBAAiB,GACxB,KAAK,gBAA4B,KAAK,gBAAgB,WAAW,KAAK,gBAAgB,gBAAgB,EAAE;CAE5G;CA9DoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA;GAAA,EAAA,OAAA,GAAA,gBAAA;GAAA,EAAA,OAAA,KAAA,eAAA;GAAA,EAAA,OAAA,WAAA;EAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UADhB;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EADtC,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;;;;;ACC3B,IAAsB,cAAtB,MAAsB,oBAAgC,YAAW;CAKrD;CAEF;CACA,iBAAiB;CAIzB,IAAc,kBAAe;EAC3B,OAAO,KAAK,iBAAiB;CAC/B;CAEA,IAAc,eAAY;EACxB,OAAO,KAAK;CACd;CAIA,cAAA;EACE,MAAK;EAEL,KAAK,kBAAkB,OAAO,eAAe;CAC/C;CAEO,WAAQ;EACb,KAAK,gBAAgB,YAAY,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC7E,KAAK,UAAU;EACjB,CAAC;EAED,KAAK,gBAAgB,aAAa,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GAC9E,iBAAkB,KAAK,UAAU,KAAM;EACzC,CAAC;EAED,KAAK,gBAAgB,oBAAoB,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GACrF,KAAK,mBAAkB;EACzB,CAAC;CACH;CAUU,qBAAkB;EAC1B,KAAK,iBAAiB,KAAK,gBAAgB,gBAAgB;EAE3D,KAAK,gBAAgB;EACrB,IAAI,KAAK,mBAAmB,GAC1B,KAAK,gBAA4B,KAAK,gBAAgB,WAAW,KAAK,gBAAgB,gBAAgB,EAAE;CAE5G;CAzDoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAW,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAX,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAW,cAAA;EAAA,UAAA;EAAA,MAAA,EAAA,gBAAA,sBAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UAD8B;EAAE,UAAA;CAAA,CAAA;;AAC3C,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAW,YAAA,CAAA;EADhC,MAAA;EAAU,MAAA,CAAA;GAAE,MAAM,EAAE,OAAO,sBAAqB;GAAI,UAAU;EAAE,CAAE;;;;ACNnE,IAAsB,WAAtB,MAAsB,iBAA2C,YAAuB;CAK5E;CACA;CAOV,cAAA;EACE,MAAK;EAEL,KAAK,eAAe,OAAO,qBAAqB,EAAE,UAAU,KAAI,CAAE;EAClE,KAAK,gBAAgB,OAAO,0BAA0B,EAAE,UAAU,KAAI,CAAE;CAC1E;CAEgB,WAAQ;EACtB,MAAM,SAAQ;EAEd,IAAI,KAAK,cAAc,aAAa;GAClC,KAAK,gBAAgB,iBAAiB,KAAK,aAAa;GAExD,IAAI,CAAC,KAAK,gBAAgB,YACxB,KAAK,gBAAgB,QAAO;GAG9B,IAAI,KAAK,eACP,KAAK,cAAc,iBAAiB,KAAK,aAAa;EAE1D;CACF;CAlCoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAQ,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAR,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAQ,cAAA;EAAA,UAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UADP;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAQ,YAAA,CAAA;EAD7B,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;ACN3B,IAAsB,YAAtB,cAAwC,SAAQ,CAE/C;ACOD,IAAsB,yBAAtB,MAAsB,+BAA+B,UAAS;CAkBhD;CACA;CACA;CAnBF;CAEuB;CAEjC,IAAa,SAAS,OAAyB;EAC7C,IAAI,KAAK,cAAc,OAAO;GAC5B,KAAK,YAAY;GACjB,KAAK,gBAAgB,iBAAiB;GACtC,KAAK,mBAAmB,iBAAiB;EAC3C;CACF;CAEU,eAAe,IAAI,aAAY;CAEzC;CAEA,YACY,iBACA,oBACA,aAAwB;EAElC,MAAK;EAJK,KAAA,kBAAA;EACA,KAAA,qBAAA;EACA,KAAA,cAAA;CAGZ;CAEA,WAAQ;EACN,KAAK,OAAO,KAAK,UAAS;EAE1B,KAAK,mBAAmB,aAAa,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GACjF,KAAK,aAAa,KAAI;EACxB,CAAC;CACH;CAEA,SAAM;EACJ,KAAK,YAAY,YAAW;CAC9B;CAnCoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAsB,MAAA;GAAA,EAAA,OAAA,GAAA,gBAAA;GAAA,EAAA,OAAA,GAAA,mBAAA;GAAA,EAAA,OAAA,GAAA,YAAA;EAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAtB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAsB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,UAAA,WAAA;EAAA,SAAA,EAAA,cAAA,eAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAG/B;GAAoB,aAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UAJV;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAsB,YAAA,CAAA;EAD3C,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;;;;;;GAIxB,MAAA;GAAU,MAAA,CAAA,oBAAoB;;EAE9B,UAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAQA,cAAA,CAAA,EAAA,MAAA,OAAA,CAAA;;;ACPH,IAAsB,mBAAtB,MAAsB,yBAAuC,UAAS;CAEzB;CAE3B;CAEC,eAAkC,IAAI,aAAY;CAIzD;CACA;CACA;CACA;CACA;CACA;CACA,iBAAiB;CAO3B,cAAA;EACE,MAAK;EAEL,KAAK,kBAAkB,OAAO,eAAe;EAC7C,KAAK,eAAe,OAAO,qBAAqB,EAAE,UAAU,KAAI,CAAE;EAClE,KAAK,cAAc,OAAO,WAAW;EACrC,KAAK,cAAc,OAAO,WAAW;EACrC,KAAK,qBAAqB,OAAO,kBAAkB;CACrD;CAEO,WAAQ;EACb,KAAK,WAAW,KAAK,UAAS;EAC9B,KAAK,YAAY,eAAe,KAAK,QAAQ;EAE7C,KAAK,mBAAmB,aAAa,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAe;GACjF,KAAK,aAAa,KAAI;EACxB,CAAC;EAED,KAAK,eAAc;CACrB;CAOO,SAAM;EACX,IAAI,CAAC,KAAK,YAAY,OAAM,GAC1B,KAAK,eAAc;EAGrB,KAAK,YAAY,YAAW;CAC9B;CAMQ,iBAAc;EACpB,IAAI,WAA+B,KAAK,cAAc;EACtD,IAAI,KAAK,kBACP,WAAW,KAAK;EAGlB,IAAI,UAAU;GACZ,KAAK,gBAAgB,iBAAiB;GACtC,KAAK,mBAAmB,iBAAiB;EAC3C;CACF;CAvEoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAgB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAhB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAgB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,kBAAA,mBAAA;EAAA,SAAA,EAAA,cAAA,eAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAEzB;GAAoB,aAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UAHV;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EADrC,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;;GAGxB,MAAA;GAAU,MAAA,CAAA,oBAAoB;;EAE9B,kBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,cAAA,CAAA,EAAA,MAAA,OAAA,CAAA;;;ACdH,IAAsB,mBAAtB,MAAsB,yBAAyB,UAAS;CACrB;CAChB,eAAmC,IAAI,aAAY;CAEpE,SAAM;EACJ,KAAK,YAAY,YAAW;CAC9B;CANoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAgB,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAhB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAgB,cAAA;EAAA,UAAA;EAAA,SAAA,EAAA,cAAA,eAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WACzB;GAAoB,aAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UAFV;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EADrC,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;GAExB,MAAA;GAAU,MAAA,CAAA,oBAAoB;;EAC9B,cAAA,CAAA,EAAA,MAAA,OAAA,CAAA;;;ACAH,IAAsB,YAAtB,MAAsB,kBAAgC,UAAS;CAE/B;CAIpB,wBAAwB;CACxB;CACA;CACA;CACA;CACA,iBAAiB;CAEnB,kBAA+C,IAAI,QAAO;CAOlE,cAAA;EACE,MAAK;EAEL,KAAK,cAAc,OAAO,WAAW;EACrC,KAAK,cAAc,OAAO,WAAW;EAErC,KAAK,QAAQ,KAAK,gBAAgB,KAAK,WAAW,aAAiC,KAAK,SAAS,QAAQ,CAAC,CAAC;CAC7G;CAEO,WAAQ;EACb,KAAK,WAAW,KAAK,UAAS;EAC9B,KAAK,YAAY,eAAe,KAAK,QAAQ;EAE7C,KAAK,MAAM,KAAK,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,SAA6B;GAChF,KAAK,YAAY,QAAQ;GACzB,KAAK,YAAY,UAAU;GAC3B,KAAK,SAAS,WAAgB,IAAI;GAElC,IAAI,KAAK,uBACP,KAAK,YAAY,UAAS;EAE9B,CAAC;CACH;CAOO,OAAO,UAAiB;EAC7B,KAAK,YAAY,QAAQ;EACzB,KAAK,YAAY,UAAU;EAC3B,KAAK,SAAS,MAAK;EAEnB,IAAI,CAAC,KAAK,eAAe,OAAM,GAC7B,KAAK,gBAAgB,KAAK,QAAQ;OAElC,KAAK,YAAY,UAAS;EAE5B,KAAK,eAAe,YAAW;CACjC;CA5DoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAS,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAT,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAS,cAAA;EAAA,UAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAAA,CAAA,OAAA;GAAA,aAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UADR;EAAE,UAAA;CAAA,CAAA;;AACH,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAS,YAAA,CAAA;EAD9B,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,GAAE,CAAE;;;;EAGxB,MAAA;EAAU,MAAA,CAAA,OAAO"}