@sd-angular/core 19.0.0-beta.78 → 19.0.0-beta.79
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/assets/scss/sd-core.scss +4 -1
- package/fesm2022/sd-angular-core-components-tab-router.mjs +2 -8
- package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
- package/fesm2022/sd-angular-core-utilities-extensions.mjs +10 -0
- package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
- package/package.json +57 -57
- package/sd-angular-core-19.0.0-beta.79.tgz +0 -0
- package/utilities/extensions/src/string.extension.d.ts +1 -0
- package/sd-angular-core-19.0.0-beta.78.tgz +0 -0
package/assets/scss/sd-core.scss
CHANGED
|
@@ -370,7 +370,6 @@ class SdTabRouterOutletComponent {
|
|
|
370
370
|
}
|
|
371
371
|
});
|
|
372
372
|
const currentNavigation = this.#router.getCurrentNavigation();
|
|
373
|
-
const switchTab = currentNavigation?.extras?.state?.['switchTab'];
|
|
374
373
|
const replaceTab = currentNavigation?.extras?.state?.['replaceTab'];
|
|
375
374
|
// --- XỬ LÝ INJECTOR VÀ FIX LỖI TYPE TS(2345) ---
|
|
376
375
|
const getBestInjector = async (snapshot) => {
|
|
@@ -424,13 +423,8 @@ class SdTabRouterOutletComponent {
|
|
|
424
423
|
if (replaceTab && activatedIndex >= 0) {
|
|
425
424
|
updatedTabs.splice(activatedIndex, 1);
|
|
426
425
|
}
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
this.#tabRouterService.pushEvent(updatedTabs[existedIndex], SdTabActivated);
|
|
430
|
-
}
|
|
431
|
-
else {
|
|
432
|
-
updatedTabs[existedIndex] = newTab;
|
|
433
|
-
}
|
|
426
|
+
this.#tabRouterService.setCurrentTab(updatedTabs[existedIndex]);
|
|
427
|
+
this.#tabRouterService.pushEvent(updatedTabs[existedIndex], SdTabActivated);
|
|
434
428
|
this.tabs.set(updatedTabs);
|
|
435
429
|
}
|
|
436
430
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-components-tab-router.mjs","sources":["../../../projects/sd-angular/components/tab-router/src/events/tab-router.event.ts","../../../projects/sd-angular/components/tab-router/src/services/tab-router.service.ts","../../../projects/sd-angular/components/tab-router/src/services/tab-decorator.service.ts","../../../projects/sd-angular/components/tab-router/src/pipes/tab-info.pipe.ts","../../../projects/sd-angular/components/tab-router/src/components/tab-router-item/tab-router-item.component.ts","../../../projects/sd-angular/components/tab-router/src/components/tab-router-item/tab-router-item.component.html","../../../projects/sd-angular/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.ts","../../../projects/sd-angular/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.html","../../../projects/sd-angular/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.ts","../../../projects/sd-angular/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.html","../../../projects/sd-angular/components/tab-router/src/decorators/tab.decorator.ts","../../../projects/sd-angular/components/tab-router/sd-angular-core-components-tab-router.ts"],"sourcesContent":["import { SdTab } from '../models/tab-router.model';\n\nexport class SdTabBase {\n #tab: SdTab | undefined;\n\n constructor(tab: SdTab | undefined) {\n this.#tab = tab;\n }\n\n get tab(): SdTab | undefined {\n return this.#tab;\n }\n}\n\nexport class SdTabActivated extends SdTabBase {}\n\nexport class SdTabDeactivated extends SdTabBase {}\n\nexport declare type SdTabEvent = SdTabActivated | SdTabDeactivated;\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTabAction } from '../actions/tab-router.action';\r\nimport { SdTabComponentBuilder } from '../decorators/tab.decorator';\r\nimport { SdTabBase, SdTabEvent } from '../events/tab-router.event';\r\nimport { SdTab } from '../models/tab-router.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdTabRouterService {\r\n events = new BehaviorSubject<SdTabEvent>(new SdTabBase(undefined));\r\n actions = new BehaviorSubject<SdTabAction | undefined>(undefined);\r\n builders = new BehaviorSubject<SdTabComponentBuilder[]>([]);\r\n currentTabChanges = new BehaviorSubject<SdTab | undefined>(undefined);\r\n newTabs = new BehaviorSubject<SdTab | undefined>(undefined);\r\n updateTabs = new BehaviorSubject<SdTab | undefined>(undefined);\r\n #currentTab: SdTab | undefined = undefined;\r\n #componentBuilders: SdTabComponentBuilder[] = [];\r\n constructor() {}\r\n\r\n addBuilder = (builder: SdTabComponentBuilder) => {\r\n if (!this.#componentBuilders.some(e => e.component === builder.component)) {\r\n this.#componentBuilders.push(builder);\r\n this.builders.next(this.#componentBuilders);\r\n }\r\n };\r\n\r\n get currentTab() {\r\n return this.#currentTab;\r\n }\r\n\r\n get currentKey() {\r\n return this.#currentTab?.key || null;\r\n }\r\n\r\n // select = (tabOrKey: string | SdTab): void => {\r\n // const tab = this.#tabs.find(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key === tabOrKey;\r\n // }\r\n // return e.key === tabOrKey?.key;\r\n // });\r\n // if (tab) {\r\n // this.#currentTab = tab;\r\n // }\r\n // }\r\n\r\n // add = (tab: SdTab): void => {\r\n // if (!tab.key) {\r\n // this.notifyService.notify.warning('Tab key is required');\r\n // }\r\n // if (!tab.component) {\r\n // this.notifyService.notify.warning('Tab component is required');\r\n // }\r\n // const existedTab = this.#tabs.find(e => e.key === tab.key);\r\n // if (!existedTab) {\r\n // this.#tabs.push(tab);\r\n // this.select(tab);\r\n // } else {\r\n // this.select(existedTab);\r\n // }\r\n // }\r\n\r\n // remove = (tabOrKey: string | SdTab): void => {\r\n // this.#tabs = this.#tabs.filter(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key !== tabOrKey;\r\n // }\r\n // return e.key !== tabOrKey?.key;\r\n // });\r\n // }\r\n\r\n setCurrentTab = (tab: SdTab): void => {\r\n this.#currentTab = tab;\r\n this.currentTabChanges.next(tab);\r\n };\r\n\r\n pushEvent = (tab: SdTab, Event: Type<SdTabEvent>) => {\r\n this.events.next(new Event(tab));\r\n };\r\n\r\n setOptions = () => {};\r\n\r\n close = (tab?: SdTab) => {\r\n tab = tab || this.#currentTab;\r\n if (tab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab,\r\n });\r\n }\r\n };\r\n\r\n // Gọi hàm này để thực hiện update tab\r\n updateTab = (tab: SdTab) => {};\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { SdTabRouterService } from './tab-router.service';\n@Injectable({\n providedIn: 'root',\n})\nexport class SdTabDecoratorService {\n static tabRouterService = new BehaviorSubject<SdTabRouterService | undefined>(undefined);\n constructor(tabRouterService: SdTabRouterService) {\n SdTabDecoratorService.tabRouterService.next(tabRouterService);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTab, SdTabInfo } from '../models/tab-router.model';\nimport { SdTabRouterService } from '../services/tab-router.service';\n@Pipe({\n name: 'sdTabInfo',\n standalone: true,\n})\nexport class SdTabInfoPipe implements PipeTransform {\n constructor(private tabRouterService: SdTabRouterService) {}\n transform(tabInfo: SdTabInfo | undefined | null, tab: SdTab): SdTabInfo {\n if (tabInfo) {\n return tabInfo;\n }\n const builders = this.tabRouterService.builders.getValue();\n const builder = builders.find(e => e.component === tab.component);\n if (builder) {\n const { url, params, queryParams, data } = tab;\n return {\n name: typeof builder.name === 'function' ? builder.name({ url, params, queryParams, data }) : builder.name,\n icon: typeof builder.icon === 'function' ? builder.icon({ url, params, queryParams }) : builder.icon,\n tooltip: typeof builder.tooltip === 'function' ? builder.tooltip({ url, params, queryParams }) : builder.tooltip,\n color: typeof builder.color === 'function' ? builder.color({ url, params, queryParams }) : builder.color,\n };\n }\n return {\n name: tab.url,\n icon: undefined,\n };\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, startWith } from 'rxjs/operators';\r\n\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdBadge } from '@sd-angular/core/components/badge';\r\nimport { SdTab, SdTabInfo } from '../../models';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\nimport { Router } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdTabInfoPipe } from '../../pipes/tab-info.pipe';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-item',\r\n templateUrl: './tab-router-item.component.html',\r\n styleUrls: ['./tab-router-item.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule, SdBadge, SdTabInfoPipe],\r\n})\r\nexport class SdTabRouterItemComponent implements OnInit, OnDestroy {\r\n @Input({ required: true }) tab!: SdTab;\r\n\r\n #subsctiption: Subscription = new Subscription();\r\n tabInfo?: SdTabInfo;\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n private tabRouterService: SdTabRouterService,\r\n private router: Router\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.#subsctiption.add(\r\n this.tabRouterService.events.pipe(debounceTime(100)).subscribe(() => {\r\n this.cdRef.markForCheck();\r\n })\r\n );\r\n\r\n this.#subsctiption.add(\r\n this.tab.tabInfoChanges.pipe(startWith(null)).subscribe(tabInfo => {\r\n if (tabInfo) {\r\n this.tabInfo = tabInfo;\r\n this.cdRef.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subsctiption.unsubscribe();\r\n }\r\n\r\n onTabClick = (event: Event) => {\r\n event.preventDefault();\r\n this.router.navigate([this.tab.url], {\r\n queryParams: this.tab.queryParams,\r\n state: { switchTab: true },\r\n });\r\n };\r\n\r\n close = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.#closeTab();\r\n };\r\n\r\n onMousedown = (event: MouseEvent) => {\r\n if (event.button === 1) {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n onMouseup = (event: MouseEvent) => {\r\n if (event.button === 1) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.#closeTab();\r\n }\r\n };\r\n\r\n #closeTab = async () => {\r\n if (this.tab?.beforeClose) {\r\n //\r\n if (this.tab?.beforeClose()) {\r\n const result = this.tab?.beforeClose();\r\n if (typeof result === 'boolean') {\r\n if (result) {\r\n this.tabRouterService.close(this.tab);\r\n }\r\n } else {\r\n if (await result) {\r\n this.tabRouterService.close(this.tab);\r\n }\r\n }\r\n }\r\n } else {\r\n this.tabRouterService.close(this.tab);\r\n }\r\n };\r\n}\r\n","<a\r\n [href]=\"[tab.url]\"\r\n class=\"tab-router__item d-flex align-items-center gap-8\"\r\n [class.tab-router__item--active]=\"tab.isActive\"\r\n (click)=\"onTabClick($event)\"\r\n (mousedown)=\"onMousedown($event)\"\r\n (mouseup)=\"onMouseup($event)\">\r\n @let info = tabInfo | sdTabInfo: tab;\r\n @if (info) {\r\n <sd-badge\r\n style=\"overflow: hidden;white-space: nowrap;\"\r\n [icon]=\"info.icon\"\r\n [title]=\"info.icon\"\r\n [tooltip]=\"info.tooltip || info.name\"\r\n [title]=\"info.name\"\r\n [color]=\"info.color\"\r\n (click)=\"onTabClick($event)\"></sd-badge>\r\n <button\r\n aria-hidden=\"true\"\r\n class=\"tab-router__close d-flex align-items-center justify-content-center ml-auto p-0\"\r\n (click)=\"close($event)\"\r\n (mousedown)=\"$event.stopPropagation()\">\r\n <mat-icon aria-hidden=\"true\" fontIcon=\"close\"></mat-icon>\r\n </button>\r\n }\r\n</a>\r\n","import { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Input, ViewChild } from '@angular/core';\n\nimport { SdTab } from '../../models/tab-router.model';\nimport { SdTabRouterItemComponent } from '../tab-router-item/tab-router-item.component';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'sd-tab-router-nav',\n templateUrl: './tab-router-nav.component.html',\n styleUrls: ['./tab-router-nav.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, DragDropModule, SdTabRouterItemComponent],\n})\nexport class SdTabRouterNavComponent {\n @ViewChild('tabRouterNav') tabRouterNav?: ElementRef;\n\n @Input() tabs: SdTab[] = [];\n mode: 'default' | 'compact' = 'default';\n\n constructor(\n private cdRef: ChangeDetectorRef,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public elementRef: ElementRef<any>\n ) {}\n\n @HostListener('window:resize', ['$event'])\n onResize(): void {\n this.checkUI();\n }\n\n checkUI = () => {\n const width = this.tabRouterNav?.nativeElement.clientWidth;\n const nameWidth = (width - this.tabs!.length * 68) / this.tabs!.length;\n if (nameWidth <= 20) {\n this.mode = 'compact';\n } else {\n this.mode = 'default';\n }\n this.cdRef.markForCheck();\n };\n\n onDrop = (event: CdkDragDrop<SdTab[]>) => {\n moveItemInArray(this.tabs!, event.previousIndex, event.currentIndex);\n };\n}\n","<div\n #tabRouterNav\n cdkDropList\n cdkDropListLockAxis=\"x\"\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onDrop($event)\"\n class=\"tab-router__nav tab-router__nav--{{ mode }} d-flex align-items-center flex-nowrap\"\n [class.d-none]=\"tabs.length > 1\">\n <ng-container *ngFor=\"let tab of tabs\">\n <sd-tab-router-item [tab]=\"tab\" cdkDrag [cdkDragBoundary]=\"elementRef?.nativeElement\"></sd-tab-router-item>\n </ng-container>\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { \n Component, \n Injector, \n OnDestroy, \n Type, \n ViewChild, \n inject, \n signal, \n createNgModule,\n NgModuleFactory\n} from '@angular/core';\nimport {\n ActivatedRoute,\n ActivatedRouteSnapshot,\n NavigationEnd,\n Router,\n RouterEvent,\n} from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Subject, Subscription, isObservable, lastValueFrom } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { SdNotifyService } from '@sd-angular/core/services/notify';\nimport { SdUtilities } from '@sd-angular/core/utilities';\nimport { SdTabActivated, SdTabDeactivated } from '../../events/tab-router.event';\nimport { SdTabAction } from '../../actions/tab-router.action';\nimport { SdTab } from '../../models';\nimport { SdTabDecoratorService } from '../../services/tab-decorator.service';\nimport { SdTabRouterService } from '../../services/tab-router.service';\nimport { SdTabRouterNavComponent } from '../tab-router-nav/tab-router-nav.component';\n\n@Component({\n selector: 'sd-tab-router-outlet',\n templateUrl: './tab-router-outlet.component.html',\n styleUrls: ['./tab-router-outlet.component.scss'],\n standalone: true,\n imports: [CommonModule, MatIconModule, MatTooltipModule, SdTabRouterNavComponent],\n})\nexport class SdTabRouterOutletComponent implements OnDestroy {\n @ViewChild('tabRouterNav') tabRouterNav?: SdTabRouterNavComponent;\n \n tabs = signal<SdTab[]>([]);\n\n #router = inject(Router);\n #activatedRoute = inject(ActivatedRoute);\n #injector = inject(Injector);\n #tabRouterService = inject(SdTabRouterService);\n #sdNotifyService = inject(SdNotifyService);\n #tabDecoratorService = inject(SdTabDecoratorService);\n\n #rootRoute?: ActivatedRoute;\n #subscription = new Subscription();\n\n constructor() {\n this.#subscription.add(\n this.#router.events\n .pipe(\n map((event: any) => (event instanceof RouterEvent ? event : event.routerEvent)),\n filter(event => event instanceof NavigationEnd)\n )\n .subscribe(async (event: any) => {\n const route = this.#getActivatedRouteSnapshot(this.#activatedRoute.snapshot);\n this.#rootRoute = this.#router.routerState.root;\n await this.#activeRoute(event.urlAfterRedirects || event.url, route);\n })\n );\n\n this.#subscription.add(\n this.#tabRouterService.actions.subscribe((event: SdTabAction | undefined) => {\n if (event?.type === 'close') {\n this.#closeTab(event.tab);\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n tabTrackBy = (index: number, tab: SdTab) => tab.key;\n\n #closeTab = (tab: SdTab) => {\n const currentTabs = this.tabs();\n const { isActive, key: activeKey } = tab;\n \n if (isActive) {\n const activeIndex = currentTabs.findIndex(({ key }) => key === activeKey);\n const nextTab = currentTabs[activeIndex + 1] || currentTabs[activeIndex - 1];\n \n this.tabs.set(currentTabs.filter(({ key }) => key !== activeKey));\n \n if (nextTab) {\n this.#router.navigate([nextTab.url], {\n queryParams: { ...(nextTab.queryParams || {}) },\n state: { switchTab: true },\n });\n } else {\n this.#router.navigateByUrl('/', { state: { switchTab: true } });\n }\n } else {\n this.tabs.set(currentTabs.filter(({ key }) => key !== tab.key));\n this.tabRouterNav?.checkUI();\n }\n };\n\n #activeRoute = async (fullUrl: string, route: ActivatedRouteSnapshot | null) => {\n if (!route?.component) return;\n\n const component = route.component as Type<any>;\n const queryParams = { ...(route.queryParams || {}) };\n const params = { ...(route.params || {}) };\n const data = { ...(route.data || {}) };\n const [url] = fullUrl.split('?');\n const key = SdUtilities.hash({ url, queryParams });\n\n let existedIndex = -1;\n let activatedIndex = -1;\n \n const currentTabs = this.tabs();\n currentTabs.forEach((tab, index) => {\n if (tab.key === key) {\n tab.isActive = true;\n existedIndex = index;\n } else {\n if (tab.isActive) {\n activatedIndex = index;\n this.#tabRouterService.pushEvent(tab, SdTabDeactivated);\n }\n tab.isActive = false;\n }\n });\n\n const currentNavigation = this.#router.getCurrentNavigation();\n const switchTab = currentNavigation?.extras?.state?.['switchTab'];\n const replaceTab = currentNavigation?.extras?.state?.['replaceTab'];\n\n // --- XỬ LÝ INJECTOR VÀ FIX LỖI TYPE TS(2345) ---\n const getBestInjector = async (snapshot: ActivatedRouteSnapshot): Promise<Injector> => {\n // 1. Nếu là Standalone Route, lấy injector từ chính route config (đã được router resolve)\n const routeInjector = (snapshot as any)._resolvedGui || (snapshot as any).routeConfig?._injector;\n if (routeInjector) return routeInjector;\n\n // 2. Xử lý NgModule (Lazy load kiểu cũ)\n const loadChildren = snapshot.parent?.routeConfig?.loadChildren;\n if (typeof loadChildren === 'function') {\n let loaded: any = await loadChildren();\n \n // Unwrap Observable\n if (isObservable(loaded)) {\n loaded = await lastValueFrom(loaded);\n }\n \n // Unwrap Default Export (ES Module)\n if (loaded && typeof loaded === 'object' && 'default' in loaded) {\n loaded = loaded.default;\n }\n\n // Nếu là NgModuleFactory (Angular cũ hơn)\n if (loaded instanceof NgModuleFactory) {\n return loaded.create(this.#injector).injector;\n }\n\n // Nếu là Type (Class NgModule) - Đây là chỗ fix lỗi TS(2345)\n if (typeof loaded === 'function' && !Array.isArray(loaded)) {\n try {\n return createNgModule(loaded, this.#injector).injector;\n } catch {\n return this.#injector;\n }\n }\n }\n return this.#injector;\n };\n\n const finalInjector = await getBestInjector(route);\n const activatedRoute = this.#getActivatedRoute(this.#rootRoute!, component);\n \n const newTab: SdTab = {\n key,\n component,\n injector: new SdOutletInjector(activatedRoute, finalInjector),\n isActive: true,\n url,\n params,\n queryParams,\n data,\n tabInfoChanges: new Subject(),\n };\n\n if (existedIndex >= 0) {\n const updatedTabs = [...currentTabs];\n if (replaceTab && activatedIndex >= 0) {\n updatedTabs.splice(activatedIndex, 1);\n }\n if (switchTab) {\n this.#tabRouterService.setCurrentTab(updatedTabs[existedIndex]);\n this.#tabRouterService.pushEvent(updatedTabs[existedIndex], SdTabActivated);\n } else {\n updatedTabs[existedIndex] = newTab;\n }\n this.tabs.set(updatedTabs);\n } else {\n const updatedTabs = [...currentTabs];\n this.#tabRouterService.setCurrentTab(newTab);\n if (activatedIndex >= 0 && replaceTab) {\n updatedTabs.splice(activatedIndex, 1);\n }\n this.tabs.set([...updatedTabs, newTab]);\n \n if (this.tabs().length > 30) {\n this.#sdNotifyService.warning('Bạn đã mở quá nhiều tab.');\n }\n }\n \n this.tabRouterNav?.checkUI();\n };\n\n #getActivatedRouteSnapshot = (snapshot: ActivatedRouteSnapshot): ActivatedRouteSnapshot | null => {\n let node = snapshot;\n while (node.firstChild) node = node.firstChild;\n return node;\n };\n\n #getActivatedRoute = (activatedRoute: ActivatedRoute, component: any): ActivatedRoute | null => {\n if (activatedRoute.component === component) return activatedRoute;\n for (const child of activatedRoute.children) {\n const result = this.#getActivatedRoute(child, component);\n if (result) return result;\n }\n return null;\n };\n}\n\nclass SdOutletInjector implements Injector {\n constructor(\n private route: ActivatedRoute | null,\n private parentInjector: Injector\n ) {}\n\n get(token: any, notFoundValue?: any): any {\n if (token === ActivatedRoute) {\n return this.route || notFoundValue;\n }\n return this.parentInjector.get(token, notFoundValue);\n }\n}","<sd-tab-router-nav [tabs]=\"tabs()\" #tabRouterNav></sd-tab-router-nav>\n\n<div class=\"tab-router__list\">\n @for (tab of tabs(); track tab.key) {\n <div class=\"tab-router__pane\" [class.active]=\"tab.isActive\" [id]=\"tab.key\">\n <div class=\"tab-router__content\">\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </div>\n </div>\n } @empty {\n <div class=\"tab-router__empty\">\n </div>\n }\n</div>","import { Type } from '@angular/core';\r\nimport { SdColor } from '@sd-angular/core/utilities/models';\r\nimport { filter, take } from 'rxjs/operators';\r\nimport { SdTabDecoratorService } from '../services/tab-decorator.service';\r\n\r\nexport interface SdTabComponentArgs {\r\n url?: string;\r\n params?: any;\r\n queryParams?: any;\r\n data?: Record<string, any>;\r\n}\r\n\r\nexport declare interface SdTabComponentBuilder {\r\n component: Type<any>;\r\n name: string | ((args: SdTabComponentArgs) => string);\r\n icon?: string | ((args: SdTabComponentArgs) => string);\r\n tooltip?: string | ((args: SdTabComponentArgs) => string);\r\n color?: SdColor | ((args: SdTabComponentArgs) => SdColor);\r\n}\r\n\r\nexport function SdTabComponent<T>(builder: SdTabComponentBuilder) {\r\n return (constructor: T) => {\r\n SdTabDecoratorService.tabRouterService\r\n .pipe(\r\n filter(service => service !== undefined && service !== null),\r\n take(1)\r\n )\r\n .subscribe(service => {\r\n service.addBuilder(builder);\r\n });\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SdTabRouterService"],"mappings":";;;;;;;;;;;;;;;;;MAEa,SAAS,CAAA;AACpB,IAAA,IAAI;AAEJ,IAAA,WAAA,CAAY,GAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;IACjB;AAEA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI;IAClB;AACD;AAEK,MAAO,cAAe,SAAQ,SAAS,CAAA;AAAG;AAE1C,MAAO,gBAAiB,SAAQ,SAAS,CAAA;AAAG;;MCNrC,kBAAkB,CAAA;IAC7B,MAAM,GAAG,IAAI,eAAe,CAAa,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AAClE,IAAA,OAAO,GAAG,IAAI,eAAe,CAA0B,SAAS,CAAC;AACjE,IAAA,QAAQ,GAAG,IAAI,eAAe,CAA0B,EAAE,CAAC;AAC3D,IAAA,iBAAiB,GAAG,IAAI,eAAe,CAAoB,SAAS,CAAC;AACrE,IAAA,OAAO,GAAG,IAAI,eAAe,CAAoB,SAAS,CAAC;AAC3D,IAAA,UAAU,GAAG,IAAI,eAAe,CAAoB,SAAS,CAAC;IAC9D,WAAW,GAAsB,SAAS;IAC1C,kBAAkB,GAA4B,EAAE;AAChD,IAAA,WAAA,GAAA,EAAe;AAEf,IAAA,UAAU,GAAG,CAAC,OAA8B,KAAI;QAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE;AACzE,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC7C;AACF,IAAA,CAAC;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,IAAI;IACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,IAAA,aAAa,GAAG,CAAC,GAAU,KAAU;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;AACtB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,IAAA,CAAC;AAED,IAAA,SAAS,GAAG,CAAC,GAAU,EAAE,KAAuB,KAAI;QAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC,IAAA,CAAC;AAED,IAAA,UAAU,GAAG,MAAK,EAAE,CAAC;AAErB,IAAA,KAAK,GAAG,CAAC,GAAW,KAAI;AACtB,QAAA,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW;QAC7B,IAAI,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAChB,gBAAA,IAAI,EAAE,OAAO;gBACb,GAAG;AACJ,aAAA,CAAC;QACJ;AACF,IAAA,CAAC;;AAGD,IAAA,SAAS,GAAG,CAAC,GAAU,KAAI,EAAE,CAAC;wGArFnB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCHY,qBAAqB,CAAA;IAChC,OAAO,gBAAgB,GAAG,IAAI,eAAe,CAAiC,SAAS,CAAC;AACxF,IAAA,WAAA,CAAY,gBAAoC,EAAA;AAC9C,QAAA,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAC/D;wGAJW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCEY,aAAa,CAAA;AACJ,IAAA,gBAAA;AAApB,IAAA,WAAA,CAAoB,gBAAoC,EAAA;QAApC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAAuB;IAC3D,SAAS,CAAC,OAAqC,EAAE,GAAU,EAAA;QACzD,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,OAAO;QAChB;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC1D,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,CAAC;QACjE,IAAI,OAAO,EAAE;YACX,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG;YAC9C,OAAO;AACL,gBAAA,IAAI,EAAE,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI;gBAC1G,IAAI,EAAE,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI;gBACpG,OAAO,EAAE,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO;gBAChH,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK;aACzG;QACH;QACA,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,GAAG;AACb,YAAA,IAAI,EAAE,SAAS;SAChB;IACH;wGArBW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;MCcY,wBAAwB,CAAA;AAMzB,IAAA,KAAA;AACA,IAAA,gBAAA;AACA,IAAA,MAAA;AAPiB,IAAA,GAAG;AAE9B,IAAA,aAAa,GAAiB,IAAI,YAAY,EAAE;AAChD,IAAA,OAAO;AACP,IAAA,WAAA,CACU,KAAwB,EACxB,gBAAoC,EACpC,MAAc,EAAA;QAFd,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,MAAM,GAAN,MAAM;IACb;IAEH,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAClE,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACH;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,IAAG;YAChE,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,gBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;YAC3B;QACF,CAAC,CAAC,CACH;IACH;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;IAClC;AAEA,IAAA,UAAU,GAAG,CAAC,KAAY,KAAI;QAC5B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACnC,YAAA,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW;AACjC,YAAA,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;AAC3B,SAAA,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,KAAK,GAAG,CAAC,KAAY,KAAI;QACvB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,SAAS,EAAE;AAClB,IAAA,CAAC;AAED,IAAA,WAAW,GAAG,CAAC,KAAiB,KAAI;AAClC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,KAAK,CAAC,cAAc,EAAE;QACxB;AACF,IAAA,CAAC;AAED,IAAA,SAAS,GAAG,CAAC,KAAiB,KAAI;AAChC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,SAAS,EAAE;QAClB;AACF,IAAA,CAAC;IAED,SAAS,GAAG,YAAW;AACrB,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;;AAEzB,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;gBAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;AACtC,gBAAA,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE;oBAC/B,IAAI,MAAM,EAAE;wBACV,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;oBACvC;gBACF;qBAAO;oBACL,IAAI,MAAM,MAAM,EAAE;wBAChB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;oBACvC;gBACF;YACF;QACF;aAAO;YACL,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACvC;AACF,IAAA,CAAC;wGA9EU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBrC,g8BA0BA,EAAA,MAAA,EAAA,CAAA,4pCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDRY,YAAY,8BAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAElD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,g8BAAA,EAAA,MAAA,EAAA,CAAA,4pCAAA,CAAA,EAAA;yIAGnC,GAAG,EAAA,CAAA;sBAA7B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;MENd,uBAAuB,CAAA;AAOxB,IAAA,KAAA;AAED,IAAA,UAAA;AARkB,IAAA,YAAY;IAE9B,IAAI,GAAY,EAAE;IAC3B,IAAI,GAA0B,SAAS;AAEvC,IAAA,WAAA,CACU,KAAwB;;IAEzB,UAA2B,EAAA;QAF1B,IAAA,CAAA,KAAK,GAAL,KAAK;QAEN,IAAA,CAAA,UAAU,GAAV,UAAU;IAChB;IAGH,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,EAAE;IAChB;IAEA,OAAO,GAAG,MAAK;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,WAAW;AAC1D,QAAA,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAK,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,IAAK,CAAC,MAAM;AACtE,QAAA,IAAI,SAAS,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;QACvB;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;QACvB;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;AAC3B,IAAA,CAAC;AAED,IAAA,MAAM,GAAG,CAAC,KAA2B,KAAI;AACvC,QAAA,eAAe,CAAC,IAAI,CAAC,IAAK,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;AACtE,IAAA,CAAC;wGA9BU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,mRCfpC,4dAYA,EAAA,MAAA,EAAA,CAAA,4dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDCY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,igCAAE,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAErD,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,eAAA,EAGZ,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,cAAc,EAAE,wBAAwB,CAAC,EAAA,QAAA,EAAA,4dAAA,EAAA,MAAA,EAAA,CAAA,4dAAA,CAAA,EAAA;+GAGtC,YAAY,EAAA,CAAA;sBAAtC,SAAS;uBAAC,cAAc;gBAEhB,IAAI,EAAA,CAAA;sBAAZ;gBAUD,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;;;AE3B3C;MAyCa,0BAA0B,CAAA;AACV,IAAA,YAAY;AAEvC,IAAA,IAAI,GAAG,MAAM,CAAU,EAAE,CAAC;AAE1B,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,IAAA,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AACxC,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,iBAAiB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC9C,IAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;AAC1C,IAAA,oBAAoB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAEpD,IAAA,UAAU;AACV,IAAA,aAAa,GAAG,IAAI,YAAY,EAAE;AAElC,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC,OAAO,CAAC;AACV,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,KAAU,MAAM,KAAK,YAAY,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,EAC/E,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,aAAa,CAAC;AAEhD,aAAA,SAAS,CAAC,OAAO,KAAU,KAAI;AAC9B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAC5E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI;AAC/C,YAAA,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;QACtE,CAAC,CAAC,CACL;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAA8B,KAAI;AAC1E,YAAA,IAAI,KAAK,EAAE,IAAI,KAAK,OAAO,EAAE;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;YAC3B;QACF,CAAC,CAAC,CACH;IACH;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;IAClC;IAEA,UAAU,GAAG,CAAC,KAAa,EAAE,GAAU,KAAK,GAAG,CAAC,GAAG;AAEnD,IAAA,SAAS,GAAG,CAAC,GAAU,KAAI;AACzB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;QAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG;QAExC,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,SAAS,CAAC;AACzE,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC;YAE5E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,SAAS,CAAC,CAAC;YAEjE,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACnC,WAAW,EAAE,EAAE,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE;AAC/C,oBAAA,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;AAC3B,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YACjE;QACF;aAAO;YACL,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;QAC9B;AACF,IAAA,CAAC;AAED,IAAA,YAAY,GAAG,OAAO,OAAe,EAAE,KAAoC,KAAI;QAC7E,IAAI,CAAC,KAAK,EAAE,SAAS;YAAE;AAEvB,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAsB;AAC9C,QAAA,MAAM,WAAW,GAAG,EAAE,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE;AACpD,QAAA,MAAM,MAAM,GAAG,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;AAC1C,QAAA,MAAM,IAAI,GAAG,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;QACtC,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;AAElD,QAAA,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;QAC/B,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AACjC,YAAA,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE;AACnB,gBAAA,GAAG,CAAC,QAAQ,GAAG,IAAI;gBACnB,YAAY,GAAG,KAAK;YACtB;iBAAO;AACL,gBAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;oBAChB,cAAc,GAAG,KAAK;oBACtB,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,EAAE,gBAAgB,CAAC;gBACzD;AACA,gBAAA,GAAG,CAAC,QAAQ,GAAG,KAAK;YACtB;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;QAC7D,MAAM,SAAS,GAAG,iBAAiB,EAAE,MAAM,EAAE,KAAK,GAAG,WAAW,CAAC;QACjE,MAAM,UAAU,GAAG,iBAAiB,EAAE,MAAM,EAAE,KAAK,GAAG,YAAY,CAAC;;AAGnE,QAAA,MAAM,eAAe,GAAG,OAAO,QAAgC,KAAuB;;YAEpF,MAAM,aAAa,GAAI,QAAgB,CAAC,YAAY,IAAK,QAAgB,CAAC,WAAW,EAAE,SAAS;AAChG,YAAA,IAAI,aAAa;AAAE,gBAAA,OAAO,aAAa;;YAGvC,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY;AAC/D,YAAA,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE;AACtC,gBAAA,IAAI,MAAM,GAAQ,MAAM,YAAY,EAAE;;AAGtC,gBAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACxB,oBAAA,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC;gBACtC;;gBAGA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,MAAM,EAAE;AAC/D,oBAAA,MAAM,GAAG,MAAM,CAAC,OAAO;gBACzB;;AAGA,gBAAA,IAAI,MAAM,YAAY,eAAe,EAAE;oBACrC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ;gBAC/C;;AAGA,gBAAA,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1D,oBAAA,IAAI;wBACF,OAAO,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ;oBACxD;AAAE,oBAAA,MAAM;wBACN,OAAO,IAAI,CAAC,SAAS;oBACvB;gBACF;YACF;YACA,OAAO,IAAI,CAAC,SAAS;AACvB,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAW,EAAE,SAAS,CAAC;AAE3E,QAAA,MAAM,MAAM,GAAU;YACpB,GAAG;YACH,SAAS;AACT,YAAA,QAAQ,EAAE,IAAI,gBAAgB,CAAC,cAAc,EAAE,aAAa,CAAC;AAC7D,YAAA,QAAQ,EAAE,IAAI;YACd,GAAG;YACH,MAAM;YACN,WAAW;YACX,IAAI;YACJ,cAAc,EAAE,IAAI,OAAO,EAAE;SAC9B;AAED,QAAA,IAAI,YAAY,IAAI,CAAC,EAAE;AACrB,YAAA,MAAM,WAAW,GAAG,CAAC,GAAG,WAAW,CAAC;AACpC,YAAA,IAAI,UAAU,IAAI,cAAc,IAAI,CAAC,EAAE;AACrC,gBAAA,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACvC;YACA,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC/D,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC;YAC7E;iBAAO;AACL,gBAAA,WAAW,CAAC,YAAY,CAAC,GAAG,MAAM;YACpC;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;QAC5B;aAAO;AACL,YAAA,MAAM,WAAW,GAAG,CAAC,GAAG,WAAW,CAAC;AACpC,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5C,YAAA,IAAI,cAAc,IAAI,CAAC,IAAI,UAAU,EAAE;AACrC,gBAAA,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACvC;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,MAAM,CAAC,CAAC;YAEvC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,0BAA0B,CAAC;YAC3D;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AAC9B,IAAA,CAAC;AAED,IAAA,0BAA0B,GAAG,CAAC,QAAgC,KAAmC;QAC/F,IAAI,IAAI,GAAG,QAAQ;QACnB,OAAO,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,GAAG,IAAI,CAAC,UAAU;AAC9C,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AAED,IAAA,kBAAkB,GAAG,CAAC,cAA8B,EAAE,SAAc,KAA2B;AAC7F,QAAA,IAAI,cAAc,CAAC,SAAS,KAAK,SAAS;AAAE,YAAA,OAAO,cAAc;AACjE,QAAA,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,QAAQ,EAAE;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC;AACxD,YAAA,IAAI,MAAM;AAAE,gBAAA,OAAO,MAAM;QAC3B;AACA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;wGAjMU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzCvC,seAaM,EAAA,MAAA,EAAA,CAAA,yWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED0BM,YAAY,uUAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAErE,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EAGpB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,EAAA,QAAA,EAAA,seAAA,EAAA,MAAA,EAAA,CAAA,yWAAA,CAAA,EAAA;wDAGtD,YAAY,EAAA,CAAA;sBAAtC,SAAS;uBAAC,cAAc;;AAmM3B,MAAM,gBAAgB,CAAA;AAEV,IAAA,KAAA;AACA,IAAA,cAAA;IAFV,WAAA,CACU,KAA4B,EAC5B,cAAwB,EAAA;QADxB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,cAAc,GAAd,cAAc;IACrB;IAEH,GAAG,CAAC,KAAU,EAAE,aAAmB,EAAA;AACjC,QAAA,IAAI,KAAK,KAAK,cAAc,EAAE;AAC5B,YAAA,OAAO,IAAI,CAAC,KAAK,IAAI,aAAa;QACpC;QACA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC;IACtD;AACD;;AErOK,SAAU,cAAc,CAAI,OAA8B,EAAA;IAC9D,OAAO,CAAC,WAAc,KAAI;AACxB,QAAA,qBAAqB,CAAC;aACnB,IAAI,CACH,MAAM,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,CAAC,EAC5D,IAAI,CAAC,CAAC,CAAC;aAER,SAAS,CAAC,OAAO,IAAG;AACnB,YAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;AAC7B,QAAA,CAAC,CAAC;AACN,IAAA,CAAC;AACH;;AC/BA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-components-tab-router.mjs","sources":["../../../projects/sd-angular/components/tab-router/src/events/tab-router.event.ts","../../../projects/sd-angular/components/tab-router/src/services/tab-router.service.ts","../../../projects/sd-angular/components/tab-router/src/services/tab-decorator.service.ts","../../../projects/sd-angular/components/tab-router/src/pipes/tab-info.pipe.ts","../../../projects/sd-angular/components/tab-router/src/components/tab-router-item/tab-router-item.component.ts","../../../projects/sd-angular/components/tab-router/src/components/tab-router-item/tab-router-item.component.html","../../../projects/sd-angular/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.ts","../../../projects/sd-angular/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.html","../../../projects/sd-angular/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.ts","../../../projects/sd-angular/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.html","../../../projects/sd-angular/components/tab-router/src/decorators/tab.decorator.ts","../../../projects/sd-angular/components/tab-router/sd-angular-core-components-tab-router.ts"],"sourcesContent":["import { SdTab } from '../models/tab-router.model';\n\nexport class SdTabBase {\n #tab: SdTab | undefined;\n\n constructor(tab: SdTab | undefined) {\n this.#tab = tab;\n }\n\n get tab(): SdTab | undefined {\n return this.#tab;\n }\n}\n\nexport class SdTabActivated extends SdTabBase {}\n\nexport class SdTabDeactivated extends SdTabBase {}\n\nexport declare type SdTabEvent = SdTabActivated | SdTabDeactivated;\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTabAction } from '../actions/tab-router.action';\r\nimport { SdTabComponentBuilder } from '../decorators/tab.decorator';\r\nimport { SdTabBase, SdTabEvent } from '../events/tab-router.event';\r\nimport { SdTab } from '../models/tab-router.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdTabRouterService {\r\n events = new BehaviorSubject<SdTabEvent>(new SdTabBase(undefined));\r\n actions = new BehaviorSubject<SdTabAction | undefined>(undefined);\r\n builders = new BehaviorSubject<SdTabComponentBuilder[]>([]);\r\n currentTabChanges = new BehaviorSubject<SdTab | undefined>(undefined);\r\n newTabs = new BehaviorSubject<SdTab | undefined>(undefined);\r\n updateTabs = new BehaviorSubject<SdTab | undefined>(undefined);\r\n #currentTab: SdTab | undefined = undefined;\r\n #componentBuilders: SdTabComponentBuilder[] = [];\r\n constructor() {}\r\n\r\n addBuilder = (builder: SdTabComponentBuilder) => {\r\n if (!this.#componentBuilders.some(e => e.component === builder.component)) {\r\n this.#componentBuilders.push(builder);\r\n this.builders.next(this.#componentBuilders);\r\n }\r\n };\r\n\r\n get currentTab() {\r\n return this.#currentTab;\r\n }\r\n\r\n get currentKey() {\r\n return this.#currentTab?.key || null;\r\n }\r\n\r\n // select = (tabOrKey: string | SdTab): void => {\r\n // const tab = this.#tabs.find(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key === tabOrKey;\r\n // }\r\n // return e.key === tabOrKey?.key;\r\n // });\r\n // if (tab) {\r\n // this.#currentTab = tab;\r\n // }\r\n // }\r\n\r\n // add = (tab: SdTab): void => {\r\n // if (!tab.key) {\r\n // this.notifyService.notify.warning('Tab key is required');\r\n // }\r\n // if (!tab.component) {\r\n // this.notifyService.notify.warning('Tab component is required');\r\n // }\r\n // const existedTab = this.#tabs.find(e => e.key === tab.key);\r\n // if (!existedTab) {\r\n // this.#tabs.push(tab);\r\n // this.select(tab);\r\n // } else {\r\n // this.select(existedTab);\r\n // }\r\n // }\r\n\r\n // remove = (tabOrKey: string | SdTab): void => {\r\n // this.#tabs = this.#tabs.filter(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key !== tabOrKey;\r\n // }\r\n // return e.key !== tabOrKey?.key;\r\n // });\r\n // }\r\n\r\n setCurrentTab = (tab: SdTab): void => {\r\n this.#currentTab = tab;\r\n this.currentTabChanges.next(tab);\r\n };\r\n\r\n pushEvent = (tab: SdTab, Event: Type<SdTabEvent>) => {\r\n this.events.next(new Event(tab));\r\n };\r\n\r\n setOptions = () => {};\r\n\r\n close = (tab?: SdTab) => {\r\n tab = tab || this.#currentTab;\r\n if (tab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab,\r\n });\r\n }\r\n };\r\n\r\n // Gọi hàm này để thực hiện update tab\r\n updateTab = (tab: SdTab) => {};\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { SdTabRouterService } from './tab-router.service';\n@Injectable({\n providedIn: 'root',\n})\nexport class SdTabDecoratorService {\n static tabRouterService = new BehaviorSubject<SdTabRouterService | undefined>(undefined);\n constructor(tabRouterService: SdTabRouterService) {\n SdTabDecoratorService.tabRouterService.next(tabRouterService);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTab, SdTabInfo } from '../models/tab-router.model';\nimport { SdTabRouterService } from '../services/tab-router.service';\n@Pipe({\n name: 'sdTabInfo',\n standalone: true,\n})\nexport class SdTabInfoPipe implements PipeTransform {\n constructor(private tabRouterService: SdTabRouterService) {}\n transform(tabInfo: SdTabInfo | undefined | null, tab: SdTab): SdTabInfo {\n if (tabInfo) {\n return tabInfo;\n }\n const builders = this.tabRouterService.builders.getValue();\n const builder = builders.find(e => e.component === tab.component);\n if (builder) {\n const { url, params, queryParams, data } = tab;\n return {\n name: typeof builder.name === 'function' ? builder.name({ url, params, queryParams, data }) : builder.name,\n icon: typeof builder.icon === 'function' ? builder.icon({ url, params, queryParams }) : builder.icon,\n tooltip: typeof builder.tooltip === 'function' ? builder.tooltip({ url, params, queryParams }) : builder.tooltip,\n color: typeof builder.color === 'function' ? builder.color({ url, params, queryParams }) : builder.color,\n };\n }\n return {\n name: tab.url,\n icon: undefined,\n };\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, startWith } from 'rxjs/operators';\r\n\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdBadge } from '@sd-angular/core/components/badge';\r\nimport { SdTab, SdTabInfo } from '../../models';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\nimport { Router } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdTabInfoPipe } from '../../pipes/tab-info.pipe';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-item',\r\n templateUrl: './tab-router-item.component.html',\r\n styleUrls: ['./tab-router-item.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule, SdBadge, SdTabInfoPipe],\r\n})\r\nexport class SdTabRouterItemComponent implements OnInit, OnDestroy {\r\n @Input({ required: true }) tab!: SdTab;\r\n\r\n #subsctiption: Subscription = new Subscription();\r\n tabInfo?: SdTabInfo;\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n private tabRouterService: SdTabRouterService,\r\n private router: Router\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.#subsctiption.add(\r\n this.tabRouterService.events.pipe(debounceTime(100)).subscribe(() => {\r\n this.cdRef.markForCheck();\r\n })\r\n );\r\n\r\n this.#subsctiption.add(\r\n this.tab.tabInfoChanges.pipe(startWith(null)).subscribe(tabInfo => {\r\n if (tabInfo) {\r\n this.tabInfo = tabInfo;\r\n this.cdRef.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subsctiption.unsubscribe();\r\n }\r\n\r\n onTabClick = (event: Event) => {\r\n event.preventDefault();\r\n this.router.navigate([this.tab.url], {\r\n queryParams: this.tab.queryParams,\r\n state: { switchTab: true },\r\n });\r\n };\r\n\r\n close = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.#closeTab();\r\n };\r\n\r\n onMousedown = (event: MouseEvent) => {\r\n if (event.button === 1) {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n onMouseup = (event: MouseEvent) => {\r\n if (event.button === 1) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.#closeTab();\r\n }\r\n };\r\n\r\n #closeTab = async () => {\r\n if (this.tab?.beforeClose) {\r\n //\r\n if (this.tab?.beforeClose()) {\r\n const result = this.tab?.beforeClose();\r\n if (typeof result === 'boolean') {\r\n if (result) {\r\n this.tabRouterService.close(this.tab);\r\n }\r\n } else {\r\n if (await result) {\r\n this.tabRouterService.close(this.tab);\r\n }\r\n }\r\n }\r\n } else {\r\n this.tabRouterService.close(this.tab);\r\n }\r\n };\r\n}\r\n","<a\r\n [href]=\"[tab.url]\"\r\n class=\"tab-router__item d-flex align-items-center gap-8\"\r\n [class.tab-router__item--active]=\"tab.isActive\"\r\n (click)=\"onTabClick($event)\"\r\n (mousedown)=\"onMousedown($event)\"\r\n (mouseup)=\"onMouseup($event)\">\r\n @let info = tabInfo | sdTabInfo: tab;\r\n @if (info) {\r\n <sd-badge\r\n style=\"overflow: hidden;white-space: nowrap;\"\r\n [icon]=\"info.icon\"\r\n [title]=\"info.icon\"\r\n [tooltip]=\"info.tooltip || info.name\"\r\n [title]=\"info.name\"\r\n [color]=\"info.color\"\r\n (click)=\"onTabClick($event)\"></sd-badge>\r\n <button\r\n aria-hidden=\"true\"\r\n class=\"tab-router__close d-flex align-items-center justify-content-center ml-auto p-0\"\r\n (click)=\"close($event)\"\r\n (mousedown)=\"$event.stopPropagation()\">\r\n <mat-icon aria-hidden=\"true\" fontIcon=\"close\"></mat-icon>\r\n </button>\r\n }\r\n</a>\r\n","import { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Input, ViewChild } from '@angular/core';\n\nimport { SdTab } from '../../models/tab-router.model';\nimport { SdTabRouterItemComponent } from '../tab-router-item/tab-router-item.component';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'sd-tab-router-nav',\n templateUrl: './tab-router-nav.component.html',\n styleUrls: ['./tab-router-nav.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, DragDropModule, SdTabRouterItemComponent],\n})\nexport class SdTabRouterNavComponent {\n @ViewChild('tabRouterNav') tabRouterNav?: ElementRef;\n\n @Input() tabs: SdTab[] = [];\n mode: 'default' | 'compact' = 'default';\n\n constructor(\n private cdRef: ChangeDetectorRef,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public elementRef: ElementRef<any>\n ) {}\n\n @HostListener('window:resize', ['$event'])\n onResize(): void {\n this.checkUI();\n }\n\n checkUI = () => {\n const width = this.tabRouterNav?.nativeElement.clientWidth;\n const nameWidth = (width - this.tabs!.length * 68) / this.tabs!.length;\n if (nameWidth <= 20) {\n this.mode = 'compact';\n } else {\n this.mode = 'default';\n }\n this.cdRef.markForCheck();\n };\n\n onDrop = (event: CdkDragDrop<SdTab[]>) => {\n moveItemInArray(this.tabs!, event.previousIndex, event.currentIndex);\n };\n}\n","<div\n #tabRouterNav\n cdkDropList\n cdkDropListLockAxis=\"x\"\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onDrop($event)\"\n class=\"tab-router__nav tab-router__nav--{{ mode }} d-flex align-items-center flex-nowrap\"\n [class.d-none]=\"tabs.length > 1\">\n <ng-container *ngFor=\"let tab of tabs\">\n <sd-tab-router-item [tab]=\"tab\" cdkDrag [cdkDragBoundary]=\"elementRef?.nativeElement\"></sd-tab-router-item>\n </ng-container>\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { \n Component, \n Injector, \n OnDestroy, \n Type, \n ViewChild, \n inject, \n signal, \n createNgModule,\n NgModuleFactory\n} from '@angular/core';\nimport {\n ActivatedRoute,\n ActivatedRouteSnapshot,\n NavigationEnd,\n Router,\n RouterEvent,\n} from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Subject, Subscription, isObservable, lastValueFrom } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { SdNotifyService } from '@sd-angular/core/services/notify';\nimport { SdUtilities } from '@sd-angular/core/utilities';\nimport { SdTabActivated, SdTabDeactivated } from '../../events/tab-router.event';\nimport { SdTabAction } from '../../actions/tab-router.action';\nimport { SdTab } from '../../models';\nimport { SdTabDecoratorService } from '../../services/tab-decorator.service';\nimport { SdTabRouterService } from '../../services/tab-router.service';\nimport { SdTabRouterNavComponent } from '../tab-router-nav/tab-router-nav.component';\n\n@Component({\n selector: 'sd-tab-router-outlet',\n templateUrl: './tab-router-outlet.component.html',\n styleUrls: ['./tab-router-outlet.component.scss'],\n standalone: true,\n imports: [CommonModule, MatIconModule, MatTooltipModule, SdTabRouterNavComponent],\n})\nexport class SdTabRouterOutletComponent implements OnDestroy {\n @ViewChild('tabRouterNav') tabRouterNav?: SdTabRouterNavComponent;\n \n tabs = signal<SdTab[]>([]);\n\n #router = inject(Router);\n #activatedRoute = inject(ActivatedRoute);\n #injector = inject(Injector);\n #tabRouterService = inject(SdTabRouterService);\n #sdNotifyService = inject(SdNotifyService);\n #tabDecoratorService = inject(SdTabDecoratorService);\n\n #rootRoute?: ActivatedRoute;\n #subscription = new Subscription();\n\n constructor() {\n this.#subscription.add(\n this.#router.events\n .pipe(\n map((event: any) => (event instanceof RouterEvent ? event : event.routerEvent)),\n filter(event => event instanceof NavigationEnd)\n )\n .subscribe(async (event: any) => {\n const route = this.#getActivatedRouteSnapshot(this.#activatedRoute.snapshot);\n this.#rootRoute = this.#router.routerState.root;\n await this.#activeRoute(event.urlAfterRedirects || event.url, route);\n })\n );\n\n this.#subscription.add(\n this.#tabRouterService.actions.subscribe((event: SdTabAction | undefined) => {\n if (event?.type === 'close') {\n this.#closeTab(event.tab);\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n tabTrackBy = (index: number, tab: SdTab) => tab.key;\n\n #closeTab = (tab: SdTab) => {\n const currentTabs = this.tabs();\n const { isActive, key: activeKey } = tab;\n \n if (isActive) {\n const activeIndex = currentTabs.findIndex(({ key }) => key === activeKey);\n const nextTab = currentTabs[activeIndex + 1] || currentTabs[activeIndex - 1];\n \n this.tabs.set(currentTabs.filter(({ key }) => key !== activeKey));\n \n if (nextTab) {\n this.#router.navigate([nextTab.url], {\n queryParams: { ...(nextTab.queryParams || {}) },\n state: { switchTab: true },\n });\n } else {\n this.#router.navigateByUrl('/', { state: { switchTab: true } });\n }\n } else {\n this.tabs.set(currentTabs.filter(({ key }) => key !== tab.key));\n this.tabRouterNav?.checkUI();\n }\n };\n\n #activeRoute = async (fullUrl: string, route: ActivatedRouteSnapshot | null) => {\n if (!route?.component) return;\n\n const component = route.component as Type<any>;\n const queryParams = { ...(route.queryParams || {}) };\n const params = { ...(route.params || {}) };\n const data = { ...(route.data || {}) };\n const [url] = fullUrl.split('?');\n const key = SdUtilities.hash({ url, queryParams });\n\n let existedIndex = -1;\n let activatedIndex = -1;\n \n const currentTabs = this.tabs();\n currentTabs.forEach((tab, index) => {\n if (tab.key === key) {\n tab.isActive = true;\n existedIndex = index;\n } else {\n if (tab.isActive) {\n activatedIndex = index;\n this.#tabRouterService.pushEvent(tab, SdTabDeactivated);\n }\n tab.isActive = false;\n }\n });\n\n const currentNavigation = this.#router.getCurrentNavigation();\n const replaceTab = currentNavigation?.extras?.state?.['replaceTab'];\n\n // --- XỬ LÝ INJECTOR VÀ FIX LỖI TYPE TS(2345) ---\n const getBestInjector = async (snapshot: ActivatedRouteSnapshot): Promise<Injector> => {\n // 1. Nếu là Standalone Route, lấy injector từ chính route config (đã được router resolve)\n const routeInjector = (snapshot as any)._resolvedGui || (snapshot as any).routeConfig?._injector;\n if (routeInjector) return routeInjector;\n\n // 2. Xử lý NgModule (Lazy load kiểu cũ)\n const loadChildren = snapshot.parent?.routeConfig?.loadChildren;\n if (typeof loadChildren === 'function') {\n let loaded: any = await loadChildren();\n \n // Unwrap Observable\n if (isObservable(loaded)) {\n loaded = await lastValueFrom(loaded);\n }\n \n // Unwrap Default Export (ES Module)\n if (loaded && typeof loaded === 'object' && 'default' in loaded) {\n loaded = loaded.default;\n }\n\n // Nếu là NgModuleFactory (Angular cũ hơn)\n if (loaded instanceof NgModuleFactory) {\n return loaded.create(this.#injector).injector;\n }\n\n // Nếu là Type (Class NgModule) - Đây là chỗ fix lỗi TS(2345)\n if (typeof loaded === 'function' && !Array.isArray(loaded)) {\n try {\n return createNgModule(loaded, this.#injector).injector;\n } catch {\n return this.#injector;\n }\n }\n }\n return this.#injector;\n };\n\n const finalInjector = await getBestInjector(route);\n const activatedRoute = this.#getActivatedRoute(this.#rootRoute!, component);\n \n const newTab: SdTab = {\n key,\n component,\n injector: new SdOutletInjector(activatedRoute, finalInjector),\n isActive: true,\n url,\n params,\n queryParams,\n data,\n tabInfoChanges: new Subject(),\n };\n\n if (existedIndex >= 0) {\n const updatedTabs = [...currentTabs];\n if (replaceTab && activatedIndex >= 0) {\n updatedTabs.splice(activatedIndex, 1);\n }\n this.#tabRouterService.setCurrentTab(updatedTabs[existedIndex]);\n this.#tabRouterService.pushEvent(updatedTabs[existedIndex], SdTabActivated);\n this.tabs.set(updatedTabs);\n } else {\n const updatedTabs = [...currentTabs];\n this.#tabRouterService.setCurrentTab(newTab);\n if (activatedIndex >= 0 && replaceTab) {\n updatedTabs.splice(activatedIndex, 1);\n }\n this.tabs.set([...updatedTabs, newTab]);\n \n if (this.tabs().length > 30) {\n this.#sdNotifyService.warning('Bạn đã mở quá nhiều tab.');\n }\n }\n \n this.tabRouterNav?.checkUI();\n };\n\n #getActivatedRouteSnapshot = (snapshot: ActivatedRouteSnapshot): ActivatedRouteSnapshot | null => {\n let node = snapshot;\n while (node.firstChild) node = node.firstChild;\n return node;\n };\n\n #getActivatedRoute = (activatedRoute: ActivatedRoute, component: any): ActivatedRoute | null => {\n if (activatedRoute.component === component) return activatedRoute;\n for (const child of activatedRoute.children) {\n const result = this.#getActivatedRoute(child, component);\n if (result) return result;\n }\n return null;\n };\n}\n\nclass SdOutletInjector implements Injector {\n constructor(\n private route: ActivatedRoute | null,\n private parentInjector: Injector\n ) {}\n\n get(token: any, notFoundValue?: any): any {\n if (token === ActivatedRoute) {\n return this.route || notFoundValue;\n }\n return this.parentInjector.get(token, notFoundValue);\n }\n}","<sd-tab-router-nav [tabs]=\"tabs()\" #tabRouterNav></sd-tab-router-nav>\n\n<div class=\"tab-router__list\">\n @for (tab of tabs(); track tab.key) {\n <div class=\"tab-router__pane\" [class.active]=\"tab.isActive\" [id]=\"tab.key\">\n <div class=\"tab-router__content\">\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </div>\n </div>\n } @empty {\n <div class=\"tab-router__empty\">\n </div>\n }\n</div>","import { Type } from '@angular/core';\r\nimport { SdColor } from '@sd-angular/core/utilities/models';\r\nimport { filter, take } from 'rxjs/operators';\r\nimport { SdTabDecoratorService } from '../services/tab-decorator.service';\r\n\r\nexport interface SdTabComponentArgs {\r\n url?: string;\r\n params?: any;\r\n queryParams?: any;\r\n data?: Record<string, any>;\r\n}\r\n\r\nexport declare interface SdTabComponentBuilder {\r\n component: Type<any>;\r\n name: string | ((args: SdTabComponentArgs) => string);\r\n icon?: string | ((args: SdTabComponentArgs) => string);\r\n tooltip?: string | ((args: SdTabComponentArgs) => string);\r\n color?: SdColor | ((args: SdTabComponentArgs) => SdColor);\r\n}\r\n\r\nexport function SdTabComponent<T>(builder: SdTabComponentBuilder) {\r\n return (constructor: T) => {\r\n SdTabDecoratorService.tabRouterService\r\n .pipe(\r\n filter(service => service !== undefined && service !== null),\r\n take(1)\r\n )\r\n .subscribe(service => {\r\n service.addBuilder(builder);\r\n });\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SdTabRouterService"],"mappings":"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"}
|
|
@@ -180,6 +180,15 @@ const generateUniqueCode = (name, existingCodes) => {
|
|
|
180
180
|
}
|
|
181
181
|
return newCode;
|
|
182
182
|
};
|
|
183
|
+
const sha256 = async (input) => {
|
|
184
|
+
const buffer = new TextEncoder().encode(input);
|
|
185
|
+
const hash = await crypto.subtle.digest('SHA-256', buffer);
|
|
186
|
+
const bytes = new Uint8Array(hash);
|
|
187
|
+
let binary = '';
|
|
188
|
+
for (let i = 0; i < bytes.length; i++)
|
|
189
|
+
binary += String.fromCharCode(bytes[i]);
|
|
190
|
+
return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
191
|
+
};
|
|
183
192
|
const StringUtilities = {
|
|
184
193
|
REGEX_EMAIL,
|
|
185
194
|
REGEX_PHONE,
|
|
@@ -200,6 +209,7 @@ const StringUtilities = {
|
|
|
200
209
|
isNullOrWhiteSpace,
|
|
201
210
|
convertToSnakeCaseCode,
|
|
202
211
|
generateUniqueCode,
|
|
212
|
+
sha256,
|
|
203
213
|
};
|
|
204
214
|
|
|
205
215
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-utilities-extensions.mjs","sources":["../../../projects/sd-angular/utilities/extensions/src/string.extension.ts","../../../projects/sd-angular/utilities/extensions/src/array.extension.ts","../../../projects/sd-angular/utilities/extensions/src/number.extension.ts","../../../projects/sd-angular/utilities/extensions/src/date.extension.ts","../../../projects/sd-angular/utilities/extensions/src/utility.extension.ts","../../../projects/sd-angular/utilities/extensions/src/color.extension.ts","../../../projects/sd-angular/utilities/extensions/sd-angular-core-utilities-extensions.ts"],"sourcesContent":["/* eslint-disable no-useless-escape */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// declare global {\r\n// interface StringConstructor {\r\n// isValidEmail(value: any): boolean;\r\n// isValidPhone(value: any): boolean;\r\n// isValidCode(value: any): boolean;\r\n// changeAliasLowerCase(alias: any): string;\r\n// aliasIncludes(alias: any, searchText: any): boolean;\r\n// format(template: string, ...arr: any[]): string;\r\n// templateToDisplay(template: string, entity: any): string; // Convert theo format ${key}\r\n// encrypt(obj: any): string;\r\n// decrypt(encripted: string): any;\r\n// isNullOrEmpty(value: any): boolean;\r\n// isNullOrWhiteSpace(value: any): boolean;\r\n// }\r\n// }\r\n\r\nconst REGEX_EMAIL = '^(([^<>()[\\\\].,;:\\\\s@\"]+(\\\\.[^<>()[\\\\].,;:\\\\s@\"]+)*)|(\".+\"))@(([^<>()[\\\\].,;:\\\\s@\"]+\\\\.)+[^<>()[\\\\].,;:\\\\s@\"]{2,})$';\r\nconst REGEX_PHONE = '^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\\\s./0-9]*$';\r\nconst REGEX_PHONE_VN = '^(?:\\\\+84|0|84)(3[2-9]|5[2689]|7[06-9]|8[1-689]|9[0-9])\\\\d{7}$';\r\nconst REGEX_IDVN_OR_PASSPORT = '^(\\\\d{9}|\\\\d{12}|[A-Z]\\\\d{7})$';\r\nconst REGEX_TIME = '^(?:[01]\\\\d|2[0-3]):[0-5]\\\\d$';\r\nconst isValidEmail = (value: any) => {\r\n if (!value) {\r\n return false;\r\n }\r\n const re = new RegExp(REGEX_EMAIL);\r\n return re.test(value);\r\n};\r\n\r\nconst isValidPhone = (value: any) => {\r\n if (!value) {\r\n return false;\r\n }\r\n const re = new RegExp(REGEX_PHONE);\r\n return re.test(value);\r\n};\r\n\r\nconst isValidCode = (value: any) => {\r\n if (!value) {\r\n return false;\r\n }\r\n const re = /^[a-zA-Z0-9\\@\\_\\-]{2,20}$/;\r\n return re.test(value);\r\n};\r\n\r\nconst isNullOrEmpty = (value: any) => {\r\n return value === undefined || value === null || value === '';\r\n};\r\n\r\nconst isNullOrWhiteSpace = (value: any) => {\r\n return value === undefined || value === null || typeof value !== 'string' || value.match(/^ *$/) !== null;\r\n};\r\n\r\nconst changeAliasLowerCase = (alias: any) => {\r\n let str: string = alias?.toString() ?? '';\r\n str = str.toString().toLowerCase();\r\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\r\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e');\r\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\r\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\r\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\r\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\r\n str = str.replace(/đ/g, 'd');\r\n str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, ' ');\r\n str = str.replace(/ + /g, ' ');\r\n str = str.trim();\r\n return str;\r\n};\r\n\r\nconst aliasIncludes = (alias: any, searchText: any) => {\r\n return changeAliasLowerCase(alias).includes(changeAliasLowerCase(searchText));\r\n};\r\n\r\nconst format = (template: string, ...arr: any[]) => {\r\n for (let i = 0; i < arr.length; i++) {\r\n const regexp = new RegExp(`\\\\{${i}\\\\}`, 'gi');\r\n template = template.replace(regexp, arr[i]);\r\n }\r\n return template;\r\n};\r\n\r\nconst getValueByPath = (entity: Record<string, any>, key: string) => {\r\n let value: any = entity;\r\n for (const part of key.split('.')) {\r\n value = value?.[part];\r\n }\r\n return value;\r\n};\r\n\r\n// Convert: `[${code}] ${name}` => `[Mã] Tên`;\r\nconst templateToDisplay = (template: string, entity: Record<string, any>) => {\r\n if (!template) {\r\n return template;\r\n }\r\n const regex = /\\$\\{([A-Za-z0-9._-]*)\\}/g;\r\n const matches = template.match(regex) || [];\r\n for (const match of matches) {\r\n const key = match.slice(2, match.length - 1);\r\n if (key) {\r\n template = template.replace(match, getValueByPath(entity, key) ?? '');\r\n }\r\n }\r\n return template;\r\n};\r\n\r\nconst EXACT_TEMPLATE_REGEX = /^\\$\\{([A-Za-z0-9._-]*)\\}$/;\r\nconst NUMBER_LITERAL_REGEX = /^-?\\d+(\\.\\d+)?$/;\r\n\r\n// Convert placeholder/literal an toàn, không thực thi JavaScript động.\r\nconst parseExpression = (template: string, entity: Record<string, any>) => {\r\n if (!template) {\r\n return undefined;\r\n }\r\n const trimmedTemplate = template.trim();\r\n const exactTemplateMatch = trimmedTemplate.match(EXACT_TEMPLATE_REGEX);\r\n if (exactTemplateMatch?.[1]) {\r\n return getValueByPath(entity, exactTemplateMatch[1]);\r\n }\r\n\r\n if (trimmedTemplate === 'true') {\r\n return true;\r\n }\r\n if (trimmedTemplate === 'false') {\r\n return false;\r\n }\r\n if (trimmedTemplate === 'null') {\r\n return null;\r\n }\r\n if (trimmedTemplate === 'undefined') {\r\n return undefined;\r\n }\r\n if (NUMBER_LITERAL_REGEX.test(trimmedTemplate)) {\r\n return Number(trimmedTemplate);\r\n }\r\n\r\n return templateToDisplay(template, entity);\r\n};\r\n\r\nconst SALT = 'cb9f4b2a-d26c-4787-a66e-e7130ee00f95';\r\n\r\nconst encrypt = (obj: any) => {\r\n obj = JSON.stringify(obj).split('');\r\n for (let i = 0, l = obj.length; i < l; i++)\r\n if (obj[i] == '{') obj[i] = '}';\r\n else if (obj[i] == '}') obj[i] = '{';\r\n return encodeURI(SALT + obj.join(''));\r\n};\r\n\r\nconst decrypt = (encripted: string) => {\r\n encripted = decodeURI(encripted);\r\n if (SALT && encripted.indexOf(SALT) != 0) throw new Error('object cannot be decrypted');\r\n const strs = encripted.substring(SALT.length).split('');\r\n for (let i = 0, l = strs.length; i < l; i++)\r\n if (strs[i] == '{') strs[i] = '}';\r\n else if (encripted[i] == '}') strs[i] = '{';\r\n return JSON.parse(strs.join(''));\r\n};\r\n\r\n// Conver \"Đội Kỹ Thuật\" thành \"doi_ky_thuat\"\r\nconst convertToSnakeCaseCode = (name: string): string => {\r\n if (typeof name !== 'string') {\r\n throw new Error('Invalid name');\r\n }\r\n return name\r\n .normalize('NFD') // Tách dấu\r\n .replace(/[\\u0300-\\u036f]/g, '') // Xóa các dấu vừa tách\r\n .replace(/[đĐ]/g, 'd') // Quan trọng: Xử lý chữ đ/Đ thành d\r\n .trim()\r\n .replace(/[^a-zA-Z0-9]+/g, '_') // Thay ký tự đặc biệt bằng _\r\n .replace(/^_+|_+$/g, '') // Xóa _ ở đầu/cuối\r\n .toLowerCase(); // Chuyển thành chữ thường: doi_ky_thuat\r\n};\r\n\r\n/**\r\n * Tạo code duy nhất, tự động thêm suffix _n nếu bị trùng\r\n * @param name Tên cần convert\r\n * @param existingCodes Danh sách các code đã tồn tại\r\n */\r\nconst generateUniqueCode = (name: string, existingCodes: string[]): string => {\r\n // 1. Tạo base code trước\r\n const baseCode = convertToSnakeCaseCode(name);\r\n // 2. Nếu code chưa tồn tại thì trả về luôn\r\n if (!existingCodes.includes(baseCode)) {\r\n return baseCode;\r\n }\r\n // 3. Nếu trùng, bắt đầu loop để tìm index phù hợp\r\n let index = 1;\r\n let newCode = `${baseCode}_${index}`;\r\n\r\n while (existingCodes.includes(newCode)) {\r\n index++;\r\n newCode = `${baseCode}_${index}`;\r\n }\r\n return newCode;\r\n};\r\n\r\nexport const StringUtilities = {\r\n REGEX_EMAIL,\r\n REGEX_PHONE,\r\n REGEX_PHONE_VN,\r\n REGEX_IDVN_OR_PASSPORT,\r\n REGEX_TIME,\r\n isValidEmail,\r\n isValidPhone,\r\n isValidCode,\r\n changeAliasLowerCase,\r\n aliasIncludes,\r\n format,\r\n templateToDisplay,\r\n parseExpression,\r\n encrypt,\r\n decrypt,\r\n isNullOrEmpty,\r\n isNullOrWhiteSpace,\r\n convertToSnakeCaseCode,\r\n generateUniqueCode,\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// export {};\r\n\r\nimport { StringUtilities } from './string.extension';\r\n\r\n// declare global {\r\n// interface Array<T = any> {\r\n// search(searchText: string | number, fields?: (string | undefined) | (string | undefined)[], children?: string): T[];\r\n// paging(pageSize: number, page?: number): T[];\r\n// toObject(key: string): Record<string, T>;\r\n// union(key: string, ...args: T[][]): T[];\r\n// distinct(): T[];\r\n// }\r\n// interface ArrayConstructor {\r\n// search<T = any>(items: T[], searchText: string | number, fields?: (string | undefined) | (string | undefined)[]): T[];\r\n// union<T = any>(key: string, ...args: T[][]): T[];\r\n// toObject<T = any>(key: string, items: T[]): Record<string, T>;\r\n// }\r\n// }\r\n\r\nconst search = <T = any>(items: T[], searchText: any, fields?: (string | undefined) | (string | undefined)[], children?: string): T[] => {\r\n if (!searchText?.toString()) {\r\n return items;\r\n }\r\n if (!items?.length) {\r\n return items;\r\n }\r\n if (Array.isArray(fields)) {\r\n const fs = fields.filter(e => e !== undefined && e !== null && e !== '') as string[];\r\n if (!fs.length) {\r\n return items.filter(item => item !== undefined && item !== null && StringUtilities.aliasIncludes(item, searchText));\r\n }\r\n return items.filter(\r\n item =>\r\n (item !== undefined && item !== null && fs.some(field => StringUtilities.aliasIncludes((item as any)[field], searchText))) ||\r\n (children && search((item as any)[children], searchText, fields, children)?.length)\r\n );\r\n }\r\n if (!fields) {\r\n return items.filter(item => item !== undefined && item !== null && StringUtilities.aliasIncludes(item, searchText));\r\n }\r\n return items.filter(\r\n item =>\r\n (item !== undefined && item !== null && StringUtilities.aliasIncludes((item as any)[fields], searchText)) ||\r\n (children && search((item as any)[children], searchText, fields, children)?.length)\r\n );\r\n};\r\n\r\n// Array.prototype.search = function <T = any>(\r\n// searchText: any,\r\n// fields?: (string | undefined) | (string | undefined)[],\r\n// children?: string\r\n// ): T[] {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const items: T[] = this;\r\n// return search(items, searchText, fields, children);\r\n// };\r\n\r\n// Array.prototype.paging = function <T extends Record<string, any> = any>(pageSize: number, page = 0): T[] {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const items: T[] = this;\r\n// return items.filter((_, index) => {\r\n// return index >= page * pageSize && index < (page + 1) * pageSize;\r\n// });\r\n// };\r\n\r\n// Array.prototype.toObject = function <T = any>(key: string): Record<string, T> {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const items: T[] = this;\r\n// return items\r\n// .filter(item => item !== undefined && item !== null)\r\n// .reduce<Record<string, any>>((obj, item: Record<string, any>) => {\r\n// const objKey = item?.[key]?.toString();\r\n// if (typeof objKey === 'string') {\r\n// obj[objKey] = item;\r\n// }\r\n// return obj;\r\n// }, {});\r\n// };\r\n\r\n// Array.prototype.union = function <T = Record<string, any>>(key: string, ...args: T[][]) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// let results: T[] = this;\r\n// const filterUnion = <T = any>(val: T, index: number, self: T[]) =>\r\n// val !== undefined && val !== null && self.findIndex(e => (e as any)[key] === (val as any)[key]) === index;\r\n// if (!args?.length) {\r\n// return results.filter(filterUnion);\r\n// }\r\n// for (const arg of args) {\r\n// if (Array.isArray(arg)) {\r\n// results = [...results, ...arg].filter(filterUnion);\r\n// }\r\n// }\r\n// return results;\r\n// };\r\n\r\n// Array.prototype.distinct = function () {\r\n// if (Array.isArray(this)) {\r\n// return [...new Set(this)];\r\n// }\r\n// return this;\r\n// };\r\n\r\nconst union = <T = unknown>(key: string, ...args: (T[] | undefined | null)[]) => {\r\n let results: T[] = [];\r\n const filterUnion = <T = any>(val: T, index: number, self: T[]) =>\r\n val !== undefined && val !== null && self.findIndex(e => (e as any)[key] === (val as any)[key]) === index;\r\n if (!args?.length) {\r\n return [];\r\n }\r\n for (const arg of args) {\r\n if (Array.isArray(arg)) {\r\n results = [...results, ...arg].filter(filterUnion);\r\n }\r\n }\r\n return results;\r\n};\r\n\r\nconst toObject = <T>(key: string, items: T[] | undefined | null): Record<string, T> => {\r\n if (!Array.isArray(items)) {\r\n return {};\r\n }\r\n return items\r\n .filter(item => item !== undefined && item !== null)\r\n .reduce<Record<string, any>>((obj, item: Record<string, any>) => {\r\n const objKey = item?.[key]?.toString();\r\n if (typeof objKey === 'string') {\r\n obj[objKey] = item;\r\n }\r\n return obj;\r\n }, {});\r\n};\r\n\r\nconst distinct = <T = any>(items: T[] | undefined | null) => {\r\n if (Array.isArray(items)) {\r\n return [...new Set(items)];\r\n }\r\n return [];\r\n};\r\n\r\nconst paging = <T = any>(items: T[] | undefined | null, pageSize: number, page = 0): T[] => {\r\n if (!Array.isArray(items)) {\r\n return [];\r\n }\r\n return items.filter((_, index) => {\r\n return index >= page * pageSize && index < (page + 1) * pageSize;\r\n });\r\n};\r\n\r\nexport const ArrayUtilities = {\r\n search,\r\n union,\r\n toObject,\r\n distinct,\r\n paging,\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n// export {};\n\n// declare global {\n// interface NumberConstructor {\n// toVNCurrency(value: any): string | null;\n// toISO(value: any): string | null;\n// isNumber(value: any): boolean;\n// isPositiveInteger(value: any): boolean;\n// isPositiveNumber(value: any): boolean;\n// round(value: any, digits?: number): number | null;\n// }\n// }\n\nconst toVNCurrency = (value: any) => {\n value = (value ?? '').toString().replace(/,/g, '');\n if (!value) {\n return null;\n }\n const val = +value;\n if (!Number.isNaN(val)) {\n return val.toLocaleString('vi-VN', { maximumFractionDigits: 10 });\n }\n return null;\n};\n\nconst toVN = (value: any) => {\n value = (value ?? '').toString().replace(/,/g, '');\n if (!value) {\n return null;\n }\n const val = +value;\n if (!Number.isNaN(val)) {\n return val.toLocaleString('vi-VN', { maximumFractionDigits: 10 });\n }\n return null;\n};\n\nconst toISO = (value: any) => {\n value = (value ?? '').toString().replace(/,/g, '');\n if (!value) {\n return null;\n }\n const val = +value;\n if (!Number.isNaN(val)) {\n return val.toLocaleString('en-US', { maximumFractionDigits: 10 });\n }\n return null;\n};\n\nconst isPositiveInteger = (value: any) => {\n if (!value) {\n return false;\n }\n const regex = /^([0-9]*)$/;\n return regex.test(value) && +value > 0;\n};\n\nconst isPositiveNumber = (value: any) => {\n if (!value) {\n return false;\n }\n const regex = /^([0-9]*)(\\.[0-9]+$){0,1}$/;\n return regex.test(value) && +value > 0;\n};\n\nconst isNumber = (value: any) => {\n if (value === undefined || value === null || value === '') {\n return false;\n }\n return !Number.isNaN(+value);\n};\n\nconst round = (value: any, digits?: number): number | null => {\n digits = digits ?? 2;\n if (!NumberUtilities.isNumber(value)) {\n return null;\n }\n const val = Math.pow(10, digits);\n return Math.round(value * val) / val;\n};\n\nconst NumberUtilities = {\n toVNCurrency,\n toVN,\n toISO,\n isPositiveInteger,\n isPositiveNumber,\n isNumber,\n round,\n};\n\nexport { NumberUtilities };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// export {};\r\n\r\nimport { NumberUtilities } from './number.extension';\r\n\r\n// declare global {\r\n// interface Date {\r\n// begin(): Date;\r\n// end(): Date;\r\n// addMiliseconds(miliseconds: number): Date;\r\n// addHours(hours: number): Date;\r\n// addDays(days: number): Date;\r\n// addMonths(months: number): Date;\r\n// toFormat(format: string): string;\r\n// }\r\n// interface DateConstructor {\r\n// equal(date1: any, date2: any): boolean;\r\n// dayDiff(date1: any, date2: any): number | null;\r\n// monthDiff(date1: any, date2: any): number | null;\r\n// yearDiff(date1: any, date2: any): number | null;\r\n// age(date1: any, date2: any): number | null;\r\n// parseFrom(value: any, format: string): Date | null;\r\n// isDate(value: any): boolean;\r\n// toFormat(value: any, format: string): string;\r\n// addMiliseconds(value: any, miliseconds: number): Date | null;\r\n// addHours(value: any, hours: number): Date | null;\r\n// addDays(value: any, days: number): Date | null;\r\n// addMonths(value: any, months: number): Date | null;\r\n// begin(value: any): Date | null;\r\n// end(value: any): Date | null;\r\n// timeDifference(previous: any, current?: any): string;\r\n// }\r\n// }\r\n\r\nconst isDate = (value: any) => {\r\n if (!value) {\r\n return false;\r\n }\r\n if (typeof value === 'string') {\r\n // Kiểm tra regex\r\n if (value.length < 8) {\r\n return false;\r\n } else {\r\n const date1 = value.substring(0, 10); // yyyy/MM/dd\r\n const date2 = value.substring(0, 9); // yyyy/M/dd, yyyy/MM/d\r\n const date3 = value.substring(0, 8); // yyyy/M/d\r\n const regex1 = /^(0[1-9]|[1-9]|1[0-2])(-|\\/)(0[1-9]|[1-9]|[12][0-9]|3[01])(-|\\/)(\\d{4})$/; // MM/dd/yyyy, MM-dd-yyyy\r\n const regex2 = /^(\\d{4})(-|\\/)(0[1-9]|[1-9]|1[0-2])(-|\\/)(0[1-9]|[1-9]|[12][0-9]|3[01])$/; // yyyy/MM/dd, yyyy-MM-dd\r\n const result =\r\n regex1.test(date1) || regex2.test(date1) || regex1.test(date2) || regex2.test(date2) || regex1.test(date3) || regex2.test(date3);\r\n if (result) {\r\n const date = new Date(value);\r\n return !isNaN(date.getTime());\r\n } else {\r\n return false;\r\n }\r\n }\r\n } else {\r\n const date = new Date(value);\r\n return !isNaN(date.getTime());\r\n }\r\n};\r\n\r\n// const toFormatBackup = (value: any, format: string): string => {\r\n// if (!isDate(value)) {\r\n// return '';\r\n// }\r\n// const date: Date = new Date(value);\r\n// let result = format;\r\n// result = result.replace('yyyy', date.getFullYear().toString());\r\n// result = result.replace('MM', (date.getMonth() + 1).toString().padStart(2, '0'));\r\n// result = result.replace('dd', date.getDate().toString().padStart(2, '0'));\r\n// result = result.replace('HH', date.getHours().toString().padStart(2, '0'));\r\n// result = result.replace('mm', date.getMinutes().toString().padStart(2, '0'));\r\n// result = result.replace('ss', date.getSeconds().toString().padStart(2, '0'));\r\n// return result;\r\n// };\r\n\r\nconst toFormat = (value: any, format: string): string => {\r\n if (!isDate(value)) {\r\n return '';\r\n }\r\n\r\n const isDatePart = (type: Intl.DateTimeFormatPart['type']): type is 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' => {\r\n return type === 'year' || type === 'month' || type === 'day' || type === 'hour' || type === 'minute' || type === 'second';\r\n };\r\n\r\n const date = new Date(value);\r\n const timeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n const parts = new Intl.DateTimeFormat('en-GB', {\r\n timeZone,\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit',\r\n hour12: false,\r\n }).formatToParts(date);\r\n const map: Partial<Record<'year' | 'month' | 'day' | 'hour' | 'minute' | 'second', string>> = {};\r\n parts.forEach(part => {\r\n if (isDatePart(part.type)) {\r\n map[part.type] = part.value;\r\n }\r\n });\r\n\r\n return format\r\n .replace('yyyy', map.year ?? '')\r\n .replace('MM', map.month ?? '')\r\n .replace('dd', map.day ?? '')\r\n .replace('HH', map.hour ?? '')\r\n .replace('mm', map.minute ?? '')\r\n .replace('ss', map.second ?? '');\r\n};\r\n\r\nconst addDays = (value: any, days: number) => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n const date: Date = new Date(value);\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n};\r\n\r\nconst addMiliseconds = (value: any, miliseconds: number) => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n const date: Date = new Date(value);\r\n date.setMilliseconds(date.getMilliseconds() + miliseconds);\r\n return date;\r\n};\r\n\r\nconst begin = (value: any): Date | null => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n return new Date(toFormat(value, 'MM/dd/yyyy'));\r\n};\r\n\r\nconst end = (value: any): Date | null => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n return addMiliseconds(begin(addDays(value, 1)), -1);\r\n};\r\n\r\nconst equal = (date1: any, date2: any) => {\r\n if (!isDate(date1) && !isDate(date2)) {\r\n return true;\r\n }\r\n if (!isDate(date1) || !isDate(date2)) {\r\n return false;\r\n }\r\n return new Date(date1).getTime() === new Date(date2).getTime();\r\n};\r\n\r\nconst dayDiff = (date1: any, date2: any) => {\r\n if (!isDate(date1) || !isDate(date2)) {\r\n return null;\r\n }\r\n const diff = new Date(date2).getTime() - new Date(date1).getTime();\r\n return Math.floor(diff / (24 * 3600 * 1000));\r\n};\r\n\r\nconst monthDiff = (date1: any, date2: any) => {\r\n if (!isDate(date1) || !isDate(date2)) {\r\n return null;\r\n }\r\n const d1Y = date1.getFullYear();\r\n const d2Y = date2.getFullYear();\r\n const d1M = date2.getMonth();\r\n const d2M = date2.getMonth();\r\n return d2M + 12 * d2Y - (d1M + 12 * d1Y);\r\n};\r\n\r\nconst yearDiff = (date1: any, date2: any) => {\r\n if (!isDate(date1) || !isDate(date2)) {\r\n return null;\r\n }\r\n return new Date(date2).getFullYear() - new Date(date1).getFullYear();\r\n};\r\n\r\nconst age = (date1: any, date2: any) => {\r\n const diff = monthDiff(date1, date2);\r\n if (!diff) {\r\n return null;\r\n }\r\n return NumberUtilities.round(diff / 12);\r\n};\r\n\r\nconst parseFrom = (value: any, format: string) => {\r\n if (!value) {\r\n return null;\r\n }\r\n if (!format) {\r\n return null;\r\n }\r\n value = value.toString();\r\n const dmy = format.indexOf('dd') > -1 && format.indexOf('MM') > -1 && format.indexOf('yyyy') > -1;\r\n const hms = format.indexOf('HH') > -1 || format.indexOf('mm') > -1 || format.indexOf('ss') > -1;\r\n let strDate = '';\r\n if (dmy) {\r\n const dd = value.substr(format.indexOf('dd'), 'dd'.length);\r\n const MM = value.substr(format.indexOf('MM'), 'MM'.length);\r\n const yyyy = value.substr(format.indexOf('yyyy'), 'yyyy'.length);\r\n if (+yyyy > 0 && +MM > 0 && +dd > 0) {\r\n strDate += `${MM}/${dd}/${yyyy}`;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n const today = new Date();\r\n const yyyy = today.getFullYear().toString();\r\n const MM = (today.getMonth() + 1).toString().padStart(2, '0');\r\n const dd = today.getDate().toString().padStart(2, '0');\r\n strDate += `${MM}/${dd}/${yyyy}`;\r\n }\r\n if (hms) {\r\n const HH = format.indexOf('HH') > -1 ? value.substr(format.indexOf('HH'), 'HH'.length) : '00';\r\n const mm = format.indexOf('mm') > -1 ? value.substr(format.indexOf('mm'), 'mm'.length) : '00';\r\n const ss = format.indexOf('ss') > -1 ? value.substr(format.indexOf('ss'), 'ss'.length) : '00';\r\n strDate += ` ${HH || '00'}:${mm || '00'}:${ss || '00'}`;\r\n }\r\n if (!isDate(strDate)) {\r\n return null;\r\n }\r\n return new Date(strDate);\r\n};\r\n\r\nconst addHours = (value: any, hours: number) => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n const date: Date = new Date(value);\r\n date.setHours(date.getHours() + hours);\r\n return date;\r\n};\r\n\r\nconst addMonths = (value: any, months: number) => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n const date: Date = new Date(value);\r\n date.setMonth(date.getMonth() + months);\r\n return date;\r\n};\r\n\r\nconst timeDifference = function (previous: any, current: any = new Date()) {\r\n if (!isDate(previous)) {\r\n return '';\r\n }\r\n if (!isDate(current)) {\r\n return '';\r\n }\r\n const from = new Date(previous);\r\n const to = new Date(current);\r\n const msPerMinute = 60 * 1000;\r\n const msPerHour = msPerMinute * 60;\r\n const msPerDay = msPerHour * 24;\r\n const msPerMonth = msPerDay * 30;\r\n const msPerYear = msPerDay * 365;\r\n const elapsed = to.getTime() - from.getTime();\r\n\r\n if (elapsed < msPerMinute) {\r\n return `${Math.round(elapsed / 1000)} seconds ago`;\r\n }\r\n\r\n if (elapsed < msPerHour) {\r\n return `${Math.round(elapsed / msPerMinute)} minutes ago`;\r\n }\r\n\r\n if (elapsed < msPerDay) {\r\n return `${Math.round(elapsed / msPerHour)} hours ago`;\r\n }\r\n\r\n if (elapsed < msPerMonth) {\r\n return `${Math.round(elapsed / msPerDay)} days ago`;\r\n }\r\n\r\n if (elapsed < msPerYear) {\r\n return `${Math.round(elapsed / msPerMonth)} months ago`;\r\n }\r\n return `${Math.round(elapsed / msPerYear)} years ago`;\r\n};\r\n\r\n// Date.prototype.begin = function () {\r\n// return new Date(this.toFormat('MM/dd/yyyy'));\r\n// };\r\n\r\n// Date.prototype.end = function () {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// return date.addDays(1).begin().addMiliseconds(-1);\r\n// };\r\n\r\n// Date.prototype.addMiliseconds = function (miliseconds: number) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// date.setMilliseconds(date.getMilliseconds() + miliseconds);\r\n// return date;\r\n// };\r\n\r\n// Date.prototype.addHours = function (hours: number) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// date.setHours(date.getHours() + hours);\r\n// return date;\r\n// };\r\n\r\n// Date.prototype.addDays = function (days: number) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// date.setDate(date.getDate() + days);\r\n// return date;\r\n// };\r\n\r\n// Date.prototype.addMonths = function (months: number) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// date.setMonth(date.getMonth() + months);\r\n// return date;\r\n// };\r\n\r\n// Date.prototype.toFormat = function (format: string) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// let result = format;\r\n// result = result.replace('yyyy', date.getFullYear().toString());\r\n// result = result.replace('MM', (date.getMonth() + 1).toString().padStart(2, '0'));\r\n// result = result.replace('dd', date.getDate().toString().padStart(2, '0'));\r\n// result = result.replace('HH', date.getHours().toString().padStart(2, '0'));\r\n// result = result.replace('mm', date.getMinutes().toString().padStart(2, '0'));\r\n// result = result.replace('ss', date.getSeconds().toString().padStart(2, '0'));\r\n// return result;\r\n// };\r\n\r\nconst DateUtilities = {\r\n equal,\r\n dayDiff,\r\n monthDiff,\r\n yearDiff,\r\n age,\r\n parseFrom,\r\n isDate,\r\n toFormat,\r\n addMiliseconds,\r\n addHours,\r\n addDays,\r\n addMonths,\r\n begin,\r\n end,\r\n timeDifference,\r\n};\r\n\r\nexport { DateUtilities };\r\n","const upload = (option?: { extensions?: string[]; maxSizeInMb?: number; validator?: (fileName: string) => string; multiple?: boolean }) => {\r\n const uploadId = 'U1e09c1c0-b647-437e-995e-d7a1a1b60550';\r\n const promise = new Promise<File | File[] | null>((resolve, reject) => {\r\n const body = document.getElementsByTagName('body')?.[0];\r\n if (!body) {\r\n resolve(null);\r\n return;\r\n }\r\n const existedElement = document.getElementById(uploadId);\r\n if (existedElement) {\r\n existedElement.remove();\r\n }\r\n const element = document.createElement('input');\r\n element.setAttribute('id', uploadId);\r\n element.setAttribute('type', 'file');\r\n if (option?.multiple) {\r\n element.setAttribute('multiple', '');\r\n }\r\n element.style.display = 'none';\r\n body.appendChild(element);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n element.addEventListener('change', (evt: any) => {\r\n try {\r\n const target = evt.target as DataTransfer;\r\n\r\n if (option?.multiple) {\r\n const files: File[] = [];\r\n for (const file of target.files) {\r\n if (file) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);\r\n }\r\n const extension = file.name.substring(lastDot + 1);\r\n if (option) {\r\n if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {\r\n throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);\r\n }\r\n if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\r\n const message = `[${file.name}] Kích thước file không hợp lệ. Vui lòng chọn một file khác`;\r\n throw new Error(message);\r\n }\r\n if (option.validator && option.validator(file.name)) {\r\n const message = option.validator(file.name);\r\n throw new Error(message);\r\n }\r\n }\r\n files.push(file);\r\n }\r\n resolve(files);\r\n }\r\n } else {\r\n const file = target.files.item(0);\r\n if (file) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);\r\n }\r\n const extension = file.name.substring(lastDot + 1);\r\n if (option) {\r\n if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {\r\n throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);\r\n }\r\n if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\r\n const message = `[${file.name}] Kích thước file không hợp lệ. Vui lòng chọn một file khác`;\r\n throw new Error(message);\r\n }\r\n if (option.validator && option.validator(file.name)) {\r\n const message = option.validator(file.name);\r\n throw new Error(message);\r\n }\r\n }\r\n resolve(file);\r\n }\r\n }\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n element.click();\r\n });\r\n return promise;\r\n};\r\n\r\nconst generateFileName = (fileName?: string | null) => {\r\n if (!fileName) {\r\n return `file_${randomId()}`;\r\n }\r\n return fileName;\r\n};\r\n\r\nconst download = (fileOrPath: File | string | undefined | null, fileName?: string | null) => {\r\n if (!fileOrPath) {\r\n console.warn('No file or path provided for download');\r\n return;\r\n }\r\n fileName = generateFileName(fileName);\r\n if (fileOrPath instanceof File) {\r\n // Hoặc sử dụng cách thông thường:\r\n const url = URL.createObjectURL(fileOrPath);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = fileOrPath.name || fileName;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url); // Giải phóng tài nguyên\r\n return;\r\n }\r\n const a = document.createElement('a');\r\n a.href = fileOrPath;\r\n if (fileOrPath.startsWith('http')) {\r\n a.target = '_blank'; // mở tab mới\r\n } else {\r\n a.download = fileName;\r\n }\r\n a.style.visibility = 'hidden';\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n return;\r\n};\r\n\r\nconst downloadBlob = (blob: Blob, fileName?: string) => {\r\n try {\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n if (link.download !== undefined) {\r\n // feature detection\r\n link.download = generateFileName(fileName);\r\n link.href = url;\r\n link.style.visibility = 'hidden';\r\n document.body.appendChild(link);\r\n link.click();\r\n window.URL.revokeObjectURL(url);\r\n link.remove();\r\n }\r\n } catch (e) {\r\n console.error('BlobToSaveAs error', e);\r\n }\r\n};\r\n\r\nconst changeAliasLowerCase = (alias: string) => {\r\n let str = alias?.toString() ?? '';\r\n str = str.toString().toLowerCase();\r\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\r\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e');\r\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\r\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\r\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\r\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\r\n str = str.replace(/đ/g, 'd');\r\n // eslint-disable-next-line no-useless-escape\r\n str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, ' ');\r\n str = str.replace(/ + /g, ' ');\r\n str = str.trim();\r\n return str;\r\n};\r\n\r\nconst copyToClipboard = (text: string) => {\r\n navigator.clipboard.writeText(text);\r\n};\r\n\r\nconst allWithPaging = async <T = unknown>(\r\n func: (pageSize: number, pageNumber: number) => Promise<{ items: T[]; total: number }>,\r\n defaultPageSize?: number\r\n): Promise<T[]> => {\r\n const pageSize = defaultPageSize || 1000;\r\n let pageNumber = 0;\r\n let count = 0;\r\n let items: T[] = [];\r\n while (true) {\r\n const res = await func(pageSize, pageNumber);\r\n if (Array(res?.items) && res?.total > 0) {\r\n items = [...items, ...res.items];\r\n count += res.items.length;\r\n pageNumber++;\r\n if (count >= res.total || !res.items?.length) {\r\n return items;\r\n }\r\n } else {\r\n return [];\r\n }\r\n }\r\n};\r\n\r\nconst isIncognito = async (): Promise<boolean> => {\r\n // Chrome-based\r\n if ('storage' in navigator && 'estimate' in navigator.storage) {\r\n try {\r\n const { quota } = await navigator.storage.estimate();\r\n if (quota && quota < 120 * 1024 * 1024) return true;\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n\r\n // Safari fallback\r\n try {\r\n localStorage.setItem('__incognito_test', '1');\r\n localStorage.removeItem('__incognito_test');\r\n return false;\r\n } catch {\r\n return true;\r\n }\r\n};\r\n\r\nconst isMobile = (): boolean => {\r\n return /Mobi|Android/i.test(navigator.userAgent);\r\n};\r\n\r\nconst randomId = (prefix?: string | null): string => {\r\n const id = new Date().getTime().toString(36);\r\n if (prefix) {\r\n return `${prefix}_${id}`;\r\n }\r\n return id;\r\n};\r\n\r\nconst hash = (obj: any): string => {\r\n const json = stableStringify(obj);\r\n let hash = 0;\r\n\r\n for (let i = 0; i < json.length; i++) {\r\n hash = (hash << 5) - hash + json.charCodeAt(i);\r\n hash |= 0; // Convert to 32bit integer\r\n }\r\n\r\n return `h${Math.abs(hash)}`;\r\n};\r\n\r\n/**\r\n * Convert object to stable JSON string (keys sorted)\r\n */\r\nconst stableStringify = (obj: any): string => {\r\n if (obj === null || typeof obj !== 'object') {\r\n return JSON.stringify(obj);\r\n }\r\n\r\n if (obj instanceof File) {\r\n // Chỉ serialize các thuộc tính quan trọng của File\r\n return JSON.stringify({\r\n __type: 'File',\r\n name: obj.name,\r\n size: obj.size,\r\n type: obj.type,\r\n lastModified: obj.lastModified,\r\n });\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return `[${obj.map(stableStringify).join(',')}]`;\r\n }\r\n\r\n const keys = Object.keys(obj).sort();\r\n const keyValuePairs = keys.map(key => `\"${key}\":${stableStringify(obj[key])}`);\r\n\r\n return `{${keyValuePairs.join(',')}}`;\r\n};\r\n\r\n// Hàm `parseQueryParams` dùng để phân tích chuỗi query string (phần sau dấu `?` trên URL)\r\n// và chuyển đổi nó thành một đối tượng JavaScript với các cặp key-value.\r\nconst parseQueryParams = (queryString?: string): Record<string, string> => {\r\n const params = new URLSearchParams(queryString || '');\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n return result;\r\n};\r\n\r\n/**\r\n * Lấy địa chỉ IP public của client bằng cách gọi API bên thứ ba.\r\n */\r\nconst getClientPublicIp = async (): Promise<string | null> => {\r\n try {\r\n // Gọi đến API của ipify để lấy IP dưới dạng JSON\r\n const response = await fetch('https://api.ipify.org?format=json');\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n const data = await response.json();\r\n // Trả về địa chỉ IP\r\n return data.ip;\r\n } catch (error) {\r\n console.error('Không thể lấy địa chỉ IP:', error);\r\n return null; // Trả về null nếu có lỗi\r\n }\r\n};\r\n\r\n\r\n// Helper function với fallback\r\nconst generateUuid = (): string => {\r\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\r\n return crypto.randomUUID();\r\n }\r\n // Fallback cho browser cũ\r\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\r\n};\r\n\r\n/**\r\n * Truy xuất giá trị của object dựa trên đường dẫn nested (VD: 'user.address.city')\r\n */\r\nconst getNestedValue = (obj: any, path: string) => {\r\n if (!obj || !path) return undefined;\r\n // Tách chuỗi theo dấu chấm và duyệt qua từng cấp của object\r\n return path.split('.').reduce((acc, part) => acc?.[part], obj);\r\n};\r\n\r\nconst SdUtilities = {\r\n upload,\r\n download,\r\n downloadBlob,\r\n changeAliasLowerCase,\r\n copyToClipboard,\r\n allWithPaging,\r\n isIncognito,\r\n isMobile,\r\n randomId,\r\n hash,\r\n parseQueryParams,\r\n getClientPublicIp,\r\n generateUuid,\r\n getNestedValue\r\n};\r\nexport { SdUtilities };\r\n\r\n","/**\r\n * Color Utilities Extension\r\n * Các tiện ích xử lý màu\r\n */\r\n\r\n/**\r\n * Chuyển đổi màu HSL sang định dạng hex\r\n * @param h - Hue (0-360)\r\n * @param s - Saturation (0-100)\r\n * @param l - Lightness (0-100)\r\n * @returns Mã màu hex\r\n */\r\nexport function hslToHex(h: number, s: number, l: number): string {\r\n // Chuyển đổi sang định dạng 0-1\r\n const hNormalized = h / 360;\r\n const sNormalized = s / 100;\r\n const lNormalized = l / 100;\r\n\r\n let r: number, g: number, b: number;\r\n\r\n if (sNormalized === 0) {\r\n // Màu xám (grayscale)\r\n r = g = b = lNormalized;\r\n } else {\r\n const hue2rgb = (p: number, q: number, t: number) => {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1/6) return p + (q - p) * 6 * t;\r\n if (t < 1/2) return q;\r\n if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;\r\n return p;\r\n };\r\n\r\n const q = lNormalized < 0.5 \r\n ? lNormalized * (1 + sNormalized) \r\n : lNormalized + sNormalized - lNormalized * sNormalized;\r\n const p = 2 * lNormalized - q;\r\n\r\n r = hue2rgb(p, q, hNormalized + 1/3);\r\n g = hue2rgb(p, q, hNormalized);\r\n b = hue2rgb(p, q, hNormalized - 1/3);\r\n }\r\n\r\n // Chuyển đổi sang hex\r\n const toHex = (x: number) => {\r\n const hex = Math.round(x * 255).toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n };\r\n\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n\r\n/**\r\n * Chuyển đổi màu RGB sang hex\r\n * @param r - Red (0-255)\r\n * @param g - Green (0-255)\r\n * @param b - Blue (0-255)\r\n * @returns Mã màu hex\r\n */\r\nexport function rgbToHex(r: number, g: number, b: number): string {\r\n const toHex = (x: number) => {\r\n const hex = Math.round(Math.max(0, Math.min(255, x))).toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n };\r\n \r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["changeAliasLowerCase"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,WAAW,GAAG,qHAAqH;AACzI,MAAM,WAAW,GAAG,8CAA8C;AAClE,MAAM,cAAc,GAAG,gEAAgE;AACvF,MAAM,sBAAsB,GAAG,gCAAgC;AAC/D,MAAM,UAAU,GAAG,+BAA+B;AAClD,MAAM,YAAY,GAAG,CAAC,KAAU,KAAI;IAClC,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC;AAClC,IAAA,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,KAAU,KAAI;IAClC,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC;AAClC,IAAA,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,KAAU,KAAI;IACjC,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,KAAK;IACd;IACA,MAAM,EAAE,GAAG,2BAA2B;AACtC,IAAA,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,KAAU,KAAI;IACnC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;AAC9D,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,KAAU,KAAI;IACxC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI;AAC3G,CAAC;AAED,MAAMA,sBAAoB,GAAG,CAAC,KAAU,KAAI;IAC1C,IAAI,GAAG,GAAW,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;IACzC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;IAClC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,GAAG,CAAC;IAC5D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;IAChD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;IACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,GAAG,CAAC;IAC5D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;IAChD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;IACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IAC5B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wFAAwF,EAAE,GAAG,CAAC;IAChH,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AAC9B,IAAA,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE;AAChB,IAAA,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,KAAU,EAAE,UAAe,KAAI;AACpD,IAAA,OAAOA,sBAAoB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAACA,sBAAoB,CAAC,UAAU,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,GAAG,GAAU,KAAI;AACjD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,GAAA,CAAK,EAAE,IAAI,CAAC;AAC7C,QAAA,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C;AACA,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,MAA2B,EAAE,GAAW,KAAI;IAClE,IAAI,KAAK,GAAQ,MAAM;IACvB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACjC,QAAA,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;IACvB;AACA,IAAA,OAAO,KAAK;AACd,CAAC;AAED;AACA,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAE,MAA2B,KAAI;IAC1E,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,QAAQ;IACjB;IACA,MAAM,KAAK,GAAG,0BAA0B;IACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;AAC3C,IAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC3B,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,IAAI,GAAG,EAAE;AACP,YAAA,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QACvE;IACF;AACA,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED,MAAM,oBAAoB,GAAG,2BAA2B;AACxD,MAAM,oBAAoB,GAAG,iBAAiB;AAE9C;AACA,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,MAA2B,KAAI;IACxE,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,EAAE;IACvC,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,CAAC,oBAAoB,CAAC;AACtE,IAAA,IAAI,kBAAkB,GAAG,CAAC,CAAC,EAAE;QAC3B,OAAO,cAAc,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACtD;AAEA,IAAA,IAAI,eAAe,KAAK,MAAM,EAAE;AAC9B,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,eAAe,KAAK,OAAO,EAAE;AAC/B,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,eAAe,KAAK,MAAM,EAAE;AAC9B,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,eAAe,KAAK,WAAW,EAAE;AACnC,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,IAAI,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAC9C,QAAA,OAAO,MAAM,CAAC,eAAe,CAAC;IAChC;AAEA,IAAA,OAAO,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC5C,CAAC;AAED,MAAM,IAAI,GAAG,sCAAsC;AAEnD,MAAM,OAAO,GAAG,CAAC,GAAQ,KAAI;AAC3B,IAAA,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;AACnC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACxC,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AAC1B,aAAA,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;IACtC,OAAO,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,SAAiB,KAAI;AACpC,IAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IAChC,IAAI,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;AACvF,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;AACvD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACzC,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;AAAE,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;AAC5B,aAAA,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;AAAE,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED;AACA,MAAM,sBAAsB,GAAG,CAAC,IAAY,KAAY;AACtD,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC;IACjC;AACA,IAAA,OAAO;AACJ,SAAA,SAAS,CAAC,KAAK,CAAC;AAChB,SAAA,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;AAC/B,SAAA,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;AACrB,SAAA,IAAI;AACJ,SAAA,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;AAC9B,SAAA,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED;;;;AAIG;AACH,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,aAAuB,KAAY;;AAE3E,IAAA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC;;IAE7C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACrC,QAAA,OAAO,QAAQ;IACjB;;IAEA,IAAI,KAAK,GAAG,CAAC;AACb,IAAA,IAAI,OAAO,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAK,EAAE;AAEpC,IAAA,OAAO,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACtC,QAAA,KAAK,EAAE;AACP,QAAA,OAAO,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAK,EAAE;IAClC;AACA,IAAA,OAAO,OAAO;AAChB,CAAC;AAEM,MAAM,eAAe,GAAG;IAC7B,WAAW;IACX,WAAW;IACX,cAAc;IACd,sBAAsB;IACtB,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,WAAW;0BACXA,sBAAoB;IACpB,aAAa;IACb,MAAM;IACN,iBAAiB;IACjB,eAAe;IACf,OAAO;IACP,OAAO;IACP,aAAa;IACb,kBAAkB;IAClB,sBAAsB;IACtB,kBAAkB;;;ACzNpB;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,MAAM,GAAG,CAAU,KAAU,EAAE,UAAe,EAAE,MAAsD,EAAE,QAAiB,KAAS;AACtI,IAAA,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;AAC3B,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AAClB,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACzB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAa;AACpF,QAAA,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YACd,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrH;AACA,QAAA,OAAO,KAAK,CAAC,MAAM,CACjB,IAAI,IACF,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC,aAAa,CAAE,IAAY,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;AACzH,aAAC,QAAQ,IAAI,MAAM,CAAE,IAAY,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CACtF;IACH;IACA,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrH;AACA,IAAA,OAAO,KAAK,CAAC,MAAM,CACjB,IAAI,IACF,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,eAAe,CAAC,aAAa,CAAE,IAAY,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;AACxG,SAAC,QAAQ,IAAI,MAAM,CAAE,IAAY,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CACtF;AACH,CAAC;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,KAAK,GAAG,CAAc,GAAW,EAAE,GAAG,IAAgC,KAAI;IAC9E,IAAI,OAAO,GAAQ,EAAE;AACrB,IAAA,MAAM,WAAW,GAAG,CAAU,GAAM,EAAE,KAAa,EAAE,IAAS,KAC5D,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,IAAK,CAAS,CAAC,GAAG,CAAC,KAAM,GAAW,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK;AAC3G,IAAA,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;AACjB,QAAA,OAAO,EAAE;IACX;AACA,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QACpD;IACF;AACA,IAAA,OAAO,OAAO;AAChB,CAAC;AAED,MAAM,QAAQ,GAAG,CAAI,GAAW,EAAE,KAA6B,KAAuB;IACpF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,QAAA,OAAO,EAAE;IACX;AACA,IAAA,OAAO;AACJ,SAAA,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;AAClD,SAAA,MAAM,CAAsB,CAAC,GAAG,EAAE,IAAyB,KAAI;QAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAE;AACtC,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,YAAA,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;QACpB;AACA,QAAA,OAAO,GAAG;IACZ,CAAC,EAAE,EAAE,CAAC;AACV,CAAC;AAED,MAAM,QAAQ,GAAG,CAAU,KAA6B,KAAI;AAC1D,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B;AACA,IAAA,OAAO,EAAE;AACX,CAAC;AAED,MAAM,MAAM,GAAG,CAAU,KAA6B,EAAE,QAAgB,EAAE,IAAI,GAAG,CAAC,KAAS;IACzF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,QAAA,OAAO,EAAE;IACX;IACA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;AAC/B,QAAA,OAAO,KAAK,IAAI,IAAI,GAAG,QAAQ,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ;AAClE,IAAA,CAAC,CAAC;AACJ,CAAC;AAEM,MAAM,cAAc,GAAG;IAC5B,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,MAAM;;;AC1JR;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,YAAY,GAAG,CAAC,KAAU,KAAI;AAClC,IAAA,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,GAAG,GAAG,CAAC,KAAK;IAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,OAAO,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC;IACnE;AACA,IAAA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,KAAU,KAAI;AAC1B,IAAA,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,GAAG,GAAG,CAAC,KAAK;IAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,OAAO,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC;IACnE;AACA,IAAA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,KAAU,KAAI;AAC3B,IAAA,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,GAAG,GAAG,CAAC,KAAK;IAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,OAAO,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC;IACnE;AACA,IAAA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,KAAU,KAAI;IACvC,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,KAAK;IACd;IACA,MAAM,KAAK,GAAG,YAAY;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;AACxC,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,KAAU,KAAI;IACtC,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,KAAK;IACd;IACA,MAAM,KAAK,GAAG,4BAA4B;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;AACxC,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,KAAU,KAAI;AAC9B,IAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACzD,QAAA,OAAO,KAAK;IACd;IACA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAC9B,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,KAAU,EAAE,MAAe,KAAmB;AAC3D,IAAA,MAAM,GAAG,MAAM,IAAI,CAAC;IACpB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACpC,QAAA,OAAO,IAAI;IACb;IACA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;IAChC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;AACtC,CAAC;AAED,MAAM,eAAe,GAAG;IACtB,YAAY;IACZ,IAAI;IACJ,KAAK;IACL,iBAAiB;IACjB,gBAAgB;IAChB,QAAQ;IACR,KAAK;;;ACzFP;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,MAAM,GAAG,CAAC,KAAU,KAAI;IAC5B,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;AAE7B,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,OAAO,KAAK;QACd;aAAO;AACL,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,YAAA,MAAM,MAAM,GAAG,0EAA0E,CAAC;AAC1F,YAAA,MAAM,MAAM,GAAG,0EAA0E,CAAC;AAC1F,YAAA,MAAM,MAAM,GACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAClI,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B;iBAAO;AACL,gBAAA,OAAO,KAAK;YACd;QACF;IACF;SAAO;AACL,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B;AACF,CAAC;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAE,MAAc,KAAY;AACtD,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,MAAM,UAAU,GAAG,CAAC,IAAqC,KAAqE;QAC5H,OAAO,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ;AAC3H,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC5B,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;IACrE,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAC7C,QAAQ;AACR,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,MAAM,EAAE,KAAK;AACd,KAAA,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;IACtB,MAAM,GAAG,GAAqF,EAAE;AAChG,IAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACzB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;QAC7B;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO;SACJ,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;SAC9B,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE;SAC7B,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE;SAC3B,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;SAC5B,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;SAC9B,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,KAAU,EAAE,IAAY,KAAI;AAC3C,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,KAAK,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACnC,IAAA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,KAAU,EAAE,WAAmB,KAAI;AACzD,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,KAAK,CAAC;IAClC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,WAAW,CAAC;AAC1D,IAAA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,KAAU,KAAiB;AACxC,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;IACA,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,KAAU,KAAiB;AACtC,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,KAAU,EAAE,KAAU,KAAI;AACvC,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACpC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACpC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;AAChE,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,KAAU,EAAE,KAAU,KAAI;AACzC,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACpC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;AAClE,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,KAAU,KAAI;AAC3C,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACpC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE;AAC/B,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE;AAC/B,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC5B,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC5B,IAAA,OAAO,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AAC1C,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAE,KAAU,KAAI;AAC1C,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACpC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACtE,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,KAAU,EAAE,KAAU,KAAI;IACrC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,IAAI;IACb;IACA,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,MAAc,KAAI;IAC/C,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI;IACb;IACA,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,IAAI;IACb;AACA,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE;AACxB,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjG,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/F,IAAI,OAAO,GAAG,EAAE;IAChB,IAAI,GAAG,EAAE;AACP,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AAC1D,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AAC1D,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;AAChE,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;YACnC,OAAO,IAAI,GAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,IAAI,EAAE;QAClC;aAAO;AACL,YAAA,OAAO,IAAI;QACb;IACF;SAAO;AACL,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;QAC3C,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC7D,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACtD,OAAO,IAAI,GAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,IAAI,EAAE;IAClC;IACA,IAAI,GAAG,EAAE;AACP,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;AAC7F,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;AAC7F,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;AAC7F,QAAA,OAAO,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,IAAI,EAAE;IACzD;AACA,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;AAC1B,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAE,KAAa,KAAI;AAC7C,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,KAAK,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC;AACtC,IAAA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,MAAc,KAAI;AAC/C,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,KAAK,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC;AACvC,IAAA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,cAAc,GAAG,UAAU,QAAa,EAAE,OAAA,GAAe,IAAI,IAAI,EAAE,EAAA;AACvE,IAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AACrB,QAAA,OAAO,EAAE;IACX;AACA,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACpB,QAAA,OAAO,EAAE;IACX;AACA,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;AAC/B,IAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;AAC5B,IAAA,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI;AAC7B,IAAA,MAAM,SAAS,GAAG,WAAW,GAAG,EAAE;AAClC,IAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,EAAE;AAC/B,IAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,EAAE;AAChC,IAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,GAAG;IAChC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AAE7C,IAAA,IAAI,OAAO,GAAG,WAAW,EAAE;QACzB,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA,YAAA,CAAc;IACpD;AAEA,IAAA,IAAI,OAAO,GAAG,SAAS,EAAE;QACvB,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,CAAA,YAAA,CAAc;IAC3D;AAEA,IAAA,IAAI,OAAO,GAAG,QAAQ,EAAE;QACtB,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA,UAAA,CAAY;IACvD;AAEA,IAAA,IAAI,OAAO,GAAG,UAAU,EAAE;QACxB,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAA,SAAA,CAAW;IACrD;AAEA,IAAA,IAAI,OAAO,GAAG,SAAS,EAAE;QACvB,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,CAAA,WAAA,CAAa;IACzD;IACA,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA,UAAA,CAAY;AACvD,CAAC;AAED;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,aAAa,GAAG;IACpB,KAAK;IACL,OAAO;IACP,SAAS;IACT,QAAQ;IACR,GAAG;IACH,SAAS;IACT,MAAM;IACN,QAAQ;IACR,cAAc;IACd,QAAQ;IACR,OAAO;IACP,SAAS;IACT,KAAK;IACL,GAAG;IACH,cAAc;;;AChWhB,MAAM,MAAM,GAAG,CAAC,MAAsH,KAAI;IACxI,MAAM,QAAQ,GAAG,uCAAuC;IACxD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,MAAM,KAAI;AACpE,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,CAAC,IAAI,CAAC;YACb;QACF;QACA,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;QACxD,IAAI,cAAc,EAAE;YAClB,cAAc,CAAC,MAAM,EAAE;QACzB;QACA,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC/C,QAAA,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;AACpC,QAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;AACpC,QAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;AACpB,YAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;QACtC;AACA,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;;QAEzB,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAQ,KAAI;AAC9C,YAAA,IAAI;AACF,gBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAsB;AAEzC,gBAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;oBACpB,MAAM,KAAK,GAAW,EAAE;AACxB,oBAAA,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;wBAC/B,IAAI,IAAI,EAAE;4BACR,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC1C,4BAAA,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;gCAClB,MAAM,IAAI,KAAK,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,sDAAA,CAAwD,CAAC;4BACxF;AACA,4BAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;4BAClD,IAAI,MAAM,EAAE;AACV,gCAAA,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE;oCAC1G,MAAM,IAAI,KAAK,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,sDAAA,CAAwD,CAAC;gCACxF;gCACA,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAChG,oCAAA,MAAM,OAAO,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,6DAA6D;AAC1F,oCAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;gCAC1B;AACA,gCAAA,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oCACnD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,oCAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;gCAC1B;4BACF;AACA,4BAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;wBAClB;wBACA,OAAO,CAAC,KAAK,CAAC;oBAChB;gBACF;qBAAO;oBACL,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBACjC,IAAI,IAAI,EAAE;wBACR,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC1C,wBAAA,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;4BAClB,MAAM,IAAI,KAAK,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,sDAAA,CAAwD,CAAC;wBACxF;AACA,wBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;wBAClD,IAAI,MAAM,EAAE;AACV,4BAAA,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE;gCAC1G,MAAM,IAAI,KAAK,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,sDAAA,CAAwD,CAAC;4BACxF;4BACA,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAChG,gCAAA,MAAM,OAAO,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,6DAA6D;AAC1F,gCAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;4BAC1B;AACA,4BAAA,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gCACnD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,gCAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;4BAC1B;wBACF;wBACA,OAAO,CAAC,IAAI,CAAC;oBACf;gBACF;YACF;YAAE,OAAO,KAAK,EAAE;gBACd,MAAM,CAAC,KAAK,CAAC;YACf;AACF,QAAA,CAAC,CAAC;QACF,OAAO,CAAC,KAAK,EAAE;AACjB,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,OAAO;AAChB,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,QAAwB,KAAI;IACpD,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,CAAA,KAAA,EAAQ,QAAQ,EAAE,CAAA,CAAE;IAC7B;AACA,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,UAA4C,EAAE,QAAwB,KAAI;IAC1F,IAAI,CAAC,UAAU,EAAE;AACf,QAAA,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC;QACrD;IACF;AACA,IAAA,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;AACrC,IAAA,IAAI,UAAU,YAAY,IAAI,EAAE;;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC;QAC3C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,QAAA,CAAC,CAAC,IAAI,GAAG,GAAG;QACZ,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,IAAI,QAAQ;AACxC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,EAAE;AACT,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5B,QAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACzB;IACF;IACA,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,UAAU;AACnB,IAAA,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACjC,QAAA,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC;IACtB;SAAO;AACL,QAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;IACvB;AACA,IAAA,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AAC7B,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,KAAK,EAAE;IACT,CAAC,CAAC,MAAM,EAAE;IACV;AACF,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,IAAU,EAAE,QAAiB,KAAI;AACrD,IAAA,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;;AAE/B,YAAA,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;AAC1C,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AAChC,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;YAC/B,IAAI,CAAC,MAAM,EAAE;QACf;IACF;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACxC;AACF,CAAC;AAED,MAAM,oBAAoB,GAAG,CAAC,KAAa,KAAI;IAC7C,IAAI,GAAG,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;IACjC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;IAClC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,GAAG,CAAC;IAC5D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;IAChD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;IACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,GAAG,CAAC;IAC5D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;IAChD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;IACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;IAE5B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wFAAwF,EAAE,GAAG,CAAC;IAChH,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AAC9B,IAAA,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE;AAChB,IAAA,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,IAAY,KAAI;AACvC,IAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,aAAa,GAAG,OACpB,IAAsF,EACtF,eAAwB,KACR;AAChB,IAAA,MAAM,QAAQ,GAAG,eAAe,IAAI,IAAI;IACxC,IAAI,UAAU,GAAG,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,KAAK,GAAQ,EAAE;IACnB,OAAO,IAAI,EAAE;QACX,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC5C,QAAA,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE;YACvC,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;AAChC,YAAA,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM;AACzB,YAAA,UAAU,EAAE;AACZ,YAAA,IAAI,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE;AAC5C,gBAAA,OAAO,KAAK;YACd;QACF;aAAO;AACL,YAAA,OAAO,EAAE;QACX;IACF;AACF,CAAC;AAED,MAAM,WAAW,GAAG,YAA6B;;IAE/C,IAAI,SAAS,IAAI,SAAS,IAAI,UAAU,IAAI,SAAS,CAAC,OAAO,EAAE;AAC7D,QAAA,IAAI;YACF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE;YACpD,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI;AAAE,gBAAA,OAAO,IAAI;QACrD;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QACpB;IACF;;AAGA,IAAA,IAAI;AACF,QAAA,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;AAC7C,QAAA,YAAY,CAAC,UAAU,CAAC,kBAAkB,CAAC;AAC3C,QAAA,OAAO,KAAK;IACd;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF,CAAC;AAED,MAAM,QAAQ,GAAG,MAAc;IAC7B,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,MAAsB,KAAY;AAClD,IAAA,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC5C,IAAI,MAAM,EAAE;AACV,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,EAAE,EAAE;IAC1B;AACA,IAAA,OAAO,EAAE;AACX,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,GAAQ,KAAY;AAChC,IAAA,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC;IACjC,IAAI,IAAI,GAAG,CAAC;AAEZ,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAI,IAAI,CAAC,CAAC;IACZ;IAEA,OAAO,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC7B,CAAC;AAED;;AAEG;AACH,MAAM,eAAe,GAAG,CAAC,GAAQ,KAAY;IAC3C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IAC5B;AAEA,IAAA,IAAI,GAAG,YAAY,IAAI,EAAE;;QAEvB,OAAO,IAAI,CAAC,SAAS,CAAC;AACpB,YAAA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,YAAY,EAAE,GAAG,CAAC,YAAY;AAC/B,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,OAAO,CAAA,CAAA,EAAI,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;IAClD;IAEA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;IACpC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,EAAA,EAAK,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA,CAAE,CAAC;IAE9E,OAAO,CAAA,CAAA,EAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AACvC,CAAC;AAED;AACA;AACA,MAAM,gBAAgB,GAAG,CAAC,WAAoB,KAA4B;IACxE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,IAAI,EAAE,CAAC;IACrD,MAAM,MAAM,GAA2B,EAAE;IACzC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AAC5B,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;AACrB,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,MAAM;AACf,CAAC;AAED;;AAEG;AACH,MAAM,iBAAiB,GAAG,YAAmC;AAC3D,IAAA,IAAI;;AAEF,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,mCAAmC,CAAC;AACjE,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;QAC3D;AACA,QAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;QAElC,OAAO,IAAI,CAAC,EAAE;IAChB;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;QACjD,OAAO,IAAI,CAAC;IACd;AACF,CAAC;AAGD;AACA,MAAM,YAAY,GAAG,MAAa;IAChC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE;AACtD,QAAA,OAAO,MAAM,CAAC,UAAU,EAAE;IAC5B;;IAEA,OAAO,CAAA,EAAG,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;AACtE,CAAC;AAED;;AAEG;AACH,MAAM,cAAc,GAAG,CAAC,GAAQ,EAAE,IAAY,KAAI;AAChD,IAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,SAAS;;IAEnC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;AAChE,CAAC;AAED,MAAM,WAAW,GAAG;IAClB,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,oBAAoB;IACpB,eAAe;IACf,aAAa;IACb,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,IAAI;IACJ,gBAAgB;IAChB,iBAAiB;IACjB,YAAY;IACZ;;;ACnUF;;;AAGG;AAEH;;;;;;AAMG;SACa,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;;AAEtD,IAAA,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG;AAC3B,IAAA,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG;AAC3B,IAAA,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG;AAE3B,IAAA,IAAI,CAAS,EAAE,CAAS,EAAE,CAAS;AAEnC,IAAA,IAAI,WAAW,KAAK,CAAC,EAAE;;AAErB,QAAA,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW;IACzB;SAAO;QACL,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;YAClD,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,IAAI,CAAC;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,GAAC,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,GAAC,CAAC;AAAE,gBAAA,OAAO,CAAC;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,GAAC,CAAC;AAAE,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/C,YAAA,OAAO,CAAC;AACV,QAAA,CAAC;AAED,QAAA,MAAM,CAAC,GAAG,WAAW,GAAG;AACtB,cAAE,WAAW,IAAI,CAAC,GAAG,WAAW;cAC9B,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW;AACzD,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC;AAE7B,QAAA,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,CAAC,GAAC,CAAC,CAAC;QACpC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;AAC9B,QAAA,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,CAAC,GAAC,CAAC,CAAC;IACtC;;AAGA,IAAA,MAAM,KAAK,GAAG,CAAC,CAAS,KAAI;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5C,QAAA,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC3C,IAAA,CAAC;AAED,IAAA,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;AAC7C;AAEA;;;;;;AAMG;SACa,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;AACtD,IAAA,MAAM,KAAK,GAAG,CAAC,CAAS,KAAI;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClE,QAAA,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC3C,IAAA,CAAC;AAED,IAAA,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;AAC7C;;AClEA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-utilities-extensions.mjs","sources":["../../../projects/sd-angular/utilities/extensions/src/string.extension.ts","../../../projects/sd-angular/utilities/extensions/src/array.extension.ts","../../../projects/sd-angular/utilities/extensions/src/number.extension.ts","../../../projects/sd-angular/utilities/extensions/src/date.extension.ts","../../../projects/sd-angular/utilities/extensions/src/utility.extension.ts","../../../projects/sd-angular/utilities/extensions/src/color.extension.ts","../../../projects/sd-angular/utilities/extensions/sd-angular-core-utilities-extensions.ts"],"sourcesContent":["/* eslint-disable no-useless-escape */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// declare global {\r\n// interface StringConstructor {\r\n// isValidEmail(value: any): boolean;\r\n// isValidPhone(value: any): boolean;\r\n// isValidCode(value: any): boolean;\r\n// changeAliasLowerCase(alias: any): string;\r\n// aliasIncludes(alias: any, searchText: any): boolean;\r\n// format(template: string, ...arr: any[]): string;\r\n// templateToDisplay(template: string, entity: any): string; // Convert theo format ${key}\r\n// encrypt(obj: any): string;\r\n// decrypt(encripted: string): any;\r\n// isNullOrEmpty(value: any): boolean;\r\n// isNullOrWhiteSpace(value: any): boolean;\r\n// }\r\n// }\r\n\r\nconst REGEX_EMAIL = '^(([^<>()[\\\\].,;:\\\\s@\"]+(\\\\.[^<>()[\\\\].,;:\\\\s@\"]+)*)|(\".+\"))@(([^<>()[\\\\].,;:\\\\s@\"]+\\\\.)+[^<>()[\\\\].,;:\\\\s@\"]{2,})$';\r\nconst REGEX_PHONE = '^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\\\s./0-9]*$';\r\nconst REGEX_PHONE_VN = '^(?:\\\\+84|0|84)(3[2-9]|5[2689]|7[06-9]|8[1-689]|9[0-9])\\\\d{7}$';\r\nconst REGEX_IDVN_OR_PASSPORT = '^(\\\\d{9}|\\\\d{12}|[A-Z]\\\\d{7})$';\r\nconst REGEX_TIME = '^(?:[01]\\\\d|2[0-3]):[0-5]\\\\d$';\r\nconst isValidEmail = (value: any) => {\r\n if (!value) {\r\n return false;\r\n }\r\n const re = new RegExp(REGEX_EMAIL);\r\n return re.test(value);\r\n};\r\n\r\nconst isValidPhone = (value: any) => {\r\n if (!value) {\r\n return false;\r\n }\r\n const re = new RegExp(REGEX_PHONE);\r\n return re.test(value);\r\n};\r\n\r\nconst isValidCode = (value: any) => {\r\n if (!value) {\r\n return false;\r\n }\r\n const re = /^[a-zA-Z0-9\\@\\_\\-]{2,20}$/;\r\n return re.test(value);\r\n};\r\n\r\nconst isNullOrEmpty = (value: any) => {\r\n return value === undefined || value === null || value === '';\r\n};\r\n\r\nconst isNullOrWhiteSpace = (value: any) => {\r\n return value === undefined || value === null || typeof value !== 'string' || value.match(/^ *$/) !== null;\r\n};\r\n\r\nconst changeAliasLowerCase = (alias: any) => {\r\n let str: string = alias?.toString() ?? '';\r\n str = str.toString().toLowerCase();\r\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\r\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e');\r\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\r\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\r\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\r\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\r\n str = str.replace(/đ/g, 'd');\r\n str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, ' ');\r\n str = str.replace(/ + /g, ' ');\r\n str = str.trim();\r\n return str;\r\n};\r\n\r\nconst aliasIncludes = (alias: any, searchText: any) => {\r\n return changeAliasLowerCase(alias).includes(changeAliasLowerCase(searchText));\r\n};\r\n\r\nconst format = (template: string, ...arr: any[]) => {\r\n for (let i = 0; i < arr.length; i++) {\r\n const regexp = new RegExp(`\\\\{${i}\\\\}`, 'gi');\r\n template = template.replace(regexp, arr[i]);\r\n }\r\n return template;\r\n};\r\n\r\nconst getValueByPath = (entity: Record<string, any>, key: string) => {\r\n let value: any = entity;\r\n for (const part of key.split('.')) {\r\n value = value?.[part];\r\n }\r\n return value;\r\n};\r\n\r\n// Convert: `[${code}] ${name}` => `[Mã] Tên`;\r\nconst templateToDisplay = (template: string, entity: Record<string, any>) => {\r\n if (!template) {\r\n return template;\r\n }\r\n const regex = /\\$\\{([A-Za-z0-9._-]*)\\}/g;\r\n const matches = template.match(regex) || [];\r\n for (const match of matches) {\r\n const key = match.slice(2, match.length - 1);\r\n if (key) {\r\n template = template.replace(match, getValueByPath(entity, key) ?? '');\r\n }\r\n }\r\n return template;\r\n};\r\n\r\nconst EXACT_TEMPLATE_REGEX = /^\\$\\{([A-Za-z0-9._-]*)\\}$/;\r\nconst NUMBER_LITERAL_REGEX = /^-?\\d+(\\.\\d+)?$/;\r\n\r\n// Convert placeholder/literal an toàn, không thực thi JavaScript động.\r\nconst parseExpression = (template: string, entity: Record<string, any>) => {\r\n if (!template) {\r\n return undefined;\r\n }\r\n const trimmedTemplate = template.trim();\r\n const exactTemplateMatch = trimmedTemplate.match(EXACT_TEMPLATE_REGEX);\r\n if (exactTemplateMatch?.[1]) {\r\n return getValueByPath(entity, exactTemplateMatch[1]);\r\n }\r\n\r\n if (trimmedTemplate === 'true') {\r\n return true;\r\n }\r\n if (trimmedTemplate === 'false') {\r\n return false;\r\n }\r\n if (trimmedTemplate === 'null') {\r\n return null;\r\n }\r\n if (trimmedTemplate === 'undefined') {\r\n return undefined;\r\n }\r\n if (NUMBER_LITERAL_REGEX.test(trimmedTemplate)) {\r\n return Number(trimmedTemplate);\r\n }\r\n\r\n return templateToDisplay(template, entity);\r\n};\r\n\r\nconst SALT = 'cb9f4b2a-d26c-4787-a66e-e7130ee00f95';\r\n\r\nconst encrypt = (obj: any) => {\r\n obj = JSON.stringify(obj).split('');\r\n for (let i = 0, l = obj.length; i < l; i++)\r\n if (obj[i] == '{') obj[i] = '}';\r\n else if (obj[i] == '}') obj[i] = '{';\r\n return encodeURI(SALT + obj.join(''));\r\n};\r\n\r\nconst decrypt = (encripted: string) => {\r\n encripted = decodeURI(encripted);\r\n if (SALT && encripted.indexOf(SALT) != 0) throw new Error('object cannot be decrypted');\r\n const strs = encripted.substring(SALT.length).split('');\r\n for (let i = 0, l = strs.length; i < l; i++)\r\n if (strs[i] == '{') strs[i] = '}';\r\n else if (encripted[i] == '}') strs[i] = '{';\r\n return JSON.parse(strs.join(''));\r\n};\r\n\r\n// Conver \"Đội Kỹ Thuật\" thành \"doi_ky_thuat\"\r\nconst convertToSnakeCaseCode = (name: string): string => {\r\n if (typeof name !== 'string') {\r\n throw new Error('Invalid name');\r\n }\r\n return name\r\n .normalize('NFD') // Tách dấu\r\n .replace(/[\\u0300-\\u036f]/g, '') // Xóa các dấu vừa tách\r\n .replace(/[đĐ]/g, 'd') // Quan trọng: Xử lý chữ đ/Đ thành d\r\n .trim()\r\n .replace(/[^a-zA-Z0-9]+/g, '_') // Thay ký tự đặc biệt bằng _\r\n .replace(/^_+|_+$/g, '') // Xóa _ ở đầu/cuối\r\n .toLowerCase(); // Chuyển thành chữ thường: doi_ky_thuat\r\n};\r\n\r\n/**\r\n * Tạo code duy nhất, tự động thêm suffix _n nếu bị trùng\r\n * @param name Tên cần convert\r\n * @param existingCodes Danh sách các code đã tồn tại\r\n */\r\nconst generateUniqueCode = (name: string, existingCodes: string[]): string => {\r\n // 1. Tạo base code trước\r\n const baseCode = convertToSnakeCaseCode(name);\r\n // 2. Nếu code chưa tồn tại thì trả về luôn\r\n if (!existingCodes.includes(baseCode)) {\r\n return baseCode;\r\n }\r\n // 3. Nếu trùng, bắt đầu loop để tìm index phù hợp\r\n let index = 1;\r\n let newCode = `${baseCode}_${index}`;\r\n\r\n while (existingCodes.includes(newCode)) {\r\n index++;\r\n newCode = `${baseCode}_${index}`;\r\n }\r\n return newCode;\r\n};\r\n\r\nconst sha256 = async (input: string): Promise<string> => {\r\n const buffer = new TextEncoder().encode(input);\r\n const hash = await crypto.subtle.digest('SHA-256', buffer);\r\n const bytes = new Uint8Array(hash);\r\n let binary = '';\r\n for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);\r\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\r\n};\r\n\r\nexport const StringUtilities = {\r\n REGEX_EMAIL,\r\n REGEX_PHONE,\r\n REGEX_PHONE_VN,\r\n REGEX_IDVN_OR_PASSPORT,\r\n REGEX_TIME,\r\n isValidEmail,\r\n isValidPhone,\r\n isValidCode,\r\n changeAliasLowerCase,\r\n aliasIncludes,\r\n format,\r\n templateToDisplay,\r\n parseExpression,\r\n encrypt,\r\n decrypt,\r\n isNullOrEmpty,\r\n isNullOrWhiteSpace,\r\n convertToSnakeCaseCode,\r\n generateUniqueCode,\r\n sha256,\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// export {};\r\n\r\nimport { StringUtilities } from './string.extension';\r\n\r\n// declare global {\r\n// interface Array<T = any> {\r\n// search(searchText: string | number, fields?: (string | undefined) | (string | undefined)[], children?: string): T[];\r\n// paging(pageSize: number, page?: number): T[];\r\n// toObject(key: string): Record<string, T>;\r\n// union(key: string, ...args: T[][]): T[];\r\n// distinct(): T[];\r\n// }\r\n// interface ArrayConstructor {\r\n// search<T = any>(items: T[], searchText: string | number, fields?: (string | undefined) | (string | undefined)[]): T[];\r\n// union<T = any>(key: string, ...args: T[][]): T[];\r\n// toObject<T = any>(key: string, items: T[]): Record<string, T>;\r\n// }\r\n// }\r\n\r\nconst search = <T = any>(items: T[], searchText: any, fields?: (string | undefined) | (string | undefined)[], children?: string): T[] => {\r\n if (!searchText?.toString()) {\r\n return items;\r\n }\r\n if (!items?.length) {\r\n return items;\r\n }\r\n if (Array.isArray(fields)) {\r\n const fs = fields.filter(e => e !== undefined && e !== null && e !== '') as string[];\r\n if (!fs.length) {\r\n return items.filter(item => item !== undefined && item !== null && StringUtilities.aliasIncludes(item, searchText));\r\n }\r\n return items.filter(\r\n item =>\r\n (item !== undefined && item !== null && fs.some(field => StringUtilities.aliasIncludes((item as any)[field], searchText))) ||\r\n (children && search((item as any)[children], searchText, fields, children)?.length)\r\n );\r\n }\r\n if (!fields) {\r\n return items.filter(item => item !== undefined && item !== null && StringUtilities.aliasIncludes(item, searchText));\r\n }\r\n return items.filter(\r\n item =>\r\n (item !== undefined && item !== null && StringUtilities.aliasIncludes((item as any)[fields], searchText)) ||\r\n (children && search((item as any)[children], searchText, fields, children)?.length)\r\n );\r\n};\r\n\r\n// Array.prototype.search = function <T = any>(\r\n// searchText: any,\r\n// fields?: (string | undefined) | (string | undefined)[],\r\n// children?: string\r\n// ): T[] {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const items: T[] = this;\r\n// return search(items, searchText, fields, children);\r\n// };\r\n\r\n// Array.prototype.paging = function <T extends Record<string, any> = any>(pageSize: number, page = 0): T[] {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const items: T[] = this;\r\n// return items.filter((_, index) => {\r\n// return index >= page * pageSize && index < (page + 1) * pageSize;\r\n// });\r\n// };\r\n\r\n// Array.prototype.toObject = function <T = any>(key: string): Record<string, T> {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const items: T[] = this;\r\n// return items\r\n// .filter(item => item !== undefined && item !== null)\r\n// .reduce<Record<string, any>>((obj, item: Record<string, any>) => {\r\n// const objKey = item?.[key]?.toString();\r\n// if (typeof objKey === 'string') {\r\n// obj[objKey] = item;\r\n// }\r\n// return obj;\r\n// }, {});\r\n// };\r\n\r\n// Array.prototype.union = function <T = Record<string, any>>(key: string, ...args: T[][]) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// let results: T[] = this;\r\n// const filterUnion = <T = any>(val: T, index: number, self: T[]) =>\r\n// val !== undefined && val !== null && self.findIndex(e => (e as any)[key] === (val as any)[key]) === index;\r\n// if (!args?.length) {\r\n// return results.filter(filterUnion);\r\n// }\r\n// for (const arg of args) {\r\n// if (Array.isArray(arg)) {\r\n// results = [...results, ...arg].filter(filterUnion);\r\n// }\r\n// }\r\n// return results;\r\n// };\r\n\r\n// Array.prototype.distinct = function () {\r\n// if (Array.isArray(this)) {\r\n// return [...new Set(this)];\r\n// }\r\n// return this;\r\n// };\r\n\r\nconst union = <T = unknown>(key: string, ...args: (T[] | undefined | null)[]) => {\r\n let results: T[] = [];\r\n const filterUnion = <T = any>(val: T, index: number, self: T[]) =>\r\n val !== undefined && val !== null && self.findIndex(e => (e as any)[key] === (val as any)[key]) === index;\r\n if (!args?.length) {\r\n return [];\r\n }\r\n for (const arg of args) {\r\n if (Array.isArray(arg)) {\r\n results = [...results, ...arg].filter(filterUnion);\r\n }\r\n }\r\n return results;\r\n};\r\n\r\nconst toObject = <T>(key: string, items: T[] | undefined | null): Record<string, T> => {\r\n if (!Array.isArray(items)) {\r\n return {};\r\n }\r\n return items\r\n .filter(item => item !== undefined && item !== null)\r\n .reduce<Record<string, any>>((obj, item: Record<string, any>) => {\r\n const objKey = item?.[key]?.toString();\r\n if (typeof objKey === 'string') {\r\n obj[objKey] = item;\r\n }\r\n return obj;\r\n }, {});\r\n};\r\n\r\nconst distinct = <T = any>(items: T[] | undefined | null) => {\r\n if (Array.isArray(items)) {\r\n return [...new Set(items)];\r\n }\r\n return [];\r\n};\r\n\r\nconst paging = <T = any>(items: T[] | undefined | null, pageSize: number, page = 0): T[] => {\r\n if (!Array.isArray(items)) {\r\n return [];\r\n }\r\n return items.filter((_, index) => {\r\n return index >= page * pageSize && index < (page + 1) * pageSize;\r\n });\r\n};\r\n\r\nexport const ArrayUtilities = {\r\n search,\r\n union,\r\n toObject,\r\n distinct,\r\n paging,\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n// export {};\n\n// declare global {\n// interface NumberConstructor {\n// toVNCurrency(value: any): string | null;\n// toISO(value: any): string | null;\n// isNumber(value: any): boolean;\n// isPositiveInteger(value: any): boolean;\n// isPositiveNumber(value: any): boolean;\n// round(value: any, digits?: number): number | null;\n// }\n// }\n\nconst toVNCurrency = (value: any) => {\n value = (value ?? '').toString().replace(/,/g, '');\n if (!value) {\n return null;\n }\n const val = +value;\n if (!Number.isNaN(val)) {\n return val.toLocaleString('vi-VN', { maximumFractionDigits: 10 });\n }\n return null;\n};\n\nconst toVN = (value: any) => {\n value = (value ?? '').toString().replace(/,/g, '');\n if (!value) {\n return null;\n }\n const val = +value;\n if (!Number.isNaN(val)) {\n return val.toLocaleString('vi-VN', { maximumFractionDigits: 10 });\n }\n return null;\n};\n\nconst toISO = (value: any) => {\n value = (value ?? '').toString().replace(/,/g, '');\n if (!value) {\n return null;\n }\n const val = +value;\n if (!Number.isNaN(val)) {\n return val.toLocaleString('en-US', { maximumFractionDigits: 10 });\n }\n return null;\n};\n\nconst isPositiveInteger = (value: any) => {\n if (!value) {\n return false;\n }\n const regex = /^([0-9]*)$/;\n return regex.test(value) && +value > 0;\n};\n\nconst isPositiveNumber = (value: any) => {\n if (!value) {\n return false;\n }\n const regex = /^([0-9]*)(\\.[0-9]+$){0,1}$/;\n return regex.test(value) && +value > 0;\n};\n\nconst isNumber = (value: any) => {\n if (value === undefined || value === null || value === '') {\n return false;\n }\n return !Number.isNaN(+value);\n};\n\nconst round = (value: any, digits?: number): number | null => {\n digits = digits ?? 2;\n if (!NumberUtilities.isNumber(value)) {\n return null;\n }\n const val = Math.pow(10, digits);\n return Math.round(value * val) / val;\n};\n\nconst NumberUtilities = {\n toVNCurrency,\n toVN,\n toISO,\n isPositiveInteger,\n isPositiveNumber,\n isNumber,\n round,\n};\n\nexport { NumberUtilities };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// export {};\r\n\r\nimport { NumberUtilities } from './number.extension';\r\n\r\n// declare global {\r\n// interface Date {\r\n// begin(): Date;\r\n// end(): Date;\r\n// addMiliseconds(miliseconds: number): Date;\r\n// addHours(hours: number): Date;\r\n// addDays(days: number): Date;\r\n// addMonths(months: number): Date;\r\n// toFormat(format: string): string;\r\n// }\r\n// interface DateConstructor {\r\n// equal(date1: any, date2: any): boolean;\r\n// dayDiff(date1: any, date2: any): number | null;\r\n// monthDiff(date1: any, date2: any): number | null;\r\n// yearDiff(date1: any, date2: any): number | null;\r\n// age(date1: any, date2: any): number | null;\r\n// parseFrom(value: any, format: string): Date | null;\r\n// isDate(value: any): boolean;\r\n// toFormat(value: any, format: string): string;\r\n// addMiliseconds(value: any, miliseconds: number): Date | null;\r\n// addHours(value: any, hours: number): Date | null;\r\n// addDays(value: any, days: number): Date | null;\r\n// addMonths(value: any, months: number): Date | null;\r\n// begin(value: any): Date | null;\r\n// end(value: any): Date | null;\r\n// timeDifference(previous: any, current?: any): string;\r\n// }\r\n// }\r\n\r\nconst isDate = (value: any) => {\r\n if (!value) {\r\n return false;\r\n }\r\n if (typeof value === 'string') {\r\n // Kiểm tra regex\r\n if (value.length < 8) {\r\n return false;\r\n } else {\r\n const date1 = value.substring(0, 10); // yyyy/MM/dd\r\n const date2 = value.substring(0, 9); // yyyy/M/dd, yyyy/MM/d\r\n const date3 = value.substring(0, 8); // yyyy/M/d\r\n const regex1 = /^(0[1-9]|[1-9]|1[0-2])(-|\\/)(0[1-9]|[1-9]|[12][0-9]|3[01])(-|\\/)(\\d{4})$/; // MM/dd/yyyy, MM-dd-yyyy\r\n const regex2 = /^(\\d{4})(-|\\/)(0[1-9]|[1-9]|1[0-2])(-|\\/)(0[1-9]|[1-9]|[12][0-9]|3[01])$/; // yyyy/MM/dd, yyyy-MM-dd\r\n const result =\r\n regex1.test(date1) || regex2.test(date1) || regex1.test(date2) || regex2.test(date2) || regex1.test(date3) || regex2.test(date3);\r\n if (result) {\r\n const date = new Date(value);\r\n return !isNaN(date.getTime());\r\n } else {\r\n return false;\r\n }\r\n }\r\n } else {\r\n const date = new Date(value);\r\n return !isNaN(date.getTime());\r\n }\r\n};\r\n\r\n// const toFormatBackup = (value: any, format: string): string => {\r\n// if (!isDate(value)) {\r\n// return '';\r\n// }\r\n// const date: Date = new Date(value);\r\n// let result = format;\r\n// result = result.replace('yyyy', date.getFullYear().toString());\r\n// result = result.replace('MM', (date.getMonth() + 1).toString().padStart(2, '0'));\r\n// result = result.replace('dd', date.getDate().toString().padStart(2, '0'));\r\n// result = result.replace('HH', date.getHours().toString().padStart(2, '0'));\r\n// result = result.replace('mm', date.getMinutes().toString().padStart(2, '0'));\r\n// result = result.replace('ss', date.getSeconds().toString().padStart(2, '0'));\r\n// return result;\r\n// };\r\n\r\nconst toFormat = (value: any, format: string): string => {\r\n if (!isDate(value)) {\r\n return '';\r\n }\r\n\r\n const isDatePart = (type: Intl.DateTimeFormatPart['type']): type is 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' => {\r\n return type === 'year' || type === 'month' || type === 'day' || type === 'hour' || type === 'minute' || type === 'second';\r\n };\r\n\r\n const date = new Date(value);\r\n const timeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n const parts = new Intl.DateTimeFormat('en-GB', {\r\n timeZone,\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit',\r\n hour12: false,\r\n }).formatToParts(date);\r\n const map: Partial<Record<'year' | 'month' | 'day' | 'hour' | 'minute' | 'second', string>> = {};\r\n parts.forEach(part => {\r\n if (isDatePart(part.type)) {\r\n map[part.type] = part.value;\r\n }\r\n });\r\n\r\n return format\r\n .replace('yyyy', map.year ?? '')\r\n .replace('MM', map.month ?? '')\r\n .replace('dd', map.day ?? '')\r\n .replace('HH', map.hour ?? '')\r\n .replace('mm', map.minute ?? '')\r\n .replace('ss', map.second ?? '');\r\n};\r\n\r\nconst addDays = (value: any, days: number) => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n const date: Date = new Date(value);\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n};\r\n\r\nconst addMiliseconds = (value: any, miliseconds: number) => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n const date: Date = new Date(value);\r\n date.setMilliseconds(date.getMilliseconds() + miliseconds);\r\n return date;\r\n};\r\n\r\nconst begin = (value: any): Date | null => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n return new Date(toFormat(value, 'MM/dd/yyyy'));\r\n};\r\n\r\nconst end = (value: any): Date | null => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n return addMiliseconds(begin(addDays(value, 1)), -1);\r\n};\r\n\r\nconst equal = (date1: any, date2: any) => {\r\n if (!isDate(date1) && !isDate(date2)) {\r\n return true;\r\n }\r\n if (!isDate(date1) || !isDate(date2)) {\r\n return false;\r\n }\r\n return new Date(date1).getTime() === new Date(date2).getTime();\r\n};\r\n\r\nconst dayDiff = (date1: any, date2: any) => {\r\n if (!isDate(date1) || !isDate(date2)) {\r\n return null;\r\n }\r\n const diff = new Date(date2).getTime() - new Date(date1).getTime();\r\n return Math.floor(diff / (24 * 3600 * 1000));\r\n};\r\n\r\nconst monthDiff = (date1: any, date2: any) => {\r\n if (!isDate(date1) || !isDate(date2)) {\r\n return null;\r\n }\r\n const d1Y = date1.getFullYear();\r\n const d2Y = date2.getFullYear();\r\n const d1M = date2.getMonth();\r\n const d2M = date2.getMonth();\r\n return d2M + 12 * d2Y - (d1M + 12 * d1Y);\r\n};\r\n\r\nconst yearDiff = (date1: any, date2: any) => {\r\n if (!isDate(date1) || !isDate(date2)) {\r\n return null;\r\n }\r\n return new Date(date2).getFullYear() - new Date(date1).getFullYear();\r\n};\r\n\r\nconst age = (date1: any, date2: any) => {\r\n const diff = monthDiff(date1, date2);\r\n if (!diff) {\r\n return null;\r\n }\r\n return NumberUtilities.round(diff / 12);\r\n};\r\n\r\nconst parseFrom = (value: any, format: string) => {\r\n if (!value) {\r\n return null;\r\n }\r\n if (!format) {\r\n return null;\r\n }\r\n value = value.toString();\r\n const dmy = format.indexOf('dd') > -1 && format.indexOf('MM') > -1 && format.indexOf('yyyy') > -1;\r\n const hms = format.indexOf('HH') > -1 || format.indexOf('mm') > -1 || format.indexOf('ss') > -1;\r\n let strDate = '';\r\n if (dmy) {\r\n const dd = value.substr(format.indexOf('dd'), 'dd'.length);\r\n const MM = value.substr(format.indexOf('MM'), 'MM'.length);\r\n const yyyy = value.substr(format.indexOf('yyyy'), 'yyyy'.length);\r\n if (+yyyy > 0 && +MM > 0 && +dd > 0) {\r\n strDate += `${MM}/${dd}/${yyyy}`;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n const today = new Date();\r\n const yyyy = today.getFullYear().toString();\r\n const MM = (today.getMonth() + 1).toString().padStart(2, '0');\r\n const dd = today.getDate().toString().padStart(2, '0');\r\n strDate += `${MM}/${dd}/${yyyy}`;\r\n }\r\n if (hms) {\r\n const HH = format.indexOf('HH') > -1 ? value.substr(format.indexOf('HH'), 'HH'.length) : '00';\r\n const mm = format.indexOf('mm') > -1 ? value.substr(format.indexOf('mm'), 'mm'.length) : '00';\r\n const ss = format.indexOf('ss') > -1 ? value.substr(format.indexOf('ss'), 'ss'.length) : '00';\r\n strDate += ` ${HH || '00'}:${mm || '00'}:${ss || '00'}`;\r\n }\r\n if (!isDate(strDate)) {\r\n return null;\r\n }\r\n return new Date(strDate);\r\n};\r\n\r\nconst addHours = (value: any, hours: number) => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n const date: Date = new Date(value);\r\n date.setHours(date.getHours() + hours);\r\n return date;\r\n};\r\n\r\nconst addMonths = (value: any, months: number) => {\r\n if (!isDate(value)) {\r\n return null;\r\n }\r\n const date: Date = new Date(value);\r\n date.setMonth(date.getMonth() + months);\r\n return date;\r\n};\r\n\r\nconst timeDifference = function (previous: any, current: any = new Date()) {\r\n if (!isDate(previous)) {\r\n return '';\r\n }\r\n if (!isDate(current)) {\r\n return '';\r\n }\r\n const from = new Date(previous);\r\n const to = new Date(current);\r\n const msPerMinute = 60 * 1000;\r\n const msPerHour = msPerMinute * 60;\r\n const msPerDay = msPerHour * 24;\r\n const msPerMonth = msPerDay * 30;\r\n const msPerYear = msPerDay * 365;\r\n const elapsed = to.getTime() - from.getTime();\r\n\r\n if (elapsed < msPerMinute) {\r\n return `${Math.round(elapsed / 1000)} seconds ago`;\r\n }\r\n\r\n if (elapsed < msPerHour) {\r\n return `${Math.round(elapsed / msPerMinute)} minutes ago`;\r\n }\r\n\r\n if (elapsed < msPerDay) {\r\n return `${Math.round(elapsed / msPerHour)} hours ago`;\r\n }\r\n\r\n if (elapsed < msPerMonth) {\r\n return `${Math.round(elapsed / msPerDay)} days ago`;\r\n }\r\n\r\n if (elapsed < msPerYear) {\r\n return `${Math.round(elapsed / msPerMonth)} months ago`;\r\n }\r\n return `${Math.round(elapsed / msPerYear)} years ago`;\r\n};\r\n\r\n// Date.prototype.begin = function () {\r\n// return new Date(this.toFormat('MM/dd/yyyy'));\r\n// };\r\n\r\n// Date.prototype.end = function () {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// return date.addDays(1).begin().addMiliseconds(-1);\r\n// };\r\n\r\n// Date.prototype.addMiliseconds = function (miliseconds: number) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// date.setMilliseconds(date.getMilliseconds() + miliseconds);\r\n// return date;\r\n// };\r\n\r\n// Date.prototype.addHours = function (hours: number) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// date.setHours(date.getHours() + hours);\r\n// return date;\r\n// };\r\n\r\n// Date.prototype.addDays = function (days: number) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// date.setDate(date.getDate() + days);\r\n// return date;\r\n// };\r\n\r\n// Date.prototype.addMonths = function (months: number) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// date.setMonth(date.getMonth() + months);\r\n// return date;\r\n// };\r\n\r\n// Date.prototype.toFormat = function (format: string) {\r\n// // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n// const date: Date = this;\r\n// let result = format;\r\n// result = result.replace('yyyy', date.getFullYear().toString());\r\n// result = result.replace('MM', (date.getMonth() + 1).toString().padStart(2, '0'));\r\n// result = result.replace('dd', date.getDate().toString().padStart(2, '0'));\r\n// result = result.replace('HH', date.getHours().toString().padStart(2, '0'));\r\n// result = result.replace('mm', date.getMinutes().toString().padStart(2, '0'));\r\n// result = result.replace('ss', date.getSeconds().toString().padStart(2, '0'));\r\n// return result;\r\n// };\r\n\r\nconst DateUtilities = {\r\n equal,\r\n dayDiff,\r\n monthDiff,\r\n yearDiff,\r\n age,\r\n parseFrom,\r\n isDate,\r\n toFormat,\r\n addMiliseconds,\r\n addHours,\r\n addDays,\r\n addMonths,\r\n begin,\r\n end,\r\n timeDifference,\r\n};\r\n\r\nexport { DateUtilities };\r\n","const upload = (option?: { extensions?: string[]; maxSizeInMb?: number; validator?: (fileName: string) => string; multiple?: boolean }) => {\r\n const uploadId = 'U1e09c1c0-b647-437e-995e-d7a1a1b60550';\r\n const promise = new Promise<File | File[] | null>((resolve, reject) => {\r\n const body = document.getElementsByTagName('body')?.[0];\r\n if (!body) {\r\n resolve(null);\r\n return;\r\n }\r\n const existedElement = document.getElementById(uploadId);\r\n if (existedElement) {\r\n existedElement.remove();\r\n }\r\n const element = document.createElement('input');\r\n element.setAttribute('id', uploadId);\r\n element.setAttribute('type', 'file');\r\n if (option?.multiple) {\r\n element.setAttribute('multiple', '');\r\n }\r\n element.style.display = 'none';\r\n body.appendChild(element);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n element.addEventListener('change', (evt: any) => {\r\n try {\r\n const target = evt.target as DataTransfer;\r\n\r\n if (option?.multiple) {\r\n const files: File[] = [];\r\n for (const file of target.files) {\r\n if (file) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);\r\n }\r\n const extension = file.name.substring(lastDot + 1);\r\n if (option) {\r\n if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {\r\n throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);\r\n }\r\n if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\r\n const message = `[${file.name}] Kích thước file không hợp lệ. Vui lòng chọn một file khác`;\r\n throw new Error(message);\r\n }\r\n if (option.validator && option.validator(file.name)) {\r\n const message = option.validator(file.name);\r\n throw new Error(message);\r\n }\r\n }\r\n files.push(file);\r\n }\r\n resolve(files);\r\n }\r\n } else {\r\n const file = target.files.item(0);\r\n if (file) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);\r\n }\r\n const extension = file.name.substring(lastDot + 1);\r\n if (option) {\r\n if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {\r\n throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);\r\n }\r\n if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\r\n const message = `[${file.name}] Kích thước file không hợp lệ. Vui lòng chọn một file khác`;\r\n throw new Error(message);\r\n }\r\n if (option.validator && option.validator(file.name)) {\r\n const message = option.validator(file.name);\r\n throw new Error(message);\r\n }\r\n }\r\n resolve(file);\r\n }\r\n }\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n element.click();\r\n });\r\n return promise;\r\n};\r\n\r\nconst generateFileName = (fileName?: string | null) => {\r\n if (!fileName) {\r\n return `file_${randomId()}`;\r\n }\r\n return fileName;\r\n};\r\n\r\nconst download = (fileOrPath: File | string | undefined | null, fileName?: string | null) => {\r\n if (!fileOrPath) {\r\n console.warn('No file or path provided for download');\r\n return;\r\n }\r\n fileName = generateFileName(fileName);\r\n if (fileOrPath instanceof File) {\r\n // Hoặc sử dụng cách thông thường:\r\n const url = URL.createObjectURL(fileOrPath);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = fileOrPath.name || fileName;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url); // Giải phóng tài nguyên\r\n return;\r\n }\r\n const a = document.createElement('a');\r\n a.href = fileOrPath;\r\n if (fileOrPath.startsWith('http')) {\r\n a.target = '_blank'; // mở tab mới\r\n } else {\r\n a.download = fileName;\r\n }\r\n a.style.visibility = 'hidden';\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n return;\r\n};\r\n\r\nconst downloadBlob = (blob: Blob, fileName?: string) => {\r\n try {\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n if (link.download !== undefined) {\r\n // feature detection\r\n link.download = generateFileName(fileName);\r\n link.href = url;\r\n link.style.visibility = 'hidden';\r\n document.body.appendChild(link);\r\n link.click();\r\n window.URL.revokeObjectURL(url);\r\n link.remove();\r\n }\r\n } catch (e) {\r\n console.error('BlobToSaveAs error', e);\r\n }\r\n};\r\n\r\nconst changeAliasLowerCase = (alias: string) => {\r\n let str = alias?.toString() ?? '';\r\n str = str.toString().toLowerCase();\r\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\r\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e');\r\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\r\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\r\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\r\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\r\n str = str.replace(/đ/g, 'd');\r\n // eslint-disable-next-line no-useless-escape\r\n str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, ' ');\r\n str = str.replace(/ + /g, ' ');\r\n str = str.trim();\r\n return str;\r\n};\r\n\r\nconst copyToClipboard = (text: string) => {\r\n navigator.clipboard.writeText(text);\r\n};\r\n\r\nconst allWithPaging = async <T = unknown>(\r\n func: (pageSize: number, pageNumber: number) => Promise<{ items: T[]; total: number }>,\r\n defaultPageSize?: number\r\n): Promise<T[]> => {\r\n const pageSize = defaultPageSize || 1000;\r\n let pageNumber = 0;\r\n let count = 0;\r\n let items: T[] = [];\r\n while (true) {\r\n const res = await func(pageSize, pageNumber);\r\n if (Array(res?.items) && res?.total > 0) {\r\n items = [...items, ...res.items];\r\n count += res.items.length;\r\n pageNumber++;\r\n if (count >= res.total || !res.items?.length) {\r\n return items;\r\n }\r\n } else {\r\n return [];\r\n }\r\n }\r\n};\r\n\r\nconst isIncognito = async (): Promise<boolean> => {\r\n // Chrome-based\r\n if ('storage' in navigator && 'estimate' in navigator.storage) {\r\n try {\r\n const { quota } = await navigator.storage.estimate();\r\n if (quota && quota < 120 * 1024 * 1024) return true;\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n\r\n // Safari fallback\r\n try {\r\n localStorage.setItem('__incognito_test', '1');\r\n localStorage.removeItem('__incognito_test');\r\n return false;\r\n } catch {\r\n return true;\r\n }\r\n};\r\n\r\nconst isMobile = (): boolean => {\r\n return /Mobi|Android/i.test(navigator.userAgent);\r\n};\r\n\r\nconst randomId = (prefix?: string | null): string => {\r\n const id = new Date().getTime().toString(36);\r\n if (prefix) {\r\n return `${prefix}_${id}`;\r\n }\r\n return id;\r\n};\r\n\r\nconst hash = (obj: any): string => {\r\n const json = stableStringify(obj);\r\n let hash = 0;\r\n\r\n for (let i = 0; i < json.length; i++) {\r\n hash = (hash << 5) - hash + json.charCodeAt(i);\r\n hash |= 0; // Convert to 32bit integer\r\n }\r\n\r\n return `h${Math.abs(hash)}`;\r\n};\r\n\r\n/**\r\n * Convert object to stable JSON string (keys sorted)\r\n */\r\nconst stableStringify = (obj: any): string => {\r\n if (obj === null || typeof obj !== 'object') {\r\n return JSON.stringify(obj);\r\n }\r\n\r\n if (obj instanceof File) {\r\n // Chỉ serialize các thuộc tính quan trọng của File\r\n return JSON.stringify({\r\n __type: 'File',\r\n name: obj.name,\r\n size: obj.size,\r\n type: obj.type,\r\n lastModified: obj.lastModified,\r\n });\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return `[${obj.map(stableStringify).join(',')}]`;\r\n }\r\n\r\n const keys = Object.keys(obj).sort();\r\n const keyValuePairs = keys.map(key => `\"${key}\":${stableStringify(obj[key])}`);\r\n\r\n return `{${keyValuePairs.join(',')}}`;\r\n};\r\n\r\n// Hàm `parseQueryParams` dùng để phân tích chuỗi query string (phần sau dấu `?` trên URL)\r\n// và chuyển đổi nó thành một đối tượng JavaScript với các cặp key-value.\r\nconst parseQueryParams = (queryString?: string): Record<string, string> => {\r\n const params = new URLSearchParams(queryString || '');\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n return result;\r\n};\r\n\r\n/**\r\n * Lấy địa chỉ IP public của client bằng cách gọi API bên thứ ba.\r\n */\r\nconst getClientPublicIp = async (): Promise<string | null> => {\r\n try {\r\n // Gọi đến API của ipify để lấy IP dưới dạng JSON\r\n const response = await fetch('https://api.ipify.org?format=json');\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n const data = await response.json();\r\n // Trả về địa chỉ IP\r\n return data.ip;\r\n } catch (error) {\r\n console.error('Không thể lấy địa chỉ IP:', error);\r\n return null; // Trả về null nếu có lỗi\r\n }\r\n};\r\n\r\n\r\n// Helper function với fallback\r\nconst generateUuid = (): string => {\r\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\r\n return crypto.randomUUID();\r\n }\r\n // Fallback cho browser cũ\r\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\r\n};\r\n\r\n/**\r\n * Truy xuất giá trị của object dựa trên đường dẫn nested (VD: 'user.address.city')\r\n */\r\nconst getNestedValue = (obj: any, path: string) => {\r\n if (!obj || !path) return undefined;\r\n // Tách chuỗi theo dấu chấm và duyệt qua từng cấp của object\r\n return path.split('.').reduce((acc, part) => acc?.[part], obj);\r\n};\r\n\r\nconst SdUtilities = {\r\n upload,\r\n download,\r\n downloadBlob,\r\n changeAliasLowerCase,\r\n copyToClipboard,\r\n allWithPaging,\r\n isIncognito,\r\n isMobile,\r\n randomId,\r\n hash,\r\n parseQueryParams,\r\n getClientPublicIp,\r\n generateUuid,\r\n getNestedValue\r\n};\r\nexport { SdUtilities };\r\n\r\n","/**\r\n * Color Utilities Extension\r\n * Các tiện ích xử lý màu\r\n */\r\n\r\n/**\r\n * Chuyển đổi màu HSL sang định dạng hex\r\n * @param h - Hue (0-360)\r\n * @param s - Saturation (0-100)\r\n * @param l - Lightness (0-100)\r\n * @returns Mã màu hex\r\n */\r\nexport function hslToHex(h: number, s: number, l: number): string {\r\n // Chuyển đổi sang định dạng 0-1\r\n const hNormalized = h / 360;\r\n const sNormalized = s / 100;\r\n const lNormalized = l / 100;\r\n\r\n let r: number, g: number, b: number;\r\n\r\n if (sNormalized === 0) {\r\n // Màu xám (grayscale)\r\n r = g = b = lNormalized;\r\n } else {\r\n const hue2rgb = (p: number, q: number, t: number) => {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1/6) return p + (q - p) * 6 * t;\r\n if (t < 1/2) return q;\r\n if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;\r\n return p;\r\n };\r\n\r\n const q = lNormalized < 0.5 \r\n ? lNormalized * (1 + sNormalized) \r\n : lNormalized + sNormalized - lNormalized * sNormalized;\r\n const p = 2 * lNormalized - q;\r\n\r\n r = hue2rgb(p, q, hNormalized + 1/3);\r\n g = hue2rgb(p, q, hNormalized);\r\n b = hue2rgb(p, q, hNormalized - 1/3);\r\n }\r\n\r\n // Chuyển đổi sang hex\r\n const toHex = (x: number) => {\r\n const hex = Math.round(x * 255).toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n };\r\n\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n\r\n/**\r\n * Chuyển đổi màu RGB sang hex\r\n * @param r - Red (0-255)\r\n * @param g - Green (0-255)\r\n * @param b - Blue (0-255)\r\n * @returns Mã màu hex\r\n */\r\nexport function rgbToHex(r: number, g: number, b: number): string {\r\n const toHex = (x: number) => {\r\n const hex = Math.round(Math.max(0, Math.min(255, x))).toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n };\r\n \r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["changeAliasLowerCase"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sd-angular/core",
|
|
3
|
-
"version": "19.0.0-beta.
|
|
3
|
+
"version": "19.0.0-beta.79",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^19.0.0 || ^20.0.0 || ^21.0.0",
|
|
6
6
|
"@angular/core": "^19.0.0 || ^20.0.0 || ^21.0.0",
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
"types": "./index.d.ts",
|
|
32
32
|
"default": "./fesm2022/sd-angular-core.mjs"
|
|
33
33
|
},
|
|
34
|
-
"./configurations": {
|
|
35
|
-
"types": "./configurations/index.d.ts",
|
|
36
|
-
"default": "./fesm2022/sd-angular-core-configurations.mjs"
|
|
37
|
-
},
|
|
38
34
|
"./components": {
|
|
39
35
|
"types": "./components/index.d.ts",
|
|
40
36
|
"default": "./fesm2022/sd-angular-core-components.mjs"
|
|
41
37
|
},
|
|
38
|
+
"./configurations": {
|
|
39
|
+
"types": "./configurations/index.d.ts",
|
|
40
|
+
"default": "./fesm2022/sd-angular-core-configurations.mjs"
|
|
41
|
+
},
|
|
42
42
|
"./directives": {
|
|
43
43
|
"types": "./directives/index.d.ts",
|
|
44
44
|
"default": "./fesm2022/sd-angular-core-directives.mjs"
|
|
@@ -47,14 +47,14 @@
|
|
|
47
47
|
"types": "./forms/index.d.ts",
|
|
48
48
|
"default": "./fesm2022/sd-angular-core-forms.mjs"
|
|
49
49
|
},
|
|
50
|
-
"./interceptors": {
|
|
51
|
-
"types": "./interceptors/index.d.ts",
|
|
52
|
-
"default": "./fesm2022/sd-angular-core-interceptors.mjs"
|
|
53
|
-
},
|
|
54
50
|
"./handlers": {
|
|
55
51
|
"types": "./handlers/index.d.ts",
|
|
56
52
|
"default": "./fesm2022/sd-angular-core-handlers.mjs"
|
|
57
53
|
},
|
|
54
|
+
"./interceptors": {
|
|
55
|
+
"types": "./interceptors/index.d.ts",
|
|
56
|
+
"default": "./fesm2022/sd-angular-core-interceptors.mjs"
|
|
57
|
+
},
|
|
58
58
|
"./modules": {
|
|
59
59
|
"types": "./modules/index.d.ts",
|
|
60
60
|
"default": "./fesm2022/sd-angular-core-modules.mjs"
|
|
@@ -71,25 +71,25 @@
|
|
|
71
71
|
"types": "./utilities/index.d.ts",
|
|
72
72
|
"default": "./fesm2022/sd-angular-core-utilities.mjs"
|
|
73
73
|
},
|
|
74
|
-
"./components/anchor-v2": {
|
|
75
|
-
"types": "./components/anchor-v2/index.d.ts",
|
|
76
|
-
"default": "./fesm2022/sd-angular-core-components-anchor-v2.mjs"
|
|
77
|
-
},
|
|
78
74
|
"./components/anchor": {
|
|
79
75
|
"types": "./components/anchor/index.d.ts",
|
|
80
76
|
"default": "./fesm2022/sd-angular-core-components-anchor.mjs"
|
|
81
77
|
},
|
|
82
|
-
"./components/
|
|
83
|
-
"types": "./components/
|
|
84
|
-
"default": "./fesm2022/sd-angular-core-components-
|
|
78
|
+
"./components/anchor-v2": {
|
|
79
|
+
"types": "./components/anchor-v2/index.d.ts",
|
|
80
|
+
"default": "./fesm2022/sd-angular-core-components-anchor-v2.mjs"
|
|
81
|
+
},
|
|
82
|
+
"./components/avatar": {
|
|
83
|
+
"types": "./components/avatar/index.d.ts",
|
|
84
|
+
"default": "./fesm2022/sd-angular-core-components-avatar.mjs"
|
|
85
85
|
},
|
|
86
86
|
"./components/badge": {
|
|
87
87
|
"types": "./components/badge/index.d.ts",
|
|
88
88
|
"default": "./fesm2022/sd-angular-core-components-badge.mjs"
|
|
89
89
|
},
|
|
90
|
-
"./components/
|
|
91
|
-
"types": "./components/
|
|
92
|
-
"default": "./fesm2022/sd-angular-core-components-
|
|
90
|
+
"./components/base": {
|
|
91
|
+
"types": "./components/base/index.d.ts",
|
|
92
|
+
"default": "./fesm2022/sd-angular-core-components-base.mjs"
|
|
93
93
|
},
|
|
94
94
|
"./components/button": {
|
|
95
95
|
"types": "./components/button/index.d.ts",
|
|
@@ -99,10 +99,6 @@
|
|
|
99
99
|
"types": "./components/chart/index.d.ts",
|
|
100
100
|
"default": "./fesm2022/sd-angular-core-components-chart.mjs"
|
|
101
101
|
},
|
|
102
|
-
"./components/history": {
|
|
103
|
-
"types": "./components/history/index.d.ts",
|
|
104
|
-
"default": "./fesm2022/sd-angular-core-components-history.mjs"
|
|
105
|
-
},
|
|
106
102
|
"./components/code-editor": {
|
|
107
103
|
"types": "./components/code-editor/index.d.ts",
|
|
108
104
|
"default": "./fesm2022/sd-angular-core-components-code-editor.mjs"
|
|
@@ -111,6 +107,10 @@
|
|
|
111
107
|
"types": "./components/document-builder/index.d.ts",
|
|
112
108
|
"default": "./fesm2022/sd-angular-core-components-document-builder.mjs"
|
|
113
109
|
},
|
|
110
|
+
"./components/history": {
|
|
111
|
+
"types": "./components/history/index.d.ts",
|
|
112
|
+
"default": "./fesm2022/sd-angular-core-components-history.mjs"
|
|
113
|
+
},
|
|
114
114
|
"./components/import-excel": {
|
|
115
115
|
"types": "./components/import-excel/index.d.ts",
|
|
116
116
|
"default": "./fesm2022/sd-angular-core-components-import-excel.mjs"
|
|
@@ -119,14 +119,6 @@
|
|
|
119
119
|
"types": "./components/mini-editor/index.d.ts",
|
|
120
120
|
"default": "./fesm2022/sd-angular-core-components-mini-editor.mjs"
|
|
121
121
|
},
|
|
122
|
-
"./components/query-builder": {
|
|
123
|
-
"types": "./components/query-builder/index.d.ts",
|
|
124
|
-
"default": "./fesm2022/sd-angular-core-components-query-builder.mjs"
|
|
125
|
-
},
|
|
126
|
-
"./components/quick-action": {
|
|
127
|
-
"types": "./components/quick-action/index.d.ts",
|
|
128
|
-
"default": "./fesm2022/sd-angular-core-components-quick-action.mjs"
|
|
129
|
-
},
|
|
130
122
|
"./components/modal": {
|
|
131
123
|
"types": "./components/modal/index.d.ts",
|
|
132
124
|
"default": "./fesm2022/sd-angular-core-components-modal.mjs"
|
|
@@ -135,6 +127,14 @@
|
|
|
135
127
|
"types": "./components/preview/index.d.ts",
|
|
136
128
|
"default": "./fesm2022/sd-angular-core-components-preview.mjs"
|
|
137
129
|
},
|
|
130
|
+
"./components/query-builder": {
|
|
131
|
+
"types": "./components/query-builder/index.d.ts",
|
|
132
|
+
"default": "./fesm2022/sd-angular-core-components-query-builder.mjs"
|
|
133
|
+
},
|
|
134
|
+
"./components/quick-action": {
|
|
135
|
+
"types": "./components/quick-action/index.d.ts",
|
|
136
|
+
"default": "./fesm2022/sd-angular-core-components-quick-action.mjs"
|
|
137
|
+
},
|
|
138
138
|
"./components/section": {
|
|
139
139
|
"types": "./components/section/index.d.ts",
|
|
140
140
|
"default": "./fesm2022/sd-angular-core-components-section.mjs"
|
|
@@ -151,30 +151,30 @@
|
|
|
151
151
|
"types": "./components/table/index.d.ts",
|
|
152
152
|
"default": "./fesm2022/sd-angular-core-components-table.mjs"
|
|
153
153
|
},
|
|
154
|
-
"./components/
|
|
155
|
-
"types": "./components/
|
|
156
|
-
"default": "./fesm2022/sd-angular-core-components-
|
|
157
|
-
},
|
|
158
|
-
"./forms/autocomplete": {
|
|
159
|
-
"types": "./forms/autocomplete/index.d.ts",
|
|
160
|
-
"default": "./fesm2022/sd-angular-core-forms-autocomplete.mjs"
|
|
154
|
+
"./components/upload-file": {
|
|
155
|
+
"types": "./components/upload-file/index.d.ts",
|
|
156
|
+
"default": "./fesm2022/sd-angular-core-components-upload-file.mjs"
|
|
161
157
|
},
|
|
162
158
|
"./components/workflow": {
|
|
163
159
|
"types": "./components/workflow/index.d.ts",
|
|
164
160
|
"default": "./fesm2022/sd-angular-core-components-workflow.mjs"
|
|
165
161
|
},
|
|
162
|
+
"./forms/autocomplete": {
|
|
163
|
+
"types": "./forms/autocomplete/index.d.ts",
|
|
164
|
+
"default": "./fesm2022/sd-angular-core-forms-autocomplete.mjs"
|
|
165
|
+
},
|
|
166
166
|
"./forms/checkbox": {
|
|
167
167
|
"types": "./forms/checkbox/index.d.ts",
|
|
168
168
|
"default": "./fesm2022/sd-angular-core-forms-checkbox.mjs"
|
|
169
169
|
},
|
|
170
|
-
"./forms/chip-calendar": {
|
|
171
|
-
"types": "./forms/chip-calendar/index.d.ts",
|
|
172
|
-
"default": "./fesm2022/sd-angular-core-forms-chip-calendar.mjs"
|
|
173
|
-
},
|
|
174
170
|
"./forms/chip": {
|
|
175
171
|
"types": "./forms/chip/index.d.ts",
|
|
176
172
|
"default": "./fesm2022/sd-angular-core-forms-chip.mjs"
|
|
177
173
|
},
|
|
174
|
+
"./forms/chip-calendar": {
|
|
175
|
+
"types": "./forms/chip-calendar/index.d.ts",
|
|
176
|
+
"default": "./fesm2022/sd-angular-core-forms-chip-calendar.mjs"
|
|
177
|
+
},
|
|
178
178
|
"./forms/date": {
|
|
179
179
|
"types": "./forms/date/index.d.ts",
|
|
180
180
|
"default": "./fesm2022/sd-angular-core-forms-date.mjs"
|
|
@@ -195,6 +195,10 @@
|
|
|
195
195
|
"types": "./forms/input/index.d.ts",
|
|
196
196
|
"default": "./fesm2022/sd-angular-core-forms-input.mjs"
|
|
197
197
|
},
|
|
198
|
+
"./forms/input-number": {
|
|
199
|
+
"types": "./forms/input-number/index.d.ts",
|
|
200
|
+
"default": "./fesm2022/sd-angular-core-forms-input-number.mjs"
|
|
201
|
+
},
|
|
198
202
|
"./forms/label": {
|
|
199
203
|
"types": "./forms/label/index.d.ts",
|
|
200
204
|
"default": "./fesm2022/sd-angular-core-forms-label.mjs"
|
|
@@ -203,10 +207,6 @@
|
|
|
203
207
|
"types": "./forms/models/index.d.ts",
|
|
204
208
|
"default": "./fesm2022/sd-angular-core-forms-models.mjs"
|
|
205
209
|
},
|
|
206
|
-
"./forms/input-number": {
|
|
207
|
-
"types": "./forms/input-number/index.d.ts",
|
|
208
|
-
"default": "./fesm2022/sd-angular-core-forms-input-number.mjs"
|
|
209
|
-
},
|
|
210
210
|
"./forms/radio": {
|
|
211
211
|
"types": "./forms/radio/index.d.ts",
|
|
212
212
|
"default": "./fesm2022/sd-angular-core-forms-radio.mjs"
|
|
@@ -215,14 +215,14 @@
|
|
|
215
215
|
"types": "./forms/select/index.d.ts",
|
|
216
216
|
"default": "./fesm2022/sd-angular-core-forms-select.mjs"
|
|
217
217
|
},
|
|
218
|
-
"./forms/textarea": {
|
|
219
|
-
"types": "./forms/textarea/index.d.ts",
|
|
220
|
-
"default": "./fesm2022/sd-angular-core-forms-textarea.mjs"
|
|
221
|
-
},
|
|
222
218
|
"./forms/switch": {
|
|
223
219
|
"types": "./forms/switch/index.d.ts",
|
|
224
220
|
"default": "./fesm2022/sd-angular-core-forms-switch.mjs"
|
|
225
221
|
},
|
|
222
|
+
"./forms/textarea": {
|
|
223
|
+
"types": "./forms/textarea/index.d.ts",
|
|
224
|
+
"default": "./fesm2022/sd-angular-core-forms-textarea.mjs"
|
|
225
|
+
},
|
|
226
226
|
"./modules/auth": {
|
|
227
227
|
"types": "./modules/auth/index.d.ts",
|
|
228
228
|
"default": "./fesm2022/sd-angular-core-modules-auth.mjs"
|
|
@@ -267,14 +267,14 @@
|
|
|
267
267
|
"types": "./services/license/index.d.ts",
|
|
268
268
|
"default": "./fesm2022/sd-angular-core-services-license.mjs"
|
|
269
269
|
},
|
|
270
|
-
"./services/notify": {
|
|
271
|
-
"types": "./services/notify/index.d.ts",
|
|
272
|
-
"default": "./fesm2022/sd-angular-core-services-notify.mjs"
|
|
273
|
-
},
|
|
274
270
|
"./services/loading": {
|
|
275
271
|
"types": "./services/loading/index.d.ts",
|
|
276
272
|
"default": "./fesm2022/sd-angular-core-services-loading.mjs"
|
|
277
273
|
},
|
|
274
|
+
"./services/notify": {
|
|
275
|
+
"types": "./services/notify/index.d.ts",
|
|
276
|
+
"default": "./fesm2022/sd-angular-core-services-notify.mjs"
|
|
277
|
+
},
|
|
278
278
|
"./services/storage": {
|
|
279
279
|
"types": "./services/storage/index.d.ts",
|
|
280
280
|
"default": "./fesm2022/sd-angular-core-services-storage.mjs"
|
|
@@ -287,9 +287,9 @@
|
|
|
287
287
|
"types": "./utilities/models/index.d.ts",
|
|
288
288
|
"default": "./fesm2022/sd-angular-core-utilities-models.mjs"
|
|
289
289
|
},
|
|
290
|
-
"./components/
|
|
291
|
-
"types": "./components/
|
|
292
|
-
"default": "./fesm2022/sd-angular-core-components-
|
|
290
|
+
"./components/view": {
|
|
291
|
+
"types": "./components/view/index.d.ts",
|
|
292
|
+
"default": "./fesm2022/sd-angular-core-components-view.mjs"
|
|
293
293
|
}
|
|
294
294
|
}
|
|
295
295
|
}
|
|
Binary file
|
|
Binary file
|