@taon-dev/ui 21.0.24 → 21.0.25

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 (54) hide show
  1. package/browser/fesm2022/ui-browser.mjs +1 -1
  2. package/browser/fesm2022/ui-browser.mjs.map +1 -1
  3. package/browser/package.json +1 -1
  4. package/browser/types/ui-browser.d.ts +1 -1
  5. package/browser-prod/fesm2022/ui-browser-prod.mjs +1 -1
  6. package/browser-prod/fesm2022/ui-browser-prod.mjs.map +1 -1
  7. package/browser-prod/package.json +1 -1
  8. package/browser-prod/types/ui-browser-prod.d.ts +1 -1
  9. package/full-dts/build-info._auto-generated_.d.ts +1 -1
  10. package/lib/build-info._auto-generated_.d.ts +1 -1
  11. package/lib/build-info._auto-generated_.js +1 -1
  12. package/lib/package.json +1 -1
  13. package/lib/taon-admin-layout/index.d.ts +1 -1
  14. package/lib/taon-admin-layout/index.js +2 -2
  15. package/lib/taon-admin-welcome/index.d.ts +1 -1
  16. package/lib/taon-admin-welcome/index.js +2 -2
  17. package/lib/taon-datatable/index.d.ts +1 -1
  18. package/lib/taon-datatable/index.js +2 -2
  19. package/lib/taon-draggable-button-panel/index.d.ts +1 -1
  20. package/lib/taon-draggable-button-panel/index.js +2 -2
  21. package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
  22. package/lib-esm/lib/build-info._auto-generated_.js +1 -1
  23. package/lib-esm/lib/taon-admin-layout/index.d.ts +1 -1
  24. package/lib-esm/lib/taon-admin-layout/index.js +1 -1
  25. package/lib-esm/lib/taon-admin-welcome/index.d.ts +1 -1
  26. package/lib-esm/lib/taon-admin-welcome/index.js +1 -1
  27. package/lib-esm/lib/taon-datatable/index.d.ts +1 -1
  28. package/lib-esm/lib/taon-datatable/index.js +1 -1
  29. package/lib-esm/lib/taon-draggable-button-panel/index.d.ts +1 -1
  30. package/lib-esm/lib/taon-draggable-button-panel/index.js +1 -1
  31. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  32. package/lib-prod/build-info._auto-generated_.js +1 -1
  33. package/lib-prod/package.json +1 -1
  34. package/lib-prod/taon-admin-layout/index.d.ts +1 -1
  35. package/lib-prod/taon-admin-layout/index.js +1 -1
  36. package/lib-prod/taon-admin-welcome/index.d.ts +1 -1
  37. package/lib-prod/taon-admin-welcome/index.js +1 -1
  38. package/lib-prod/taon-datatable/index.d.ts +1 -1
  39. package/lib-prod/taon-datatable/index.js +1 -1
  40. package/lib-prod/taon-draggable-button-panel/index.d.ts +1 -1
  41. package/lib-prod/taon-draggable-button-panel/index.js +1 -1
  42. package/package.json +1 -1
  43. package/ts-source/browser-code/build-info._auto-generated_.ts +1 -1
  44. package/ts-source/browser-code-prod/build-info._auto-generated_.ts +1 -1
  45. package/ts-source/websql-code/build-info._auto-generated_.ts +1 -1
  46. package/ts-source/websql-code-prod/build-info._auto-generated_.ts +1 -1
  47. package/websql/fesm2022/ui-websql.mjs +1 -1
  48. package/websql/fesm2022/ui-websql.mjs.map +1 -1
  49. package/websql/package.json +1 -1
  50. package/websql/types/ui-websql.d.ts +1 -1
  51. package/websql-prod/fesm2022/ui-websql-prod.mjs +1 -1
  52. package/websql-prod/fesm2022/ui-websql-prod.mjs.map +1 -1
  53. package/websql-prod/package.json +1 -1
  54. package/websql-prod/types/ui-websql-prod.d.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ui-websql.mjs","sources":["../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/migrations/migrations_index._auto-generated_.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/migrations/index.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/build-info._auto-generated_.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/my-organization-proj.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/start-cli.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/directives/taon-horizontal-wheel-scrolling.directive.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-layout.models.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-menu-context.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-page-tabs.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-page-tabs.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-layout.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-layout.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-base-admin-page.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-welcome/taon-admin-welcome.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-welcome/taon-admin-welcome.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-welcome/taon-admin-welcome.routes.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-error-toast.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-backoffice-notifications.service.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-confirm-dialog/taon-confirm-dialog.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-confirm-dialog/taon-confirm-dialog.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-datatable/taon-datatable.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-datatable/taon-datatable.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-datatable/taon-datatable.routes.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-detachable-dialog-content/taon-detached-window-content.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-draggable-button-panel/taon-draggable-button-panel.models.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-draggable-button-panel/taon-draggable-button-panel.routes.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-purchase-status/taon-purchase-status.dialog.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-under-construction/taon-under-construction.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-under-construction/taon-under-construction.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/index._auto-generated_.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/index.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/ui-websql.ts"],"sourcesContent":["// THIS FILE IS GENERATED - DO NOT MODIFY\n\n// THIS FILE IS GENERATED - DO NOT MODIFY\n\n// THIS FILE IS GENERATED - DO NOT MODIFY\n","//@ts-nocheck\nexport * from './migrations_index._auto-generated_';\n","// THIS FILE IS GENERATED - DO NOT MODIFY\n/**\n * Autogenerated by current cli tool\n */\nexport const BUILD_FRAMEWORK_CLI_NAME = 'tnp';\n/**\n * This value can be change in taon.jsonc (appId)\n */\nexport const APP_ID = 'com.domain.example.ui';\n/**\n * Autogenerated by current cli tool\n */\nexport const BUILD_BASE_HREF = '';\n/**\n * This value can be change in taon.jsonc (overrideNpmName)\n */\nexport const PROJECT_NPM_NAME = '@taon-dev/ui';\n/**\n * Taon version from you project taon.json\n */\nexport const CURRENT_PACKAGE_TAON_VERSION = 'v21';\n/**\n * Autogenerated by current cli tool. Use *tnp release* to bump version.\n */\nexport const CURRENT_PACKAGE_VERSION = '21.0.24';\n\n\n\n\n\n// THIS FILE IS GENERATED - DO NOT MODIFY\n ","import { Translation } from \"@taon-dev/i18n/websql\";\nimport { Taon } from \"taon/websql\";\n\nconst t = Translation.for('src/lib/my-organization-proj.ts', {\"src/lib/my-organization-proj.ts\":{\"en-US\":async () => (await import('./i18n/my-organization-proj.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/my-organization-proj.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/my-organization-proj.ts.de-DE.i18n.data')).default},\"src/lib/start-cli.ts\":{\"en-US\":async () => (await import('./i18n/start-cli.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/start-cli.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/start-cli.ts.de-DE.i18n.data')).default}} as any);\n\nexport function myOrgProj() {\n t.gettext('My Translated Company Name!')\n}\n","//#region tnp-helpers cli template\nimport { UtilsJson } from 'tnp-core/websql';\nimport { Helpers, BaseCommandLineFeature } from 'tnp-helpers/websql';\n/* */ \nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n//#endregion\n\nconst t = Translation.for('src/lib/start-cli.ts', {\"src/lib/my-organization-proj.ts\":{\"en-US\":async () => (await import('./i18n/my-organization-proj.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/my-organization-proj.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/my-organization-proj.ts.de-DE.i18n.data')).default},\"src/lib/start-cli.ts\":{\"en-US\":async () => (await import('./i18n/start-cli.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/start-cli.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/start-cli.ts.de-DE.i18n.data')).default}} as any);\n\n//#region CLI / global scope\n/**\n * This class is for handling global arguments. *\n * Cli engine will parse: hello:world:from:global:arg to helloWorldFromGlobalArg\n * (lower case, camel case) .. so you don't need to worry about misspelling\n * arguments\n */\nclass $Global extends BaseCommandLineFeature<{}> {\n /**\n * When you execute cli without arguments:`$ cli`\n */\n public _() {\n console.log(`Hello world from cli`);\n this._exit();\n }\n\n /**\n * When you execute: `$ cli hello:world:from:global:arg`\n * (or `$ cli helloWorldFromGlobalArg`)\n */\n helloWorldFromGlobalArg() {\n console.log('hello world from global argument!');\n this._exit(0);\n }\n}\n//#endregion\n\n//#region CLI / Version Scope\n/**\n *\n */\nclass $Version extends BaseCommandLineFeature<{\n anyCLIparamsHere: string;\n}> {\n /**\n * When you execute: `$ cli version`\n */\n public _() {\n console.log(`Hello world from version argument`);\n this._exit();\n }\n\n /**\n * When you execute: `$ cli version:getFromPackageJson`\n */\n public getFromPackageJson() {\n const ver = UtilsJson.getValue(\n this.project.pathFor('package.json'),\n 'version',\n {\n defaultValue: '<not defined>',\n },\n );\n console.log(`Version from packageJson ${ver}`);\n this._exit(0);\n }\n}\n//#endregion\n\n/**\n *\n * @param argsv process.argsv\n * @param filename needed if you want ipc communicaiton\n */\nexport async function startCli(\n argsv: string[],\n filename: string,\n): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n}\n\nexport default startCli;\n","//#region imports\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n inject,\n OnDestroy,\n} from '@angular/core';\n//#endregion\n\n@Directive({\n selector: '[taonHorizontalWheelScroll]',\n standalone: true,\n})\nexport class TaonHorizontalWheelScrollDirective\n implements AfterViewInit, OnDestroy\n{\n //#region fields\n\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n private wheelAccumulator = 0;\n\n /**\n * Amount of wheel movement required before triggering\n * Material's previous/next pagination.\n */\n private readonly wheelThreshold = 40;\n\n //#endregion\n\n //#region lifecycle\n\n ngAfterViewInit(): void {\n this.elementRef.nativeElement.addEventListener('wheel', this.onWheel, {\n passive: false,\n });\n }\n\n ngOnDestroy(): void {\n this.elementRef.nativeElement.removeEventListener('wheel', this.onWheel);\n }\n\n //#endregion\n\n //#region wheel\n\n private readonly onWheel = (event: WheelEvent): void => {\n const delta =\n Math.abs(event.deltaX) > Math.abs(event.deltaY)\n ? event.deltaX\n : event.deltaY;\n\n if (!delta) {\n return;\n }\n\n this.wheelAccumulator += delta;\n\n if (Math.abs(this.wheelAccumulator) < this.wheelThreshold) {\n return;\n }\n\n const direction = this.wheelAccumulator > 0 ? 'after' : 'before';\n\n this.wheelAccumulator = 0;\n\n // @ts-ignore\n const pagination = this.elementRef.nativeElement.querySelector<HTMLElement>(\n `.mat-mdc-tab-header-pagination-${direction}`,\n );\n\n if (!pagination) {\n return;\n }\n\n const disabled = pagination.classList.contains(\n 'mat-mdc-tab-header-pagination-disabled',\n );\n\n if (disabled) {\n return;\n }\n\n event.preventDefault();\n\n pagination.click();\n };\n\n //#endregion\n}\n","import type { Signal } from '@angular/core';\nimport type { MatIcon } from '@angular/material/icon'; // @browser\nimport { Route } from '@angular/router';\n\nexport interface TaonAdminRoute extends Route {\n /**\n * Used only by TaonAdminLayout to discover lazy navigation children.\n *\n * This loads route metadata, NOT page components.\n */\n loadAdminChildren?: () => Promise<TaonAdminRoutes>;\n}\n\nexport type TaonAdminRoutes = TaonAdminRoute[];\n\nexport interface TaonAdminMenuCallbacks<TContext = unknown> {\n isDisabled?: (params: { context: TContext }) => boolean;\n isDisabledTooltip?: (params: { context: TContext }) => string;\n isVisible?: (params: { context: TContext }) => boolean;\n}\n\nexport interface TaonAdminRouteOptions<\n TContext = unknown,\n> extends TaonAdminMenuCallbacks<TContext> {\n path: string;\n color?: string;\n loader: () => Promise<TaonAdminRoutes>;\n\n menuItem?: string | (() => string) | Signal<string>;\n\n //#region @browser\n icon?: MatIcon['fontIcon'];\n //#endregion\n\n expandable?: boolean;\n\n hideInNavigation?: boolean;\n}\n\nexport const TaonBaselineBackofficeOutletName = 'admin';\n\nexport function resolveTaonAdminMenuItem(\n menuItem: TaonAdminRouteOptions['menuItem'],\n): string | undefined {\n return typeof menuItem === 'function' ? menuItem() : menuItem;\n}\n\n//#region @browser\nexport function adminLazyRoute<TContext = unknown>(\n options: TaonAdminRouteOptions<TContext>,\n): TaonAdminRoute {\n const {\n path,\n loader,\n menuItem,\n icon,\n color,\n expandable,\n hideInNavigation,\n isDisabled,\n isDisabledTooltip,\n isVisible,\n } = options;\n\n return {\n path,\n\n data: {\n menuItem,\n color,\n icon,\n expandable,\n hideInNavigation,\n isDisabled,\n isDisabledTooltip,\n isVisible,\n },\n\n loadChildren: loader,\n loadAdminChildren: loader,\n };\n}\n//#endregion\n","import { Injectable, signal } from '@angular/core';\nimport { Route } from '@angular/router';\n\nimport { TaonAdminMenuCallbacks } from './taon-admin-layout.models';\n\n@Injectable()\nexport class TaonAdminMenuContext {\n readonly context = signal<unknown>(undefined);\n\n isVisible(route: Route): boolean {\n return (\n !route.data?.['hideInNavigation'] &&\n this.callbacks(route)?.isVisible?.({ context: this.context() }) !== false\n );\n }\n\n isDisabled(route: Route): boolean {\n return (\n this.callbacks(route)?.isDisabled?.({ context: this.context() }) === true\n );\n }\n\n disabledTooltip(route: Route): string {\n return this.isDisabled(route)\n ? (this.callbacks(route)?.isDisabledTooltip?.({\n context: this.context(),\n }) ?? '')\n : '';\n }\n\n private callbacks(route: Route): TaonAdminMenuCallbacks | undefined {\n // Angular Route.data erases the application's context type at the router boundary.\n return route.data as TaonAdminMenuCallbacks | undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n Input,\n OnInit,\n signal,\n} from '@angular/core';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NavigationEnd, Route, Router, Routes } from '@angular/router';\nimport { filter } from 'rxjs';\n\nimport {\n resolveTaonAdminMenuItem,\n TaonAdminRoute,\n} from './taon-admin-layout.models';\nimport { TaonAdminMenuContext } from './taon-admin-menu-context';\n\nexport interface TaonAdminTabLevel {\n level: number;\n routes: Routes;\n\n /**\n * URL segments before routes from this tab level.\n *\n * Example:\n *\n * ['main', 'session', 'providers']\n */\n baseSegments: string[];\n}\n\n@Component({\n selector: 'taon-admin-page-tabs',\n standalone: true,\n imports: [MatTabsModule, MatTooltipModule],\n templateUrl: './taon-admin-page-tabs.component.html',\n styleUrl: './taon-admin-page-tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaonAdminPageTabsComponent implements OnInit {\n protected readonly menuContext =\n inject(TaonAdminMenuContext, { optional: true }) ??\n new TaonAdminMenuContext();\n\n private _routes: Routes = [];\n\n @Input({ required: true })\n set routes(routes: Routes) {\n this._routes = routes.filter(f => !f.redirectTo);\n }\n\n get routes(): Routes {\n return this._routes;\n }\n\n @Input()\n basePath = '';\n\n /**\n * Undefined:\n * normal primary routing\n *\n * \"admin\":\n * auxiliary admin outlet\n */\n @Input()\n outlet?: string;\n\n protected readonly levels = signal<TaonAdminTabLevel[]>([]);\n\n constructor(private readonly router: Router) {}\n\n async ngOnInit(): Promise<void> {\n // console.log(this.routes);\n await this.refresh();\n\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(async () => {\n await this.refresh();\n });\n }\n\n // ===========================================================================\n // UI\n // ===========================================================================\n\n protected label(route: Route): string {\n return (\n resolveTaonAdminMenuItem(route.data?.['menuItem']) ??\n this.startCase(route.path ?? '')\n );\n }\n\n protected isActive(level: TaonAdminTabLevel, route: Route): boolean {\n if (!route.path) {\n return false;\n }\n\n const expected = [...level.baseSegments, route.path];\n\n const current = this.currentOutletSegments();\n\n if (current.length < expected.length) {\n return false;\n }\n\n return expected.every((segment, index) => current[index] === segment);\n }\n\n protected async tabClicked(\n level: TaonAdminTabLevel,\n route: Route,\n ): Promise<void> {\n if (\n !route.path ||\n !this.menuContext.isVisible(route) ||\n this.menuContext.isDisabled(route)\n ) {\n return;\n }\n\n await this.navigateTo([\n ...level.baseSegments.slice(this.basePathSegments.length),\n route.path,\n ]);\n }\n\n // ===========================================================================\n // NAVIGATION\n // ===========================================================================\n\n private outletBaseMatrixParams(): Record<string, string> {\n if (!this.outlet) {\n return {};\n }\n\n const tree = this.router.parseUrl(this.router.url);\n\n const outletGroup = tree.root.children[this.outlet];\n\n return {\n ...outletGroup?.segments[0]?.parameters,\n };\n }\n\n private async navigateTo(routeSegments: string[]): Promise<boolean> {\n const segments = [...this.basePathSegments, ...routeSegments];\n\n /**\n * Auxiliary / named outlet.\n *\n * Example:\n *\n * /products/42(admin:main/session/providers/settings)\n */\n if (this.outlet) {\n const [firstSegment, ...remainingSegments] = segments;\n\n if (!firstSegment) {\n return false;\n }\n\n const matrixParams = this.outletBaseMatrixParams();\n\n return this.router.navigate([\n {\n outlets: {\n [this.outlet]: [\n firstSegment,\n\n /**\n * Angular interprets an object following\n * a segment as matrix parameters.\n */\n matrixParams,\n\n ...remainingSegments,\n ],\n },\n },\n ]);\n }\n\n /**\n * Normal primary outlet.\n *\n * Example:\n *\n * /main/session/providers/settings\n */\n return this.router.navigate(['/', ...segments]);\n }\n\n // ===========================================================================\n // BUILD TAB LEVELS\n // ===========================================================================\n\n private async refresh(): Promise<void> {\n const current = this.currentOutletSegments();\n\n const base = this.basePathSegments;\n\n /**\n * Example:\n *\n * current:\n * main/session/providers/settings\n *\n * base:\n * main\n *\n * relative:\n * session/providers/settings\n */\n const relative = current.slice(base.length);\n\n const levels: TaonAdminTabLevel[] = [];\n\n await this.walk(this.routes, relative, base, 1, levels);\n\n /**\n * Levels:\n *\n * 1 -> aside expansion panel\n * 2 -> aside item\n * 3+ -> tabs\n */\n this.levels.set(levels.filter(level => level.level >= 3));\n }\n\n private async walk(\n routes: Routes,\n remainingUrl: string[],\n baseSegments: string[],\n level: number,\n result: TaonAdminTabLevel[],\n ): Promise<void> {\n /**\n * Important:\n *\n * Taon lazy route files commonly look like:\n *\n * [\n * {\n * path: '',\n * component: SomeContainer,\n * children: [...]\n * }\n * ]\n *\n * path:'' is structural and DOES NOT represent\n * another navigation level.\n */\n routes = this.unwrapEmptyPathRoutes(routes);\n\n const visibleRoutes = this.navigationRoutes(routes);\n\n /**\n * Level 3+ becomes tabs.\n */\n if (level >= 3 && visibleRoutes.length > 0) {\n result.push({\n level,\n routes: visibleRoutes,\n baseSegments,\n });\n }\n\n const currentSegment = remainingUrl[0];\n\n if (!currentSegment) {\n return;\n }\n\n const activeRoute = routes.find(route => route.path === currentSegment);\n\n if (!activeRoute) {\n return;\n }\n\n let children = await this.loadChildren(activeRoute);\n\n children = this.unwrapEmptyPathRoutes(children).filter(f => !!f.data);\n\n if (!children.length) {\n return;\n }\n\n await this.walk(\n children,\n remainingUrl.slice(1),\n [...baseSegments, currentSegment],\n level + 1,\n result,\n );\n }\n\n // ===========================================================================\n // LAZY ROUTES\n // ===========================================================================\n\n private async loadChildren(route: Route): Promise<Routes> {\n if (route.children) {\n return route.children;\n }\n\n const adminRoute = route as TaonAdminRoute;\n\n if (adminRoute.loadAdminChildren) {\n return await adminRoute.loadAdminChildren();\n }\n\n return [];\n }\n\n /**\n * Removes transparent path:'' containers.\n *\n * Example:\n *\n * [\n * {\n * path: '',\n * component: ProvidersComponent,\n * children: [\n * { path: 'info' },\n * { path: 'items' },\n * ],\n * },\n * ]\n *\n * becomes:\n *\n * [\n * { path: 'info' },\n * { path: 'items' },\n * ]\n */\n private unwrapEmptyPathRoutes(routes: Routes): Routes {\n const result: Routes = [];\n\n for (const route of routes) {\n if (route.path === '' && route.children) {\n result.push(...this.unwrapEmptyPathRoutes(route.children));\n\n continue;\n }\n\n result.push(route);\n }\n\n return result;\n }\n\n private navigationRoutes(routes: Routes): Routes {\n return routes.filter(\n route =>\n !!route.path &&\n route.redirectTo === undefined &&\n !route.data?.['hideInNavigation'],\n );\n }\n\n // ===========================================================================\n // CURRENT ROUTE\n // ===========================================================================\n\n private currentOutletSegments(): string[] {\n const tree = this.router.parseUrl(this.router.url);\n\n const outletName = this.outlet || 'primary';\n\n const group = tree.root.children[outletName];\n\n if (!group) {\n return [];\n }\n\n return group.segments.map(segment => segment.path);\n }\n\n private get basePathSegments(): string[] {\n return this.basePath.split('/').filter(Boolean);\n }\n\n // ===========================================================================\n // HELPERS\n // ===========================================================================\n\n private startCase(value: string): string {\n return value\n .replace(/[-_]+/g, ' ')\n .replace(/\\b\\w/g, char => char.toUpperCase());\n }\n}\n","@if (levels().length) {\n <div class=\"shrink-0 border-b border-gray-200 bg-white\">\n @for (level of levels(); track level.level) {\n <nav\n mat-tab-nav-bar\n [tabPanel]=\"tabPanel\">\n @for (route of level.routes; track route.path) {\n @if (menuContext.isVisible(route)) {\n <a\n mat-tab-link\n class=\"cursor-pointer\"\n [disabled]=\"menuContext.isDisabled(route)\"\n [class.admin-tab-disabled]=\"menuContext.isDisabled(route)\"\n [matTooltip]=\"menuContext.disabledTooltip(route)\"\n [active]=\"isActive(level, route)\"\n (click)=\"tabClicked(level, route)\">\n {{ label(route) }}\n </a>\n }\n }\n </nav>\n }\n </div>\n}\n\n<mat-tab-nav-panel #tabPanel> </mat-tab-nav-panel>\n","//#region imports\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n inject,\n Input,\n OnDestroy,\n OnInit,\n signal,\n} from '@angular/core';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n NavigationEnd,\n Route,\n Router,\n RouterLink,\n RouterOutlet,\n Routes,\n} from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { filter, Subscription } from 'rxjs';\nimport { Taon } from 'taon/websql';\n\nimport {\n resolveTaonAdminMenuItem,\n TaonAdminRoute,\n} from './taon-admin-layout.models';\nimport { TaonAdminMenuContext } from './taon-admin-menu-context';\nimport { TaonAdminPageTabsComponent } from './taon-admin-page-tabs.component';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-admin-layout/taon-admin-layout.component.ts', {\"src/lib/taon-admin-layout/taon-admin-layout.component.html\":{\"en-US\":async () => (await import('./i18n/taon-admin-layout.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-admin-layout.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-admin-layout.component.html.de-DE.i18n.data')).default},\"src/lib/taon-admin-layout/taon-admin-layout.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-admin-layout.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-admin-layout.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-admin-layout.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-admin-layout',\n standalone: true,\n imports: [\n CommonModule,\n RouterOutlet,\n RouterLink,\n\n MatExpansionModule,\n MatIconModule,\n MatTooltipModule,\n\n TaonAdminPageTabsComponent,\n ],\n templateUrl: './taon-admin-layout.component.html',\n styleUrls: ['./taon-admin-layout.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaonAdminLayoutComponent\n implements OnInit, AfterViewInit, OnDestroy\n{\n //#region fields and getters\n\n protected readonly t = t.for(this);\n\n protected readonly menuContext =\n inject(TaonAdminMenuContext, { optional: true }) ??\n new TaonAdminMenuContext();\n\n private _routes: Routes = [];\n\n @Input({ required: true })\n set routes(routes: Routes) {\n this._routes = routes.filter(f => !f.redirectTo);\n }\n\n get routes(): Routes {\n return this._routes;\n }\n\n @Input()\n basePath = '';\n\n @Input()\n outlet!: string;\n\n protected readonly layoutWidth = signal<number | undefined>(undefined);\n\n protected readonly layoutHeight = signal<number | undefined>(undefined);\n\n protected readonly level2Routes = signal(new Map<Route, Routes>());\n\n protected readonly currentUrl = signal('');\n\n protected readonly loadingRoutes = signal(new Set<Route>());\n\n protected readonly asideOpened = signal(window.innerWidth >= 768);\n\n private resizeObserver?: ResizeObserver;\n\n private mutationObserver?: MutationObserver;\n\n private resizing = false;\n\n private resizeStartX = 0;\n\n private resizeStartY = 0;\n\n private resizeStartWidth = 0;\n\n private resizeStartHeight = 0;\n\n readonly sub = new Subscription();\n\n private readonly cdr = inject(ChangeDetectorRef);\n\n private readonly minDialogWidth = 500;\n\n private readonly minDialogHeight = 350;\n\n protected get isDialogMode(): boolean {\n const windowElement = this.getWindowElement();\n\n if (!windowElement) {\n return false;\n }\n\n return !windowElement.classList.contains('taon-fullscreen');\n }\n\n private get basePathSegments(): string[] {\n return this.basePath.split('/').filter(Boolean);\n }\n\n protected get normalizedBasePath(): string {\n const value = '/' + this.basePath.split('/').filter(Boolean).join('/');\n\n return value === '/' ? '/' : value;\n }\n\n //#endregion\n\n //#region constructor\n\n constructor(\n private readonly router: Router,\n private readonly hostElement: ElementRef<HTMLElement>,\n ) {}\n\n //#endregion\n\n //#region lifecycle\n\n async ngOnInit(): Promise<void> {\n await this.loadCurrentLevel1Route();\n\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(async () => {\n await this.loadCurrentLevel1Route();\n });\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n const windowElement = this.getWindowElement();\n // console.log('[windowElement] should not be undefined', windowElement);\n this.updateLayoutSize();\n this.startWindowObservers();\n\n // TODO @LAST issue with reloading transation without setOneLanguagePernament\n // this.sub.add(\n // this.t.isLoadingLang$.subscribe(() => {\n // setTimeout(() => {\n // console.log('RERENDER! after timeout', Translation.manager);\n // this.cdr.detectChanges();\n // }, 1000);\n // }),\n // );\n }, 500); // TODO QUICK_FIX\n }\n\n // private waitForWindowElement(\n // callback: (windowElement: HTMLElement) => void,\n // ): void {\n // const check = () => {\n // console.log('Waiting for window element...');\n // const windowElement = this.getWindowElement();\n\n // if (windowElement) {\n // callback(windowElement);\n // return;\n // }\n\n // requestAnimationFrame(check);\n // };\n\n // check();\n // }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n\n window.removeEventListener('pointermove', this.resize);\n\n window.removeEventListener('pointerup', this.stopResize);\n }\n\n //#endregion\n\n //#region window / layout\n\n private getWindowElement(): HTMLElement | undefined {\n return (\n document.querySelector<HTMLElement>('.taon-window') ??\n document.querySelector<HTMLElement>('.taon-window-full') ??\n undefined\n );\n }\n\n private getDraggablePanelElement(): HTMLElement | undefined {\n return (\n document.querySelector<HTMLElement>('.taon-draggable-panel') ?? undefined\n );\n }\n\n private startWindowObservers(): void {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n\n const host = this.hostElement.nativeElement;\n\n const windowElement = this.getWindowElement();\n\n // console.log('WINDOW', this.getWindowElement());\n\n // console.log('PANEL', this.getDraggablePanelElement());\n\n // ================================================================\n // SIZE CHANGES\n // ================================================================\n\n const observedElement = windowElement ?? host.parentElement;\n\n if (observedElement) {\n this.resizeObserver = new ResizeObserver(() => {\n this.updateLayoutSize();\n });\n\n this.resizeObserver.observe(observedElement);\n }\n\n // ================================================================\n // DIALOG <-> FULLSCREEN STATE CHANGES\n // ================================================================\n\n if (windowElement) {\n this.mutationObserver = new MutationObserver(mutations => {\n const classChanged = mutations.some(\n mutation =>\n mutation.type === 'attributes' &&\n mutation.attributeName === 'class',\n );\n // console.log('Class changed:', classChanged);\n\n if (!classChanged) {\n return;\n }\n\n this.windowModeChanged(windowElement);\n });\n\n this.mutationObserver.observe(windowElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n }\n }\n\n private windowModeChanged(windowElement: HTMLElement): void {\n const fullscreen = windowElement.classList.contains('taon-fullscreen');\n\n if (fullscreen) {\n this.clearWindowResize(windowElement);\n }\n\n requestAnimationFrame(() => {\n this.updateLayoutSize();\n });\n }\n\n private clearWindowResize(windowElement: HTMLElement): void {\n windowElement.style.removeProperty('width');\n\n windowElement.style.removeProperty('height');\n }\n\n @HostListener('window:resize')\n protected windowResized(): void {\n this.updateLayoutSize();\n }\n\n private updateLayoutSize(): void {\n const host = this.hostElement.nativeElement;\n\n const hostRect = host.getBoundingClientRect();\n\n const windowElement = this.getWindowElement();\n\n const dialogMode =\n !!windowElement && !windowElement.classList.contains('taon-fullscreen');\n\n // ================================================================\n // NORMAL / FULLSCREEN\n // ================================================================\n\n if (!dialogMode) {\n this.layoutWidth.set(Math.floor(hostRect.width));\n\n this.layoutHeight.set(\n Math.max(0, Math.floor(window.innerHeight - hostRect.top)),\n );\n\n return;\n }\n\n // ================================================================\n // DIALOG\n // ================================================================\n\n const windowRect = windowElement.getBoundingClientRect();\n\n this.layoutWidth.set(\n Math.max(0, Math.floor(windowRect.right - hostRect.left)),\n );\n\n this.layoutHeight.set(\n Math.max(0, Math.floor(windowRect.bottom - hostRect.top)),\n );\n }\n\n //#endregion\n\n //#region dialog resizing\n\n protected startResize(event: PointerEvent): void {\n if (!this.isDialogMode) {\n return;\n }\n\n const windowElement = this.getWindowElement();\n\n if (!windowElement) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const windowRect = windowElement.getBoundingClientRect();\n\n this.resizing = true;\n\n this.resizeStartX = event.clientX;\n\n this.resizeStartY = event.clientY;\n\n this.resizeStartWidth = windowRect.width;\n\n this.resizeStartHeight = windowRect.height;\n\n window.addEventListener('pointermove', this.resize);\n\n window.addEventListener('pointerup', this.stopResize);\n }\n\n private readonly resize = (event: PointerEvent): void => {\n if (!this.resizing) {\n return;\n }\n\n const windowElement = this.getWindowElement();\n\n if (!windowElement) {\n return;\n }\n\n const windowRect = windowElement.getBoundingClientRect();\n\n const deltaX = event.clientX - this.resizeStartX;\n\n const deltaY = event.clientY - this.resizeStartY;\n\n const maxWidth = window.innerWidth - windowRect.left;\n\n const maxHeight = window.innerHeight - windowRect.top;\n\n const width = Math.min(\n maxWidth,\n Math.max(this.minDialogWidth, this.resizeStartWidth + deltaX),\n );\n\n const height = Math.min(\n maxHeight,\n Math.max(this.minDialogHeight, this.resizeStartHeight + deltaY),\n );\n\n windowElement.style.width = `${width}px`;\n\n windowElement.style.height = `${height}px`;\n };\n\n private readonly stopResize = (): void => {\n if (!this.resizing) {\n return;\n }\n\n this.resizing = false;\n\n window.removeEventListener('pointermove', this.resize);\n\n window.removeEventListener('pointerup', this.stopResize);\n };\n\n //#endregion\n\n //#region aside\n\n protected toggleAside(): void {\n this.asideOpened.update(opened => !opened);\n }\n\n protected closeAside(): void {\n this.asideOpened.set(false);\n }\n\n private closeAsideOnMobile(): void {\n if (window.innerWidth < 768) {\n this.closeAside();\n }\n }\n\n //#endregion\n\n //#region level 1\n\n protected async level1Clicked(route: Route): Promise<void> {\n if (\n !route.path ||\n !this.menuContext.isVisible(route) ||\n this.menuContext.isDisabled(route)\n ) {\n return;\n }\n\n await this.navigateTo([route.path]);\n\n await this.ensureLevel2Loaded(route);\n\n if (!this.isExpandable(route)) {\n this.closeAsideOnMobile();\n }\n }\n\n protected async panelExpanded(\n route: Route,\n expanded: boolean,\n ): Promise<void> {\n if (\n !expanded ||\n !this.menuContext.isVisible(route) ||\n this.menuContext.isDisabled(route)\n ) {\n return;\n }\n\n await this.ensureLevel2Loaded(route);\n }\n\n protected isLevel1Active(route: Route): boolean {\n if (!route.path) {\n return false;\n }\n\n return this.isPathActive([route.path]);\n }\n\n //#endregion\n\n //#region level 2\n\n protected async level2Clicked(level1: Route, level2: Route): Promise<void> {\n if (\n !level1.path ||\n !level2.path ||\n !this.menuContext.isVisible(level1) ||\n this.menuContext.isDisabled(level1) ||\n !this.menuContext.isVisible(level2) ||\n this.menuContext.isDisabled(level2)\n ) {\n return;\n }\n\n await this.navigateTo([level1.path, level2.path]);\n\n this.closeAsideOnMobile();\n }\n\n protected getLevel2Routes(route: Route): Routes {\n return this.level2Routes().get(route) ?? [];\n }\n\n protected isLevel2Active(level1: Route, level2: Route): boolean {\n if (!level1.path || !level2.path) {\n return false;\n }\n\n return this.isPathActive([level1.path, level2.path]);\n }\n\n protected level2Link(level1: Route, level2: Route): string[] {\n return [this.normalizedBasePath, level1.path!, level2.path!];\n }\n\n //#endregion\n\n //#region navigation\n\n private outletBaseMatrixParams(): Record<string, string> {\n if (!this.outlet) {\n return {};\n }\n\n const tree = this.router.parseUrl(this.router.url);\n\n const outletGroup = tree.root.children[this.outlet];\n\n return {\n ...outletGroup?.segments[0]?.parameters,\n };\n }\n\n private async navigateTo(routeSegments: string[]): Promise<boolean> {\n const segments = [...this.basePathSegments, ...routeSegments];\n\n if (this.outlet) {\n const [firstSegment, ...remainingSegments] = segments;\n\n if (!firstSegment) {\n return false;\n }\n\n const matrixParams = this.outletBaseMatrixParams();\n\n return this.router.navigate([\n {\n outlets: {\n [this.outlet]: [firstSegment, matrixParams, ...remainingSegments],\n },\n },\n ]);\n }\n\n return this.router.navigate(['/', ...segments]);\n }\n\n //#endregion\n\n //#region route loading\n\n private async ensureLevel2Loaded(level1: Route): Promise<void> {\n if (this.level2Routes().has(level1)) {\n return;\n }\n\n if (this.loadingRoutes().has(level1)) {\n return;\n }\n\n this.setLoading(level1, true);\n\n try {\n const lazyRoutes = await this.loadRouteChildren(level1);\n\n const level2 = this.unwrapEmptyPathRoutes(lazyRoutes);\n\n const map = new Map(this.level2Routes());\n\n map.set(level1, level2);\n\n this.level2Routes.set(map);\n } finally {\n this.setLoading(level1, false);\n }\n }\n\n private async loadRouteChildren(route: Route): Promise<Routes> {\n if (route.children) {\n return route.children;\n }\n\n const adminRoute = route as TaonAdminRoute;\n\n if (adminRoute.loadAdminChildren) {\n return await adminRoute.loadAdminChildren();\n }\n\n return [];\n }\n\n private unwrapEmptyPathRoutes(routes: Routes): Routes {\n const result: Routes = [];\n\n for (const route of routes) {\n if (route.path === '' && route.children) {\n result.push(...this.unwrapEmptyPathRoutes(route.children));\n\n continue;\n }\n\n if (route.redirectTo !== undefined || route.data?.['hideInNavigation']) {\n continue;\n }\n\n result.push(route);\n }\n\n return result;\n }\n\n //#endregion\n\n //#region direct url support\n\n private async loadCurrentLevel1Route(): Promise<void> {\n const relativeSegments = this.currentRelativeSegments();\n\n const level1Path = relativeSegments[0];\n\n if (!level1Path) {\n return;\n }\n\n const level1 = this.routes.find(route => route.path === level1Path);\n\n if (level1) {\n await this.ensureLevel2Loaded(level1);\n }\n }\n\n //#endregion\n\n //#region helpers\n\n protected label(route: Route): string {\n return (\n resolveTaonAdminMenuItem(route.data?.['menuItem']) ??\n this.startCase(route.path ?? '')\n );\n }\n\n protected color(route: Route): string {\n return route.data?.['color'];\n }\n\n protected icon(route: Route): string | undefined {\n return route.data?.['icon'];\n }\n\n protected isLoading(route: Route): boolean {\n return this.loadingRoutes().has(route);\n }\n\n protected isExpandable(route: Route): boolean {\n return route.data?.['expandable'] !== false;\n }\n\n private isPathActive(routeSegments: string[]): boolean {\n const current = this.currentRelativeSegments();\n\n if (current.length < routeSegments.length) {\n return false;\n }\n\n return routeSegments.every((segment, index) => current[index] === segment);\n }\n\n private currentRelativeSegments(): string[] {\n const current = this.currentOutletSegments();\n\n return current.slice(this.basePathSegments.length);\n }\n\n private currentOutletSegments(): string[] {\n const tree = this.router.parseUrl(this.router.url);\n\n const outletName = this.outlet || 'primary';\n\n const group = tree.root.children[outletName];\n\n if (!group) {\n return [];\n }\n\n return group.segments.map(segment => segment.path);\n }\n\n private setLoading(route: Route, loading: boolean): void {\n const set = new Set(this.loadingRoutes());\n\n if (loading) {\n set.add(route);\n } else {\n set.delete(route);\n }\n\n this.loadingRoutes.set(set);\n }\n\n private startCase(value: string): string {\n return value\n .replace(/[-_]+/g, ' ')\n .replace(/\\b\\w/g, char => char.toUpperCase());\n }\n\n //#endregion\n}\n","<div\n #layout\n class=\"admin-layout\"\n [class.admin-layout-dialog]=\"isDialogMode\"\n [style.width.px]=\"layoutWidth() || null\"\n [style.height.px]=\"layoutHeight() || null\">\n <!-- ============================================================= -->\n <!-- HEADER -->\n <!-- ============================================================= -->\n\n <header class=\"admin-header\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.aria-label]=\"t.gettext('Toggle admin menu')\"\n class=\"admin-menu-button\"\n (click)=\"toggleAside()\">\n <mat-icon>menu</mat-icon>\n </button>\n\n <div class=\"admin-header-content\">\n <ng-content select=\"[header]\" />\n </div>\n </header>\n\n <!-- ============================================================= -->\n <!-- BODY -->\n <!-- ============================================================= -->\n\n <div class=\"admin-body\">\n <!-- =========================================================== -->\n <!-- MOBILE BACKDROP -->\n <!-- =========================================================== -->\n\n @if (asideOpened()) {\n <div\n class=\"admin-aside-backdrop\"\n (click)=\"closeAside()\"></div>\n }\n\n <!-- =========================================================== -->\n <!-- ASIDE -->\n <!-- =========================================================== -->\n\n <aside\n class=\"admin-aside\"\n [class.admin-aside-open]=\"asideOpened()\">\n <!-- ========================================================= -->\n <!-- SCROLLABLE ASIDE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-aside-content\">\n <mat-accordion class=\"admin-menu\">\n @for (level1 of routes; track level1.path) {\n @if (menuContext.isVisible(level1)) {\n @if (isExpandable(level1)) {\n <mat-expansion-panel\n [disabled]=\"menuContext.isDisabled(level1)\"\n [expanded]=\"\n isLevel1Active(level1) && !menuContext.isDisabled(level1)\n \"\n (expandedChange)=\"panelExpanded(level1, $event)\">\n <mat-expansion-panel-header\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n (click)=\"level1Clicked(level1)\">\n <mat-panel-title>\n <div class=\"admin-menu-item\">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [class.font-semibold]=\"isLevel1Active(level1)\"\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"admin-level2\">\n @if (isLoading(level1)) {\n <div class=\"admin-loading\">{{ t.gettext('Loading...') }}</div>\n } @else {\n @for (\n level2 of getLevel2Routes(level1);\n track level2.path\n ) {\n @if (menuContext.isVisible(level2)) {\n <a\n class=\"admin-level2-item\"\n role=\"button\"\n [attr.tabindex]=\"\n menuContext.isDisabled(level2) ? -1 : 0\n \"\n [attr.aria-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level2)\"\n [class.admin-level2-item-active]=\"\n isLevel2Active(level1, level2)\n \"\n (click)=\"level2Clicked(level1, level2)\"\n (keydown.enter)=\"level2Clicked(level1, level2)\"\n (keydown.space)=\"\n $event.preventDefault();\n level2Clicked(level1, level2)\n \">\n @if (icon(level2)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ icon(level2) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ label(level2) }}\n </span>\n </a>\n }\n }\n }\n </div>\n </mat-expansion-panel>\n } @else {\n <a\n class=\"admin-level1-item\"\n role=\"button\"\n [attr.tabindex]=\"menuContext.isDisabled(level1) ? -1 : 0\"\n [attr.aria-disabled]=\"menuContext.isDisabled(level1)\"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n [class.admin-level1-item-active]=\"isLevel1Active(level1)\"\n (click)=\"level1Clicked(level1)\"\n (keydown.enter)=\"level1Clicked(level1)\"\n (keydown.space)=\"\n $event.preventDefault(); level1Clicked(level1)\n \">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </a>\n }\n }\n }\n </mat-accordion>\n </div>\n\n <!-- ========================================================= -->\n <!-- ASIDE FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-aside-footer\">\n <ng-content select=\"[asideFooter]\" />\n </footer>\n </aside>\n\n <!-- =========================================================== -->\n <!-- MAIN -->\n <!-- =========================================================== -->\n\n <main class=\"admin-main\">\n <!-- ========================================================= -->\n <!-- LEVEL 3+ TABS -->\n <!-- ========================================================= -->\n\n <taon-admin-page-tabs\n class=\"admin-tabs\"\n [routes]=\"routes\"\n [basePath]=\"basePath\"\n [outlet]=\"outlet\" />\n\n <!-- ========================================================= -->\n <!-- SCROLLABLE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-content\">\n <router-outlet />\n </div>\n\n <!-- ========================================================= -->\n <!-- CONTENT FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-content-footer\">\n <ng-content select=\"[contentFooter]\" />\n </footer>\n </main>\n </div>\n\n <!-- ============================================================= -->\n <!-- DIALOG RESIZE HANDLE -->\n <!-- ============================================================= -->\n\n @if (isDialogMode) {\n <div\n class=\"admin-resize-handle\"\n (pointerdown)=\"startResize($event)\"></div>\n }\n</div>\n","import { Component, ViewChild } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n template: '',\n})\nexport abstract class TaonBaseAdminLayoutPage {\n @ViewChild(RouterOutlet)\n routerOutlet!: RouterOutlet;\n\n get hasActiveChildRoute(): boolean {\n return this.routerOutlet?.isActivated ?? false;\n }\n}\n","//#region imports\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-admin-welcome/taon-admin-welcome.component.ts', {\"src/lib/taon-admin-welcome/taon-admin-welcome.component.html\":{\"en-US\":async () => (await import('./i18n/taon-admin-welcome.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-admin-welcome.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-admin-welcome.component.html.de-DE.i18n.data')).default},\"src/lib/taon-admin-welcome/taon-admin-welcome.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-admin-welcome.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-admin-welcome.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-admin-welcome.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'app-taon-admin-welcome',\n templateUrl: './taon-admin-welcome.component.html',\n styleUrls: ['./taon-admin-welcome.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, RouterOutlet],\n})\nexport class TaonAdminWelcomeComponent {\n t = t.for(this);\n}\n","<!-- <router-outlet></router-outlet> -->\n<p>\n {{ t.gettext('Welcome to Taon Admin') }}\n</p>\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { adminLazyRoute } from '../index';\n//#endregion\n\nexport const TaonAdminWelcomeRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./taon-admin-welcome.component').then(m => m.TaonAdminWelcomeComponent),\n\n // children: [\n // adminLazyRoute({\n // path: 'dashboard',\n // menuItem: 'Dashboard',\n // icon: 'dashboard',\n // expandable: false,\n // loader: () =>\n // import('./anothermodule.routes').then(m => m.DashboardRoutes),\n // }),\n // ],\n },\n];\n\n/**\n * By default exporting TaonAdminWelcomeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonAdminWelcomeRoutes;","//#region imports\nimport { Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.ts', {\"src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.html\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.html.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-toast.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-toast.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-toast.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-toast.component.ts.de-DE.i18n.data')).default}} as any);\n\nexport interface TaonErrorDetailsDialogData {\n message: string;\n details: string;\n}\n\ntype TaonEditor = 'vscode' | 'vscodium';\n\ninterface TaonStackTraceLine {\n text: string;\n file?: string;\n line?: number;\n column?: number;\n}\n\n@Component({\n selector: 'taon-error-details-dialog',\n standalone: true,\n imports: [MatDialogModule, MatButtonModule, MatButtonToggleModule],\n templateUrl: './taon-error-details-dialog.component.html',\n styleUrls: ['./taon-error-details-dialog.component.scss'],\n})\nexport class TaonErrorDetailsDialogComponent {\n //#region injections\n readonly t = t.for(this);\n\n readonly data = inject<TaonErrorDetailsDialogData>(MAT_DIALOG_DATA);\n //#endregion\n\n //#region constants\n private readonly editorStorageKey = 'taon-error-details-editor';\n //#endregion\n\n //#region state\n editor: TaonEditor = this.loadEditor();\n\n readonly stackLines = this.parseStackTrace(this.data.details);\n //#endregion\n\n //#region editor\n setEditor(editor: TaonEditor): void {\n this.editor = editor;\n\n localStorage.setItem(this.editorStorageKey, editor);\n }\n\n private loadEditor(): TaonEditor {\n const editor = localStorage.getItem(this.editorStorageKey);\n\n if (editor === 'vscode' || editor === 'vscodium') {\n return editor;\n }\n\n return 'vscode';\n }\n //#endregion\n\n //#region stack trace\n private parseStackTrace(stack: string): TaonStackTraceLine[] {\n return stack\n .split('\\n')\n .map(text => text.trimEnd())\n .filter(text => text.trim().length > 0)\n .map(text => this.parseStackTraceLine(text));\n }\n\n private parseStackTraceLine(text: string): TaonStackTraceLine {\n /**\n * Matches:\n *\n * /Users/test/file.ts:10:20\n *\n * C:\\projects\\test\\file.ts:10:20\n *\n * at something (/Users/test/file.ts:10:20)\n */\n const match = text.match(/((?:[A-Za-z]:[\\\\/]|\\/)[^()\\n]+?):(\\d+):(\\d+)/);\n\n if (!match) {\n return {\n text,\n };\n }\n\n return {\n text,\n file: match[1],\n line: Number(match[2]),\n column: Number(match[3]),\n };\n }\n //#endregion\n\n //#region open editor\n openStackLine(stackLine: TaonStackTraceLine): void {\n if (!stackLine.file || !stackLine.line) {\n return;\n }\n\n const url = this.createEditorUrl(\n stackLine.file,\n stackLine.line,\n stackLine.column,\n );\n\n window.location.href = url;\n }\n\n private createEditorUrl(file: string, line: number, column?: number): string {\n const protocol = this.editor === 'vscodium' ? 'vscodium' : 'vscode';\n\n const location = [file, line, column]\n .filter(value => value !== undefined)\n .join(':');\n\n return `${protocol}://file${location}`;\n }\n //#endregion\n}\n","<h2 mat-dialog-title>{{ t.gettext('Error details') }}</h2>\n\n<mat-dialog-content>\n <div class=\"error-message\">\n {{ data.message }}\n </div>\n\n <div class=\"editor-selector\">\n <span class=\"editor-selector-label\">{{ t.gettext('I am using editor:') }}</span>\n\n <mat-button-toggle-group\n [value]=\"editor\"\n (change)=\"setEditor($event.value)\"\n [attr.aria-label]=\"t.gettext('Code editor')\">\n <mat-button-toggle value=\"vscode\"> VS Code </mat-button-toggle>\n\n <mat-button-toggle value=\"vscodium\"> VSCodium </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <pre\n class=\"error-details\"><code>@for (stackLine of stackLines; track $index) {\n@if (stackLine.file) {<a\n class=\"stack-link\"\n [title]=\"\n t.gettext('Open [[ file ]]:[[ line ]]:[[ column ]]', {\n file: stackLine.file,\n line: stackLine.line,\n column: stackLine.column,\n })\n \"\n (click)=\"openStackLine(stackLine)\">{{ stackLine.text }}</a>} @else {{{ stackLine.text }}}{{ '\\n' }}\n}</code></pre>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button\n mat-button\n mat-dialog-close>\n {{ t.gettext('Close') }}\n </button>\n</mat-dialog-actions>\n","import { Component, inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { HotToastRef } from '@ngneat/hot-toast';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n\nimport { TaonErrorDetailsDialogComponent } from './taon-error-details-dialog.component';\n\nconst t = Translation.for('src/lib/taon-backoffice-notifications/taon-error-toast.component.ts', {\"src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.html\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.html.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-toast.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-toast.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-toast.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-toast.component.ts.de-DE.i18n.data')).default}} as any);\n\nexport interface TaonErrorToastData {\n title: string;\n details: string;\n}\n\n@Component({\n selector: 'taon-error-toast',\n standalone: true,\n template: `\n <div\n class=\"taon-error-toast\"\n (click)=\"showDetails()\">\n <div>{{ data.title }}</div>\n\n <small>{{ t.gettext('Click for details') }}</small>\n </div>\n `,\n styles: [\n `\n .taon-error-toast {\n cursor: pointer;\n }\n\n small {\n display: block;\n margin-top: 4px;\n opacity: 0.7;\n }\n `,\n ],\n})\nexport class TaonErrorToastComponent {\n readonly t = t.for(this);\n\n private readonly toastRef =\n inject<HotToastRef<TaonErrorToastData>>(HotToastRef);\n\n private readonly dialog = inject(MatDialog);\n\n readonly data = this.toastRef.data;\n\n showDetails(): void {\n this.dialog.open(TaonErrorDetailsDialogComponent, {\n width: '800px',\n maxWidth: '95vw',\n data: {\n message: this.data.title,\n details: this.data.details,\n },\n });\n\n this.toastRef.close();\n }\n}\n","//#region imports\nimport { inject, Injectable } from '@angular/core';\nimport { HotToastService } from '@ngneat/hot-toast';\n\nimport {\n TaonNotificationInput,\n TaonNotificationOptions,\n} from './taon-backoffice-notifications.models';\nimport {\n TaonErrorToastComponent,\n TaonErrorToastData,\n} from './taon-error-toast.component';\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TaonBackofficeNotificationsService {\n //#region injections\n private readonly toast = inject(HotToastService);\n //#endregion\n\n constructor() {\n this.toast.defaultConfig.dismissible = true;\n }\n\n //#region private methods\n private normalize(input: TaonNotificationInput): TaonNotificationOptions {\n return typeof input === 'string' ? { title: input } : input;\n }\n //#endregion\n\n //#region notifications\n success(input: TaonNotificationInput) {\n const { title } = this.normalize(input);\n\n return this.toast.success(title);\n }\n\n error(input: TaonNotificationInput) {\n const { title, details } = this.normalize(input);\n\n // Normal error - exactly as before\n if (!details) {\n return this.toast.error(title);\n }\n\n // Error with clickable details\n return this.toast.error<TaonErrorToastData>(TaonErrorToastComponent, {\n data: {\n title,\n details,\n },\n });\n }\n\n warn(input: TaonNotificationInput) {\n const { title } = this.normalize(input);\n\n return this.toast.warning(title);\n }\n\n info(input: TaonNotificationInput) {\n const { title } = this.normalize(input);\n\n return this.toast.info(title);\n }\n //#endregion\n}\n","//#region imports\nimport { Component, DestroyRef, inject, Input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport {\n HttpResponseError,\n Resource,\n RestErrorResponseWrapper,\n} from 'ng2-rest/websql';\nimport { getHttpStatus, Taon, TaonAdminService } from 'taon/websql';\nimport { _ } from 'tnp-core/websql';\n\nimport { TaonBackofficeNotificationsService } from './taon-backoffice-notifications.service';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts', {\"src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.html\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.html.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-toast.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-toast.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-toast.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-toast.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-backoffice-notifications',\n standalone: true,\n templateUrl: './taon-backoffice-notifications.component.html',\n styleUrls: ['./taon-backoffice-notifications.component.scss'],\n})\nexport class TaonBackofficeNotificationsComponent {\n //#region injections\n t = t.for(this);\n\n private readonly notification = inject(TaonBackofficeNotificationsService);\n\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly taonAdminService = inject(TaonAdminService);\n\n @Input() filter: (\n err: HttpResponseError<RestErrorResponseWrapper>,\n ) => HttpResponseError<RestErrorResponseWrapper>;\n\n private readonly shownNotifications = new Set<string>();\n\n private showErrorNotification(title: string, details?: string): void {\n const key = JSON.stringify([title, details]);\n\n if (this.shownNotifications.has(key)) {\n return;\n }\n\n this.shownNotifications.add(key);\n\n this.notification.error({\n title,\n details,\n });\n }\n\n //#endregion\n\n //#region constructor\n constructor() {\n Resource.listenErrors\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((error: HttpResponseError<RestErrorResponseWrapper>) => {\n if (_.isFunction(this.filter)) {\n error = this.filter(error);\n }\n\n const jsonMsg = error?.body?.json;\n\n if (!jsonMsg?.message) {\n console.log({ error });\n }\n\n const statusCode = jsonMsg.status ?? error.statusCode;\n\n const code = jsonMsg?.code || getHttpStatus(statusCode);\n if (this.taonAdminService.shouldSkipShowingError(code as any)) {\n console.log(\n `[@taon-dev/sudo] Skipping notificaiton for message \"${jsonMsg.message}\" (code=${statusCode})`,\n );\n } else {\n const title =\n t.translate(jsonMsg.message) || t.gettext('Unknown error');\n\n const details = jsonMsg?.details;\n\n this.showErrorNotification(title, details);\n }\n });\n }\n //#endregion\n}\n","<!-- <p>\n notyfications works!\n</p> -->\n","import { Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n\nexport interface TaonConfirmDialogData {\n title: string;\n message?: string;\n confirmText?: string;\n cancelText?: string;\n}\n\nconst t = Translation.for('src/lib/taon-confirm-dialog/taon-confirm-dialog.component.ts', {\"src/lib/taon-confirm-dialog/taon-confirm-dialog.component.html\":{\"en-US\":async () => (await import('./i18n/taon-confirm-dialog.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-confirm-dialog.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-confirm-dialog.component.html.de-DE.i18n.data')).default},\"src/lib/taon-confirm-dialog/taon-confirm-dialog.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-confirm-dialog.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-confirm-dialog.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-confirm-dialog.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-confirm-dialog',\n standalone: true,\n imports: [MatDialogModule, MatButtonModule],\n templateUrl: './taon-confirm-dialog.component.html',\n})\nexport class TaonConfirmDialogComponent {\n readonly t = t.for(this);\n\n readonly data = inject<TaonConfirmDialogData>(MAT_DIALOG_DATA);\n\n private readonly dialogRef = inject(MatDialogRef<TaonConfirmDialogComponent>);\n\n cancel(): void {\n this.dialogRef.close(false);\n }\n\n confirm(): void {\n this.dialogRef.close(true);\n }\n}\n","<div\n class=\"flex min-w-[320px] max-w-[560px] flex-col gap-6 p-6 text-gray-900 dark:text-gray-100 sm:p-7\">\n <!-- Header -->\n <h2 class=\"m-0 text-xl leading-snug font-medium sm:text-2xl\">\n {{ data.title }}\n </h2>\n\n <!-- Message -->\n @if (data.message) {\n <p\n class=\"m-0 whitespace-pre-line text-base leading-relaxed text-gray-600 dark:text-gray-300 sm:text-lg\">\n {{ data.message }}\n </p>\n }\n\n <!-- Actions -->\n <div class=\"flex flex-wrap items-center justify-end gap-3\">\n <button\n mat-button\n type=\"button\"\n (click)=\"cancel()\">\n {{ data.cancelText || t.gettext('Cancel') }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n class=\"!rounded-full !px-6\"\n (click)=\"confirm()\">\n {{ data.confirmText || t.gettext('OK') }}\n </button>\n </div>\n</div>\n","//#region imports\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MtxGridColumn, MtxGridModule } from '@ng-matero/extensions/grid';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { getDefaultModel } from 'ng2-rest/websql';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n catchError,\n debounceTime,\n distinctUntilChanged,\n finalize,\n from,\n map,\n of,\n startWith,\n switchMap,\n tap,\n} from 'rxjs';\nimport {\n Symbols as TaonSymbols,\n TaonBaseCrudController,\n TaonBaseEntity,\n TaonPaginationSort,\n TaonPaginationQuery,\n ClassHelpers,\n Taon,\n} from 'taon/websql';\nimport { _, json5 } from 'tnp-core/websql';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-datatable/taon-datatable.component.ts', {\"src/lib/taon-datatable/taon-datatable.component.html\":{\"en-US\":async () => (await import('./i18n/taon-datatable.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-datatable.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-datatable.component.html.de-DE.i18n.data')).default},\"src/lib/taon-datatable/taon-datatable.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-datatable.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-datatable.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-datatable.component.ts.de-DE.i18n.data')).default}} as any);\n\nconst defaultColumns: MtxGridColumn[] = [\n {\n header: t.gettext('ID'),\n field: 'id',\n },\n {\n header: t.gettext('NAME'),\n field: 'name',\n },\n];\n\ntype SearchMode = 'simple' | 'advanced';\n\n@Component({\n selector: 'taon-datatable',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatPaginatorModule,\n MatSelectModule,\n\n MtxGridModule,\n ],\n templateUrl: './taon-datatable.component.html',\n styleUrls: ['./taon-datatable.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaonDatatableComponent implements OnInit {\n //#region fields & getters\n readonly t = t.for(this);\n\n private readonly cdr = inject(ChangeDetectorRef);\n\n private readonly destroyRef = inject(DestroyRef);\n\n //#region inputs\n\n @Input()\n pageNumber = 1;\n\n @Input()\n pageSize = 10;\n\n @Input()\n pageSizeOptions: number[] = [5, 10, 20, 50, 100];\n\n noResultText = this.t.gettext('No records found');\n\n @Input()\n allowedColumns: string[] = [];\n\n @Input()\n expansionTemplate?: TemplateRef<any>;\n\n @Input()\n entityCrudController?: TaonBaseCrudController<any>;\n\n @Input()\n columns: MtxGridColumn[] = defaultColumns;\n\n @Input()\n hideSearch = false;\n\n @Input()\n hideAddButton = false;\n\n @Input()\n safe = false;\n\n @Input()\n searchMode: SearchMode = 'advanced';\n\n /**\n * Optional custom backend pagination method.\n */\n @Input()\n callQueryMethod?: string;\n\n private _data?: any[];\n\n @Input()\n set data(value: any[] | undefined | null) {\n this._data = value ?? undefined;\n\n if (this._data) {\n this.pageNumber = 1;\n this.reload();\n }\n }\n\n get data(): any[] | undefined {\n return this._data;\n }\n\n get offlineMode(): boolean {\n return this.data !== undefined;\n }\n\n //#endregion\n\n //#region outputs\n\n @Output()\n readonly expansionChange = new EventEmitter<any>();\n\n @Output()\n readonly addingItem = new EventEmitter<void>();\n\n //#endregion\n\n //#region fields\n\n rows: any[] = [];\n\n totalElements = 0;\n\n isLoading = false;\n\n expandable = false;\n\n @Input() showPaginator: boolean;\n\n advancedSearchOpened = false;\n\n searchValue = '';\n\n columnFilters: Record<string, string> = {};\n\n sort?: TaonPaginationSort;\n\n private readonly reload$ = new BehaviorSubject<void>(undefined);\n\n private readonly searchChange$ = new Subject<string>();\n\n readonly data$: Observable<any[]> = this.reload$.pipe(\n switchMap(() => this.loadData()),\n );\n\n expandedRows = new Set<any>();\n\n //#endregion\n\n //#region getters\n\n get entity(): typeof TaonBaseEntity | undefined {\n return this.entityCrudController?.entityClassResolveFn();\n }\n\n get filterableColumns(): MtxGridColumn[] {\n return this.columns.filter(column => Boolean(column.field));\n }\n\n //#endregion\n\n //#endregion\n\n //#region expansion\n onExpansionChange(event: any) {\n // console.log(event);\n // adapt this depending on exact MtxGrid event shape\n if (event.expanded) {\n this.expandedRows.add(event.data);\n } else {\n this.expandedRows.delete(event.data);\n }\n\n this.expansionChange.emit(event);\n }\n\n isExpanded(row: any): boolean {\n return this.expandedRows.has(row);\n }\n\n //#endregion\n\n //#region hooks\n\n ngOnInit(): void {\n this.prepareColumns();\n // console.log({ columns: this.columns });\n this.expandable = Boolean(this.expansionTemplate);\n\n this.showPaginator = _.isBoolean(this.showPaginator)\n ? this.showPaginator\n : Boolean(this.entity) || this.offlineMode;\n\n this.searchChange$\n .pipe(\n debounceTime(400),\n distinctUntilChanged(),\n tap(search => {\n this.searchValue = search;\n this.pageNumber = 1;\n this.reload();\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n\n this.data$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(rows => {\n this.rows = rows;\n this.cdr.markForCheck();\n });\n }\n\n //#endregion\n\n //#region search\n\n searchChanged(value: string): void {\n this.searchChange$.next(value);\n }\n\n clearSearch(): void {\n this.searchValue = '';\n this.columnFilters = {};\n this.pageNumber = 1;\n\n this.reload();\n }\n\n applyAdvancedFilters(): void {\n this.pageNumber = 1;\n this.reload();\n }\n\n toggleAdvancedSearch(): void {\n this.advancedSearchOpened = !this.advancedSearchOpened;\n }\n\n //#endregion\n\n //#region pagination\n\n getNextPage(event: PageEvent): void {\n this.pageNumber = event.pageIndex + 1;\n\n this.pageSize = event.pageSize;\n\n this.reload();\n }\n\n //#endregion\n\n //#region sorting\n\n sortChanged(event: any): void {\n const field = event?.active ?? event?.field;\n\n const direction = event?.direction ?? '';\n\n this.sort = {\n field,\n direction,\n };\n\n this.pageNumber = 1;\n\n this.reload();\n }\n\n //#endregion\n\n //#region data\n\n reload(): void {\n this.reload$.next();\n }\n\n private getFieldValue(row: any, field: string): unknown {\n return field.split('.').reduce((value, key) => value?.[key], row);\n }\n\n private loadOfflineData(): any[] {\n let rows = [...(this.data ?? [])];\n\n //#region global search\n\n const search = this.searchValue.trim().toLowerCase();\n\n if (search) {\n rows = rows.filter(row =>\n this.columns.some(column => {\n if (!column.field) {\n return false;\n }\n\n const value = this.getFieldValue(row, String(column.field));\n\n return String(value ?? '')\n .toLowerCase()\n .includes(search);\n }),\n );\n }\n\n //#endregion\n\n //#region column filters\n\n const filters = this.cleanFilters(this.columnFilters);\n\n for (const [field, filterValue] of Object.entries(filters)) {\n const normalizedFilter = filterValue.toLowerCase();\n\n rows = rows.filter(row => {\n const value = this.getFieldValue(row, field);\n\n return String(value ?? '')\n .toLowerCase()\n .includes(normalizedFilter);\n });\n }\n\n //#endregion\n\n //#region sorting\n\n if (this.sort?.field && this.sort.direction) {\n const field = String(this.sort.field);\n const direction = this.sort.direction === 'desc' ? -1 : 1;\n\n rows.sort((a, b) => {\n const aValue = this.getFieldValue(a, field);\n const bValue = this.getFieldValue(b, field);\n\n if (aValue === bValue) {\n return 0;\n }\n\n if (aValue === undefined || aValue === null) {\n return -1 * direction;\n }\n\n if (bValue === undefined || bValue === null) {\n return 1 * direction;\n }\n\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return (aValue - bValue) * direction;\n }\n\n return (\n String(aValue).localeCompare(String(bValue), undefined, {\n numeric: true,\n sensitivity: 'base',\n }) * direction\n );\n });\n }\n\n //#endregion\n\n //#region pagination\n\n this.totalElements = rows.length;\n\n const start = (this.pageNumber - 1) * this.pageSize;\n const end = start + this.pageSize;\n\n return this.prepareRows(rows.slice(start, end));\n\n //#endregion\n }\n\n private loadData(): Observable<any[]> {\n if (this.offlineMode) {\n return of(this.loadOfflineData());\n }\n\n if (!this.entity || !this.entityCrudController) {\n this.totalElements = 0;\n return of([]);\n }\n\n this.isLoading = true;\n this.cdr.markForCheck();\n\n const query: TaonPaginationQuery = {\n pageNumber: this.pageNumber,\n pageSize: this.pageSize,\n search: this.searchValue,\n filters: this.cleanFilters(this.columnFilters),\n sort: this.sort,\n callQueryMethod: this.callQueryMethod as any,\n };\n\n //#region handle info when not allowed method on controller level\n\n if (!this.safe && !this.entityCrudController.paginationQuery(query)) {\n throw new Error(\n `Please enable paginationQuery() method in your\n controller ${ClassHelpers.getName(this.entityCrudController)}\n\n @Controller({ allowedMethods: ['paginationQuery'] })\n class ${ClassHelpers.getName(this.entityCrudController)} ..\n `,\n );\n }\n\n if (this.safe && !this.entityCrudController.paginationQuerySafe(query)) {\n throw new Error(\n `Please enable paginationQuerySafe() method in your controller\n ${ClassHelpers.getName(this.entityCrudController)}\n\n @Controller({ allowedMethods: ['paginationQuerySafe'] })\n class ${ClassHelpers.getName(this.entityCrudController)} ..\n `,\n );\n }\n\n //#endregion\n\n return from(\n (this.safe\n ? this.entityCrudController.paginationQuerySafe\n : this.entityCrudController.paginationQuery)(query).request()\n .observable,\n ).pipe(\n tap(response => {\n this.totalElements =\n Number(response.headers.get(TaonSymbols.old.X_TOTAL_COUNT)) || 0;\n }),\n\n map(response => this.prepareRows(response.body.json)),\n\n catchError(error => {\n console.error(\n `[taon-datatable] Unable to load data from ` +\n `${ClassHelpers.getName(this.entityCrudController)} ${\n this.safe ? 'paginationQuerySafe' : 'paginationQuery'\n }`,\n error,\n );\n\n return of([]);\n }),\n\n finalize(() => {\n this.isLoading = false;\n this.cdr.markForCheck();\n }),\n );\n }\n\n //#endregion\n\n //#region helpers\n\n private cleanFilters(\n filters: Record<string, string>,\n ): Record<string, string> {\n return Object.fromEntries(\n Object.entries(filters)\n .filter(\n ([, value]) =>\n value !== undefined &&\n value !== null &&\n String(value).trim() !== '',\n )\n .map(([key, value]) => [key, String(value).trim()]),\n );\n }\n\n private prepareRows(rows: any[]): any[] {\n return rows.map(row => {\n // const result = {\n // ...row,\n // };\n\n // for (const key of Object.keys(result)) {\n // if (_.isObject(result[key])) {\n // result[key] = json5.stringify(result[key]);\n // }\n // }\n\n return row;\n });\n }\n\n private prepareColumns(): void {\n const entityClass = this.entity;\n\n if (!entityClass) {\n return;\n }\n\n const usingDefaultColumns = _.isEqual(this.columns, defaultColumns);\n\n if (!usingDefaultColumns) {\n return;\n }\n\n try {\n const props = Object.keys(getDefaultModel(entityClass as Function) || {});\n\n let columns = props\n .filter(prop =>\n this.allowedColumns.length > 0\n ? this.allowedColumns.includes(prop)\n : true,\n )\n .map(\n prop =>\n ({\n header: _.upperCase(prop),\n field: prop,\n }) as MtxGridColumn,\n );\n\n const extra = this.allowedColumns.filter(field => !props.includes(field));\n\n columns = [\n ...columns,\n ...extra.map(\n field =>\n ({\n header: _.upperCase(field),\n field,\n }) as MtxGridColumn,\n ),\n ];\n\n this.columns = columns;\n } catch (error) {\n console.error('[taon-datatable] Unable to generate columns', error);\n }\n }\n\n //#endregion\n}\n","<div class=\"flex w-full flex-col gap-3\">\n <!-- #region toolbar -->\n @if (!hideSearch) {\n <div\n class=\"flex w-full flex-col gap-2 rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-900 md:flex-row md:items-center\">\n <!-- global search -->\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"min-w-0 flex-1\">\n <mat-icon matPrefix> search </mat-icon>\n\n <input\n matInput\n [placeholder]=\"t.gettext('Search...')\"\n [value]=\"searchValue\"\n (input)=\"searchChanged($any($event.target).value)\" />\n\n @if (searchValue) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n\n <!-- advanced search -->\n @if (searchMode === 'advanced') {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"toggleAdvancedSearch()\">\n <mat-icon> tune </mat-icon>\n\n {{ t.gettext('Filters') }}\n\n @if (advancedSearchOpened) {\n <mat-icon> expand_less </mat-icon>\n } @else {\n <mat-icon> expand_more </mat-icon>\n }\n </button>\n }\n\n <!-- refresh -->\n <button\n mat-icon-button\n type=\"button\"\n [title]=\"t.gettext('Refresh')\"\n (click)=\"reload()\">\n <mat-icon> refresh </mat-icon>\n </button>\n\n <!-- add -->\n @if (!hideAddButton) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"addingItem.emit()\">\n <mat-icon> add </mat-icon>\n\n {{ t.gettext('Add') }}\n </button>\n }\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region advanced filters -->\n @if (!hideSearch && searchMode === 'advanced' && advancedSearchOpened) {\n <div\n class=\"grid grid-cols-1 gap-3 rounded-lg border border-gray-200 bg-gray-50 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n @for (column of filterableColumns; track column.field) {\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"w-full\">\n <mat-label>\n {{ column.header }}\n </mat-label>\n\n <input\n matInput\n [(ngModel)]=\"columnFilters[$any(column.field)]\"\n (keyup.enter)=\"applyAdvancedFilters()\" />\n </mat-form-field>\n }\n\n <div\n class=\"flex items-center justify-end gap-2 md:col-span-2 lg:col-span-3 xl:col-span-4\">\n <button\n mat-button\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon> filter_alt_off </mat-icon>\n\n {{ t.gettext('Clear') }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"applyAdvancedFilters()\">\n <mat-icon> filter_alt </mat-icon>\n\n {{ t.gettext('Apply filters') }}\n </button>\n </div>\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region grid -->\n <div\n class=\"relative min-h-[250px] overflow-hidden rounded-lg border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900\">\n @if (isLoading) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/60 backdrop-blur-[1px] dark:bg-gray-900/60\">\n <div\n class=\"flex items-center gap-2 rounded-md bg-white px-4 py-2 shadow dark:bg-gray-800\">\n <mat-icon class=\"animate-spin\"> refresh </mat-icon>\n\n {{ t.gettext('Loading...') }}\n </div>\n </div>\n }\n\n <mtx-grid\n [data]=\"rows\"\n [columns]=\"columns\"\n [expandable]=\"expandable\"\n [expansionTemplate]=\"lazyExpansionTemplate\"\n [length]=\"totalElements\"\n [pageOnFront]=\"false\"\n [pageIndex]=\"pageNumber - 1\"\n [pageSize]=\"pageSize\"\n [noResultText]=\"noResultText\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showPaginator]=\"showPaginator\"\n (expansionChange)=\"onExpansionChange($event)\"\n (page)=\"getNextPage($event)\"\n (sortChange)=\"sortChanged($event)\">\n </mtx-grid>\n\n <ng-template\n #lazyExpansionTemplate\n let-row>\n @if (isExpanded(row)) {\n <ng-container\n [ngTemplateOutlet]=\"expansionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\">\n </ng-container>\n }\n </ng-template>\n </div>\n <!-- #endregion -->\n</div>\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { adminLazyRoute } from '../index';\n//#endregion\n\nexport const TaonDatatableRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./taon-datatable.component').then(m => m.TaonDatatableComponent),\n\n children: [\n // adminLazyRoute({\n // path: 'dashboard',\n // menuItem: 'Dashboard',\n // icon: 'dashboard',\n // expandable: false,\n // loader: () =>\n // import('./anothermodule.routes').then(m => m.DashboardRoutes),\n // }),\n ],\n },\n];\n\n/**\n * By default exporting TaonDatatableRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonDatatableRoutes;","//#region imports\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n ElementRef,\n EnvironmentInjector,\n Injectable,\n InjectionToken,\n Injector,\n Input,\n OnDestroy,\n Type,\n ViewChild,\n createComponent,\n inject,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n ActivatedRoute,\n ActivatedRouteSnapshot,\n Params,\n Router,\n} from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { BehaviorSubject } from 'rxjs';\nimport { Taon } from 'taon/websql';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-detachable-dialog-content/taon-detached-window-content.component.ts', {\"src/lib/taon-detachable-dialog-content/taon-detached-window-content.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-detached-window-content.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-detached-window-content.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-detached-window-content.component.ts.de-DE.i18n.data')).default}} as any);\n\n//#region tokens\nexport const TAON_IS_DETACHED_WINDOW = new InjectionToken<boolean>(\n 'TAON_IS_DETACHED_WINDOW',\n {\n factory: () => false,\n },\n);\n//#endregion\n\n//#region models\nexport interface TaonDetachedRouteState {\n url: string;\n\n params: Params;\n\n queryParams: Params;\n\n fragment: string | null;\n\n data: Record<string, any>;\n}\n\nexport interface TaonDetachedWindow {\n id: string;\n\n title: string;\n\n component: Type<any>;\n\n routeState: TaonDetachedRouteState;\n\n /**\n * Current stacking order of the window.\n *\n * Higher value = window is closer to the user.\n */\n zIndex: number;\n\n componentRef?: ComponentRef<any>;\n}\n//#endregion\n\n//#region helpers\nfunction cloneObject<T extends Record<string, any>>(value: T | undefined): T {\n return {\n ...(value || {}),\n } as T;\n}\n\nfunction createDetachedActivatedRoute(\n state: TaonDetachedRouteState,\n): ActivatedRoute {\n const params$ = new BehaviorSubject<Params>(cloneObject(state.params));\n\n const queryParams$ = new BehaviorSubject<Params>(\n cloneObject(state.queryParams),\n );\n\n const fragment$ = new BehaviorSubject<string | null>(state.fragment);\n\n const data$ = new BehaviorSubject<Record<string, any>>(\n cloneObject(state.data),\n );\n\n const snapshot = {\n params: cloneObject(state.params),\n\n queryParams: cloneObject(state.queryParams),\n\n fragment: state.fragment,\n\n data: cloneObject(state.data),\n\n paramMap: undefined,\n\n queryParamMap: undefined,\n } as unknown as ActivatedRouteSnapshot;\n\n return {\n snapshot,\n\n params: params$.asObservable(),\n\n queryParams: queryParams$.asObservable(),\n\n fragment: fragment$.asObservable(),\n\n data: data$.asObservable(),\n } as unknown as ActivatedRoute;\n}\n//#endregion\n\n//#region detached windows service\n@Injectable({\n providedIn: 'root',\n})\nexport class TaonDetachedWindowsService {\n //#region fields\n\n /**\n * Base z-index for all detached windows.\n */\n private readonly baseZIndex = 10000;\n\n /**\n * Monotonically increasing focus counter.\n *\n * Every time a window receives focus it gets the next value.\n */\n private zIndexCounter = this.baseZIndex;\n\n readonly windows = signal<TaonDetachedWindow[]>([]);\n\n //#endregion\n\n //#region open\n open(options: {\n title: string;\n component: Type<any>;\n routeState: TaonDetachedRouteState;\n }): string {\n const id =\n typeof crypto !== 'undefined' && crypto.randomUUID\n ? crypto.randomUUID()\n : `taon-window-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n\n const zIndex = ++this.zIndexCounter;\n\n this.windows.update(windows => [\n ...windows,\n {\n id,\n\n title: options.title,\n\n component: options.component,\n\n routeState: options.routeState,\n\n zIndex,\n },\n ]);\n\n return id;\n }\n //#endregion\n\n //#region focus\n focus(id: string): void {\n const windows = this.windows();\n\n const windowToFocus = windows.find(window => window.id === id);\n\n if (!windowToFocus) {\n return;\n }\n\n /**\n * Don't create a new signal value if this window\n * is already the top-most window.\n */\n const highestZIndex = Math.max(...windows.map(window => window.zIndex));\n\n if (windowToFocus.zIndex === highestZIndex) {\n return;\n }\n\n const zIndex = ++this.zIndexCounter;\n\n this.windows.update(currentWindows =>\n currentWindows.map(window =>\n window.id === id\n ? {\n ...window,\n zIndex,\n }\n : window,\n ),\n );\n }\n //#endregion\n\n //#region close\n close(id: string): void {\n const detachedWindow = this.windows().find(current => current.id === id);\n\n if (detachedWindow?.componentRef) {\n detachedWindow.componentRef.destroy();\n }\n\n this.windows.update(windows =>\n windows.filter(current => current.id !== id),\n );\n }\n //#endregion\n\n //#region register component ref\n registerComponentRef(id: string, componentRef: ComponentRef<any>): void {\n this.windows.update(windows =>\n windows.map(window =>\n window.id === id\n ? {\n ...window,\n componentRef,\n }\n : window,\n ),\n );\n }\n //#endregion\n}\n//#endregion\n\n//#region detached window\n@Component({\n selector: 'taon-detached-window',\n standalone: true,\n imports: [\n CommonModule,\n CdkDrag,\n CdkDragHandle,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host {\n display: block;\n }\n\n .taon-detached-window {\n position: absolute;\n\n top: 80px;\n left: 80px;\n\n width: min(900px, calc(100vw - 80px));\n height: min(700px, calc(100vh - 80px));\n\n min-width: 320px;\n min-height: 200px;\n\n display: flex;\n flex-direction: column;\n\n background: var(--mat-sys-surface, white);\n\n color: var(--mat-sys-on-surface, black);\n\n border: 1px solid var(--mat-sys-outline-variant, #ccc);\n\n border-radius: 8px;\n\n box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2);\n\n overflow: hidden;\n\n resize: both;\n }\n\n .taon-detached-window-header {\n height: 40px;\n\n flex: 0 0 40px;\n\n display: flex;\n align-items: center;\n\n padding-left: 12px;\n\n border-bottom: 1px solid var(--mat-sys-outline-variant, #ccc);\n\n user-select: none;\n }\n\n .taon-detached-window-drag-handle {\n flex: 1;\n\n height: 100%;\n\n display: flex;\n align-items: center;\n\n cursor: move;\n\n overflow: hidden;\n }\n\n .taon-detached-window-title {\n overflow: hidden;\n\n white-space: nowrap;\n\n text-overflow: ellipsis;\n\n font-weight: 500;\n }\n\n .taon-detached-window-actions {\n display: flex;\n\n align-items: center;\n\n padding-right: 4px;\n }\n\n .taon-detached-window-body {\n flex: 1;\n\n min-height: 0;\n\n overflow: auto;\n }\n\n .taon-detached-window-component-host {\n display: block;\n\n min-height: 100%;\n }\n `,\n ],\n template: `\n <div\n class=\"taon-detached-window\"\n cdkDrag\n [style.z-index]=\"window.zIndex\"\n (pointerdown)=\"focus()\">\n <header class=\"taon-detached-window-header\">\n <div\n class=\"taon-detached-window-drag-handle\"\n cdkDragHandle>\n <span class=\"taon-detached-window-title\">\n {{ window.title }}\n </span>\n </div>\n\n <div class=\"taon-detached-window-actions\">\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Close\"\n (click)=\"close()\">\n <mat-icon> close </mat-icon>\n </button>\n </div>\n </header>\n\n <main class=\"taon-detached-window-body\">\n <div\n #componentHost\n class=\"taon-detached-window-component-host\"></div>\n </main>\n </div>\n `,\n})\nexport class TaonDetachedWindowComponent implements AfterViewInit, OnDestroy {\n //#region injections\n private readonly windowsService = inject(TaonDetachedWindowsService);\n\n private readonly appRef = inject(ApplicationRef);\n\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n private readonly injector = inject(Injector);\n //#endregion\n\n //#region inputs\n @Input({\n required: true,\n })\n window!: TaonDetachedWindow;\n //#endregion\n\n //#region view children\n @ViewChild('componentHost', {\n static: true,\n })\n componentHost!: ElementRef<HTMLElement>;\n //#endregion\n\n //#region fields\n private componentRef?: ComponentRef<any>;\n //#endregion\n\n //#region lifecycle\n ngAfterViewInit(): void {\n this.createDetachedComponent();\n }\n\n ngOnDestroy(): void {\n this.destroyDetachedComponent();\n }\n //#endregion\n\n //#region focus\n focus(): void {\n this.windowsService.focus(this.window.id);\n }\n //#endregion\n\n //#region create detached component\n private createDetachedComponent(): void {\n const detachedActivatedRoute = createDetachedActivatedRoute(\n this.window.routeState,\n );\n\n const detachedInjector = Injector.create({\n parent: this.injector,\n\n providers: [\n {\n provide: ActivatedRoute,\n useValue: detachedActivatedRoute,\n },\n {\n provide: TAON_IS_DETACHED_WINDOW,\n useValue: true,\n },\n ],\n });\n\n const componentRef = createComponent(this.window.component, {\n environmentInjector: this.environmentInjector,\n\n elementInjector: detachedInjector,\n\n hostElement: this.componentHost.nativeElement,\n });\n\n this.componentRef = componentRef;\n\n this.appRef.attachView(componentRef.hostView);\n\n componentRef.changeDetectorRef.detectChanges();\n\n this.windowsService.registerComponentRef(this.window.id, componentRef);\n }\n //#endregion\n\n //#region destroy detached component\n private destroyDetachedComponent(): void {\n if (!this.componentRef) {\n return;\n }\n\n try {\n this.appRef.detachView(this.componentRef.hostView);\n } catch {}\n\n if (!this.componentRef.hostView.destroyed) {\n this.componentRef.destroy();\n }\n\n this.componentRef = undefined;\n }\n //#endregion\n\n //#region close\n close(): void {\n this.windowsService.close(this.window.id);\n }\n //#endregion\n}\n//#endregion\n\n//#region detached windows host\n@Component({\n selector: 'taon-detached-windows-host',\n standalone: true,\n imports: [CommonModule, TaonDetachedWindowComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host {\n position: fixed;\n\n inset: 0;\n\n pointer-events: none;\n\n /*\n * This only establishes the workspace stacking\n * context. Individual windows control their\n * own z-index.\n */\n z-index: 10000;\n }\n\n taon-detached-window {\n pointer-events: auto;\n }\n `,\n ],\n template: `\n @for (window of windowsService.windows(); track window.id) {\n <taon-detached-window [window]=\"window\" />\n }\n `,\n})\nexport class TaonDetachedWindowsHostComponent {\n readonly windowsService = inject(TaonDetachedWindowsService);\n}\n//#endregion\n\n//#region detachable dialog content\n@Component({\n selector: 'taon-detachable-dialog-content',\n standalone: true,\n imports: [CommonModule, MatIconModule, MatButtonModule, MatTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host {\n display: block;\n }\n\n .taon-detachable-content {\n display: flex;\n\n flex-direction: column;\n\n min-height: 0;\n }\n\n .taon-detachable-content-toolbar {\n min-height: 36px;\n\n display: flex;\n\n align-items: center;\n\n justify-content: flex-end;\n\n border-bottom: 1px solid var(--mat-sys-outline-variant, #ddd);\n }\n\n .taon-detachable-content-body {\n min-height: 0;\n }\n `,\n ],\n template: `\n <section class=\"taon-detachable-content\">\n @if (!isDetached) {\n <header class=\"taon-detachable-content-toolbar\">\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Detach')\"\n (click)=\"detach()\">\n <mat-icon> open_in_new </mat-icon>\n </button>\n </header>\n }\n\n <div class=\"taon-detachable-content-body\">\n <ng-content />\n </div>\n </section>\n `,\n})\nexport class TaonDetachableDialogContentComponent {\n //#region injections\n readonly t = t.for(this);\n\n private readonly route = inject(ActivatedRoute);\n\n private readonly router = inject(Router);\n\n private readonly windowsService = inject(TaonDetachedWindowsService);\n\n readonly isDetached = inject(TAON_IS_DETACHED_WINDOW);\n //#endregion\n\n //#region inputs\n @Input({\n required: true,\n })\n component!: Type<any>;\n\n @Input()\n title?: string;\n //#endregion\n\n //#region detach\n detach(): void {\n if (this.isDetached) {\n return;\n }\n\n const snapshot = this.route.snapshot;\n\n const routeState: TaonDetachedRouteState = {\n url: this.router.url,\n\n params: this.collectParams(snapshot),\n\n queryParams: cloneObject(snapshot.queryParams),\n\n fragment: snapshot.fragment,\n\n data: this.collectData(snapshot),\n };\n\n this.windowsService.open({\n title:\n this.title || this.component.name || this.t.gettext('Detached window'),\n\n component: this.component,\n\n routeState,\n });\n }\n //#endregion\n\n //#region route utils\n private collectParams(snapshot: ActivatedRouteSnapshot): Params {\n const params: Params = {};\n\n let current: ActivatedRouteSnapshot | null = snapshot;\n\n while (current) {\n Object.assign(params, current.params);\n\n current = current.parent;\n }\n\n return params;\n }\n\n private collectData(snapshot: ActivatedRouteSnapshot): Record<string, any> {\n const data: Record<string, any> = {};\n\n let current: ActivatedRouteSnapshot | null = snapshot;\n\n while (current) {\n Object.assign(data, current.data);\n\n current = current.parent;\n }\n\n return data;\n }\n //#endregion\n}\n//#endregion\n","export enum TaonDraggableButtonPanelState {\n CLICKABLE_BUTTON = 'CLICKABLE_BUTTON',\n\n WINDOW = 'WINDOW',\n\n FULL_SCREEN_DRAGGABLE = 'FULL_SCREEN_DRAGGABLE',\n\n FULL_SCREEN_LOCKED = 'FULL_SCREEN_LOCKED',\n}\n\nexport namespace TaonDraggableButtonPanelModels {}\n","//#region imports\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n signal,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { filter, firstValueFrom, Subscription, take } from 'rxjs';\nimport { Taon } from 'taon/websql';\n\nimport { TaonAdminMenuContext } from '../taon-admin-layout/taon-admin-menu-context';\n\nimport { TaonDraggableButtonPanelState } from './taon-draggable-button-panel.models';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.ts', {\"src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html\":{\"en-US\":async () => (await import('./i18n/taon-draggable-button-panel.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-draggable-button-panel.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-draggable-button-panel.component.html.de-DE.i18n.data')).default},\"src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-draggable-button-panel.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-draggable-button-panel.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-draggable-button-panel.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-draggable-button-panel',\n standalone: true,\n imports: [\n CdkDrag,\n CdkDragHandle,\n NgIf,\n NgTemplateOutlet,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n ],\n templateUrl: './taon-draggable-button-panel.component.html',\n styleUrls: ['./taon-draggable-button-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TaonAdminMenuContext],\n})\nexport class TaonDraggableButtonPanelComponent<TContext = unknown>\n implements OnInit, OnDestroy\n{\n //#region fields and getters\n readonly t = t.for(this);\n\n readonly State = TaonDraggableButtonPanelState;\n\n private readonly menuContext = inject(TaonAdminMenuContext);\n\n @Input()\n set context(context: TContext) {\n this.menuContext.context.set(context);\n }\n\n @ViewChild(CdkDrag)\n private drag?: CdkDrag;\n\n @Input()\n basePath = '';\n\n @Input()\n buttonIcon = 'admin_panel_settings';\n\n @Input()\n title = this.t.gettext('Admin');\n\n /**\n * Named outlet containing this panel's application.\n *\n * Example:\n *\n * outlet=\"admin\"\n *\n * /products/42(admin:main;state=WINDOW/session/providers)\n */\n @Input()\n outlet?: string;\n\n /**\n * Matrix parameter used for persisting the panel state.\n */\n @Input()\n stateParamName = 'state';\n\n @Input()\n set state(state: TaonDraggableButtonPanelState) {\n this.currentState.set(state);\n }\n\n @Input()\n initialState: TaonDraggableButtonPanelState =\n TaonDraggableButtonPanelState.WINDOW;\n\n @Output()\n readonly stateChange = new EventEmitter<TaonDraggableButtonPanelState>();\n\n protected readonly forceFullScreen = signal(window.innerWidth < 900);\n\n private readonly resizeListener = (): void => {\n const wasForceFullScreen = this.forceFullScreen();\n const forceFullScreen = window.innerWidth < 900;\n\n this.forceFullScreen.set(forceFullScreen);\n\n // Desktop -> mobile: remove old CDK drag x/y transform.\n if (!wasForceFullScreen && forceFullScreen) {\n this.resetDragPosition();\n }\n };\n\n protected readonly currentState = signal(\n TaonDraggableButtonPanelState.CLICKABLE_BUTTON,\n );\n\n private routerSubscription?: Subscription;\n\n @Input()\n autoHideIcon = true;\n\n @Input()\n iconTemplate?: TemplateRef<unknown>;\n\n @Input()\n headerCenterTemplate?: TemplateRef<unknown>;\n\n //#endregion\n\n //#region constructor\n constructor(private readonly router: Router) {}\n //#endregion\n\n //#region methods / ng on init\n async ngOnInit(): Promise<void> {\n window.addEventListener('resize', this.resizeListener);\n /**\n * IMPORTANT:\n *\n * The component may be created while Angular is still processing\n * the application's initial navigation.\n *\n * For example:\n *\n * / -> redirectTo: /app\n *\n * If we create:\n *\n * (admin:main)\n *\n * before that redirect finishes, the auxiliary outlet navigation\n * may effectively replace/interfere with the primary navigation,\n * producing:\n *\n * /(admin:main)\n *\n * instead of:\n *\n * /app(admin:main)\n */\n await this.waitForInitialNavigation();\n\n /**\n * Ensure the auxiliary outlet exists only AFTER the primary\n * application route has settled.\n */\n await this.ensureOutletBasePath();\n\n /**\n * The outlet may already contain persisted state, e.g.\n *\n * (admin:main;state=WINDOW/dashboard)\n */\n this.restoreStateFromUrl();\n\n /**\n * From this point on keep the component state synchronized\n * with subsequent router navigations.\n */\n this.routerSubscription = this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(() => {\n this.restoreStateFromUrl();\n });\n }\n //#endregion\n\n //#region methods / ng on destroy\n ngOnDestroy(): void {\n window.removeEventListener('resize', this.resizeListener);\n this.routerSubscription?.unsubscribe();\n }\n //#endregion\n\n //#region methods / toogle fullscreen\n protected toogleFullscreen(event: Event) {\n event.stopImmediatePropagation();\n event.stopPropagation();\n event.preventDefault();\n if (this.forceFullScreen()) {\n return;\n }\n if (this.currentState() === TaonDraggableButtonPanelState.WINDOW) {\n this.resetDragPosition();\n void this.setState(TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED);\n } else if (\n [\n TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE,\n TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED,\n ].includes(this.currentState())\n ) {\n this.resetDragPosition();\n void this.setState(TaonDraggableButtonPanelState.WINDOW);\n }\n }\n //#endregion\n\n //#region methods / effective state\n protected effectiveState(): TaonDraggableButtonPanelState {\n if (\n this.forceFullScreen() &&\n this.currentState() !== TaonDraggableButtonPanelState.CLICKABLE_BUTTON\n ) {\n return TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED;\n }\n\n return this.currentState();\n }\n //#endregion\n\n // ===========================================================================\n // INITIAL ROUTING\n // ===========================================================================\n\n //#region methods / wait for initial navigation\n private async waitForInitialNavigation(): Promise<void> {\n /**\n * Router already completed at least one navigation.\n */\n if (this.router.navigated) {\n return;\n }\n\n /**\n * Wait until redirects/lazy routing/etc. belonging to the initial\n * navigation have settled.\n */\n await firstValueFrom(\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n take(1),\n ),\n );\n }\n //#endregion\n\n //#region methods / ensure outlet base path\n private async ensureOutletBasePath(): Promise<void> {\n if (!this.outlet || !this.basePath) {\n return;\n }\n\n /**\n * IMPORTANT:\n *\n * Parse the URL only AFTER initial navigation has completed.\n *\n * At this point:\n *\n * /\n *\n * may already have become:\n *\n * /app\n */\n const tree = this.router.parseUrl(this.router.url);\n\n /**\n * Outlet already exists — preserve it exactly as it is.\n *\n * Examples:\n *\n * /app(admin:main)\n *\n * /app(admin:main;state=WINDOW/dashboard)\n */\n if (tree.root.children[this.outlet]) {\n return;\n }\n\n const baseSegments = this.basePath.split('/').filter(Boolean);\n\n if (!baseSegments.length) {\n return;\n }\n\n /**\n * Add the auxiliary outlet while preserving the current\n * primary route.\n *\n * Example:\n *\n * /app\n *\n * becomes:\n *\n * /app(admin:main)\n */\n await this.router.navigate(\n [\n {\n outlets: {\n [this.outlet]: baseSegments,\n },\n },\n ],\n {\n replaceUrl: true,\n },\n );\n }\n //#endregion\n\n // ===========================================================================\n // STATE\n // ===========================================================================\n\n //#region methods / set state\n protected async setState(next: TaonDraggableButtonPanelState): Promise<void> {\n if (!this.isTransitionAllowed(next)) {\n return;\n }\n\n this.currentState.set(next);\n\n this.stateChange.emit(next);\n\n await this.saveStateToUrl(next);\n }\n //#endregion\n\n //#region methods / open\n protected open(): void {\n void this.setState(this.initialState);\n }\n\n protected toggle(): void {\n if (this.currentState() === this.State.CLICKABLE_BUTTON) {\n this.open();\n } else {\n this.returnToButton();\n }\n }\n //#endregion\n\n //#region methods / return to button\n protected returnToButton(): void {\n this.resetDragPosition();\n void this.setState(TaonDraggableButtonPanelState.CLICKABLE_BUTTON);\n }\n //#endregion\n\n //#region methods / window mode\n protected windowMode(): void {\n void this.setState(TaonDraggableButtonPanelState.WINDOW);\n }\n //#endregion\n\n //#region methods / full screen draggable\n protected fullScreenDraggable(): void {\n this.resetDragPosition();\n\n void this.setState(TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE);\n }\n //#endregion\n\n //#region methods / lock full screen\n protected lockFullScreen(): void {\n this.resetDragPosition();\n\n void this.setState(TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED);\n }\n //#endregion\n\n //#region methods / is dragging enabled\n protected isDraggingEnabled(): boolean {\n if (this.forceFullScreen()) {\n return false;\n }\n\n return (\n this.currentState() === TaonDraggableButtonPanelState.WINDOW ||\n this.currentState() ===\n TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE\n );\n }\n //#endregion\n\n // ===========================================================================\n // URL STATE\n // ===========================================================================\n\n //#region methods / restore state from url\n private restoreStateFromUrl(): void {\n if (!this.outlet) {\n return;\n }\n\n const tree = this.router.parseUrl(this.router.url);\n\n const outletGroup = tree.root.children[this.outlet];\n\n if (!outletGroup) {\n return;\n }\n\n /**\n * State is stored on the first auxiliary outlet segment:\n *\n * admin:\n *\n * main;state=WINDOW/dashboard\n * └────────────────┘\n */\n const rootSegment = outletGroup.segments[0];\n\n if (!rootSegment) {\n return;\n }\n\n const state = rootSegment.parameters[this.stateParamName];\n\n if (!this.isValidState(state)) {\n return;\n }\n\n /**\n * URL restoration should NOT go through the transition\n * state machine.\n *\n * A bookmarked/refreshed URL is authoritative.\n */\n this.currentState.set(state);\n\n /**\n * Fullscreen must never inherit an old CdkDrag transform.\n */\n if (\n state === TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE ||\n state === TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED\n ) {\n queueMicrotask(() => {\n this.resetDragPosition();\n });\n }\n }\n //#endregion\n\n //#region methods / save state to url\n private async saveStateToUrl(\n state: TaonDraggableButtonPanelState,\n ): Promise<void> {\n if (!this.outlet) {\n return;\n }\n\n const tree = this.router.parseUrl(this.router.url);\n\n const outletGroup = tree.root.children[this.outlet];\n\n /**\n * The outlet might not yet exist.\n *\n * In that case there is nowhere sensible to attach\n * its matrix parameter.\n */\n if (!outletGroup || outletGroup.segments.length === 0) {\n return;\n }\n\n const rootSegment = outletGroup.segments[0];\n\n /**\n * Preserve any existing matrix parameters.\n */\n rootSegment.parameters = {\n ...rootSegment.parameters,\n\n [this.stateParamName]: state,\n };\n\n await this.router.navigateByUrl(tree, {\n replaceUrl: true,\n });\n }\n //#endregion\n\n //#region methods / is valid state\n private isValidState(\n value: string | undefined,\n ): value is TaonDraggableButtonPanelState {\n return Object.values(TaonDraggableButtonPanelState).includes(\n value as TaonDraggableButtonPanelState,\n );\n }\n //#endregion\n\n // ===========================================================================\n // DRAG\n // ===========================================================================\n\n //#region methods / reset drag position\n private resetDragPosition(): void {\n this.drag?.reset();\n }\n //#endregion\n\n // ===========================================================================\n // TRANSITIONS\n // ===========================================================================\n\n //#region methods / is transition allowed\n private isTransitionAllowed(next: TaonDraggableButtonPanelState): boolean {\n const current = this.currentState();\n\n const transitions: Record<\n TaonDraggableButtonPanelState,\n TaonDraggableButtonPanelState[]\n > = {\n [TaonDraggableButtonPanelState.CLICKABLE_BUTTON]: [\n TaonDraggableButtonPanelState.WINDOW,\n TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE,\n TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED,\n ],\n\n [TaonDraggableButtonPanelState.WINDOW]: [\n TaonDraggableButtonPanelState.CLICKABLE_BUTTON,\n TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE,\n TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED,\n ],\n\n [TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE]: [\n TaonDraggableButtonPanelState.CLICKABLE_BUTTON,\n TaonDraggableButtonPanelState.WINDOW,\n TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED,\n ],\n\n [TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED]: [\n TaonDraggableButtonPanelState.CLICKABLE_BUTTON,\n TaonDraggableButtonPanelState.WINDOW,\n TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE,\n ],\n };\n\n return transitions[current].includes(next);\n }\n //#endregion\n}\n","@if (currentState() === State.CLICKABLE_BUTTON || !autoHideIcon) {\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" />\n } @else {\n <button\n class=\"taon-admin-panel-toogle-open-button\"\n [class.taon-admin-panel-toogle-button-dimmer-opacity]=\"\n effectiveState() !== State.CLICKABLE_BUTTON\n \"\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"title\"\n (click)=\"toggle()\">\n <mat-icon>{{ buttonIcon }}</mat-icon>\n </button>\n }\n}\n\n<section\n cdkDrag\n [hidden]=\"currentState() === State.CLICKABLE_BUTTON\"\n [cdkDragDisabled]=\"!isDraggingEnabled()\"\n class=\"taon-draggable-panel\"\n [class.taon-window]=\"effectiveState() === State.WINDOW\"\n [class.taon-window-full]=\"effectiveState() !== State.WINDOW\"\n [class.taon-fullscreen]=\"\n effectiveState() === State.FULL_SCREEN_DRAGGABLE ||\n effectiveState() === State.FULL_SCREEN_LOCKED\n \">\n <header\n cdkDragHandle\n (dblclick)=\"toogleFullscreen($event)\"\n class=\"taon-window-bar\">\n <!-- LEFT -->\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\n <mat-icon class=\"text-gray-500\"> admin_panel_settings </mat-icon>\n\n <span class=\"truncate font-medium\">\n {{ title }}\n </span>\n </div>\n\n <!-- EXACT CENTER -->\n <div class=\"flex min-w-0 items-center justify-center\">\n @if (headerCenterTemplate) {\n <ng-container [ngTemplateOutlet]=\"headerCenterTemplate\" />\n }\n </div>\n\n <!-- #region window buttons -->\n <div class=\"flex shrink-0 items-center\">\n <!-- Desktop-only window/fullscreen controls -->\n @if (!forceFullScreen()) {\n @if (currentState() !== State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Window mode')\"\n (click)=\"windowMode()\">\n <mat-icon>filter_none</mat-icon>\n </button>\n }\n\n @if (currentState() === State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Full screen')\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>fullscreen</mat-icon>\n </button>\n }\n\n @if (currentState() !== State.FULL_SCREEN_LOCKED) {\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Lock full screen')\"\n (click)=\"lockFullScreen()\">\n <mat-icon>lock_open</mat-icon>\n </button>\n } @else {\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Unlock')\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>lock</mat-icon>\n </button>\n }\n }\n\n <!-- ALWAYS available -->\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Close admin panel')\"\n (click)=\"returnToButton()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <!-- #endregion -->\n </header>\n\n <div class=\"min-h-0 flex-1 overflow-hidden\">\n <ng-content />\n </div>\n</section>\n","//#region imports\nimport { Routes } from '@angular/router';\n\nimport { TaonDraggableButtonPanelComponent } from './taon-draggable-button-panel.component';\n//#endregion\n\nexport const TaonDraggableButtonPanelRoutes: Routes = [\n {\n path: '',\n component: TaonDraggableButtonPanelComponent,\n },\n // {\n // path: 'anothermodulepath',\n // loadChildren: () => import('anothermodule')\n // .then(m => m.AnotherLazyModule),\n // },\n];\n\n/**\n * By default exporting TaonDraggableButtonPanelRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\nexport default TaonDraggableButtonPanelRoutes;","import { Component, Inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n\nconst t = Translation.for('src/lib/taon-purchase-status/taon-purchase-status.dialog.component.ts', {\"src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html\":{\"en-US\":async () => (await import('./i18n/taon-purchase-status.dialog.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-purchase-status.dialog.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-purchase-status.dialog.component.html.de-DE.i18n.data')).default},\"src/lib/taon-purchase-status/taon-purchase-status.dialog.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-purchase-status.dialog.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-purchase-status.dialog.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-purchase-status.dialog.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-purchase-status-dialog',\n standalone: true,\n imports: [MatDialogModule, MatButtonModule],\n templateUrl: './taon-purchase-status.dialog.component.html',\n})\nexport class TaonPurchaseStatusDialogComponent {\n readonly t = t.for(this);\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n public data: { success: boolean; message: string },\n ) {}\n}\n","<h2 mat-dialog-title>\n {{\n data.success\n ? t.gettext('Payment successful')\n : t.gettext('Payment cancelled')\n }}\n</h2>\n\n<div mat-dialog-content>{{ data.message }}</div>\n\n<div\n mat-dialog-actions\n align=\"end\">\n <button\n mat-button\n mat-dialog-close>\n {{ t.gettext('OK') }}\n </button>\n</div>\n","import { Component, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n\nconst t = Translation.for('src/lib/taon-under-construction/taon-under-construction.component.ts', {\"src/lib/taon-under-construction/taon-under-construction.component.html\":{\"en-US\":async () => (await import('./i18n/taon-under-construction.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-under-construction.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-under-construction.component.html.de-DE.i18n.data')).default},\"src/lib/taon-under-construction/taon-under-construction.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-under-construction.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-under-construction.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-under-construction.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-under-construction',\n standalone: true,\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './taon-under-construction.component.html',\n styleUrl: './taon-under-construction.component.scss',\n})\nexport class TaonUnderConstructionComponent {\n t = t.for(this);\n\n title = input(t.gettext('Coming soon'));\n\n description = input(\n t.gettext(\n 'This section is currently under construction and will be available soon.',\n ),\n );\n\n icon = input('engineering');\n}\n","<div class=\"under-construction\">\n <div class=\"icon-wrapper\">\n <mat-icon>{{ icon() }}</mat-icon>\n </div>\n\n <h2>{{ title() }}</h2>\n\n <p>{{ description() }}</p>\n\n <div class=\"status\">\n <mat-icon>construction</mat-icon>\n {{ t.gettext('Work in progress') }}\n </div>\n</div>\n","// @ts-nocheck\n// This file is auto-generated during init process. Do not modify.\n// This disable this auto generate file.\n// set property \"shouldGenerateAutogenIndexFile: false\" \n// in taon.jsonc of your project. \nexport * from './build-info._auto-generated_'; \nexport * from './my-organization-proj'; \nexport * from './start-cli'; \nexport * from './directives/taon-horizontal-wheel-scrolling.directive'; // @browser\nexport * from './taon-admin-layout/taon-admin-layout.component'; // @browser\nexport * from './taon-admin-layout/taon-admin-layout.models'; \nexport * from './taon-admin-layout/taon-admin-menu-context'; \nexport * from './taon-admin-layout/taon-admin-page-tabs.component'; // @browser\nexport * from './taon-admin-layout/taon-base-admin-page.component'; // @browser\nexport * from './taon-admin-welcome/taon-admin-welcome.component'; // @browser\nexport * from './taon-admin-welcome/taon-admin-welcome.models'; \nexport * from './taon-admin-welcome/taon-admin-welcome.routes'; // @browser\nexport * from './taon-backoffice-notifications/taon-backoffice-notifications.component'; // @browser\nexport * from './taon-backoffice-notifications/taon-backoffice-notifications.models'; \nexport * from './taon-backoffice-notifications/taon-backoffice-notifications.service'; // @browser\nexport * from './taon-backoffice-notifications/taon-error-details-dialog.component'; // @browser\nexport * from './taon-backoffice-notifications/taon-error-toast.component'; // @browser\nexport * from './taon-confirm-dialog/taon-confirm-dialog.component'; // @browser\nexport * from './taon-confirm-dialog/taon-confirm-dialog.models'; \nexport * from './taon-datatable/taon-datatable.component'; // @browser\nexport * from './taon-datatable/taon-datatable.models'; \nexport * from './taon-datatable/taon-datatable.routes'; // @browser\nexport * from './taon-detachable-dialog-content/taon-detached-window-content.component'; // @browser\nexport * from './taon-draggable-button-panel/taon-draggable-button-panel.component'; // @browser\nexport * from './taon-draggable-button-panel/taon-draggable-button-panel.models'; \nexport * from './taon-draggable-button-panel/taon-draggable-button-panel.routes'; // @browser\nexport * from './taon-purchase-status/taon-purchase-status.dialog.component'; // @browser\nexport * from './taon-under-construction/taon-under-construction.component'; // @browser","export * from './migrations';\n/* */ \nexport * from './index._auto-generated_';\nexport * from './my-organization-proj';\n/* */ \nexport default {};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["t","i2","i3","i4","i1","TaonSymbols","i5"],"mappings":"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"}
