@taon-dev/ui 21.0.4 → 21.0.5
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.
- package/VERIFIED-BUILD-DATA.jsonc +3 -3
- package/browser/fesm2022/{ui-browser-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs → ui-browser-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs} +2 -2
- package/browser/fesm2022/{ui-browser-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs.map → ui-browser-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs.map} +1 -1
- package/browser/fesm2022/{ui-browser-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs → ui-browser-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs} +2 -2
- package/browser/fesm2022/{ui-browser-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs.map → ui-browser-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs.map} +1 -1
- package/browser/fesm2022/ui-browser.mjs +289 -148
- package/browser/fesm2022/ui-browser.mjs.map +1 -1
- package/browser/package.json +1 -1
- package/browser/types/ui-browser.d.ts +42 -35
- package/browser-prod/fesm2022/{ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs → ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs} +2 -2
- package/browser-prod/fesm2022/{ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs.map → ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs.map} +1 -1
- package/browser-prod/fesm2022/{ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs → ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs} +2 -2
- package/browser-prod/fesm2022/{ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs.map → ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs.map} +1 -1
- package/browser-prod/fesm2022/ui-browser-prod.mjs +290 -149
- package/browser-prod/fesm2022/ui-browser-prod.mjs.map +1 -1
- package/browser-prod/package.json +1 -1
- package/browser-prod/types/ui-browser-prod.d.ts +42 -35
- package/html/app/main/main.container.html +6 -0
- package/html/lib/taon-admin-layout/taon-admin-layout.component.html +72 -57
- package/html/lib/taon-datatable/taon-datatable.component.html +19 -5
- package/html/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html +1 -0
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/package.json +1 -1
- package/lib/taon-admin-layout/index.js +2 -2
- package/lib/taon-admin-layout/taon-admin-layout.component.d.ts +35 -32
- package/lib/taon-admin-layout/taon-admin-layout.models.d.ts +1 -1
- package/lib/taon-admin-layout/taon-admin-layout.models.js.map +1 -1
- package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js +1 -1
- package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js +1 -1
- package/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.d.ts +1 -0
- package/lib/taon-datatable/index.js +2 -2
- package/lib/taon-datatable/taon-datatable.component.d.ts +3 -0
- package/lib/taon-draggable-button-panel/index.js +2 -2
- package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib-esm/lib/build-info._auto-generated_.js +1 -1
- package/lib-esm/lib/taon-admin-layout/index.d.ts +1 -1
- package/lib-esm/lib/taon-admin-layout/index.js +1 -1
- package/lib-esm/lib/taon-admin-layout/taon-admin-layout.models.d.ts +1 -1
- package/lib-esm/lib/taon-admin-layout/taon-admin-layout.models.js.map +1 -1
- package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js +1 -1
- package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js +1 -1
- package/lib-esm/lib/taon-datatable/index.d.ts +1 -1
- package/lib-esm/lib/taon-datatable/index.js +1 -1
- package/lib-esm/lib/taon-draggable-button-panel/index.d.ts +1 -1
- package/lib-esm/lib/taon-draggable-button-panel/index.js +1 -1
- package/lib-prod/build-info._auto-generated_.d.ts +1 -1
- package/lib-prod/build-info._auto-generated_.js +1 -1
- package/lib-prod/package.json +1 -1
- package/lib-prod/taon-admin-layout/index.d.ts +1 -1
- package/lib-prod/taon-admin-layout/index.js +1 -1
- package/lib-prod/taon-admin-layout/taon-admin-layout.models.d.ts +1 -1
- package/lib-prod/taon-admin-layout/taon-admin-layout.models.js.map +1 -1
- package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js +1 -1
- package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js +1 -1
- package/lib-prod/taon-datatable/index.d.ts +1 -1
- package/lib-prod/taon-datatable/index.js +1 -1
- package/lib-prod/taon-draggable-button-panel/index.d.ts +1 -1
- package/lib-prod/taon-draggable-button-panel/index.js +1 -1
- package/package.json +1 -1
- package/scss/lib/taon-admin-layout/taon-admin-layout.component.scss +282 -26
- package/websql/fesm2022/{ui-websql-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs → ui-websql-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs} +2 -2
- package/websql/fesm2022/{ui-websql-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs.map → ui-websql-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs.map} +1 -1
- package/websql/fesm2022/{ui-websql-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs → ui-websql-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs} +2 -2
- package/websql/fesm2022/{ui-websql-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs.map → ui-websql-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs.map} +1 -1
- package/websql/fesm2022/ui-websql.mjs +289 -148
- package/websql/fesm2022/ui-websql.mjs.map +1 -1
- package/websql/package.json +1 -1
- package/websql/types/ui-websql.d.ts +42 -35
- package/websql-prod/fesm2022/{ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs → ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs} +2 -2
- package/websql-prod/fesm2022/{ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs.map → ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs.map} +1 -1
- package/websql-prod/fesm2022/{ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs → ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs} +2 -2
- package/websql-prod/fesm2022/{ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs.map → ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs.map} +1 -1
- package/websql-prod/fesm2022/ui-websql-prod.mjs +290 -149
- package/websql-prod/fesm2022/ui-websql-prod.mjs.map +1 -1
- package/websql-prod/package.json +1 -1
- package/websql-prod/types/ui-websql-prod.d.ts +42 -35
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { AfterViewInit, OnDestroy, OnInit, TemplateRef, EventEmitter } from '@angular/core';
|
|
3
|
+
import { AfterViewInit, OnDestroy, OnInit, ElementRef, TemplateRef, EventEmitter } from '@angular/core';
|
|
4
4
|
import { CoreModels__NS__DeepPartial } from 'tnp-core/browser-prod';
|
|
5
5
|
import { Routes, Route, Router, RouterOutlet } from '@angular/router';
|
|
6
6
|
import { Translation } from '@taon-dev/i18n/browser-prod';
|
|
@@ -448,7 +448,7 @@ declare const CURRENT_PACKAGE_TAON_VERSION = "v21";
|
|
|
448
448
|
/**
|
|
449
449
|
* Autogenerated by current cli tool. Use *tnp release* to bump version.
|
|
450
450
|
*/
|
|
451
|
-
declare const CURRENT_PACKAGE_VERSION = "21.0.
|
|
451
|
+
declare const CURRENT_PACKAGE_VERSION = "21.0.5";
|
|
452
452
|
|
|
453
453
|
declare function myOrgProj(): void;
|
|
454
454
|
|
|
@@ -492,69 +492,72 @@ interface PlPlTraslationOverrideSrcLibMyOrganizationProjTs {
|
|
|
492
492
|
|
|
493
493
|
type LibOverride = CoreModels__NS__DeepPartial<EnUsTraslationOverrideSrcLibMyOrganizationProjTs | PlPlTraslationOverrideSrcLibMyOrganizationProjTs>;
|
|
494
494
|
|
|
495
|
-
declare class TaonAdminLayoutComponent implements OnInit {
|
|
495
|
+
declare class TaonAdminLayoutComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
496
496
|
private readonly router;
|
|
497
|
+
private readonly hostElement;
|
|
497
498
|
routes: Routes;
|
|
498
499
|
basePath: string;
|
|
499
500
|
outlet: string;
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
*
|
|
503
|
-
* Session -> [Tracking, Providers]
|
|
504
|
-
* Users -> [Manager]
|
|
505
|
-
*/
|
|
501
|
+
protected readonly layoutWidth: i0.WritableSignal<number>;
|
|
502
|
+
protected readonly layoutHeight: i0.WritableSignal<number>;
|
|
506
503
|
protected readonly level2Routes: i0.WritableSignal<Map<Route, Routes>>;
|
|
507
504
|
protected readonly currentUrl: i0.WritableSignal<string>;
|
|
508
505
|
protected readonly loadingRoutes: i0.WritableSignal<Set<Route>>;
|
|
509
506
|
protected readonly asideOpened: i0.WritableSignal<boolean>;
|
|
507
|
+
private resizeObserver?;
|
|
508
|
+
private mutationObserver?;
|
|
509
|
+
private resizing;
|
|
510
|
+
private resizeStartX;
|
|
511
|
+
private resizeStartY;
|
|
512
|
+
private resizeStartWidth;
|
|
513
|
+
private resizeStartHeight;
|
|
514
|
+
private readonly minDialogWidth;
|
|
515
|
+
private readonly minDialogHeight;
|
|
516
|
+
protected get isDialogMode(): boolean;
|
|
510
517
|
private get basePathSegments();
|
|
511
|
-
|
|
518
|
+
protected get normalizedBasePath(): string;
|
|
519
|
+
constructor(router: Router, hostElement: ElementRef<HTMLElement>);
|
|
520
|
+
ngOnInit(): Promise<void>;
|
|
521
|
+
ngAfterViewInit(): void;
|
|
522
|
+
ngOnDestroy(): void;
|
|
523
|
+
private getWindowElement;
|
|
524
|
+
private getDraggablePanelElement;
|
|
525
|
+
private startWindowObservers;
|
|
526
|
+
private windowModeChanged;
|
|
527
|
+
private clearWindowResize;
|
|
528
|
+
protected windowResized(): void;
|
|
529
|
+
private updateLayoutSize;
|
|
530
|
+
protected startResize(event: PointerEvent): void;
|
|
531
|
+
private readonly resize;
|
|
532
|
+
private readonly stopResize;
|
|
512
533
|
protected toggleAside(): void;
|
|
513
534
|
protected closeAside(): void;
|
|
514
|
-
ngOnInit(): Promise<void>;
|
|
515
|
-
protected level1Clicked(route: Route): Promise<void>;
|
|
516
|
-
protected level2Clicked(level1: Route, level2: Route): Promise<void>;
|
|
517
|
-
private outletBaseMatrixParams;
|
|
518
|
-
private navigateTo;
|
|
519
535
|
private closeAsideOnMobile;
|
|
536
|
+
protected level1Clicked(route: Route): Promise<void>;
|
|
520
537
|
protected panelExpanded(route: Route, expanded: boolean): Promise<void>;
|
|
521
538
|
protected isLevel1Active(route: Route): boolean;
|
|
539
|
+
protected level2Clicked(level1: Route, level2: Route): Promise<void>;
|
|
522
540
|
protected getLevel2Routes(route: Route): Routes;
|
|
523
541
|
protected isLevel2Active(level1: Route, level2: Route): boolean;
|
|
524
542
|
protected level2Link(level1: Route, level2: Route): string[];
|
|
543
|
+
private outletBaseMatrixParams;
|
|
544
|
+
private navigateTo;
|
|
525
545
|
private ensureLevel2Loaded;
|
|
526
546
|
private loadRouteChildren;
|
|
527
|
-
/**
|
|
528
|
-
* Removes structural path:'' wrappers.
|
|
529
|
-
*
|
|
530
|
-
* [
|
|
531
|
-
* {
|
|
532
|
-
* path: '',
|
|
533
|
-
* component: SessionComponent,
|
|
534
|
-
* children: [...]
|
|
535
|
-
* }
|
|
536
|
-
* ]
|
|
537
|
-
*
|
|
538
|
-
* becomes:
|
|
539
|
-
*
|
|
540
|
-
* [...]
|
|
541
|
-
*/
|
|
542
547
|
private unwrapEmptyPathRoutes;
|
|
543
548
|
private loadCurrentLevel1Route;
|
|
544
549
|
protected label(route: Route): string;
|
|
545
550
|
protected color(route: Route): string;
|
|
546
551
|
protected icon(route: Route): string | undefined;
|
|
547
552
|
protected isLoading(route: Route): boolean;
|
|
553
|
+
protected isExpandable(route: Route): boolean;
|
|
548
554
|
private isPathActive;
|
|
549
555
|
private currentRelativeSegments;
|
|
550
556
|
private currentOutletSegments;
|
|
551
|
-
protected isExpandable(route: Route): boolean;
|
|
552
|
-
protected get normalizedBasePath(): string;
|
|
553
|
-
private cleanUrl;
|
|
554
557
|
private setLoading;
|
|
555
558
|
private startCase;
|
|
556
559
|
static ɵfac: i0.ɵɵFactoryDeclaration<TaonAdminLayoutComponent, never>;
|
|
557
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TaonAdminLayoutComponent, "taon-admin-layout", never, { "routes": { "alias": "routes"; "required": true; }; "basePath": { "alias": "basePath"; "required": false; }; "outlet": { "alias": "outlet"; "required": false; }; }, {}, never, ["[header]", "[asideFooter]"], true, never>;
|
|
560
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TaonAdminLayoutComponent, "taon-admin-layout", never, { "routes": { "alias": "routes"; "required": true; }; "basePath": { "alias": "basePath"; "required": false; }; "outlet": { "alias": "outlet"; "required": false; }; }, {}, never, ["[header]", "[asideFooter]", "[contentFooter]"], true, never>;
|
|
558
561
|
}
|
|
559
562
|
|
|
560
563
|
interface TaonAdminRoute extends Route {
|
|
@@ -566,7 +569,7 @@ interface TaonAdminRoute extends Route {
|
|
|
566
569
|
loadAdminChildren?: () => Promise<TaonAdminRoutes>;
|
|
567
570
|
}
|
|
568
571
|
type TaonAdminRoutes = TaonAdminRoute[];
|
|
569
|
-
type MaterialIcon = 'manage_accounts' | 'dashboard' | 'home' | 'settings' | 'admin_panel_settings' | 'person' | 'people' | 'group' | 'groups' | 'account_circle' | 'login' | 'logout' | 'lock' | 'lock_open' | 'security' | 'key' | 'verified_user' | 'shield' | 'email' | 'mail' | 'inbox' | 'send' | 'campaign' | 'notifications' | 'article' | 'description' | 'edit' | 'add' | 'delete' | 'delete_forever' | 'restore_from_trash' | 'content_copy' | 'save' | 'search' | 'filter_list' | 'refresh' | 'sync' | 'more_vert' | 'more_horiz' | 'menu' | 'close' | 'check' | 'done' | 'warning' | 'error' | 'info' | 'help' | 'visibility' | 'visibility_off' | 'folder' | 'folder_open' | 'upload' | 'download' | 'cloud' | 'cloud_upload' | 'storage' | 'database' | 'dns' | 'code' | 'terminal' | 'api' | 'extension' | 'web' | 'language' | 'public' | 'link' | 'shopping_cart' | 'shopping_bag' | 'store' | 'inventory' | 'inventory_2' | 'payments' | 'payment' | 'credit_card' | 'receipt' | 'receipt_long' | 'sell' | 'local_shipping' | 'analytics' | 'bar_chart' | 'pie_chart' | 'query_stats' | 'monitoring' | 'trending_up' | 'history' | 'schedule' | 'calendar_month' | 'build' | 'tune' | 'apps' | 'widgets' | 'category' | 'supervisor_account' | 'approval' | 'family_group' | 'recent_actors';
|
|
572
|
+
type MaterialIcon = 'manage_accounts' | 'dashboard' | 'home' | 'settings' | 'admin_panel_settings' | 'person' | 'people' | 'group' | 'groups' | 'account_circle' | 'login' | 'logout' | 'lock' | 'lock_open' | 'security' | 'key' | 'verified_user' | 'shield' | 'email' | 'mail' | 'inbox' | 'send' | 'campaign' | 'notifications' | 'article' | 'description' | 'edit' | 'add' | 'delete' | 'delete_forever' | 'restore_from_trash' | 'content_copy' | 'save' | 'search' | 'filter_list' | 'refresh' | 'sync' | 'more_vert' | 'more_horiz' | 'menu' | 'close' | 'check' | 'done' | 'warning' | 'error' | 'info' | 'help' | 'visibility' | 'visibility_off' | 'folder' | 'folder_open' | 'upload' | 'download' | 'cloud' | 'cloud_upload' | 'storage' | 'database' | 'dns' | 'code' | 'terminal' | 'api' | 'extension' | 'web' | 'language' | 'public' | 'link' | 'shopping_cart' | 'shopping_bag' | 'store' | 'inventory' | 'inventory_2' | 'payments' | 'payment' | 'credit_card' | 'receipt' | 'receipt_long' | 'sell' | 'local_shipping' | 'analytics' | 'bar_chart' | 'pie_chart' | 'query_stats' | 'monitoring' | 'trending_up' | 'history' | 'schedule' | 'calendar_month' | 'build' | 'tune' | 'apps' | 'widgets' | 'category' | 'supervisor_account' | 'approval' | 'family_group' | 'recent_actors' | 'perm_media';
|
|
570
573
|
interface TaonAdminRouteOptions {
|
|
571
574
|
path: string;
|
|
572
575
|
color?: string;
|
|
@@ -657,6 +660,7 @@ declare class TaonBackofficeNotificationsComponent {
|
|
|
657
660
|
t: Translation;
|
|
658
661
|
private readonly notification;
|
|
659
662
|
private readonly destroyRef;
|
|
663
|
+
private readonly taonAdminService;
|
|
660
664
|
filter: (err: HttpResponseError<RestErrorResponseWrapper>) => HttpResponseError<RestErrorResponseWrapper>;
|
|
661
665
|
constructor();
|
|
662
666
|
static ɵfac: i0.ɵɵFactoryDeclaration<TaonBackofficeNotificationsComponent, never>;
|
|
@@ -777,8 +781,11 @@ declare class TaonDatatableComponent implements OnInit {
|
|
|
777
781
|
private readonly reload$;
|
|
778
782
|
private readonly searchChange$;
|
|
779
783
|
readonly data$: Observable<any[]>;
|
|
784
|
+
expandedRows: Set<any>;
|
|
780
785
|
get entity(): typeof TaonBaseEntity | undefined;
|
|
781
786
|
get filterableColumns(): MtxGridColumn[];
|
|
787
|
+
onExpansionChange(event: any): void;
|
|
788
|
+
isExpanded(row: any): boolean;
|
|
782
789
|
ngOnInit(): void;
|
|
783
790
|
searchChanged(value: string): void;
|
|
784
791
|
clearSearch(): void;
|
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
<div
|
|
1
|
+
<div
|
|
2
|
+
#layout
|
|
3
|
+
class="admin-layout"
|
|
4
|
+
[class.admin-layout-dialog]="isDialogMode"
|
|
5
|
+
[style.width.px]="layoutWidth() || null"
|
|
6
|
+
[style.height.px]="layoutHeight() || null">
|
|
2
7
|
<!-- ============================================================= -->
|
|
3
8
|
<!-- HEADER -->
|
|
4
9
|
<!-- ============================================================= -->
|
|
5
10
|
|
|
6
|
-
<header
|
|
7
|
-
class="flex h-16 shrink-0 items-center border-b border-gray-200 bg-white">
|
|
8
|
-
<!-- hamburger ALWAYS visible -->
|
|
11
|
+
<header class="admin-header">
|
|
9
12
|
<button
|
|
10
13
|
mat-icon-button
|
|
11
14
|
type="button"
|
|
12
15
|
aria-label="Toggle admin menu"
|
|
13
|
-
class="
|
|
16
|
+
class="admin-menu-button"
|
|
14
17
|
(click)="toggleAside()">
|
|
15
18
|
<mat-icon>menu</mat-icon>
|
|
16
19
|
</button>
|
|
17
20
|
|
|
18
|
-
<div class="
|
|
21
|
+
<div class="admin-header-content">
|
|
19
22
|
<ng-content select="[header]" />
|
|
20
23
|
</div>
|
|
21
24
|
</header>
|
|
@@ -24,14 +27,14 @@
|
|
|
24
27
|
<!-- BODY -->
|
|
25
28
|
<!-- ============================================================= -->
|
|
26
29
|
|
|
27
|
-
<div class="
|
|
30
|
+
<div class="admin-body">
|
|
28
31
|
<!-- =========================================================== -->
|
|
29
32
|
<!-- MOBILE BACKDROP -->
|
|
30
33
|
<!-- =========================================================== -->
|
|
31
34
|
|
|
32
35
|
@if (asideOpened()) {
|
|
33
36
|
<div
|
|
34
|
-
class="
|
|
37
|
+
class="admin-aside-backdrop"
|
|
35
38
|
(click)="closeAside()"></div>
|
|
36
39
|
}
|
|
37
40
|
|
|
@@ -40,76 +43,69 @@
|
|
|
40
43
|
<!-- =========================================================== -->
|
|
41
44
|
|
|
42
45
|
<aside
|
|
43
|
-
class="
|
|
44
|
-
[class.
|
|
45
|
-
[class.-translate-x-full]="!asideOpened()"
|
|
46
|
-
[class.translate-x-0]="asideOpened()"
|
|
47
|
-
[class.md:w-72]="asideOpened()"
|
|
48
|
-
[class.md:w-0]="!asideOpened()"
|
|
49
|
-
[class.md:overflow-hidden]="!asideOpened()">
|
|
46
|
+
class="admin-aside"
|
|
47
|
+
[class.admin-aside-open]="asideOpened()">
|
|
50
48
|
<!-- ========================================================= -->
|
|
51
49
|
<!-- SCROLLABLE ASIDE CONTENT -->
|
|
52
50
|
<!-- ========================================================= -->
|
|
53
51
|
|
|
54
|
-
<div class="
|
|
52
|
+
<div class="admin-aside-content">
|
|
55
53
|
<mat-accordion class="admin-menu">
|
|
56
54
|
@for (level1 of routes; track level1.path) {
|
|
57
|
-
<!-- =================================================== -->
|
|
58
|
-
<!-- EXPANDABLE LEVEL 1 -->
|
|
59
|
-
<!-- =================================================== -->
|
|
60
|
-
|
|
61
55
|
@if (isExpandable(level1)) {
|
|
62
56
|
<mat-expansion-panel
|
|
63
57
|
[expanded]="isLevel1Active(level1)"
|
|
64
58
|
(expandedChange)="panelExpanded(level1, $event)">
|
|
65
|
-
<!-- ================================================= -->
|
|
66
|
-
<!-- LEVEL 1 -->
|
|
67
|
-
<!-- ================================================= -->
|
|
68
|
-
|
|
69
59
|
<mat-expansion-panel-header (click)="level1Clicked(level1)">
|
|
70
60
|
<mat-panel-title>
|
|
71
|
-
<div class="
|
|
61
|
+
<div class="admin-menu-item">
|
|
72
62
|
@if (icon(level1)) {
|
|
73
|
-
<mat-icon
|
|
63
|
+
<mat-icon
|
|
64
|
+
[ngStyle]="{
|
|
65
|
+
color: color(level1),
|
|
66
|
+
}">
|
|
74
67
|
{{ icon(level1) }}
|
|
75
68
|
</mat-icon>
|
|
76
69
|
}
|
|
77
70
|
|
|
78
71
|
<span
|
|
79
72
|
[class.font-semibold]="isLevel1Active(level1)"
|
|
80
|
-
[ngStyle]="{
|
|
73
|
+
[ngStyle]="{
|
|
74
|
+
color: color(level1),
|
|
75
|
+
}">
|
|
81
76
|
{{ label(level1) }}
|
|
82
77
|
</span>
|
|
83
78
|
</div>
|
|
84
79
|
</mat-panel-title>
|
|
85
80
|
</mat-expansion-panel-header>
|
|
86
81
|
|
|
87
|
-
|
|
88
|
-
<!-- LEVEL 2 -->
|
|
89
|
-
<!-- ================================================= -->
|
|
90
|
-
|
|
91
|
-
<div class="flex flex-col">
|
|
82
|
+
<div class="admin-level2">
|
|
92
83
|
@if (isLoading(level1)) {
|
|
93
|
-
<div class="
|
|
94
|
-
Loading...
|
|
95
|
-
</div>
|
|
84
|
+
<div class="admin-loading">Loading...</div>
|
|
96
85
|
} @else {
|
|
97
86
|
@for (
|
|
98
87
|
level2 of getLevel2Routes(level1);
|
|
99
88
|
track level2.path
|
|
100
89
|
) {
|
|
101
90
|
<a
|
|
102
|
-
|
|
103
|
-
class
|
|
104
|
-
|
|
105
|
-
|
|
91
|
+
class="admin-level2-item"
|
|
92
|
+
[class.admin-level2-item-active]="
|
|
93
|
+
isLevel2Active(level1, level2)
|
|
94
|
+
"
|
|
95
|
+
(click)="level2Clicked(level1, level2)">
|
|
106
96
|
@if (icon(level2)) {
|
|
107
|
-
<mat-icon
|
|
97
|
+
<mat-icon
|
|
98
|
+
[ngStyle]="{
|
|
99
|
+
color: color(level2),
|
|
100
|
+
}">
|
|
108
101
|
{{ icon(level2) }}
|
|
109
102
|
</mat-icon>
|
|
110
103
|
}
|
|
111
104
|
|
|
112
|
-
<span
|
|
105
|
+
<span
|
|
106
|
+
[ngStyle]="{
|
|
107
|
+
color: color(level2),
|
|
108
|
+
}">
|
|
113
109
|
{{ label(level2) }}
|
|
114
110
|
</span>
|
|
115
111
|
</a>
|
|
@@ -118,22 +114,23 @@
|
|
|
118
114
|
</div>
|
|
119
115
|
</mat-expansion-panel>
|
|
120
116
|
} @else {
|
|
121
|
-
<!-- ================================================= -->
|
|
122
|
-
<!-- NON-EXPANDABLE LEVEL 1 -->
|
|
123
|
-
<!-- ================================================= -->
|
|
124
|
-
|
|
125
117
|
<a
|
|
126
|
-
|
|
127
|
-
class
|
|
128
|
-
|
|
129
|
-
[class.font-semibold]="isLevel1Active(level1)">
|
|
118
|
+
class="admin-level1-item"
|
|
119
|
+
[class.admin-level1-item-active]="isLevel1Active(level1)"
|
|
120
|
+
(click)="level1Clicked(level1)">
|
|
130
121
|
@if (icon(level1)) {
|
|
131
|
-
<mat-icon
|
|
122
|
+
<mat-icon
|
|
123
|
+
[ngStyle]="{
|
|
124
|
+
color: color(level1),
|
|
125
|
+
}">
|
|
132
126
|
{{ icon(level1) }}
|
|
133
127
|
</mat-icon>
|
|
134
128
|
}
|
|
135
129
|
|
|
136
|
-
<span
|
|
130
|
+
<span
|
|
131
|
+
[ngStyle]="{
|
|
132
|
+
color: color(level1),
|
|
133
|
+
}">
|
|
137
134
|
{{ label(level1) }}
|
|
138
135
|
</span>
|
|
139
136
|
</a>
|
|
@@ -143,10 +140,10 @@
|
|
|
143
140
|
</div>
|
|
144
141
|
|
|
145
142
|
<!-- ========================================================= -->
|
|
146
|
-
<!-- ASIDE FOOTER
|
|
143
|
+
<!-- ASIDE FOOTER -->
|
|
147
144
|
<!-- ========================================================= -->
|
|
148
145
|
|
|
149
|
-
<footer class="
|
|
146
|
+
<footer class="admin-aside-footer">
|
|
150
147
|
<ng-content select="[asideFooter]" />
|
|
151
148
|
</footer>
|
|
152
149
|
</aside>
|
|
@@ -155,24 +152,42 @@
|
|
|
155
152
|
<!-- MAIN -->
|
|
156
153
|
<!-- =========================================================== -->
|
|
157
154
|
|
|
158
|
-
<main class="
|
|
155
|
+
<main class="admin-main">
|
|
159
156
|
<!-- ========================================================= -->
|
|
160
157
|
<!-- LEVEL 3+ TABS -->
|
|
161
158
|
<!-- ========================================================= -->
|
|
162
159
|
|
|
163
160
|
<taon-admin-page-tabs
|
|
164
|
-
class="
|
|
161
|
+
class="admin-tabs"
|
|
165
162
|
[routes]="routes"
|
|
166
163
|
[basePath]="basePath"
|
|
167
164
|
[outlet]="outlet" />
|
|
168
165
|
|
|
169
166
|
<!-- ========================================================= -->
|
|
170
|
-
<!--
|
|
167
|
+
<!-- SCROLLABLE CONTENT -->
|
|
171
168
|
<!-- ========================================================= -->
|
|
172
169
|
|
|
173
|
-
<div class="
|
|
170
|
+
<div class="admin-content">
|
|
174
171
|
<router-outlet />
|
|
175
172
|
</div>
|
|
173
|
+
|
|
174
|
+
<!-- ========================================================= -->
|
|
175
|
+
<!-- CONTENT FOOTER -->
|
|
176
|
+
<!-- ========================================================= -->
|
|
177
|
+
|
|
178
|
+
<footer class="admin-content-footer">
|
|
179
|
+
<ng-content select="[contentFooter]" />
|
|
180
|
+
</footer>
|
|
176
181
|
</main>
|
|
177
182
|
</div>
|
|
183
|
+
|
|
184
|
+
<!-- ============================================================= -->
|
|
185
|
+
<!-- DIALOG RESIZE HANDLE -->
|
|
186
|
+
<!-- ============================================================= -->
|
|
187
|
+
|
|
188
|
+
@if (isDialogMode) {
|
|
189
|
+
<div
|
|
190
|
+
class="admin-resize-handle"
|
|
191
|
+
(pointerdown)="startResize($event)"></div>
|
|
192
|
+
}
|
|
178
193
|
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div class="flex w-full flex-col gap-3">
|
|
2
|
-
<!-- toolbar -->
|
|
2
|
+
<!-- #region toolbar -->
|
|
3
3
|
@if (!hideSearch) {
|
|
4
4
|
<div
|
|
5
5
|
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">
|
|
@@ -68,8 +68,9 @@
|
|
|
68
68
|
}
|
|
69
69
|
</div>
|
|
70
70
|
}
|
|
71
|
+
<!-- #endregion -->
|
|
71
72
|
|
|
72
|
-
<!-- advanced filters -->
|
|
73
|
+
<!-- #region advanced filters -->
|
|
73
74
|
@if (!hideSearch && searchMode === 'advanced' && advancedSearchOpened) {
|
|
74
75
|
<div
|
|
75
76
|
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">
|
|
@@ -112,8 +113,9 @@
|
|
|
112
113
|
</div>
|
|
113
114
|
</div>
|
|
114
115
|
}
|
|
116
|
+
<!-- #endregion -->
|
|
115
117
|
|
|
116
|
-
<!-- grid -->
|
|
118
|
+
<!-- #region grid -->
|
|
117
119
|
<div
|
|
118
120
|
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">
|
|
119
121
|
@if (isLoading) {
|
|
@@ -132,16 +134,28 @@
|
|
|
132
134
|
[data]="rows"
|
|
133
135
|
[columns]="columns"
|
|
134
136
|
[expandable]="expandable"
|
|
135
|
-
[expansionTemplate]="
|
|
137
|
+
[expansionTemplate]="lazyExpansionTemplate"
|
|
136
138
|
[length]="totalElements"
|
|
137
139
|
[pageOnFront]="false"
|
|
138
140
|
[pageIndex]="pageNumber - 1"
|
|
139
141
|
[pageSize]="pageSize"
|
|
140
142
|
[pageSizeOptions]="pageSizeOptions"
|
|
141
143
|
[showPaginator]="showPaginator"
|
|
142
|
-
(expansionChange)="
|
|
144
|
+
(expansionChange)="onExpansionChange($event)"
|
|
143
145
|
(page)="getNextPage($event)"
|
|
144
146
|
(sortChange)="sortChanged($event)">
|
|
145
147
|
</mtx-grid>
|
|
148
|
+
|
|
149
|
+
<ng-template
|
|
150
|
+
#lazyExpansionTemplate
|
|
151
|
+
let-row>
|
|
152
|
+
@if (isExpanded(row)) {
|
|
153
|
+
<ng-container
|
|
154
|
+
[ngTemplateOutlet]="expansionTemplate"
|
|
155
|
+
[ngTemplateOutletContext]="{ $implicit: row }">
|
|
156
|
+
</ng-container>
|
|
157
|
+
}
|
|
158
|
+
</ng-template>
|
|
146
159
|
</div>
|
|
160
|
+
<!-- #endregion -->
|
|
147
161
|
</div>
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
[cdkDragDisabled]="!isDraggingEnabled()"
|
|
18
18
|
class="taon-draggable-panel"
|
|
19
19
|
[class.taon-window]="effectiveState() === State.WINDOW"
|
|
20
|
+
[class.taon-window-full]="effectiveState() !== State.WINDOW"
|
|
20
21
|
[class.taon-fullscreen]="
|
|
21
22
|
effectiveState() === State.FULL_SCREEN_DRAGGABLE ||
|
|
22
23
|
effectiveState() === State.FULL_SCREEN_LOCKED
|
|
@@ -25,6 +25,6 @@ exports.CURRENT_PACKAGE_TAON_VERSION = 'v21';
|
|
|
25
25
|
/**
|
|
26
26
|
* Autogenerated by current cli tool. Use *tnp release* to bump version.
|
|
27
27
|
*/
|
|
28
|
-
exports.CURRENT_PACKAGE_VERSION = '21.0.
|
|
28
|
+
exports.CURRENT_PACKAGE_VERSION = '21.0.5';
|
|
29
29
|
// THIS FILE IS GENERATED - DO NOT MODIFY
|
|
30
30
|
//# sourceMappingURL=build-info._auto-generated_.js.map
|
package/lib/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
function
|
|
3
|
+
exports.dummy1791556646453 = dummy1791556646453;
|
|
4
|
+
function dummy1791556646453() { }
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,64 +1,67 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
1
|
+
import { AfterViewInit, ElementRef, OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { Route, Router, Routes } from '@angular/router';
|
|
3
|
-
export declare class TaonAdminLayoutComponent implements OnInit {
|
|
3
|
+
export declare class TaonAdminLayoutComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
4
4
|
private readonly router;
|
|
5
|
+
private readonly hostElement;
|
|
5
6
|
routes: Routes;
|
|
6
7
|
basePath: string;
|
|
7
8
|
outlet: string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*
|
|
11
|
-
* Session -> [Tracking, Providers]
|
|
12
|
-
* Users -> [Manager]
|
|
13
|
-
*/
|
|
9
|
+
protected readonly layoutWidth: import("@angular/core", { with: { "resolution-mode": "import" } }).WritableSignal<number>;
|
|
10
|
+
protected readonly layoutHeight: import("@angular/core", { with: { "resolution-mode": "import" } }).WritableSignal<number>;
|
|
14
11
|
protected readonly level2Routes: import("@angular/core", { with: { "resolution-mode": "import" } }).WritableSignal<Map<Route, Routes>>;
|
|
15
12
|
protected readonly currentUrl: import("@angular/core", { with: { "resolution-mode": "import" } }).WritableSignal<string>;
|
|
16
13
|
protected readonly loadingRoutes: import("@angular/core", { with: { "resolution-mode": "import" } }).WritableSignal<Set<Route>>;
|
|
17
14
|
protected readonly asideOpened: import("@angular/core", { with: { "resolution-mode": "import" } }).WritableSignal<boolean>;
|
|
15
|
+
private resizeObserver?;
|
|
16
|
+
private mutationObserver?;
|
|
17
|
+
private resizing;
|
|
18
|
+
private resizeStartX;
|
|
19
|
+
private resizeStartY;
|
|
20
|
+
private resizeStartWidth;
|
|
21
|
+
private resizeStartHeight;
|
|
22
|
+
private readonly minDialogWidth;
|
|
23
|
+
private readonly minDialogHeight;
|
|
24
|
+
protected get isDialogMode(): boolean;
|
|
18
25
|
private get basePathSegments();
|
|
19
|
-
|
|
26
|
+
protected get normalizedBasePath(): string;
|
|
27
|
+
constructor(router: Router, hostElement: ElementRef<HTMLElement>);
|
|
28
|
+
ngOnInit(): Promise<void>;
|
|
29
|
+
ngAfterViewInit(): void;
|
|
30
|
+
ngOnDestroy(): void;
|
|
31
|
+
private getWindowElement;
|
|
32
|
+
private getDraggablePanelElement;
|
|
33
|
+
private startWindowObservers;
|
|
34
|
+
private windowModeChanged;
|
|
35
|
+
private clearWindowResize;
|
|
36
|
+
protected windowResized(): void;
|
|
37
|
+
private updateLayoutSize;
|
|
38
|
+
protected startResize(event: PointerEvent): void;
|
|
39
|
+
private readonly resize;
|
|
40
|
+
private readonly stopResize;
|
|
20
41
|
protected toggleAside(): void;
|
|
21
42
|
protected closeAside(): void;
|
|
22
|
-
ngOnInit(): Promise<void>;
|
|
23
|
-
protected level1Clicked(route: Route): Promise<void>;
|
|
24
|
-
protected level2Clicked(level1: Route, level2: Route): Promise<void>;
|
|
25
|
-
private outletBaseMatrixParams;
|
|
26
|
-
private navigateTo;
|
|
27
43
|
private closeAsideOnMobile;
|
|
44
|
+
protected level1Clicked(route: Route): Promise<void>;
|
|
28
45
|
protected panelExpanded(route: Route, expanded: boolean): Promise<void>;
|
|
29
46
|
protected isLevel1Active(route: Route): boolean;
|
|
47
|
+
protected level2Clicked(level1: Route, level2: Route): Promise<void>;
|
|
30
48
|
protected getLevel2Routes(route: Route): Routes;
|
|
31
49
|
protected isLevel2Active(level1: Route, level2: Route): boolean;
|
|
32
50
|
protected level2Link(level1: Route, level2: Route): string[];
|
|
51
|
+
private outletBaseMatrixParams;
|
|
52
|
+
private navigateTo;
|
|
33
53
|
private ensureLevel2Loaded;
|
|
34
54
|
private loadRouteChildren;
|
|
35
|
-
/**
|
|
36
|
-
* Removes structural path:'' wrappers.
|
|
37
|
-
*
|
|
38
|
-
* [
|
|
39
|
-
* {
|
|
40
|
-
* path: '',
|
|
41
|
-
* component: SessionComponent,
|
|
42
|
-
* children: [...]
|
|
43
|
-
* }
|
|
44
|
-
* ]
|
|
45
|
-
*
|
|
46
|
-
* becomes:
|
|
47
|
-
*
|
|
48
|
-
* [...]
|
|
49
|
-
*/
|
|
50
55
|
private unwrapEmptyPathRoutes;
|
|
51
56
|
private loadCurrentLevel1Route;
|
|
52
57
|
protected label(route: Route): string;
|
|
53
58
|
protected color(route: Route): string;
|
|
54
59
|
protected icon(route: Route): string | undefined;
|
|
55
60
|
protected isLoading(route: Route): boolean;
|
|
61
|
+
protected isExpandable(route: Route): boolean;
|
|
56
62
|
private isPathActive;
|
|
57
63
|
private currentRelativeSegments;
|
|
58
64
|
private currentOutletSegments;
|
|
59
|
-
protected isExpandable(route: Route): boolean;
|
|
60
|
-
protected get normalizedBasePath(): string;
|
|
61
|
-
private cleanUrl;
|
|
62
65
|
private setLoading;
|
|
63
66
|
private startCase;
|
|
64
67
|
}
|
|
@@ -8,7 +8,7 @@ export interface TaonAdminRoute extends Route {
|
|
|
8
8
|
loadAdminChildren?: () => Promise<TaonAdminRoutes>;
|
|
9
9
|
}
|
|
10
10
|
export type TaonAdminRoutes = TaonAdminRoute[];
|
|
11
|
-
type MaterialIcon = 'manage_accounts' | 'dashboard' | 'home' | 'settings' | 'admin_panel_settings' | 'person' | 'people' | 'group' | 'groups' | 'account_circle' | 'login' | 'logout' | 'lock' | 'lock_open' | 'security' | 'key' | 'verified_user' | 'shield' | 'email' | 'mail' | 'inbox' | 'send' | 'campaign' | 'notifications' | 'article' | 'description' | 'edit' | 'add' | 'delete' | 'delete_forever' | 'restore_from_trash' | 'content_copy' | 'save' | 'search' | 'filter_list' | 'refresh' | 'sync' | 'more_vert' | 'more_horiz' | 'menu' | 'close' | 'check' | 'done' | 'warning' | 'error' | 'info' | 'help' | 'visibility' | 'visibility_off' | 'folder' | 'folder_open' | 'upload' | 'download' | 'cloud' | 'cloud_upload' | 'storage' | 'database' | 'dns' | 'code' | 'terminal' | 'api' | 'extension' | 'web' | 'language' | 'public' | 'link' | 'shopping_cart' | 'shopping_bag' | 'store' | 'inventory' | 'inventory_2' | 'payments' | 'payment' | 'credit_card' | 'receipt' | 'receipt_long' | 'sell' | 'local_shipping' | 'analytics' | 'bar_chart' | 'pie_chart' | 'query_stats' | 'monitoring' | 'trending_up' | 'history' | 'schedule' | 'calendar_month' | 'build' | 'tune' | 'apps' | 'widgets' | 'category' | 'supervisor_account' | 'approval' | 'family_group' | 'recent_actors';
|
|
11
|
+
type MaterialIcon = 'manage_accounts' | 'dashboard' | 'home' | 'settings' | 'admin_panel_settings' | 'person' | 'people' | 'group' | 'groups' | 'account_circle' | 'login' | 'logout' | 'lock' | 'lock_open' | 'security' | 'key' | 'verified_user' | 'shield' | 'email' | 'mail' | 'inbox' | 'send' | 'campaign' | 'notifications' | 'article' | 'description' | 'edit' | 'add' | 'delete' | 'delete_forever' | 'restore_from_trash' | 'content_copy' | 'save' | 'search' | 'filter_list' | 'refresh' | 'sync' | 'more_vert' | 'more_horiz' | 'menu' | 'close' | 'check' | 'done' | 'warning' | 'error' | 'info' | 'help' | 'visibility' | 'visibility_off' | 'folder' | 'folder_open' | 'upload' | 'download' | 'cloud' | 'cloud_upload' | 'storage' | 'database' | 'dns' | 'code' | 'terminal' | 'api' | 'extension' | 'web' | 'language' | 'public' | 'link' | 'shopping_cart' | 'shopping_bag' | 'store' | 'inventory' | 'inventory_2' | 'payments' | 'payment' | 'credit_card' | 'receipt' | 'receipt_long' | 'sell' | 'local_shipping' | 'analytics' | 'bar_chart' | 'pie_chart' | 'query_stats' | 'monitoring' | 'trending_up' | 'history' | 'schedule' | 'calendar_month' | 'build' | 'tune' | 'apps' | 'widgets' | 'category' | 'supervisor_account' | 'approval' | 'family_group' | 'recent_actors' | 'perm_media';
|
|
12
12
|
export interface TaonAdminRouteOptions {
|
|
13
13
|
path: string;
|
|
14
14
|
color?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taon-admin-layout.models.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"taon-admin-layout.models.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;;AAgIA,wCAkBC;AApBY,QAAA,gCAAgC,GAAG,OAAO,CAAC;AAExD,SAAgB,cAAc,CAAC,OAA8B;IAC3D,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,GACzE,OAAO,CAAC;IAEV,OAAO;QACL,IAAI;QAEJ,IAAI,EAAE;YACJ,QAAQ;YACR,KAAK;YACL,IAAI;YACJ,UAAU;YACV,gBAAgB;SACjB;QAED,YAAY,EAAE,MAAM;QACpB,iBAAiB,EAAE,MAAM;KAC1B,CAAC;AACJ,CAAC"}
|