1
+ {"version":3,"file":"ui-websql.mjs","sources":["../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/migrations/migrations_index._auto-generated_.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/migrations/index.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/build-info._auto-generated_.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/my-organization-proj.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/start-cli.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/directives/taon-horizontal-wheel-scrolling.directive.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-layout.models.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-menu-context.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-page-tabs.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-page-tabs.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-layout.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-admin-layout.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-layout/taon-base-admin-page.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-welcome/taon-admin-welcome.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-welcome/taon-admin-welcome.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-admin-welcome/taon-admin-welcome.routes.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-error-toast.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-backoffice-notifications.service.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-confirm-dialog/taon-confirm-dialog.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-confirm-dialog/taon-confirm-dialog.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-datatable/taon-datatable.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-datatable/taon-datatable.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-datatable/taon-datatable.routes.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-detachable-dialog-content/taon-detached-window-content.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-draggable-button-panel/taon-draggable-button-panel.models.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-draggable-button-panel/taon-draggable-button-panel.routes.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-purchase-status/taon-purchase-status.dialog.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-under-construction/taon-under-construction.component.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/taon-under-construction/taon-under-construction.component.html","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/index._auto-generated_.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/lib/index.ts","../../../tmp-libs-for-dist-websql/ui/projects/ui/src/ui-websql.ts"],"sourcesContent":["// THIS FILE IS GENERATED - DO NOT MODIFY\n\n// THIS FILE IS GENERATED - DO NOT MODIFY\n\n// THIS FILE IS GENERATED - DO NOT MODIFY\n","//@ts-nocheck\nexport * from './migrations_index._auto-generated_';\n","// THIS FILE IS GENERATED - DO NOT MODIFY\n/**\n * Autogenerated by current cli tool\n */\nexport const BUILD_FRAMEWORK_CLI_NAME = 'tnp';\n/**\n * This value can be change in taon.jsonc (appId)\n */\nexport const APP_ID = 'com.domain.example.ui';\n/**\n * Autogenerated by current cli tool\n */\nexport const BUILD_BASE_HREF = '';\n/**\n * This value can be change in taon.jsonc (overrideNpmName)\n */\nexport const PROJECT_NPM_NAME = '@taon-dev/ui';\n/**\n * Taon version from you project taon.json\n */\nexport const CURRENT_PACKAGE_TAON_VERSION = 'v21';\n/**\n * Autogenerated by current cli tool. Use *tnp release* to bump version.\n */\nexport const CURRENT_PACKAGE_VERSION = '21.0.25';\n\n\n\n\n\n// THIS FILE IS GENERATED - DO NOT MODIFY\n ","import { Translation } from \"@taon-dev/i18n/websql\";\nimport { Taon } from \"taon/websql\";\n\nconst t = Translation.for('src/lib/my-organization-proj.ts', {\"src/lib/my-organization-proj.ts\":{\"en-US\":async () => (await import('./i18n/my-organization-proj.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/my-organization-proj.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/my-organization-proj.ts.de-DE.i18n.data')).default},\"src/lib/start-cli.ts\":{\"en-US\":async () => (await import('./i18n/start-cli.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/start-cli.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/start-cli.ts.de-DE.i18n.data')).default}} as any);\n\nexport function myOrgProj() {\n t.gettext('My Translated Company Name!')\n}\n","//#region tnp-helpers cli template\nimport { UtilsJson } from 'tnp-core/websql';\nimport { Helpers, BaseCommandLineFeature } from 'tnp-helpers/websql';\n/* */ \nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n//#endregion\n\nconst t = Translation.for('src/lib/start-cli.ts', {\"src/lib/my-organization-proj.ts\":{\"en-US\":async () => (await import('./i18n/my-organization-proj.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/my-organization-proj.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/my-organization-proj.ts.de-DE.i18n.data')).default},\"src/lib/start-cli.ts\":{\"en-US\":async () => (await import('./i18n/start-cli.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/start-cli.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/start-cli.ts.de-DE.i18n.data')).default}} as any);\n\n//#region CLI / global scope\n/**\n * This class is for handling global arguments. *\n * Cli engine will parse: hello:world:from:global:arg to helloWorldFromGlobalArg\n * (lower case, camel case) .. so you don't need to worry about misspelling\n * arguments\n */\nclass $Global extends BaseCommandLineFeature<{}> {\n /**\n * When you execute cli without arguments:`$ cli`\n */\n public _() {\n console.log(`Hello world from cli`);\n this._exit();\n }\n\n /**\n * When you execute: `$ cli hello:world:from:global:arg`\n * (or `$ cli helloWorldFromGlobalArg`)\n */\n helloWorldFromGlobalArg() {\n console.log('hello world from global argument!');\n this._exit(0);\n }\n}\n//#endregion\n\n//#region CLI / Version Scope\n/**\n *\n */\nclass $Version extends BaseCommandLineFeature<{\n anyCLIparamsHere: string;\n}> {\n /**\n * When you execute: `$ cli version`\n */\n public _() {\n console.log(`Hello world from version argument`);\n this._exit();\n }\n\n /**\n * When you execute: `$ cli version:getFromPackageJson`\n */\n public getFromPackageJson() {\n const ver = UtilsJson.getValue(\n this.project.pathFor('package.json'),\n 'version',\n {\n defaultValue: '<not defined>',\n },\n );\n console.log(`Version from packageJson ${ver}`);\n this._exit(0);\n }\n}\n//#endregion\n\n/**\n *\n * @param argsv process.argsv\n * @param filename needed if you want ipc communicaiton\n */\nexport async function startCli(\n argsv: string[],\n filename: string,\n): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n}\n\nexport default startCli;\n","//#region imports\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n inject,\n OnDestroy,\n} from '@angular/core';\n//#endregion\n\n@Directive({\n selector: '[taonHorizontalWheelScroll]',\n standalone: true,\n})\nexport class TaonHorizontalWheelScrollDirective\n implements AfterViewInit, OnDestroy\n{\n //#region fields\n\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n private wheelAccumulator = 0;\n\n /**\n * Amount of wheel movement required before triggering\n * Material's previous/next pagination.\n */\n private readonly wheelThreshold = 40;\n\n //#endregion\n\n //#region lifecycle\n\n ngAfterViewInit(): void {\n this.elementRef.nativeElement.addEventListener('wheel', this.onWheel, {\n passive: false,\n });\n }\n\n ngOnDestroy(): void {\n this.elementRef.nativeElement.removeEventListener('wheel', this.onWheel);\n }\n\n //#endregion\n\n //#region wheel\n\n private readonly onWheel = (event: WheelEvent): void => {\n const delta =\n Math.abs(event.deltaX) > Math.abs(event.deltaY)\n ? event.deltaX\n : event.deltaY;\n\n if (!delta) {\n return;\n }\n\n this.wheelAccumulator += delta;\n\n if (Math.abs(this.wheelAccumulator) < this.wheelThreshold) {\n return;\n }\n\n const direction = this.wheelAccumulator > 0 ? 'after' : 'before';\n\n this.wheelAccumulator = 0;\n\n // @ts-ignore\n const pagination = this.elementRef.nativeElement.querySelector<HTMLElement>(\n `.mat-mdc-tab-header-pagination-${direction}`,\n );\n\n if (!pagination) {\n return;\n }\n\n const disabled = pagination.classList.contains(\n 'mat-mdc-tab-header-pagination-disabled',\n );\n\n if (disabled) {\n return;\n }\n\n event.preventDefault();\n\n pagination.click();\n };\n\n //#endregion\n}\n","import type { Signal } from '@angular/core';\nimport type { MatIcon } from '@angular/material/icon'; // @browser\nimport { Route } from '@angular/router';\n\nexport interface TaonAdminRoute extends Route {\n /**\n * Used only by TaonAdminLayout to discover lazy navigation children.\n *\n * This loads route metadata, NOT page components.\n */\n loadAdminChildren?: () => Promise<TaonAdminRoutes>;\n}\n\nexport type TaonAdminRoutes = TaonAdminRoute[];\n\nexport interface TaonAdminMenuCallbacks<TContext = unknown> {\n isDisabled?: (params: { context: TContext }) => boolean;\n isDisabledTooltip?: (params: { context: TContext }) => string;\n isVisible?: (params: { context: TContext }) => boolean;\n}\n\nexport interface TaonAdminRouteOptions<\n TContext = unknown,\n> extends TaonAdminMenuCallbacks<TContext> {\n path: string;\n color?: string;\n loader: () => Promise<TaonAdminRoutes>;\n\n menuItem?: string | (() => string) | Signal<string>;\n\n //#region @browser\n icon?: MatIcon['fontIcon'];\n //#endregion\n\n expandable?: boolean;\n\n hideInNavigation?: boolean;\n}\n\nexport const TaonBaselineBackofficeOutletName = 'admin';\n\nexport function resolveTaonAdminMenuItem(\n menuItem: TaonAdminRouteOptions['menuItem'],\n): string | undefined {\n return typeof menuItem === 'function' ? menuItem() : menuItem;\n}\n\n//#region @browser\nexport function adminLazyRoute<TContext = unknown>(\n options: TaonAdminRouteOptions<TContext>,\n): TaonAdminRoute {\n const {\n path,\n loader,\n menuItem,\n icon,\n color,\n expandable,\n hideInNavigation,\n isDisabled,\n isDisabledTooltip,\n isVisible,\n } = options;\n\n return {\n path,\n\n data: {\n menuItem,\n color,\n icon,\n expandable,\n hideInNavigation,\n isDisabled,\n isDisabledTooltip,\n isVisible,\n },\n\n loadChildren: loader,\n loadAdminChildren: loader,\n };\n}\n//#endregion\n","import { Injectable, signal } from '@angular/core';\nimport { Route } from '@angular/router';\n\nimport { TaonAdminMenuCallbacks } from './taon-admin-layout.models';\n\n@Injectable()\nexport class TaonAdminMenuContext {\n readonly context = signal<unknown>(undefined);\n\n isVisible(route: Route): boolean {\n return (\n !route.data?.['hideInNavigation'] &&\n this.callbacks(route)?.isVisible?.({ context: this.context() }) !== false\n );\n }\n\n isDisabled(route: Route): boolean {\n return (\n this.callbacks(route)?.isDisabled?.({ context: this.context() }) === true\n );\n }\n\n disabledTooltip(route: Route): string {\n return this.isDisabled(route)\n ? (this.callbacks(route)?.isDisabledTooltip?.({\n context: this.context(),\n }) ?? '')\n : '';\n }\n\n private callbacks(route: Route): TaonAdminMenuCallbacks | undefined {\n // Angular Route.data erases the application's context type at the router boundary.\n return route.data as TaonAdminMenuCallbacks | undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n Input,\n OnInit,\n signal,\n} from '@angular/core';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NavigationEnd, Route, Router, Routes } from '@angular/router';\nimport { filter } from 'rxjs';\n\nimport {\n resolveTaonAdminMenuItem,\n TaonAdminRoute,\n} from './taon-admin-layout.models';\nimport { TaonAdminMenuContext } from './taon-admin-menu-context';\n\nexport interface TaonAdminTabLevel {\n level: number;\n routes: Routes;\n\n /**\n * URL segments before routes from this tab level.\n *\n * Example:\n *\n * ['main', 'session', 'providers']\n */\n baseSegments: string[];\n}\n\n@Component({\n selector: 'taon-admin-page-tabs',\n standalone: true,\n imports: [MatTabsModule, MatTooltipModule],\n templateUrl: './taon-admin-page-tabs.component.html',\n styleUrl: './taon-admin-page-tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaonAdminPageTabsComponent implements OnInit {\n protected readonly menuContext =\n inject(TaonAdminMenuContext, { optional: true }) ??\n new TaonAdminMenuContext();\n\n private _routes: Routes = [];\n\n @Input({ required: true })\n set routes(routes: Routes) {\n this._routes = routes.filter(f => !f.redirectTo);\n }\n\n get routes(): Routes {\n return this._routes;\n }\n\n @Input()\n basePath = '';\n\n /**\n * Undefined:\n * normal primary routing\n *\n * \"admin\":\n * auxiliary admin outlet\n */\n @Input()\n outlet?: string;\n\n protected readonly levels = signal<TaonAdminTabLevel[]>([]);\n\n constructor(private readonly router: Router) {}\n\n async ngOnInit(): Promise<void> {\n // console.log(this.routes);\n await this.refresh();\n\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(async () => {\n await this.refresh();\n });\n }\n\n // ===========================================================================\n // UI\n // ===========================================================================\n\n protected label(route: Route): string {\n return (\n resolveTaonAdminMenuItem(route.data?.['menuItem']) ??\n this.startCase(route.path ?? '')\n );\n }\n\n protected isActive(level: TaonAdminTabLevel, route: Route): boolean {\n if (!route.path) {\n return false;\n }\n\n const expected = [...level.baseSegments, route.path];\n\n const current = this.currentOutletSegments();\n\n if (current.length < expected.length) {\n return false;\n }\n\n return expected.every((segment, index) => current[index] === segment);\n }\n\n protected async tabClicked(\n level: TaonAdminTabLevel,\n route: Route,\n ): Promise<void> {\n if (\n !route.path ||\n !this.menuContext.isVisible(route) ||\n this.menuContext.isDisabled(route)\n ) {\n return;\n }\n\n await this.navigateTo([\n ...level.baseSegments.slice(this.basePathSegments.length),\n route.path,\n ]);\n }\n\n // ===========================================================================\n // NAVIGATION\n // ===========================================================================\n\n private outletBaseMatrixParams(): Record<string, string> {\n if (!this.outlet) {\n return {};\n }\n\n const tree = this.router.parseUrl(this.router.url);\n\n const outletGroup = tree.root.children[this.outlet];\n\n return {\n ...outletGroup?.segments[0]?.parameters,\n };\n }\n\n private async navigateTo(routeSegments: string[]): Promise<boolean> {\n const segments = [...this.basePathSegments, ...routeSegments];\n\n /**\n * Auxiliary / named outlet.\n *\n * Example:\n *\n * /products/42(admin:main/session/providers/settings)\n */\n if (this.outlet) {\n const [firstSegment, ...remainingSegments] = segments;\n\n if (!firstSegment) {\n return false;\n }\n\n const matrixParams = this.outletBaseMatrixParams();\n\n return this.router.navigate([\n {\n outlets: {\n [this.outlet]: [\n firstSegment,\n\n /**\n * Angular interprets an object following\n * a segment as matrix parameters.\n */\n matrixParams,\n\n ...remainingSegments,\n ],\n },\n },\n ]);\n }\n\n /**\n * Normal primary outlet.\n *\n * Example:\n *\n * /main/session/providers/settings\n */\n return this.router.navigate(['/', ...segments]);\n }\n\n // ===========================================================================\n // BUILD TAB LEVELS\n // ===========================================================================\n\n private async refresh(): Promise<void> {\n const current = this.currentOutletSegments();\n\n const base = this.basePathSegments;\n\n /**\n * Example:\n *\n * current:\n * main/session/providers/settings\n *\n * base:\n * main\n *\n * relative:\n * session/providers/settings\n */\n const relative = current.slice(base.length);\n\n const levels: TaonAdminTabLevel[] = [];\n\n await this.walk(this.routes, relative, base, 1, levels);\n\n /**\n * Levels:\n *\n * 1 -> aside expansion panel\n * 2 -> aside item\n * 3+ -> tabs\n */\n this.levels.set(levels.filter(level => level.level >= 3));\n }\n\n private async walk(\n routes: Routes,\n remainingUrl: string[],\n baseSegments: string[],\n level: number,\n result: TaonAdminTabLevel[],\n ): Promise<void> {\n /**\n * Important:\n *\n * Taon lazy route files commonly look like:\n *\n * [\n * {\n * path: '',\n * component: SomeContainer,\n * children: [...]\n * }\n * ]\n *\n * path:'' is structural and DOES NOT represent\n * another navigation level.\n */\n routes = this.unwrapEmptyPathRoutes(routes);\n\n const visibleRoutes = this.navigationRoutes(routes);\n\n /**\n * Level 3+ becomes tabs.\n */\n if (level >= 3 && visibleRoutes.length > 0) {\n result.push({\n level,\n routes: visibleRoutes,\n baseSegments,\n });\n }\n\n const currentSegment = remainingUrl[0];\n\n if (!currentSegment) {\n return;\n }\n\n const activeRoute = routes.find(route => route.path === currentSegment);\n\n if (!activeRoute) {\n return;\n }\n\n let children = await this.loadChildren(activeRoute);\n\n children = this.unwrapEmptyPathRoutes(children).filter(f => !!f.data);\n\n if (!children.length) {\n return;\n }\n\n await this.walk(\n children,\n remainingUrl.slice(1),\n [...baseSegments, currentSegment],\n level + 1,\n result,\n );\n }\n\n // ===========================================================================\n // LAZY ROUTES\n // ===========================================================================\n\n private async loadChildren(route: Route): Promise<Routes> {\n if (route.children) {\n return route.children;\n }\n\n const adminRoute = route as TaonAdminRoute;\n\n if (adminRoute.loadAdminChildren) {\n return await adminRoute.loadAdminChildren();\n }\n\n return [];\n }\n\n /**\n * Removes transparent path:'' containers.\n *\n * Example:\n *\n * [\n * {\n * path: '',\n * component: ProvidersComponent,\n * children: [\n * { path: 'info' },\n * { path: 'items' },\n * ],\n * },\n * ]\n *\n * becomes:\n *\n * [\n * { path: 'info' },\n * { path: 'items' },\n * ]\n */\n private unwrapEmptyPathRoutes(routes: Routes): Routes {\n const result: Routes = [];\n\n for (const route of routes) {\n if (route.path === '' && route.children) {\n result.push(...this.unwrapEmptyPathRoutes(route.children));\n\n continue;\n }\n\n result.push(route);\n }\n\n return result;\n }\n\n private navigationRoutes(routes: Routes): Routes {\n return routes.filter(\n route =>\n !!route.path &&\n route.redirectTo === undefined &&\n !route.data?.['hideInNavigation'],\n );\n }\n\n // ===========================================================================\n // CURRENT ROUTE\n // ===========================================================================\n\n private currentOutletSegments(): string[] {\n const tree = this.router.parseUrl(this.router.url);\n\n const outletName = this.outlet || 'primary';\n\n const group = tree.root.children[outletName];\n\n if (!group) {\n return [];\n }\n\n return group.segments.map(segment => segment.path);\n }\n\n private get basePathSegments(): string[] {\n return this.basePath.split('/').filter(Boolean);\n }\n\n // ===========================================================================\n // HELPERS\n // ===========================================================================\n\n private startCase(value: string): string {\n return value\n .replace(/[-_]+/g, ' ')\n .replace(/\\b\\w/g, char => char.toUpperCase());\n }\n}\n","@if (levels().length) {\n <div class=\"shrink-0 border-b border-gray-200 bg-white\">\n @for (level of levels(); track level.level) {\n <nav\n mat-tab-nav-bar\n [tabPanel]=\"tabPanel\">\n @for (route of level.routes; track route.path) {\n @if (menuContext.isVisible(route)) {\n <a\n mat-tab-link\n class=\"cursor-pointer\"\n [disabled]=\"menuContext.isDisabled(route)\"\n [class.admin-tab-disabled]=\"menuContext.isDisabled(route)\"\n [matTooltip]=\"menuContext.disabledTooltip(route)\"\n [active]=\"isActive(level, route)\"\n (click)=\"tabClicked(level, route)\">\n {{ label(route) }}\n </a>\n }\n }\n </nav>\n }\n </div>\n}\n\n<mat-tab-nav-panel #tabPanel> </mat-tab-nav-panel>\n","//#region imports\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n inject,\n Input,\n OnDestroy,\n OnInit,\n signal,\n} from '@angular/core';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n NavigationEnd,\n Route,\n Router,\n RouterLink,\n RouterOutlet,\n Routes,\n} from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { filter, Subscription } from 'rxjs';\nimport { Taon } from 'taon/websql';\n\nimport {\n resolveTaonAdminMenuItem,\n TaonAdminRoute,\n} from './taon-admin-layout.models';\nimport { TaonAdminMenuContext } from './taon-admin-menu-context';\nimport { TaonAdminPageTabsComponent } from './taon-admin-page-tabs.component';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-admin-layout/taon-admin-layout.component.ts', {\"src/lib/taon-admin-layout/taon-admin-layout.component.html\":{\"en-US\":async () => (await import('./i18n/taon-admin-layout.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-admin-layout.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-admin-layout.component.html.de-DE.i18n.data')).default},\"src/lib/taon-admin-layout/taon-admin-layout.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-admin-layout.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-admin-layout.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-admin-layout.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-admin-layout',\n standalone: true,\n imports: [\n CommonModule,\n RouterOutlet,\n RouterLink,\n\n MatExpansionModule,\n MatIconModule,\n MatTooltipModule,\n\n TaonAdminPageTabsComponent,\n ],\n templateUrl: './taon-admin-layout.component.html',\n styleUrls: ['./taon-admin-layout.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaonAdminLayoutComponent\n implements OnInit, AfterViewInit, OnDestroy\n{\n //#region fields and getters\n\n protected readonly t = t.for(this);\n\n protected readonly menuContext =\n inject(TaonAdminMenuContext, { optional: true }) ??\n new TaonAdminMenuContext();\n\n private _routes: Routes = [];\n\n @Input({ required: true })\n set routes(routes: Routes) {\n this._routes = routes.filter(f => !f.redirectTo);\n }\n\n get routes(): Routes {\n return this._routes;\n }\n\n @Input()\n basePath = '';\n\n @Input()\n outlet!: string;\n\n protected readonly layoutWidth = signal<number | undefined>(undefined);\n\n protected readonly layoutHeight = signal<number | undefined>(undefined);\n\n protected readonly level2Routes = signal(new Map<Route, Routes>());\n\n protected readonly currentUrl = signal('');\n\n protected readonly loadingRoutes = signal(new Set<Route>());\n\n protected readonly asideOpened = signal(window.innerWidth >= 768);\n\n private resizeObserver?: ResizeObserver;\n\n private mutationObserver?: MutationObserver;\n\n private resizing = false;\n\n private resizeStartX = 0;\n\n private resizeStartY = 0;\n\n private resizeStartWidth = 0;\n\n private resizeStartHeight = 0;\n\n readonly sub = new Subscription();\n\n private readonly cdr = inject(ChangeDetectorRef);\n\n private readonly minDialogWidth = 500;\n\n private readonly minDialogHeight = 350;\n\n protected get isDialogMode(): boolean {\n const windowElement = this.getWindowElement();\n\n if (!windowElement) {\n return false;\n }\n\n return !windowElement.classList.contains('taon-fullscreen');\n }\n\n private get basePathSegments(): string[] {\n return this.basePath.split('/').filter(Boolean);\n }\n\n protected get normalizedBasePath(): string {\n const value = '/' + this.basePath.split('/').filter(Boolean).join('/');\n\n return value === '/' ? '/' : value;\n }\n\n //#endregion\n\n //#region constructor\n\n constructor(\n private readonly router: Router,\n private readonly hostElement: ElementRef<HTMLElement>,\n ) {}\n\n //#endregion\n\n //#region lifecycle\n\n async ngOnInit(): Promise<void> {\n await this.loadCurrentLevel1Route();\n\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(async () => {\n await this.loadCurrentLevel1Route();\n });\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n const windowElement = this.getWindowElement();\n // console.log('[windowElement] should not be undefined', windowElement);\n this.updateLayoutSize();\n this.startWindowObservers();\n\n // TODO @LAST issue with reloading transation without setOneLanguagePernament\n // this.sub.add(\n // this.t.isLoadingLang$.subscribe(() => {\n // setTimeout(() => {\n // console.log('RERENDER! after timeout', Translation.manager);\n // this.cdr.detectChanges();\n // }, 1000);\n // }),\n // );\n }, 500); // TODO QUICK_FIX\n }\n\n // private waitForWindowElement(\n // callback: (windowElement: HTMLElement) => void,\n // ): void {\n // const check = () => {\n // console.log('Waiting for window element...');\n // const windowElement = this.getWindowElement();\n\n // if (windowElement) {\n // callback(windowElement);\n // return;\n // }\n\n // requestAnimationFrame(check);\n // };\n\n // check();\n // }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n\n window.removeEventListener('pointermove', this.resize);\n\n window.removeEventListener('pointerup', this.stopResize);\n }\n\n //#endregion\n\n //#region window / layout\n\n private getWindowElement(): HTMLElement | undefined {\n return (\n document.querySelector<HTMLElement>('.taon-window') ??\n document.querySelector<HTMLElement>('.taon-window-full') ??\n undefined\n );\n }\n\n private getDraggablePanelElement(): HTMLElement | undefined {\n return (\n document.querySelector<HTMLElement>('.taon-draggable-panel') ?? undefined\n );\n }\n\n private startWindowObservers(): void {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n\n const host = this.hostElement.nativeElement;\n\n const windowElement = this.getWindowElement();\n\n // console.log('WINDOW', this.getWindowElement());\n\n // console.log('PANEL', this.getDraggablePanelElement());\n\n // ================================================================\n // SIZE CHANGES\n // ================================================================\n\n const observedElement = windowElement ?? host.parentElement;\n\n if (observedElement) {\n this.resizeObserver = new ResizeObserver(() => {\n this.updateLayoutSize();\n });\n\n this.resizeObserver.observe(observedElement);\n }\n\n // ================================================================\n // DIALOG <-> FULLSCREEN STATE CHANGES\n // ================================================================\n\n if (windowElement) {\n this.mutationObserver = new MutationObserver(mutations => {\n const classChanged = mutations.some(\n mutation =>\n mutation.type === 'attributes' &&\n mutation.attributeName === 'class',\n );\n // console.log('Class changed:', classChanged);\n\n if (!classChanged) {\n return;\n }\n\n this.windowModeChanged(windowElement);\n });\n\n this.mutationObserver.observe(windowElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n }\n }\n\n private windowModeChanged(windowElement: HTMLElement): void {\n const fullscreen = windowElement.classList.contains('taon-fullscreen');\n\n if (fullscreen) {\n this.clearWindowResize(windowElement);\n }\n\n requestAnimationFrame(() => {\n this.updateLayoutSize();\n });\n }\n\n private clearWindowResize(windowElement: HTMLElement): void {\n windowElement.style.removeProperty('width');\n\n windowElement.style.removeProperty('height');\n }\n\n @HostListener('window:resize')\n protected windowResized(): void {\n this.updateLayoutSize();\n }\n\n private updateLayoutSize(): void {\n const host = this.hostElement.nativeElement;\n\n const hostRect = host.getBoundingClientRect();\n\n const windowElement = this.getWindowElement();\n\n const dialogMode =\n !!windowElement && !windowElement.classList.contains('taon-fullscreen');\n\n // ================================================================\n // NORMAL / FULLSCREEN\n // ================================================================\n\n if (!dialogMode) {\n this.layoutWidth.set(Math.floor(hostRect.width));\n\n this.layoutHeight.set(\n Math.max(0, Math.floor(window.innerHeight - hostRect.top)),\n );\n\n return;\n }\n\n // ================================================================\n // DIALOG\n // ================================================================\n\n const windowRect = windowElement.getBoundingClientRect();\n\n this.layoutWidth.set(\n Math.max(0, Math.floor(windowRect.right - hostRect.left)),\n );\n\n this.layoutHeight.set(\n Math.max(0, Math.floor(windowRect.bottom - hostRect.top)),\n );\n }\n\n //#endregion\n\n //#region dialog resizing\n\n protected startResize(event: PointerEvent): void {\n if (!this.isDialogMode) {\n return;\n }\n\n const windowElement = this.getWindowElement();\n\n if (!windowElement) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const windowRect = windowElement.getBoundingClientRect();\n\n this.resizing = true;\n\n this.resizeStartX = event.clientX;\n\n this.resizeStartY = event.clientY;\n\n this.resizeStartWidth = windowRect.width;\n\n this.resizeStartHeight = windowRect.height;\n\n window.addEventListener('pointermove', this.resize);\n\n window.addEventListener('pointerup', this.stopResize);\n }\n\n private readonly resize = (event: PointerEvent): void => {\n if (!this.resizing) {\n return;\n }\n\n const windowElement = this.getWindowElement();\n\n if (!windowElement) {\n return;\n }\n\n const windowRect = windowElement.getBoundingClientRect();\n\n const deltaX = event.clientX - this.resizeStartX;\n\n const deltaY = event.clientY - this.resizeStartY;\n\n const maxWidth = window.innerWidth - windowRect.left;\n\n const maxHeight = window.innerHeight - windowRect.top;\n\n const width = Math.min(\n maxWidth,\n Math.max(this.minDialogWidth, this.resizeStartWidth + deltaX),\n );\n\n const height = Math.min(\n maxHeight,\n Math.max(this.minDialogHeight, this.resizeStartHeight + deltaY),\n );\n\n windowElement.style.width = `${width}px`;\n\n windowElement.style.height = `${height}px`;\n };\n\n private readonly stopResize = (): void => {\n if (!this.resizing) {\n return;\n }\n\n this.resizing = false;\n\n window.removeEventListener('pointermove', this.resize);\n\n window.removeEventListener('pointerup', this.stopResize);\n };\n\n //#endregion\n\n //#region aside\n\n protected toggleAside(): void {\n this.asideOpened.update(opened => !opened);\n }\n\n protected closeAside(): void {\n this.asideOpened.set(false);\n }\n\n private closeAsideOnMobile(): void {\n if (window.innerWidth < 768) {\n this.closeAside();\n }\n }\n\n //#endregion\n\n //#region level 1\n\n protected async level1Clicked(route: Route): Promise<void> {\n if (\n !route.path ||\n !this.menuContext.isVisible(route) ||\n this.menuContext.isDisabled(route)\n ) {\n return;\n }\n\n await this.navigateTo([route.path]);\n\n await this.ensureLevel2Loaded(route);\n\n if (!this.isExpandable(route)) {\n this.closeAsideOnMobile();\n }\n }\n\n protected async panelExpanded(\n route: Route,\n expanded: boolean,\n ): Promise<void> {\n if (\n !expanded ||\n !this.menuContext.isVisible(route) ||\n this.menuContext.isDisabled(route)\n ) {\n return;\n }\n\n await this.ensureLevel2Loaded(route);\n }\n\n protected isLevel1Active(route: Route): boolean {\n if (!route.path) {\n return false;\n }\n\n return this.isPathActive([route.path]);\n }\n\n //#endregion\n\n //#region level 2\n\n protected async level2Clicked(level1: Route, level2: Route): Promise<void> {\n if (\n !level1.path ||\n !level2.path ||\n !this.menuContext.isVisible(level1) ||\n this.menuContext.isDisabled(level1) ||\n !this.menuContext.isVisible(level2) ||\n this.menuContext.isDisabled(level2)\n ) {\n return;\n }\n\n await this.navigateTo([level1.path, level2.path]);\n\n this.closeAsideOnMobile();\n }\n\n protected getLevel2Routes(route: Route): Routes {\n return this.level2Routes().get(route) ?? [];\n }\n\n protected isLevel2Active(level1: Route, level2: Route): boolean {\n if (!level1.path || !level2.path) {\n return false;\n }\n\n return this.isPathActive([level1.path, level2.path]);\n }\n\n protected level2Link(level1: Route, level2: Route): string[] {\n return [this.normalizedBasePath, level1.path!, level2.path!];\n }\n\n //#endregion\n\n //#region navigation\n\n private outletBaseMatrixParams(): Record<string, string> {\n if (!this.outlet) {\n return {};\n }\n\n const tree = this.router.parseUrl(this.router.url);\n\n const outletGroup = tree.root.children[this.outlet];\n\n return {\n ...outletGroup?.segments[0]?.parameters,\n };\n }\n\n private async navigateTo(routeSegments: string[]): Promise<boolean> {\n const segments = [...this.basePathSegments, ...routeSegments];\n\n if (this.outlet) {\n const [firstSegment, ...remainingSegments] = segments;\n\n if (!firstSegment) {\n return false;\n }\n\n const matrixParams = this.outletBaseMatrixParams();\n\n return this.router.navigate([\n {\n outlets: {\n [this.outlet]: [firstSegment, matrixParams, ...remainingSegments],\n },\n },\n ]);\n }\n\n return this.router.navigate(['/', ...segments]);\n }\n\n //#endregion\n\n //#region route loading\n\n private async ensureLevel2Loaded(level1: Route): Promise<void> {\n if (this.level2Routes().has(level1)) {\n return;\n }\n\n if (this.loadingRoutes().has(level1)) {\n return;\n }\n\n this.setLoading(level1, true);\n\n try {\n const lazyRoutes = await this.loadRouteChildren(level1);\n\n const level2 = this.unwrapEmptyPathRoutes(lazyRoutes);\n\n const map = new Map(this.level2Routes());\n\n map.set(level1, level2);\n\n this.level2Routes.set(map);\n } finally {\n this.setLoading(level1, false);\n }\n }\n\n private async loadRouteChildren(route: Route): Promise<Routes> {\n if (route.children) {\n return route.children;\n }\n\n const adminRoute = route as TaonAdminRoute;\n\n if (adminRoute.loadAdminChildren) {\n return await adminRoute.loadAdminChildren();\n }\n\n return [];\n }\n\n private unwrapEmptyPathRoutes(routes: Routes): Routes {\n const result: Routes = [];\n\n for (const route of routes) {\n if (route.path === '' && route.children) {\n result.push(...this.unwrapEmptyPathRoutes(route.children));\n\n continue;\n }\n\n if (route.redirectTo !== undefined || route.data?.['hideInNavigation']) {\n continue;\n }\n\n result.push(route);\n }\n\n return result;\n }\n\n //#endregion\n\n //#region direct url support\n\n private async loadCurrentLevel1Route(): Promise<void> {\n const relativeSegments = this.currentRelativeSegments();\n\n const level1Path = relativeSegments[0];\n\n if (!level1Path) {\n return;\n }\n\n const level1 = this.routes.find(route => route.path === level1Path);\n\n if (level1) {\n await this.ensureLevel2Loaded(level1);\n }\n }\n\n //#endregion\n\n //#region helpers\n\n protected label(route: Route): string {\n return (\n resolveTaonAdminMenuItem(route.data?.['menuItem']) ??\n this.startCase(route.path ?? '')\n );\n }\n\n protected color(route: Route): string {\n return route.data?.['color'];\n }\n\n protected icon(route: Route): string | undefined {\n return route.data?.['icon'];\n }\n\n protected isLoading(route: Route): boolean {\n return this.loadingRoutes().has(route);\n }\n\n protected isExpandable(route: Route): boolean {\n return route.data?.['expandable'] !== false;\n }\n\n private isPathActive(routeSegments: string[]): boolean {\n const current = this.currentRelativeSegments();\n\n if (current.length < routeSegments.length) {\n return false;\n }\n\n return routeSegments.every((segment, index) => current[index] === segment);\n }\n\n private currentRelativeSegments(): string[] {\n const current = this.currentOutletSegments();\n\n return current.slice(this.basePathSegments.length);\n }\n\n private currentOutletSegments(): string[] {\n const tree = this.router.parseUrl(this.router.url);\n\n const outletName = this.outlet || 'primary';\n\n const group = tree.root.children[outletName];\n\n if (!group) {\n return [];\n }\n\n return group.segments.map(segment => segment.path);\n }\n\n private setLoading(route: Route, loading: boolean): void {\n const set = new Set(this.loadingRoutes());\n\n if (loading) {\n set.add(route);\n } else {\n set.delete(route);\n }\n\n this.loadingRoutes.set(set);\n }\n\n private startCase(value: string): string {\n return value\n .replace(/[-_]+/g, ' ')\n .replace(/\\b\\w/g, char => char.toUpperCase());\n }\n\n //#endregion\n}\n","<div\n #layout\n class=\"admin-layout\"\n [class.admin-layout-dialog]=\"isDialogMode\"\n [style.width.px]=\"layoutWidth() || null\"\n [style.height.px]=\"layoutHeight() || null\">\n <!-- ============================================================= -->\n <!-- HEADER -->\n <!-- ============================================================= -->\n\n <header class=\"admin-header\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.aria-label]=\"t.gettext('Toggle admin menu')\"\n class=\"admin-menu-button\"\n (click)=\"toggleAside()\">\n <mat-icon>menu</mat-icon>\n </button>\n\n <div class=\"admin-header-content\">\n <ng-content select=\"[header]\" />\n </div>\n </header>\n\n <!-- ============================================================= -->\n <!-- BODY -->\n <!-- ============================================================= -->\n\n <div class=\"admin-body\">\n <!-- =========================================================== -->\n <!-- MOBILE BACKDROP -->\n <!-- =========================================================== -->\n\n @if (asideOpened()) {\n <div\n class=\"admin-aside-backdrop\"\n (click)=\"closeAside()\"></div>\n }\n\n <!-- =========================================================== -->\n <!-- ASIDE -->\n <!-- =========================================================== -->\n\n <aside\n class=\"admin-aside\"\n [class.admin-aside-open]=\"asideOpened()\">\n <!-- ========================================================= -->\n <!-- SCROLLABLE ASIDE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-aside-content\">\n <mat-accordion class=\"admin-menu\">\n @for (level1 of routes; track level1.path) {\n @if (menuContext.isVisible(level1)) {\n @if (isExpandable(level1)) {\n <mat-expansion-panel\n [disabled]=\"menuContext.isDisabled(level1)\"\n [expanded]=\"\n isLevel1Active(level1) && !menuContext.isDisabled(level1)\n \"\n (expandedChange)=\"panelExpanded(level1, $event)\">\n <mat-expansion-panel-header\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n (click)=\"level1Clicked(level1)\">\n <mat-panel-title>\n <div class=\"admin-menu-item\">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [class.font-semibold]=\"isLevel1Active(level1)\"\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"admin-level2\">\n @if (isLoading(level1)) {\n <div class=\"admin-loading\">{{ t.gettext('Loading...') }}</div>\n } @else {\n @for (\n level2 of getLevel2Routes(level1);\n track level2.path\n ) {\n @if (menuContext.isVisible(level2)) {\n <a\n class=\"admin-level2-item\"\n role=\"button\"\n [attr.tabindex]=\"\n menuContext.isDisabled(level2) ? -1 : 0\n \"\n [attr.aria-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level2)\"\n [class.admin-level2-item-active]=\"\n isLevel2Active(level1, level2)\n \"\n (click)=\"level2Clicked(level1, level2)\"\n (keydown.enter)=\"level2Clicked(level1, level2)\"\n (keydown.space)=\"\n $event.preventDefault();\n level2Clicked(level1, level2)\n \">\n @if (icon(level2)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ icon(level2) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ label(level2) }}\n </span>\n </a>\n }\n }\n }\n </div>\n </mat-expansion-panel>\n } @else {\n <a\n class=\"admin-level1-item\"\n role=\"button\"\n [attr.tabindex]=\"menuContext.isDisabled(level1) ? -1 : 0\"\n [attr.aria-disabled]=\"menuContext.isDisabled(level1)\"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n [class.admin-level1-item-active]=\"isLevel1Active(level1)\"\n (click)=\"level1Clicked(level1)\"\n (keydown.enter)=\"level1Clicked(level1)\"\n (keydown.space)=\"\n $event.preventDefault(); level1Clicked(level1)\n \">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </a>\n }\n }\n }\n </mat-accordion>\n </div>\n\n <!-- ========================================================= -->\n <!-- ASIDE FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-aside-footer\">\n <ng-content select=\"[asideFooter]\" />\n </footer>\n </aside>\n\n <!-- =========================================================== -->\n <!-- MAIN -->\n <!-- =========================================================== -->\n\n <main class=\"admin-main\">\n <!-- ========================================================= -->\n <!-- LEVEL 3+ TABS -->\n <!-- ========================================================= -->\n\n <taon-admin-page-tabs\n class=\"admin-tabs\"\n [routes]=\"routes\"\n [basePath]=\"basePath\"\n [outlet]=\"outlet\" />\n\n <!-- ========================================================= -->\n <!-- SCROLLABLE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-content\">\n <router-outlet />\n </div>\n\n <!-- ========================================================= -->\n <!-- CONTENT FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-content-footer\">\n <ng-content select=\"[contentFooter]\" />\n </footer>\n </main>\n </div>\n\n <!-- ============================================================= -->\n <!-- DIALOG RESIZE HANDLE -->\n <!-- ============================================================= -->\n\n @if (isDialogMode) {\n <div\n class=\"admin-resize-handle\"\n (pointerdown)=\"startResize($event)\"></div>\n }\n</div>\n","import { Component, ViewChild } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n template: '',\n})\nexport abstract class TaonBaseAdminLayoutPage {\n @ViewChild(RouterOutlet)\n routerOutlet!: RouterOutlet;\n\n get hasActiveChildRoute(): boolean {\n return this.routerOutlet?.isActivated ?? false;\n }\n}\n","//#region imports\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-admin-welcome/taon-admin-welcome.component.ts', {\"src/lib/taon-admin-welcome/taon-admin-welcome.component.html\":{\"en-US\":async () => (await import('./i18n/taon-admin-welcome.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-admin-welcome.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-admin-welcome.component.html.de-DE.i18n.data')).default},\"src/lib/taon-admin-welcome/taon-admin-welcome.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-admin-welcome.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-admin-welcome.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-admin-welcome.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'app-taon-admin-welcome',\n templateUrl: './taon-admin-welcome.component.html',\n styleUrls: ['./taon-admin-welcome.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, RouterOutlet],\n})\nexport class TaonAdminWelcomeComponent {\n t = t.for(this);\n}\n","<!-- <router-outlet></router-outlet> -->\n<p>\n {{ t.gettext('Welcome to Taon Admin') }}\n</p>\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { adminLazyRoute } from '../index';\n//#endregion\n\nexport const TaonAdminWelcomeRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./taon-admin-welcome.component').then(m => m.TaonAdminWelcomeComponent),\n\n // children: [\n // adminLazyRoute({\n // path: 'dashboard',\n // menuItem: 'Dashboard',\n // icon: 'dashboard',\n // expandable: false,\n // loader: () =>\n // import('./anothermodule.routes').then(m => m.DashboardRoutes),\n // }),\n // ],\n },\n];\n\n/**\n * By default exporting TaonAdminWelcomeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonAdminWelcomeRoutes;","//#region imports\nimport { Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.ts', {\"src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.html\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.html.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-toast.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-toast.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-toast.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-toast.component.ts.de-DE.i18n.data')).default}} as any);\n\nexport interface TaonErrorDetailsDialogData {\n message: string;\n details: string;\n}\n\ntype TaonEditor = 'vscode' | 'vscodium';\n\ninterface TaonStackTraceLine {\n text: string;\n file?: string;\n line?: number;\n column?: number;\n}\n\n@Component({\n selector: 'taon-error-details-dialog',\n standalone: true,\n imports: [MatDialogModule, MatButtonModule, MatButtonToggleModule],\n templateUrl: './taon-error-details-dialog.component.html',\n styleUrls: ['./taon-error-details-dialog.component.scss'],\n})\nexport class TaonErrorDetailsDialogComponent {\n //#region injections\n readonly t = t.for(this);\n\n readonly data = inject<TaonErrorDetailsDialogData>(MAT_DIALOG_DATA);\n //#endregion\n\n //#region constants\n private readonly editorStorageKey = 'taon-error-details-editor';\n //#endregion\n\n //#region state\n editor: TaonEditor = this.loadEditor();\n\n readonly stackLines = this.parseStackTrace(this.data.details);\n //#endregion\n\n //#region editor\n setEditor(editor: TaonEditor): void {\n this.editor = editor;\n\n localStorage.setItem(this.editorStorageKey, editor);\n }\n\n private loadEditor(): TaonEditor {\n const editor = localStorage.getItem(this.editorStorageKey);\n\n if (editor === 'vscode' || editor === 'vscodium') {\n return editor;\n }\n\n return 'vscode';\n }\n //#endregion\n\n //#region stack trace\n private parseStackTrace(stack: string): TaonStackTraceLine[] {\n return stack\n .split('\\n')\n .map(text => text.trimEnd())\n .filter(text => text.trim().length > 0)\n .map(text => this.parseStackTraceLine(text));\n }\n\n private parseStackTraceLine(text: string): TaonStackTraceLine {\n /**\n * Matches:\n *\n * /Users/test/file.ts:10:20\n *\n * C:\\projects\\test\\file.ts:10:20\n *\n * at something (/Users/test/file.ts:10:20)\n */\n const match = text.match(/((?:[A-Za-z]:[\\\\/]|\\/)[^()\\n]+?):(\\d+):(\\d+)/);\n\n if (!match) {\n return {\n text,\n };\n }\n\n return {\n text,\n file: match[1],\n line: Number(match[2]),\n column: Number(match[3]),\n };\n }\n //#endregion\n\n //#region open editor\n openStackLine(stackLine: TaonStackTraceLine): void {\n if (!stackLine.file || !stackLine.line) {\n return;\n }\n\n const url = this.createEditorUrl(\n stackLine.file,\n stackLine.line,\n stackLine.column,\n );\n\n window.location.href = url;\n }\n\n private createEditorUrl(file: string, line: number, column?: number): string {\n const protocol = this.editor === 'vscodium' ? 'vscodium' : 'vscode';\n\n const location = [file, line, column]\n .filter(value => value !== undefined)\n .join(':');\n\n return `${protocol}://file${location}`;\n }\n //#endregion\n}\n","<h2 mat-dialog-title>{{ t.gettext('Error details') }}</h2>\n\n<mat-dialog-content>\n <div class=\"error-message\">\n {{ data.message }}\n </div>\n\n <div class=\"editor-selector\">\n <span class=\"editor-selector-label\">{{ t.gettext('I am using editor:') }}</span>\n\n <mat-button-toggle-group\n [value]=\"editor\"\n (change)=\"setEditor($event.value)\"\n [attr.aria-label]=\"t.gettext('Code editor')\">\n <mat-button-toggle value=\"vscode\"> VS Code </mat-button-toggle>\n\n <mat-button-toggle value=\"vscodium\"> VSCodium </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <pre\n class=\"error-details\"><code>@for (stackLine of stackLines; track $index) {\n@if (stackLine.file) {<a\n class=\"stack-link\"\n [title]=\"\n t.gettext('Open [[ file ]]:[[ line ]]:[[ column ]]', {\n file: stackLine.file,\n line: stackLine.line,\n column: stackLine.column,\n })\n \"\n (click)=\"openStackLine(stackLine)\">{{ stackLine.text }}</a>} @else {{{ stackLine.text }}}{{ '\\n' }}\n}</code></pre>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button\n mat-button\n mat-dialog-close>\n {{ t.gettext('Close') }}\n </button>\n</mat-dialog-actions>\n","import { Component, inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { HotToastRef } from '@ngneat/hot-toast';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n\nimport { TaonErrorDetailsDialogComponent } from './taon-error-details-dialog.component';\n\nconst t = Translation.for('src/lib/taon-backoffice-notifications/taon-error-toast.component.ts', {\"src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.html\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.html.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-toast.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-toast.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-toast.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-toast.component.ts.de-DE.i18n.data')).default}} as any);\n\nexport interface TaonErrorToastData {\n title: string;\n details: string;\n}\n\n@Component({\n selector: 'taon-error-toast',\n standalone: true,\n template: `\n <div\n class=\"taon-error-toast\"\n (click)=\"showDetails()\">\n <div>{{ data.title }}</div>\n\n <small>{{ t.gettext('Click for details') }}</small>\n </div>\n `,\n styles: [\n `\n .taon-error-toast {\n cursor: pointer;\n }\n\n small {\n display: block;\n margin-top: 4px;\n opacity: 0.7;\n }\n `,\n ],\n})\nexport class TaonErrorToastComponent {\n readonly t = t.for(this);\n\n private readonly toastRef =\n inject<HotToastRef<TaonErrorToastData>>(HotToastRef);\n\n private readonly dialog = inject(MatDialog);\n\n readonly data = this.toastRef.data;\n\n showDetails(): void {\n this.dialog.open(TaonErrorDetailsDialogComponent, {\n width: '800px',\n maxWidth: '95vw',\n data: {\n message: this.data.title,\n details: this.data.details,\n },\n });\n\n this.toastRef.close();\n }\n}\n","//#region imports\nimport { inject, Injectable } from '@angular/core';\nimport { HotToastService } from '@ngneat/hot-toast';\n\nimport {\n TaonNotificationInput,\n TaonNotificationOptions,\n} from './taon-backoffice-notifications.models';\nimport {\n TaonErrorToastComponent,\n TaonErrorToastData,\n} from './taon-error-toast.component';\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TaonBackofficeNotificationsService {\n //#region injections\n private readonly toast = inject(HotToastService);\n //#endregion\n\n constructor() {\n this.toast.defaultConfig.dismissible = true;\n }\n\n //#region private methods\n private normalize(input: TaonNotificationInput): TaonNotificationOptions {\n return typeof input === 'string' ? { title: input } : input;\n }\n //#endregion\n\n //#region notifications\n success(input: TaonNotificationInput) {\n const { title } = this.normalize(input);\n\n return this.toast.success(title);\n }\n\n error(input: TaonNotificationInput) {\n const { title, details } = this.normalize(input);\n\n // Normal error - exactly as before\n if (!details) {\n return this.toast.error(title);\n }\n\n // Error with clickable details\n return this.toast.error<TaonErrorToastData>(TaonErrorToastComponent, {\n data: {\n title,\n details,\n },\n });\n }\n\n warn(input: TaonNotificationInput) {\n const { title } = this.normalize(input);\n\n return this.toast.warning(title);\n }\n\n info(input: TaonNotificationInput) {\n const { title } = this.normalize(input);\n\n return this.toast.info(title);\n }\n //#endregion\n}\n","//#region imports\nimport { Component, DestroyRef, inject, Input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport {\n HttpResponseError,\n Resource,\n RestErrorResponseWrapper,\n} from 'ng2-rest/websql';\nimport { getHttpStatus, Taon, TaonAdminService } from 'taon/websql';\nimport { _ } from 'tnp-core/websql';\n\nimport { TaonBackofficeNotificationsService } from './taon-backoffice-notifications.service';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts', {\"src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-backoffice-notifications.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.html\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.html.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-details-dialog.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-details-dialog.component.ts.de-DE.i18n.data')).default},\"src/lib/taon-backoffice-notifications/taon-error-toast.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-error-toast.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-error-toast.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-error-toast.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-backoffice-notifications',\n standalone: true,\n templateUrl: './taon-backoffice-notifications.component.html',\n styleUrls: ['./taon-backoffice-notifications.component.scss'],\n})\nexport class TaonBackofficeNotificationsComponent {\n //#region injections\n t = t.for(this);\n\n private readonly notification = inject(TaonBackofficeNotificationsService);\n\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly taonAdminService = inject(TaonAdminService);\n\n @Input() filter: (\n err: HttpResponseError<RestErrorResponseWrapper>,\n ) => HttpResponseError<RestErrorResponseWrapper>;\n\n private readonly shownNotifications = new Set<string>();\n\n private showErrorNotification(title: string, details?: string): void {\n const key = JSON.stringify([title, details]);\n\n if (this.shownNotifications.has(key)) {\n return;\n }\n\n this.shownNotifications.add(key);\n\n this.notification.error({\n title,\n details,\n });\n }\n\n //#endregion\n\n //#region constructor\n constructor() {\n Resource.listenErrors\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((error: HttpResponseError<RestErrorResponseWrapper>) => {\n if (_.isFunction(this.filter)) {\n error = this.filter(error);\n }\n\n const jsonMsg = error?.body?.json;\n\n if (!jsonMsg?.message) {\n console.log({ error });\n }\n\n const statusCode = jsonMsg.status ?? error.statusCode;\n\n const code = jsonMsg?.code || getHttpStatus(statusCode);\n if (this.taonAdminService.shouldSkipShowingError(code as any)) {\n console.log(\n `[@taon-dev/sudo] Skipping notificaiton for message \"${jsonMsg.message}\" (code=${statusCode})`,\n );\n } else {\n const title =\n t.translate(jsonMsg.message) || t.gettext('Unknown error');\n\n const details = jsonMsg?.details;\n\n this.showErrorNotification(title, details);\n }\n });\n }\n //#endregion\n}\n","<!-- <p>\n notyfications works!\n</p> -->\n","import { Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n\nexport interface TaonConfirmDialogData {\n title: string;\n message?: string;\n confirmText?: string;\n cancelText?: string;\n}\n\nconst t = Translation.for('src/lib/taon-confirm-dialog/taon-confirm-dialog.component.ts', {\"src/lib/taon-confirm-dialog/taon-confirm-dialog.component.html\":{\"en-US\":async () => (await import('./i18n/taon-confirm-dialog.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-confirm-dialog.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-confirm-dialog.component.html.de-DE.i18n.data')).default},\"src/lib/taon-confirm-dialog/taon-confirm-dialog.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-confirm-dialog.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-confirm-dialog.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-confirm-dialog.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-confirm-dialog',\n standalone: true,\n imports: [MatDialogModule, MatButtonModule],\n templateUrl: './taon-confirm-dialog.component.html',\n})\nexport class TaonConfirmDialogComponent {\n readonly t = t.for(this);\n\n readonly data = inject<TaonConfirmDialogData>(MAT_DIALOG_DATA);\n\n private readonly dialogRef = inject(MatDialogRef<TaonConfirmDialogComponent>);\n\n cancel(): void {\n this.dialogRef.close(false);\n }\n\n confirm(): void {\n this.dialogRef.close(true);\n }\n}\n","<div\n class=\"flex min-w-[320px] max-w-[560px] flex-col gap-6 p-6 text-gray-900 dark:text-gray-100 sm:p-7\">\n <!-- Header -->\n <h2 class=\"m-0 text-xl leading-snug font-medium sm:text-2xl\">\n {{ data.title }}\n </h2>\n\n <!-- Message -->\n @if (data.message) {\n <p\n class=\"m-0 whitespace-pre-line text-base leading-relaxed text-gray-600 dark:text-gray-300 sm:text-lg\">\n {{ data.message }}\n </p>\n }\n\n <!-- Actions -->\n <div class=\"flex flex-wrap items-center justify-end gap-3\">\n <button\n mat-button\n type=\"button\"\n (click)=\"cancel()\">\n {{ data.cancelText || t.gettext('Cancel') }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n class=\"!rounded-full !px-6\"\n (click)=\"confirm()\">\n {{ data.confirmText || t.gettext('OK') }}\n </button>\n </div>\n</div>\n","//#region imports\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MtxGridColumn, MtxGridModule } from '@ng-matero/extensions/grid';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { getDefaultModel } from 'ng2-rest/websql';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n catchError,\n debounceTime,\n distinctUntilChanged,\n finalize,\n from,\n map,\n of,\n startWith,\n switchMap,\n tap,\n} from 'rxjs';\nimport {\n Symbols as TaonSymbols,\n TaonBaseCrudController,\n TaonBaseEntity,\n TaonPaginationSort,\n TaonPaginationQuery,\n ClassHelpers,\n Taon,\n} from 'taon/websql';\nimport { _, json5 } from 'tnp-core/websql';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-datatable/taon-datatable.component.ts', {\"src/lib/taon-datatable/taon-datatable.component.html\":{\"en-US\":async () => (await import('./i18n/taon-datatable.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-datatable.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-datatable.component.html.de-DE.i18n.data')).default},\"src/lib/taon-datatable/taon-datatable.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-datatable.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-datatable.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-datatable.component.ts.de-DE.i18n.data')).default}} as any);\n\nconst defaultColumns: MtxGridColumn[] = [\n {\n header: t.gettext('ID'),\n field: 'id',\n },\n {\n header: t.gettext('NAME'),\n field: 'name',\n },\n];\n\ntype SearchMode = 'simple' | 'advanced';\n\n@Component({\n selector: 'taon-datatable',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatPaginatorModule,\n MatSelectModule,\n\n MtxGridModule,\n ],\n templateUrl: './taon-datatable.component.html',\n styleUrls: ['./taon-datatable.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaonDatatableComponent implements OnInit {\n //#region fields & getters\n readonly t = t.for(this);\n\n private readonly cdr = inject(ChangeDetectorRef);\n\n private readonly destroyRef = inject(DestroyRef);\n\n //#region inputs\n\n @Input()\n pageNumber = 1;\n\n @Input()\n pageSize = 10;\n\n @Input()\n pageSizeOptions: number[] = [5, 10, 20, 50, 100];\n\n noResultText = this.t.gettext('No records found');\n\n @Input()\n allowedColumns: string[] = [];\n\n @Input()\n expansionTemplate?: TemplateRef<any>;\n\n @Input()\n entityCrudController?: TaonBaseCrudController<any>;\n\n @Input()\n columns: MtxGridColumn[] = defaultColumns;\n\n @Input()\n hideSearch = false;\n\n @Input()\n hideAddButton = false;\n\n @Input()\n safe = false;\n\n @Input()\n searchMode: SearchMode = 'advanced';\n\n /**\n * Optional custom backend pagination method.\n */\n @Input()\n callQueryMethod?: string;\n\n private _data?: any[];\n\n @Input()\n set data(value: any[] | undefined | null) {\n this._data = value ?? undefined;\n\n if (this._data) {\n this.pageNumber = 1;\n this.reload();\n }\n }\n\n get data(): any[] | undefined {\n return this._data;\n }\n\n get offlineMode(): boolean {\n return this.data !== undefined;\n }\n\n //#endregion\n\n //#region outputs\n\n @Output()\n readonly expansionChange = new EventEmitter<any>();\n\n @Output()\n readonly addingItem = new EventEmitter<void>();\n\n //#endregion\n\n //#region fields\n\n rows: any[] = [];\n\n totalElements = 0;\n\n isLoading = false;\n\n expandable = false;\n\n @Input() showPaginator: boolean;\n\n advancedSearchOpened = false;\n\n searchValue = '';\n\n columnFilters: Record<string, string> = {};\n\n sort?: TaonPaginationSort;\n\n private readonly reload$ = new BehaviorSubject<void>(undefined);\n\n private readonly searchChange$ = new Subject<string>();\n\n readonly data$: Observable<any[]> = this.reload$.pipe(\n switchMap(() => this.loadData()),\n );\n\n expandedRows = new Set<any>();\n\n //#endregion\n\n //#region getters\n\n get entity(): typeof TaonBaseEntity | undefined {\n return this.entityCrudController?.entityClassResolveFn();\n }\n\n get filterableColumns(): MtxGridColumn[] {\n return this.columns.filter(column => Boolean(column.field));\n }\n\n //#endregion\n\n //#endregion\n\n //#region expansion\n onExpansionChange(event: any) {\n // console.log(event);\n // adapt this depending on exact MtxGrid event shape\n if (event.expanded) {\n this.expandedRows.add(event.data);\n } else {\n this.expandedRows.delete(event.data);\n }\n\n this.expansionChange.emit(event);\n }\n\n isExpanded(row: any): boolean {\n return this.expandedRows.has(row);\n }\n\n //#endregion\n\n //#region hooks\n\n ngOnInit(): void {\n this.prepareColumns();\n // console.log({ columns: this.columns });\n this.expandable = Boolean(this.expansionTemplate);\n\n this.showPaginator = _.isBoolean(this.showPaginator)\n ? this.showPaginator\n : Boolean(this.entity) || this.offlineMode;\n\n this.searchChange$\n .pipe(\n debounceTime(400),\n distinctUntilChanged(),\n tap(search => {\n this.searchValue = search;\n this.pageNumber = 1;\n this.reload();\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n\n this.data$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(rows => {\n this.rows = rows;\n this.cdr.markForCheck();\n });\n }\n\n //#endregion\n\n //#region search\n\n searchChanged(value: string): void {\n this.searchChange$.next(value);\n }\n\n clearSearch(): void {\n this.searchValue = '';\n this.columnFilters = {};\n this.pageNumber = 1;\n\n this.reload();\n }\n\n applyAdvancedFilters(): void {\n this.pageNumber = 1;\n this.reload();\n }\n\n toggleAdvancedSearch(): void {\n this.advancedSearchOpened = !this.advancedSearchOpened;\n }\n\n //#endregion\n\n //#region pagination\n\n getNextPage(event: PageEvent): void {\n this.pageNumber = event.pageIndex + 1;\n\n this.pageSize = event.pageSize;\n\n this.reload();\n }\n\n //#endregion\n\n //#region sorting\n\n sortChanged(event: any): void {\n const field = event?.active ?? event?.field;\n\n const direction = event?.direction ?? '';\n\n this.sort = {\n field,\n direction,\n };\n\n this.pageNumber = 1;\n\n this.reload();\n }\n\n //#endregion\n\n //#region data\n\n reload(): void {\n this.reload$.next();\n }\n\n private getFieldValue(row: any, field: string): unknown {\n return field.split('.').reduce((value, key) => value?.[key], row);\n }\n\n private loadOfflineData(): any[] {\n let rows = [...(this.data ?? [])];\n\n //#region global search\n\n const search = this.searchValue.trim().toLowerCase();\n\n if (search) {\n rows = rows.filter(row =>\n this.columns.some(column => {\n if (!column.field) {\n return false;\n }\n\n const value = this.getFieldValue(row, String(column.field));\n\n return String(value ?? '')\n .toLowerCase()\n .includes(search);\n }),\n );\n }\n\n //#endregion\n\n //#region column filters\n\n const filters = this.cleanFilters(this.columnFilters);\n\n for (const [field, filterValue] of Object.entries(filters)) {\n const normalizedFilter = filterValue.toLowerCase();\n\n rows = rows.filter(row => {\n const value = this.getFieldValue(row, field);\n\n return String(value ?? '')\n .toLowerCase()\n .includes(normalizedFilter);\n });\n }\n\n //#endregion\n\n //#region sorting\n\n if (this.sort?.field && this.sort.direction) {\n const field = String(this.sort.field);\n const direction = this.sort.direction === 'desc' ? -1 : 1;\n\n rows.sort((a, b) => {\n const aValue = this.getFieldValue(a, field);\n const bValue = this.getFieldValue(b, field);\n\n if (aValue === bValue) {\n return 0;\n }\n\n if (aValue === undefined || aValue === null) {\n return -1 * direction;\n }\n\n if (bValue === undefined || bValue === null) {\n return 1 * direction;\n }\n\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return (aValue - bValue) * direction;\n }\n\n return (\n String(aValue).localeCompare(String(bValue), undefined, {\n numeric: true,\n sensitivity: 'base',\n }) * direction\n );\n });\n }\n\n //#endregion\n\n //#region pagination\n\n this.totalElements = rows.length;\n\n const start = (this.pageNumber - 1) * this.pageSize;\n const end = start + this.pageSize;\n\n return this.prepareRows(rows.slice(start, end));\n\n //#endregion\n }\n\n private loadData(): Observable<any[]> {\n if (this.offlineMode) {\n return of(this.loadOfflineData());\n }\n\n if (!this.entity || !this.entityCrudController) {\n this.totalElements = 0;\n return of([]);\n }\n\n this.isLoading = true;\n this.cdr.markForCheck();\n\n const query: TaonPaginationQuery = {\n pageNumber: this.pageNumber,\n pageSize: this.pageSize,\n search: this.searchValue,\n filters: this.cleanFilters(this.columnFilters),\n sort: this.sort,\n callQueryMethod: this.callQueryMethod as any,\n };\n\n //#region handle info when not allowed method on controller level\n\n if (!this.safe && !this.entityCrudController.paginationQuery(query)) {\n throw new Error(\n `Please enable paginationQuery() method in your\n controller ${ClassHelpers.getName(this.entityCrudController)}\n\n @Controller({ allowedMethods: ['paginationQuery'] })\n class ${ClassHelpers.getName(this.entityCrudController)} ..\n `,\n );\n }\n\n if (this.safe && !this.entityCrudController.paginationQuerySafe(query)) {\n throw new Error(\n `Please enable paginationQuerySafe() method in your controller\n ${ClassHelpers.getName(this.entityCrudController)}\n\n @Controller({ allowedMethods: ['paginationQuerySafe'] })\n class ${ClassHelpers.getName(this.entityCrudController)} ..\n `,\n );\n }\n\n //#endregion\n\n return from(\n (this.safe\n ? this.entityCrudController.paginationQuerySafe\n : this.entityCrudController.paginationQuery)(query).request()\n .observable,\n ).pipe(\n tap(response => {\n this.totalElements =\n Number(response.headers.get(TaonSymbols.old.X_TOTAL_COUNT)) || 0;\n }),\n\n map(response => this.prepareRows(response.body.json)),\n\n catchError(error => {\n console.error(\n `[taon-datatable] Unable to load data from ` +\n `${ClassHelpers.getName(this.entityCrudController)} ${\n this.safe ? 'paginationQuerySafe' : 'paginationQuery'\n }`,\n error,\n );\n\n return of([]);\n }),\n\n finalize(() => {\n this.isLoading = false;\n this.cdr.markForCheck();\n }),\n );\n }\n\n //#endregion\n\n //#region helpers\n\n private cleanFilters(\n filters: Record<string, string>,\n ): Record<string, string> {\n return Object.fromEntries(\n Object.entries(filters)\n .filter(\n ([, value]) =>\n value !== undefined &&\n value !== null &&\n String(value).trim() !== '',\n )\n .map(([key, value]) => [key, String(value).trim()]),\n );\n }\n\n private prepareRows(rows: any[]): any[] {\n return rows.map(row => {\n // const result = {\n // ...row,\n // };\n\n // for (const key of Object.keys(result)) {\n // if (_.isObject(result[key])) {\n // result[key] = json5.stringify(result[key]);\n // }\n // }\n\n return row;\n });\n }\n\n private prepareColumns(): void {\n const entityClass = this.entity;\n\n if (!entityClass) {\n return;\n }\n\n const usingDefaultColumns = _.isEqual(this.columns, defaultColumns);\n\n if (!usingDefaultColumns) {\n return;\n }\n\n try {\n const props = Object.keys(getDefaultModel(entityClass as Function) || {});\n\n let columns = props\n .filter(prop =>\n this.allowedColumns.length > 0\n ? this.allowedColumns.includes(prop)\n : true,\n )\n .map(\n prop =>\n ({\n header: _.upperCase(prop),\n field: prop,\n }) as MtxGridColumn,\n );\n\n const extra = this.allowedColumns.filter(field => !props.includes(field));\n\n columns = [\n ...columns,\n ...extra.map(\n field =>\n ({\n header: _.upperCase(field),\n field,\n }) as MtxGridColumn,\n ),\n ];\n\n this.columns = columns;\n } catch (error) {\n console.error('[taon-datatable] Unable to generate columns', error);\n }\n }\n\n //#endregion\n}\n","<div class=\"flex w-full flex-col gap-3\">\n <!-- #region toolbar -->\n @if (!hideSearch) {\n <div\n class=\"flex w-full flex-col gap-2 rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-900 md:flex-row md:items-center\">\n <!-- global search -->\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"min-w-0 flex-1\">\n <mat-icon matPrefix> search </mat-icon>\n\n <input\n matInput\n [placeholder]=\"t.gettext('Search...')\"\n [value]=\"searchValue\"\n (input)=\"searchChanged($any($event.target).value)\" />\n\n @if (searchValue) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n\n <!-- advanced search -->\n @if (searchMode === 'advanced') {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"toggleAdvancedSearch()\">\n <mat-icon> tune </mat-icon>\n\n {{ t.gettext('Filters') }}\n\n @if (advancedSearchOpened) {\n <mat-icon> expand_less </mat-icon>\n } @else {\n <mat-icon> expand_more </mat-icon>\n }\n </button>\n }\n\n <!-- refresh -->\n <button\n mat-icon-button\n type=\"button\"\n [title]=\"t.gettext('Refresh')\"\n (click)=\"reload()\">\n <mat-icon> refresh </mat-icon>\n </button>\n\n <!-- add -->\n @if (!hideAddButton) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"addingItem.emit()\">\n <mat-icon> add </mat-icon>\n\n {{ t.gettext('Add') }}\n </button>\n }\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region advanced filters -->\n @if (!hideSearch && searchMode === 'advanced' && advancedSearchOpened) {\n <div\n class=\"grid grid-cols-1 gap-3 rounded-lg border border-gray-200 bg-gray-50 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n @for (column of filterableColumns; track column.field) {\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"w-full\">\n <mat-label>\n {{ column.header }}\n </mat-label>\n\n <input\n matInput\n [(ngModel)]=\"columnFilters[$any(column.field)]\"\n (keyup.enter)=\"applyAdvancedFilters()\" />\n </mat-form-field>\n }\n\n <div\n class=\"flex items-center justify-end gap-2 md:col-span-2 lg:col-span-3 xl:col-span-4\">\n <button\n mat-button\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon> filter_alt_off </mat-icon>\n\n {{ t.gettext('Clear') }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"applyAdvancedFilters()\">\n <mat-icon> filter_alt </mat-icon>\n\n {{ t.gettext('Apply filters') }}\n </button>\n </div>\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region grid -->\n <div\n class=\"relative min-h-[250px] overflow-hidden rounded-lg border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900\">\n @if (isLoading) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/60 backdrop-blur-[1px] dark:bg-gray-900/60\">\n <div\n class=\"flex items-center gap-2 rounded-md bg-white px-4 py-2 shadow dark:bg-gray-800\">\n <mat-icon class=\"animate-spin\"> refresh </mat-icon>\n\n {{ t.gettext('Loading...') }}\n </div>\n </div>\n }\n\n <mtx-grid\n [data]=\"rows\"\n [columns]=\"columns\"\n [expandable]=\"expandable\"\n [expansionTemplate]=\"lazyExpansionTemplate\"\n [length]=\"totalElements\"\n [pageOnFront]=\"false\"\n [pageIndex]=\"pageNumber - 1\"\n [pageSize]=\"pageSize\"\n [noResultText]=\"noResultText\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showPaginator]=\"showPaginator\"\n (expansionChange)=\"onExpansionChange($event)\"\n (page)=\"getNextPage($event)\"\n (sortChange)=\"sortChanged($event)\">\n </mtx-grid>\n\n <ng-template\n #lazyExpansionTemplate\n let-row>\n @if (isExpanded(row)) {\n <ng-container\n [ngTemplateOutlet]=\"expansionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\">\n </ng-container>\n }\n </ng-template>\n </div>\n <!-- #endregion -->\n</div>\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { adminLazyRoute } from '../index';\n//#endregion\n\nexport const TaonDatatableRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./taon-datatable.component').then(m => m.TaonDatatableComponent),\n\n children: [\n // adminLazyRoute({\n // path: 'dashboard',\n // menuItem: 'Dashboard',\n // icon: 'dashboard',\n // expandable: false,\n // loader: () =>\n // import('./anothermodule.routes').then(m => m.DashboardRoutes),\n // }),\n ],\n },\n];\n\n/**\n * By default exporting TaonDatatableRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonDatatableRoutes;","//#region imports\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n ElementRef,\n EnvironmentInjector,\n Injectable,\n InjectionToken,\n Injector,\n Input,\n OnDestroy,\n Type,\n ViewChild,\n createComponent,\n inject,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n ActivatedRoute,\n ActivatedRouteSnapshot,\n Params,\n Router,\n} from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { BehaviorSubject } from 'rxjs';\nimport { Taon } from 'taon/websql';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-detachable-dialog-content/taon-detached-window-content.component.ts', {\"src/lib/taon-detachable-dialog-content/taon-detached-window-content.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-detached-window-content.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-detached-window-content.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-detached-window-content.component.ts.de-DE.i18n.data')).default}} as any);\n\n//#region tokens\nexport const TAON_IS_DETACHED_WINDOW = new InjectionToken<boolean>(\n 'TAON_IS_DETACHED_WINDOW',\n {\n factory: () => false,\n },\n);\n//#endregion\n\n//#region models\nexport interface TaonDetachedRouteState {\n url: string;\n\n params: Params;\n\n queryParams: Params;\n\n fragment: string | null;\n\n data: Record<string, any>;\n}\n\nexport interface TaonDetachedWindow {\n id: string;\n\n title: string;\n\n component: Type<any>;\n\n routeState: TaonDetachedRouteState;\n\n /**\n * Current stacking order of the window.\n *\n * Higher value = window is closer to the user.\n */\n zIndex: number;\n\n componentRef?: ComponentRef<any>;\n}\n//#endregion\n\n//#region helpers\nfunction cloneObject<T extends Record<string, any>>(value: T | undefined): T {\n return {\n ...(value || {}),\n } as T;\n}\n\nfunction createDetachedActivatedRoute(\n state: TaonDetachedRouteState,\n): ActivatedRoute {\n const params$ = new BehaviorSubject<Params>(cloneObject(state.params));\n\n const queryParams$ = new BehaviorSubject<Params>(\n cloneObject(state.queryParams),\n );\n\n const fragment$ = new BehaviorSubject<string | null>(state.fragment);\n\n const data$ = new BehaviorSubject<Record<string, any>>(\n cloneObject(state.data),\n );\n\n const snapshot = {\n params: cloneObject(state.params),\n\n queryParams: cloneObject(state.queryParams),\n\n fragment: state.fragment,\n\n data: cloneObject(state.data),\n\n paramMap: undefined,\n\n queryParamMap: undefined,\n } as unknown as ActivatedRouteSnapshot;\n\n return {\n snapshot,\n\n params: params$.asObservable(),\n\n queryParams: queryParams$.asObservable(),\n\n fragment: fragment$.asObservable(),\n\n data: data$.asObservable(),\n } as unknown as ActivatedRoute;\n}\n//#endregion\n\n//#region detached windows service\n@Injectable({\n providedIn: 'root',\n})\nexport class TaonDetachedWindowsService {\n //#region fields\n\n /**\n * Base z-index for all detached windows.\n */\n private readonly baseZIndex = 10000;\n\n /**\n * Monotonically increasing focus counter.\n *\n * Every time a window receives focus it gets the next value.\n */\n private zIndexCounter = this.baseZIndex;\n\n readonly windows = signal<TaonDetachedWindow[]>([]);\n\n //#endregion\n\n //#region open\n open(options: {\n title: string;\n component: Type<any>;\n routeState: TaonDetachedRouteState;\n }): string {\n const id =\n typeof crypto !== 'undefined' && crypto.randomUUID\n ? crypto.randomUUID()\n : `taon-window-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n\n const zIndex = ++this.zIndexCounter;\n\n this.windows.update(windows => [\n ...windows,\n {\n id,\n\n title: options.title,\n\n component: options.component,\n\n routeState: options.routeState,\n\n zIndex,\n },\n ]);\n\n return id;\n }\n //#endregion\n\n //#region focus\n focus(id: string): void {\n const windows = this.windows();\n\n const windowToFocus = windows.find(window => window.id === id);\n\n if (!windowToFocus) {\n return;\n }\n\n /**\n * Don't create a new signal value if this window\n * is already the top-most window.\n */\n const highestZIndex = Math.max(...windows.map(window => window.zIndex));\n\n if (windowToFocus.zIndex === highestZIndex) {\n return;\n }\n\n const zIndex = ++this.zIndexCounter;\n\n this.windows.update(currentWindows =>\n currentWindows.map(window =>\n window.id === id\n ? {\n ...window,\n zIndex,\n }\n : window,\n ),\n );\n }\n //#endregion\n\n //#region close\n close(id: string): void {\n const detachedWindow = this.windows().find(current => current.id === id);\n\n if (detachedWindow?.componentRef) {\n detachedWindow.componentRef.destroy();\n }\n\n this.windows.update(windows =>\n windows.filter(current => current.id !== id),\n );\n }\n //#endregion\n\n //#region register component ref\n registerComponentRef(id: string, componentRef: ComponentRef<any>): void {\n this.windows.update(windows =>\n windows.map(window =>\n window.id === id\n ? {\n ...window,\n componentRef,\n }\n : window,\n ),\n );\n }\n //#endregion\n}\n//#endregion\n\n//#region detached window\n@Component({\n selector: 'taon-detached-window',\n standalone: true,\n imports: [\n CommonModule,\n CdkDrag,\n CdkDragHandle,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host {\n display: block;\n }\n\n .taon-detached-window {\n position: absolute;\n\n top: 80px;\n left: 80px;\n\n width: min(900px, calc(100vw - 80px));\n height: min(700px, calc(100vh - 80px));\n\n min-width: 320px;\n min-height: 200px;\n\n display: flex;\n flex-direction: column;\n\n background: var(--mat-sys-surface, white);\n\n color: var(--mat-sys-on-surface, black);\n\n border: 1px solid var(--mat-sys-outline-variant, #ccc);\n\n border-radius: 8px;\n\n box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2);\n\n overflow: hidden;\n\n resize: both;\n }\n\n .taon-detached-window-header {\n height: 40px;\n\n flex: 0 0 40px;\n\n display: flex;\n align-items: center;\n\n padding-left: 12px;\n\n border-bottom: 1px solid var(--mat-sys-outline-variant, #ccc);\n\n user-select: none;\n }\n\n .taon-detached-window-drag-handle {\n flex: 1;\n\n height: 100%;\n\n display: flex;\n align-items: center;\n\n cursor: move;\n\n overflow: hidden;\n }\n\n .taon-detached-window-title {\n overflow: hidden;\n\n white-space: nowrap;\n\n text-overflow: ellipsis;\n\n font-weight: 500;\n }\n\n .taon-detached-window-actions {\n display: flex;\n\n align-items: center;\n\n padding-right: 4px;\n }\n\n .taon-detached-window-body {\n flex: 1;\n\n min-height: 0;\n\n overflow: auto;\n }\n\n .taon-detached-window-component-host {\n display: block;\n\n min-height: 100%;\n }\n `,\n ],\n template: `\n <div\n class=\"taon-detached-window\"\n cdkDrag\n [style.z-index]=\"window.zIndex\"\n (pointerdown)=\"focus()\">\n <header class=\"taon-detached-window-header\">\n <div\n class=\"taon-detached-window-drag-handle\"\n cdkDragHandle>\n <span class=\"taon-detached-window-title\">\n {{ window.title }}\n </span>\n </div>\n\n <div class=\"taon-detached-window-actions\">\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Close\"\n (click)=\"close()\">\n <mat-icon> close </mat-icon>\n </button>\n </div>\n </header>\n\n <main class=\"taon-detached-window-body\">\n <div\n #componentHost\n class=\"taon-detached-window-component-host\"></div>\n </main>\n </div>\n `,\n})\nexport class TaonDetachedWindowComponent implements AfterViewInit, OnDestroy {\n //#region injections\n private readonly windowsService = inject(TaonDetachedWindowsService);\n\n private readonly appRef = inject(ApplicationRef);\n\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n private readonly injector = inject(Injector);\n //#endregion\n\n //#region inputs\n @Input({\n required: true,\n })\n window!: TaonDetachedWindow;\n //#endregion\n\n //#region view children\n @ViewChild('componentHost', {\n static: true,\n })\n componentHost!: ElementRef<HTMLElement>;\n //#endregion\n\n //#region fields\n private componentRef?: ComponentRef<any>;\n //#endregion\n\n //#region lifecycle\n ngAfterViewInit(): void {\n this.createDetachedComponent();\n }\n\n ngOnDestroy(): void {\n this.destroyDetachedComponent();\n }\n //#endregion\n\n //#region focus\n focus(): void {\n this.windowsService.focus(this.window.id);\n }\n //#endregion\n\n //#region create detached component\n private createDetachedComponent(): void {\n const detachedActivatedRoute = createDetachedActivatedRoute(\n this.window.routeState,\n );\n\n const detachedInjector = Injector.create({\n parent: this.injector,\n\n providers: [\n {\n provide: ActivatedRoute,\n useValue: detachedActivatedRoute,\n },\n {\n provide: TAON_IS_DETACHED_WINDOW,\n useValue: true,\n },\n ],\n });\n\n const componentRef = createComponent(this.window.component, {\n environmentInjector: this.environmentInjector,\n\n elementInjector: detachedInjector,\n\n hostElement: this.componentHost.nativeElement,\n });\n\n this.componentRef = componentRef;\n\n this.appRef.attachView(componentRef.hostView);\n\n componentRef.changeDetectorRef.detectChanges();\n\n this.windowsService.registerComponentRef(this.window.id, componentRef);\n }\n //#endregion\n\n //#region destroy detached component\n private destroyDetachedComponent(): void {\n if (!this.componentRef) {\n return;\n }\n\n try {\n this.appRef.detachView(this.componentRef.hostView);\n } catch {}\n\n if (!this.componentRef.hostView.destroyed) {\n this.componentRef.destroy();\n }\n\n this.componentRef = undefined;\n }\n //#endregion\n\n //#region close\n close(): void {\n this.windowsService.close(this.window.id);\n }\n //#endregion\n}\n//#endregion\n\n//#region detached windows host\n@Component({\n selector: 'taon-detached-windows-host',\n standalone: true,\n imports: [CommonModule, TaonDetachedWindowComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host {\n position: fixed;\n\n inset: 0;\n\n pointer-events: none;\n\n /*\n * This only establishes the workspace stacking\n * context. Individual windows control their\n * own z-index.\n */\n z-index: 10000;\n }\n\n taon-detached-window {\n pointer-events: auto;\n }\n `,\n ],\n template: `\n @for (window of windowsService.windows(); track window.id) {\n <taon-detached-window [window]=\"window\" />\n }\n `,\n})\nexport class TaonDetachedWindowsHostComponent {\n readonly windowsService = inject(TaonDetachedWindowsService);\n}\n//#endregion\n\n//#region detachable dialog content\n@Component({\n selector: 'taon-detachable-dialog-content',\n standalone: true,\n imports: [CommonModule, MatIconModule, MatButtonModule, MatTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host {\n display: block;\n }\n\n .taon-detachable-content {\n display: flex;\n\n flex-direction: column;\n\n min-height: 0;\n }\n\n .taon-detachable-content-toolbar {\n min-height: 36px;\n\n display: flex;\n\n align-items: center;\n\n justify-content: flex-end;\n\n border-bottom: 1px solid var(--mat-sys-outline-variant, #ddd);\n }\n\n .taon-detachable-content-body {\n min-height: 0;\n }\n `,\n ],\n template: `\n <section class=\"taon-detachable-content\">\n @if (!isDetached) {\n <header class=\"taon-detachable-content-toolbar\">\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Detach')\"\n (click)=\"detach()\">\n <mat-icon> open_in_new </mat-icon>\n </button>\n </header>\n }\n\n <div class=\"taon-detachable-content-body\">\n <ng-content />\n </div>\n </section>\n `,\n})\nexport class TaonDetachableDialogContentComponent {\n //#region injections\n readonly t = t.for(this);\n\n private readonly route = inject(ActivatedRoute);\n\n private readonly router = inject(Router);\n\n private readonly windowsService = inject(TaonDetachedWindowsService);\n\n readonly isDetached = inject(TAON_IS_DETACHED_WINDOW);\n //#endregion\n\n //#region inputs\n @Input({\n required: true,\n })\n component!: Type<any>;\n\n @Input()\n title?: string;\n //#endregion\n\n //#region detach\n detach(): void {\n if (this.isDetached) {\n return;\n }\n\n const snapshot = this.route.snapshot;\n\n const routeState: TaonDetachedRouteState = {\n url: this.router.url,\n\n params: this.collectParams(snapshot),\n\n queryParams: cloneObject(snapshot.queryParams),\n\n fragment: snapshot.fragment,\n\n data: this.collectData(snapshot),\n };\n\n this.windowsService.open({\n title:\n this.title || this.component.name || this.t.gettext('Detached window'),\n\n component: this.component,\n\n routeState,\n });\n }\n //#endregion\n\n //#region route utils\n private collectParams(snapshot: ActivatedRouteSnapshot): Params {\n const params: Params = {};\n\n let current: ActivatedRouteSnapshot | null = snapshot;\n\n while (current) {\n Object.assign(params, current.params);\n\n current = current.parent;\n }\n\n return params;\n }\n\n private collectData(snapshot: ActivatedRouteSnapshot): Record<string, any> {\n const data: Record<string, any> = {};\n\n let current: ActivatedRouteSnapshot | null = snapshot;\n\n while (current) {\n Object.assign(data, current.data);\n\n current = current.parent;\n }\n\n return data;\n }\n //#endregion\n}\n//#endregion\n","export enum TaonDraggableButtonPanelState {\n CLICKABLE_BUTTON = 'CLICKABLE_BUTTON',\n\n WINDOW = 'WINDOW',\n\n FULL_SCREEN_DRAGGABLE = 'FULL_SCREEN_DRAGGABLE',\n\n FULL_SCREEN_LOCKED = 'FULL_SCREEN_LOCKED',\n}\n\nexport namespace TaonDraggableButtonPanelModels {}\n","//#region imports\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n signal,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { filter, firstValueFrom, Subscription, take } from 'rxjs';\nimport { Taon } from 'taon/websql';\n\nimport { TaonAdminMenuContext } from '../taon-admin-layout/taon-admin-menu-context';\n\nimport { TaonDraggableButtonPanelState } from './taon-draggable-button-panel.models';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.ts', {\"src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html\":{\"en-US\":async () => (await import('./i18n/taon-draggable-button-panel.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-draggable-button-panel.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-draggable-button-panel.component.html.de-DE.i18n.data')).default},\"src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-draggable-button-panel.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-draggable-button-panel.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-draggable-button-panel.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-draggable-button-panel',\n standalone: true,\n imports: [\n CdkDrag,\n CdkDragHandle,\n NgIf,\n NgTemplateOutlet,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n ],\n templateUrl: './taon-draggable-button-panel.component.html',\n styleUrls: ['./taon-draggable-button-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TaonAdminMenuContext],\n})\nexport class TaonDraggableButtonPanelComponent<TContext = unknown>\n implements OnInit, OnDestroy\n{\n //#region fields and getters\n readonly t = t.for(this);\n\n readonly State = TaonDraggableButtonPanelState;\n\n private readonly menuContext = inject(TaonAdminMenuContext);\n\n @Input()\n set context(context: TContext) {\n this.menuContext.context.set(context);\n }\n\n @ViewChild(CdkDrag)\n private drag?: CdkDrag;\n\n @Input()\n basePath = '';\n\n @Input()\n buttonIcon = 'admin_panel_settings';\n\n @Input()\n title = this.t.gettext('Admin');\n\n /**\n * Named outlet containing this panel's application.\n *\n * Example:\n *\n * outlet=\"admin\"\n *\n * /products/42(admin:main;state=WINDOW/session/providers)\n */\n @Input()\n outlet?: string;\n\n /**\n * Matrix parameter used for persisting the panel state.\n */\n @Input()\n stateParamName = 'state';\n\n @Input()\n set state(state: TaonDraggableButtonPanelState) {\n this.currentState.set(state);\n }\n\n @Input()\n initialState: TaonDraggableButtonPanelState =\n TaonDraggableButtonPanelState.WINDOW;\n\n @Output()\n readonly stateChange = new EventEmitter<TaonDraggableButtonPanelState>();\n\n protected readonly forceFullScreen = signal(window.innerWidth < 900);\n\n private readonly resizeListener = (): void => {\n const wasForceFullScreen = this.forceFullScreen();\n const forceFullScreen = window.innerWidth < 900;\n\n this.forceFullScreen.set(forceFullScreen);\n\n // Desktop -> mobile: remove old CDK drag x/y transform.\n if (!wasForceFullScreen && forceFullScreen) {\n this.resetDragPosition();\n }\n };\n\n protected readonly currentState = signal(\n TaonDraggableButtonPanelState.CLICKABLE_BUTTON,\n );\n\n private routerSubscription?: Subscription;\n\n @Input()\n autoHideIcon = true;\n\n @Input()\n iconTemplate?: TemplateRef<unknown>;\n\n @Input()\n headerCenterTemplate?: TemplateRef<unknown>;\n\n //#endregion\n\n //#region constructor\n constructor(private readonly router: Router) {}\n //#endregion\n\n //#region methods / ng on init\n async ngOnInit(): Promise<void> {\n window.addEventListener('resize', this.resizeListener);\n /**\n * IMPORTANT:\n *\n * The component may be created while Angular is still processing\n * the application's initial navigation.\n *\n * For example:\n *\n * / -> redirectTo: /app\n *\n * If we create:\n *\n * (admin:main)\n *\n * before that redirect finishes, the auxiliary outlet navigation\n * may effectively replace/interfere with the primary navigation,\n * producing:\n *\n * /(admin:main)\n *\n * instead of:\n *\n * /app(admin:main)\n */\n await this.waitForInitialNavigation();\n\n /**\n * Ensure the auxiliary outlet exists only AFTER the primary\n * application route has settled.\n */\n await this.ensureOutletBasePath();\n\n /**\n * The outlet may already contain persisted state, e.g.\n *\n * (admin:main;state=WINDOW/dashboard)\n */\n this.restoreStateFromUrl();\n\n /**\n * From this point on keep the component state synchronized\n * with subsequent router navigations.\n */\n this.routerSubscription = this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(() => {\n this.restoreStateFromUrl();\n });\n }\n //#endregion\n\n //#region methods / ng on destroy\n ngOnDestroy(): void {\n window.removeEventListener('resize', this.resizeListener);\n this.routerSubscription?.unsubscribe();\n }\n //#endregion\n\n //#region methods / toogle fullscreen\n protected toogleFullscreen(event: Event) {\n event.stopImmediatePropagation();\n event.stopPropagation();\n event.preventDefault();\n if (this.forceFullScreen()) {\n return;\n }\n if (this.currentState() === TaonDraggableButtonPanelState.WINDOW) {\n this.resetDragPosition();\n void this.setState(TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED);\n } else if (\n [\n TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE,\n TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED,\n ].includes(this.currentState())\n ) {\n this.resetDragPosition();\n void this.setState(TaonDraggableButtonPanelState.WINDOW);\n }\n }\n //#endregion\n\n //#region methods / effective state\n protected effectiveState(): TaonDraggableButtonPanelState {\n if (\n this.forceFullScreen() &&\n this.currentState() !== TaonDraggableButtonPanelState.CLICKABLE_BUTTON\n ) {\n return TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED;\n }\n\n return this.currentState();\n }\n //#endregion\n\n // ===========================================================================\n // INITIAL ROUTING\n // ===========================================================================\n\n //#region methods / wait for initial navigation\n private async waitForInitialNavigation(): Promise<void> {\n /**\n * Router already completed at least one navigation.\n */\n if (this.router.navigated) {\n return;\n }\n\n /**\n * Wait until redirects/lazy routing/etc. belonging to the initial\n * navigation have settled.\n */\n await firstValueFrom(\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n take(1),\n ),\n );\n }\n //#endregion\n\n //#region methods / ensure outlet base path\n private async ensureOutletBasePath(): Promise<void> {\n if (!this.outlet || !this.basePath) {\n return;\n }\n\n /**\n * IMPORTANT:\n *\n * Parse the URL only AFTER initial navigation has completed.\n *\n * At this point:\n *\n * /\n *\n * may already have become:\n *\n * /app\n */\n const tree = this.router.parseUrl(this.router.url);\n\n /**\n * Outlet already exists — preserve it exactly as it is.\n *\n * Examples:\n *\n * /app(admin:main)\n *\n * /app(admin:main;state=WINDOW/dashboard)\n */\n if (tree.root.children[this.outlet]) {\n return;\n }\n\n const baseSegments = this.basePath.split('/').filter(Boolean);\n\n if (!baseSegments.length) {\n return;\n }\n\n /**\n * Add the auxiliary outlet while preserving the current\n * primary route.\n *\n * Example:\n *\n * /app\n *\n * becomes:\n *\n * /app(admin:main)\n */\n await this.router.navigate(\n [\n {\n outlets: {\n [this.outlet]: baseSegments,\n },\n },\n ],\n {\n replaceUrl: true,\n },\n );\n }\n //#endregion\n\n // ===========================================================================\n // STATE\n // ===========================================================================\n\n //#region methods / set state\n protected async setState(next: TaonDraggableButtonPanelState): Promise<void> {\n if (!this.isTransitionAllowed(next)) {\n return;\n }\n\n this.currentState.set(next);\n\n this.stateChange.emit(next);\n\n await this.saveStateToUrl(next);\n }\n //#endregion\n\n //#region methods / open\n protected open(): void {\n void this.setState(this.initialState);\n }\n\n protected toggle(): void {\n if (this.currentState() === this.State.CLICKABLE_BUTTON) {\n this.open();\n } else {\n this.returnToButton();\n }\n }\n //#endregion\n\n //#region methods / return to button\n protected returnToButton(): void {\n this.resetDragPosition();\n void this.setState(TaonDraggableButtonPanelState.CLICKABLE_BUTTON);\n }\n //#endregion\n\n //#region methods / window mode\n protected windowMode(): void {\n void this.setState(TaonDraggableButtonPanelState.WINDOW);\n }\n //#endregion\n\n //#region methods / full screen draggable\n protected fullScreenDraggable(): void {\n this.resetDragPosition();\n\n void this.setState(TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE);\n }\n //#endregion\n\n //#region methods / lock full screen\n protected lockFullScreen(): void {\n this.resetDragPosition();\n\n void this.setState(TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED);\n }\n //#endregion\n\n //#region methods / is dragging enabled\n protected isDraggingEnabled(): boolean {\n if (this.forceFullScreen()) {\n return false;\n }\n\n return (\n this.currentState() === TaonDraggableButtonPanelState.WINDOW ||\n this.currentState() ===\n TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE\n );\n }\n //#endregion\n\n // ===========================================================================\n // URL STATE\n // ===========================================================================\n\n //#region methods / restore state from url\n private restoreStateFromUrl(): void {\n if (!this.outlet) {\n return;\n }\n\n const tree = this.router.parseUrl(this.router.url);\n\n const outletGroup = tree.root.children[this.outlet];\n\n if (!outletGroup) {\n return;\n }\n\n /**\n * State is stored on the first auxiliary outlet segment:\n *\n * admin:\n *\n * main;state=WINDOW/dashboard\n * └────────────────┘\n */\n const rootSegment = outletGroup.segments[0];\n\n if (!rootSegment) {\n return;\n }\n\n const state = rootSegment.parameters[this.stateParamName];\n\n if (!this.isValidState(state)) {\n return;\n }\n\n /**\n * URL restoration should NOT go through the transition\n * state machine.\n *\n * A bookmarked/refreshed URL is authoritative.\n */\n this.currentState.set(state);\n\n /**\n * Fullscreen must never inherit an old CdkDrag transform.\n */\n if (\n state === TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE ||\n state === TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED\n ) {\n queueMicrotask(() => {\n this.resetDragPosition();\n });\n }\n }\n //#endregion\n\n //#region methods / save state to url\n private async saveStateToUrl(\n state: TaonDraggableButtonPanelState,\n ): Promise<void> {\n if (!this.outlet) {\n return;\n }\n\n const tree = this.router.parseUrl(this.router.url);\n\n const outletGroup = tree.root.children[this.outlet];\n\n /**\n * The outlet might not yet exist.\n *\n * In that case there is nowhere sensible to attach\n * its matrix parameter.\n */\n if (!outletGroup || outletGroup.segments.length === 0) {\n return;\n }\n\n const rootSegment = outletGroup.segments[0];\n\n /**\n * Preserve any existing matrix parameters.\n */\n rootSegment.parameters = {\n ...rootSegment.parameters,\n\n [this.stateParamName]: state,\n };\n\n await this.router.navigateByUrl(tree, {\n replaceUrl: true,\n });\n }\n //#endregion\n\n //#region methods / is valid state\n private isValidState(\n value: string | undefined,\n ): value is TaonDraggableButtonPanelState {\n return Object.values(TaonDraggableButtonPanelState).includes(\n value as TaonDraggableButtonPanelState,\n );\n }\n //#endregion\n\n // ===========================================================================\n // DRAG\n // ===========================================================================\n\n //#region methods / reset drag position\n private resetDragPosition(): void {\n this.drag?.reset();\n }\n //#endregion\n\n // ===========================================================================\n // TRANSITIONS\n // ===========================================================================\n\n //#region methods / is transition allowed\n private isTransitionAllowed(next: TaonDraggableButtonPanelState): boolean {\n const current = this.currentState();\n\n const transitions: Record<\n TaonDraggableButtonPanelState,\n TaonDraggableButtonPanelState[]\n > = {\n [TaonDraggableButtonPanelState.CLICKABLE_BUTTON]: [\n TaonDraggableButtonPanelState.WINDOW,\n TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE,\n TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED,\n ],\n\n [TaonDraggableButtonPanelState.WINDOW]: [\n TaonDraggableButtonPanelState.CLICKABLE_BUTTON,\n TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE,\n TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED,\n ],\n\n [TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE]: [\n TaonDraggableButtonPanelState.CLICKABLE_BUTTON,\n TaonDraggableButtonPanelState.WINDOW,\n TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED,\n ],\n\n [TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED]: [\n TaonDraggableButtonPanelState.CLICKABLE_BUTTON,\n TaonDraggableButtonPanelState.WINDOW,\n TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE,\n ],\n };\n\n return transitions[current].includes(next);\n }\n //#endregion\n}\n","@if (currentState() === State.CLICKABLE_BUTTON || !autoHideIcon) {\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" />\n } @else {\n <button\n class=\"taon-admin-panel-toogle-open-button\"\n [class.taon-admin-panel-toogle-button-dimmer-opacity]=\"\n effectiveState() !== State.CLICKABLE_BUTTON\n \"\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"title\"\n (click)=\"toggle()\">\n <mat-icon>{{ buttonIcon }}</mat-icon>\n </button>\n }\n}\n\n<section\n cdkDrag\n [hidden]=\"currentState() === State.CLICKABLE_BUTTON\"\n [cdkDragDisabled]=\"!isDraggingEnabled()\"\n class=\"taon-draggable-panel\"\n [class.taon-window]=\"effectiveState() === State.WINDOW\"\n [class.taon-window-full]=\"effectiveState() !== State.WINDOW\"\n [class.taon-fullscreen]=\"\n effectiveState() === State.FULL_SCREEN_DRAGGABLE ||\n effectiveState() === State.FULL_SCREEN_LOCKED\n \">\n <header\n cdkDragHandle\n (dblclick)=\"toogleFullscreen($event)\"\n class=\"taon-window-bar\">\n <!-- LEFT -->\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\n <mat-icon class=\"text-gray-500\"> admin_panel_settings </mat-icon>\n\n <span class=\"truncate font-medium\">\n {{ title }}\n </span>\n </div>\n\n <!-- EXACT CENTER -->\n <div class=\"flex min-w-0 items-center justify-center\">\n @if (headerCenterTemplate) {\n <ng-container [ngTemplateOutlet]=\"headerCenterTemplate\" />\n }\n </div>\n\n <!-- #region window buttons -->\n <div class=\"flex shrink-0 items-center\">\n <!-- Desktop-only window/fullscreen controls -->\n @if (!forceFullScreen()) {\n @if (currentState() !== State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Window mode')\"\n (click)=\"windowMode()\">\n <mat-icon>filter_none</mat-icon>\n </button>\n }\n\n @if (currentState() === State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Full screen')\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>fullscreen</mat-icon>\n </button>\n }\n\n @if (currentState() !== State.FULL_SCREEN_LOCKED) {\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Lock full screen')\"\n (click)=\"lockFullScreen()\">\n <mat-icon>lock_open</mat-icon>\n </button>\n } @else {\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Unlock')\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>lock</mat-icon>\n </button>\n }\n }\n\n <!-- ALWAYS available -->\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"t.gettext('Close admin panel')\"\n (click)=\"returnToButton()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <!-- #endregion -->\n </header>\n\n <div class=\"min-h-0 flex-1 overflow-hidden\">\n <ng-content />\n </div>\n</section>\n","//#region imports\nimport { Routes } from '@angular/router';\n\nimport { TaonDraggableButtonPanelComponent } from './taon-draggable-button-panel.component';\n//#endregion\n\nexport const TaonDraggableButtonPanelRoutes: Routes = [\n {\n path: '',\n component: TaonDraggableButtonPanelComponent,\n },\n // {\n // path: 'anothermodulepath',\n // loadChildren: () => import('anothermodule')\n // .then(m => m.AnotherLazyModule),\n // },\n];\n\n/**\n * By default exporting TaonDraggableButtonPanelRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\nexport default TaonDraggableButtonPanelRoutes;","import { Component, Inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n\nconst t = Translation.for('src/lib/taon-purchase-status/taon-purchase-status.dialog.component.ts', {\"src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html\":{\"en-US\":async () => (await import('./i18n/taon-purchase-status.dialog.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-purchase-status.dialog.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-purchase-status.dialog.component.html.de-DE.i18n.data')).default},\"src/lib/taon-purchase-status/taon-purchase-status.dialog.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-purchase-status.dialog.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-purchase-status.dialog.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-purchase-status.dialog.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-purchase-status-dialog',\n standalone: true,\n imports: [MatDialogModule, MatButtonModule],\n templateUrl: './taon-purchase-status.dialog.component.html',\n})\nexport class TaonPurchaseStatusDialogComponent {\n readonly t = t.for(this);\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n public data: { success: boolean; message: string },\n ) {}\n}\n","<h2 mat-dialog-title>\n {{\n data.success\n ? t.gettext('Payment successful')\n : t.gettext('Payment cancelled')\n }}\n</h2>\n\n<div mat-dialog-content>{{ data.message }}</div>\n\n<div\n mat-dialog-actions\n align=\"end\">\n <button\n mat-button\n mat-dialog-close>\n {{ t.gettext('OK') }}\n </button>\n</div>\n","import { Component, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Translation } from '@taon-dev/i18n/websql';\nimport { Taon } from 'taon/websql';\n\nconst t = Translation.for('src/lib/taon-under-construction/taon-under-construction.component.ts', {\"src/lib/taon-under-construction/taon-under-construction.component.html\":{\"en-US\":async () => (await import('./i18n/taon-under-construction.component.html.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-under-construction.component.html.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-under-construction.component.html.de-DE.i18n.data')).default},\"src/lib/taon-under-construction/taon-under-construction.component.ts\":{\"en-US\":async () => (await import('./i18n/taon-under-construction.component.ts.en-US.i18n.data')).default,\"pl-PL\":async () => (await import('./i18n/taon-under-construction.component.ts.pl-PL.i18n.data')).default,\"de-DE\":async () => (await import('./i18n/taon-under-construction.component.ts.de-DE.i18n.data')).default}} as any);\n\n@Component({\n selector: 'taon-under-construction',\n standalone: true,\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './taon-under-construction.component.html',\n styleUrl: './taon-under-construction.component.scss',\n})\nexport class TaonUnderConstructionComponent {\n t = t.for(this);\n\n title = input(t.gettext('Coming soon'));\n\n description = input(\n t.gettext(\n 'This section is currently under construction and will be available soon.',\n ),\n );\n\n icon = input('engineering');\n}\n","<div class=\"under-construction\">\n <div class=\"icon-wrapper\">\n <mat-icon>{{ icon() }}</mat-icon>\n </div>\n\n <h2>{{ title() }}</h2>\n\n <p>{{ description() }}</p>\n\n <div class=\"status\">\n <mat-icon>construction</mat-icon>\n {{ t.gettext('Work in progress') }}\n </div>\n</div>\n","// @ts-nocheck\n// This file is auto-generated during init process. Do not modify.\n// This disable this auto generate file.\n// set property \"shouldGenerateAutogenIndexFile: false\" \n// in taon.jsonc of your project. \nexport * from './build-info._auto-generated_'; \nexport * from './my-organization-proj'; \nexport * from './start-cli'; \nexport * from './directives/taon-horizontal-wheel-scrolling.directive'; // @browser\nexport * from './taon-admin-layout/taon-admin-layout.component'; // @browser\nexport * from './taon-admin-layout/taon-admin-layout.models'; \nexport * from './taon-admin-layout/taon-admin-menu-context'; \nexport * from './taon-admin-layout/taon-admin-page-tabs.component'; // @browser\nexport * from './taon-admin-layout/taon-base-admin-page.component'; // @browser\nexport * from './taon-admin-welcome/taon-admin-welcome.component'; // @browser\nexport * from './taon-admin-welcome/taon-admin-welcome.models'; \nexport * from './taon-admin-welcome/taon-admin-welcome.routes'; // @browser\nexport * from './taon-backoffice-notifications/taon-backoffice-notifications.component'; // @browser\nexport * from './taon-backoffice-notifications/taon-backoffice-notifications.models'; \nexport * from './taon-backoffice-notifications/taon-backoffice-notifications.service'; // @browser\nexport * from './taon-backoffice-notifications/taon-error-details-dialog.component'; // @browser\nexport * from './taon-backoffice-notifications/taon-error-toast.component'; // @browser\nexport * from './taon-confirm-dialog/taon-confirm-dialog.component'; // @browser\nexport * from './taon-confirm-dialog/taon-confirm-dialog.models'; \nexport * from './taon-datatable/taon-datatable.component'; // @browser\nexport * from './taon-datatable/taon-datatable.models'; \nexport * from './taon-datatable/taon-datatable.routes'; // @browser\nexport * from './taon-detachable-dialog-content/taon-detached-window-content.component'; // @browser\nexport * from './taon-draggable-button-panel/taon-draggable-button-panel.component'; // @browser\nexport * from './taon-draggable-button-panel/taon-draggable-button-panel.models'; \nexport * from './taon-draggable-button-panel/taon-draggable-button-panel.routes'; // @browser\nexport * from './taon-purchase-status/taon-purchase-status.dialog.component'; // @browser\nexport * from './taon-under-construction/taon-under-construction.component'; // @browser","export * from './migrations';\n/* */ \nexport * from './index._auto-generated_';\nexport * from './my-organization-proj';\n/* */ \nexport default {};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["t","i2","i3","i4","i1","TaonSymbols","i5"],"mappings":"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"}