@libs-ui/components-tabs 0.2.356-25 → 0.2.356-26

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.
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-tabs.mjs","sources":["../../../../../libs-ui/components/tabs/src/item/item.component.ts","../../../../../libs-ui/components/tabs/src/item/item.component.html","../../../../../libs-ui/components/tabs/src/utils/tabs.ts","../../../../../libs-ui/components/tabs/src/tabs.component.ts","../../../../../libs-ui/components/tabs/src/tabs.component.html","../../../../../libs-ui/components/tabs/src/libs-ui-components-tabs.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, model, OnDestroy, OnInit, output, signal, untracked } from '@angular/core';\nimport { LibsUiComponentsBadgeComponent } from '@libs-ui/components-badge';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IPopoverFunctionControlEvent, LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { IEvent } from '@libs-ui/interfaces-types';\nimport { escapeHtml, uuid } from '@libs-ui/utils';\nimport { TranslateService } from '@ngx-translate/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { ITabsItem, ITabsItemEvent, ITabs, TYPE_TAB_MODE } from '../interfaces/tab.interface';\nimport { IListDataEmitKey, LibsUiComponentsListComponent } from '@libs-ui/components-list';\nimport { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-tabs-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsPopoverComponent, LibsUiComponentsBadgeComponent, LibsUiComponentsListComponent, LibsUiPipesCallFunctionInTemplatePipe],\n})\nexport class LibsUiComponentsTabsItemComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n protected labelComputed = computed(() => escapeHtml(this.translateService.instant(this.item()[this.fieldLabel()])));\n protected actionShowing = signal<boolean>(false);\n\n private mutationObserver = signal<MutationObserver | undefined>(undefined);\n private mutationObserverSubject = new Subject<void>();\n private onDestroy = new Subject<void>();\n\n private popoverFunctionControlEvent = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n\n // #region INPUT\n readonly ignoreCalculatorTab = input.required<boolean>();\n readonly step = input.required<number>();\n readonly mode = input.required<TYPE_TAB_MODE>();\n readonly tabs = input.required<ITabs>();\n readonly item = model.required<ITabsItem>();\n readonly keySelected = input.required<string>();\n readonly fieldLabel = input.required<string>();\n readonly fieldKey = input.required<string>();\n readonly cssDefault = input.required<string>();\n readonly size = input.required<'langer' | 'medium'>();\n readonly disable = input<boolean>();\n readonly disableLabel = input<boolean>();\n readonly zIndex = input<number>();\n readonly changeViewTab = input.required<Subject<void>>();\n\n // #region OUTPUT\n readonly outAction = output<ITabsItemEvent>();\n\n /* INJECT*/\n private element = inject(ElementRef);\n private translateService = inject(TranslateService);\n\n constructor() {\n effect(() => {\n if (this.mode() !== 'left' || this.ignoreCalculatorTab()) {\n return;\n }\n untracked(() => {\n setTimeout(() => {\n this.updateSpecificWidth();\n this.mutationObserver()?.disconnect();\n this.mutationObserverSubject.pipe(debounceTime(10)).subscribe(() => this.updateSpecificWidth());\n this.mutationObserver.set(new MutationObserver(() => this.mutationObserverSubject.next()));\n this.mutationObserver()?.observe(this.element.nativeElement, { attributes: true, childList: true, subtree: true });\n });\n });\n });\n }\n\n ngOnInit() {\n if (!this.item().key) {\n this.item.update((item) => ({ ...item, key: uuid() }));\n }\n }\n\n /* FUNCTIONS */\n private updateSpecificWidth() {\n const preSpecificWidth = this.item().specificWidth;\n const width = this.element.nativeElement.offsetWidth;\n if (width && preSpecificWidth !== width) {\n this.item.update((item) => ({ ...item, specificWidth: width }));\n this.changeViewTab().next();\n }\n }\n\n protected handlerImgError(event: Event) {\n event.stopPropagation();\n (event as IEvent).target.src = this.item().linkImageError;\n }\n\n protected handlerSelectedKey(event: IListDataEmitKey | undefined) {\n if (!event) {\n return;\n }\n this.outAction.emit({ item: this.item(), key: event.key as string });\n this.popoverFunctionControlEvent()?.removePopoverOverlay();\n }\n\n protected handlerPopoverFunctionControlEvent(event: IPopoverFunctionControlEvent) {\n this.popoverFunctionControlEvent.set(event);\n }\n\n protected handlerPopoverEvent(event: TYPE_POPOVER_EVENT) {\n if (event !== 'show' && event !== 'remove') {\n return;\n }\n this.actionShowing.set(event === 'show');\n }\n\n protected handlerClickButton(event: Event, type: 'configButtonLeft' | 'configButtonRight' | 'remove') {\n event.stopPropagation();\n if (type === 'remove') {\n this.outAction.emit({ key: 'remove', item: this.item() });\n return;\n }\n const action = this.item()[type]?.action;\n if (action) {\n action(this.item());\n }\n }\n\n ngOnDestroy(): void {\n this.mutationObserver()?.disconnect();\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","@if (item(); as item) {\n <div\n #itemEl\n class=\"libs-ui-tab-header-center-item {{ cssDefault() }} {{ item.classInclude || '' }} {{ item[fieldKey()] === keySelected() && tabs().classIncludeActiveItem ? tabs().classIncludeActiveItem : '' }}\"\n [attr.key]=\"item[fieldKey()]\"\n [attr.invalid]=\"item.invalid && !tabs().ignoreShowLineBottomInTab\"\n [attr.active]=\"item[fieldKey()] === keySelected() && !tabs().ignoreShowLineBottomInTab\"\n [attr.disable]=\"disable()\"\n [class.!cursor-pointer]=\"!disable()\"\n [class.!cursor-default]=\"disable()\"\n [class.libs-ui-tab-header-center-item-hover]=\"!tabs().ignoreShowLineBottomInTab\"\n [class.libs-ui-tab-header-center-item-action-show]=\"actionShowing()\">\n @if (tabs().hasImage) {\n <img\n class=\"libs-ui-tab-header-center-item-image {{ item.classImageInclude || '' }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverImage\"\n [config]=\"item.popoverImage\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [src]=\"item.linkImage\"\n [attr.key]=\"item[fieldKey()]\"\n (error)=\"handlerImgError($event)\" />\n }\n @if (item.iconLeft) {\n <i\n class=\"libs-ui-tab-header-center-item-icon libs-ui-mr-8px {{ item.iconLeft }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconLeft\"\n [config]=\"item.popoverIconLeft\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.is_pin) {\n <i\n class=\"libs-ui-tab-header-center-item-icon mr-[8px] {{ item[fieldKey()] === keySelected() ? 'libs-ui-icon-pin-solid' : 'libs-ui-icon-pin-outline' }}\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (tabs().hasStep) {\n @if (tabs().stepHasBackGround) {\n <div\n class=\"libs-ui-tab-header-center-item-step !border-none libs-ui-font-h6m\"\n [class.!text-[#ffffff]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [class.bg-[#f8f9fa]]=\"step() > (tabs().stepCompleted || 0) && (tabs().ignoreSelectedBackgroundStep || disable()) && !item.invalid\"\n [class.bg-[#00bc62]]=\"step() <= (tabs().stepCompleted || -1) && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-light-2)]]=\"((item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep) || (step() > (tabs().stepCompleted || 0) && !tabs().ignoreSelectedBackgroundStep)) && !item.invalid\"\n [class.!bg-[#fdeaec]]=\"item.invalid\">\n @if (step() <= (tabs().stepCompleted || -1)) {\n <i class=\"libs-ui-icon-check text-[#ffffff]\"></i>\n } @else {\n <span [class.text-[#cdd0d6]]=\"disable()\">{{ step() }}</span>\n }\n </div>\n } @else {\n <div\n class=\"libs-ui-tab-header-center-item-step\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n <span>{{ step() }}</span>\n </div>\n }\n }\n @if (item.configButtonLeft) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonLeft.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonLeft.classInclude || ''\"\n [classIconLeft]=\"item.configButtonLeft.classIconLeft || ''\"\n [classLabel]=\"item.configButtonLeft.classLabel || ''\"\n [classIconRight]=\"item.configButtonLeft.classIconRight || ''\"\n [label]=\"item.configButtonLeft.label || ''\"\n [popover]=\"item.configButtonLeft.popover || {}\"\n (outClick)=\"handlerClickButton($event, 'configButtonLeft')\" />\n }\n @if (item[fieldLabel()]) {\n <div\n class=\"relative flex\"\n [style.maxWidth.px]=\"tabs().maxWidthTextLabelItem || 160\">\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{ position: { mode: step() === 1 ? 'start' : 'center', distance: 0 }, zIndex: zIndex() }\"\n [attr.size]=\"size()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [ignoreStopPropagationEvent]=\"true\"\n [classInclude]=\"'w-full libs-ui-tab-header-center-item-label ' + (item.classLabel || 'libs-ui-font-h6m') + (disableLabel() && disable() ? ' libs-ui-disable' : '') + (tabs().stepHasBackGround && disable() ? ' text-[#cdd0d6]' : '')\"\n [innerHTML]=\"labelComputed()\"></span>\n @if (item.hasRedDot) {\n <div class=\"absolute right-[-6px] top-[-2px] w-[6px] h-[6px] bg-[#ee2d41] rounded-[6px]\"></div>\n }\n </div>\n }\n @if (item.popover) {\n <i\n class=\"libs-ui-tab-header-center-item-icon ml-[8px] libs-ui-icon-tooltip-outline\"\n LibsUiComponentsPopoverDirective\n [config]=\"item.popover\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"></i>\n }\n @if (item.iconRight) {\n <i\n class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.count !== undefined) {\n <libs_ui-components-badge\n [mode]=\"item.modeCount || 'x+'\"\n [count]=\"item.count\"\n [maxCount]=\"item.maxCount || 99\"\n [classCircle]=\"(item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')\"\n [active]=\"item[fieldKey()] === keySelected()\"\n [class.libs-ui-disable]=\"disable()\" />\n }\n @if (item.configButtonRight) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonRight.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonRight.classInclude || ''\"\n [classIconLeft]=\"item.configButtonRight.classIconLeft || ''\"\n [classLabel]=\"item.configButtonRight.classLabel || ''\"\n [classIconRight]=\"item.configButtonRight.classIconRight || ''\"\n [popover]=\"item.configButtonRight.popover || {}\"\n [label]=\"item.configButtonRight.label || ''\"\n (outClick)=\"handlerClickButton($event, 'configButtonRight')\" />\n }\n @if (tabs().actionRightConfig?.(); as right) {\n <libs_ui-components-popover\n [class]=\"right.classInclude || 'ml-[8px]'\"\n [class.libs-ui-tab-header-center-item-action]=\"right.onlyShowWhenHoverItemActive\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [mode]=\"'click-toggle'\"\n [ignoreStopPropagationEvent]=\"true\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [elementRefCustom]=\"right.onlyShowWhenHoverItemActive ? undefined : itemEl\"\n [config]=\"{\n zIndex: right.config?.()?.zIndex || 1000,\n maxHeight: right.config?.()?.maxHeight || 287,\n maxWidth: right.config?.()?.maxWidth || 2048,\n width: right.config?.()?.width || 220,\n direction: right.config?.()?.direction || 'bottom',\n template: right.config?.()?.template || actionEl,\n classInclude: (right.config?.()?.classInclude || '') + ' !rounded-[4px] overflow-hidden',\n whiteTheme: true,\n ignoreArrow: true,\n position: right.config?.()?.position || { mode: 'start', distance: 0 },\n }\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n @if (right.customView) {\n <div [innerHtml]=\"item[fieldKey()] | LibsUiPipesCallFunctionInTemplatePipe: right.customView : item\"></div>\n } @else {\n <i\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.invalid]=\"item.invalid\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class]=\"right.onlyShowWhenHoverItemActive ? 'libs-ui-icon-more-vertical rotate-90 libs-ui-tab-header-center-item-icon' : 'libs-ui-icon-chevron-right rotate-90 libs-ui-tab-header-center-item-icon'\"></i>\n }\n </libs_ui-components-popover>\n <ng-template #actionEl>\n @if (0 | LibsUiPipesCallFunctionInTemplatePipe: right.getListViewConfig : item : item[fieldKey()] : { valueIs0: 0 } | async; as config) {\n <libs_ui-components-list\n [config]=\"config()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n }\n </ng-template>\n }\n @if (tabs().allowRemove && tabs().items().length > 1) {\n <libs_ui-components-buttons-button\n [type]=\"tabs().configButtonRemove?.type || 'button-link-custom'\"\n [iconOnlyType]=\"tabs().configButtonRemove?.iconOnlyType || true\"\n [classInclude]=\"tabs().configButtonRemove?.classInclude || 'ml-[8px] !p-0'\"\n [classIconLeft]=\"tabs().configButtonRemove?.classIconLeft || 'libs-ui-icon-close'\"\n [classLabel]=\"tabs().configButtonRemove?.classLabel || ''\"\n [classIconRight]=\"tabs().configButtonRemove?.classIconRight || ''\"\n [popover]=\"tabs().configButtonRemove?.popover || { config: { content: 'i18n_delete' } }\"\n [label]=\"tabs().configButtonRemove?.label || ''\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#6a7383',\n text_hover: '#f15767',\n text_active: '#f15767',\n text_disable: '#cdd0d6',\n },\n rootColor: '#f15767',\n }\"\n (outClick)=\"handlerClickButton($event, 'remove')\" />\n }\n </div>\n}\n","import { signal } from '@angular/core';\nimport { IDataFunctionCallInConfig, IListConfigItem } from '@libs-ui/components-list';\nimport { IHttpRequestConfig, returnListObject } from '@libs-ui/services-http-request';\nimport { convertObjectToSignal, escapeHtml, isNil } from '@libs-ui/utils';\nimport { TranslateService } from '@ngx-translate/core';\nimport { of } from 'rxjs';\nimport { ITabs, ITabsItem } from '../interfaces/tab.interface';\n\nexport const tabMoreListConfig = (translate: TranslateService, fieldKey: string, fieldLabel: string, tabs: ITabs, disable: boolean | undefined): IListConfigItem => {\n return {\n type: 'text',\n httpRequestData: signal<IHttpRequestConfig>({\n objectInstance: returnListObject(\n tabs\n .items()\n .filter((item) => !item().specificDisplay)\n .map((item) => item())\n ),\n functionName: 'listObservable',\n argumentsValue: [],\n }),\n configTemplateText: signal({\n fieldKey: fieldKey || 'key',\n getClassItem: () => '!py-[12px]',\n classRows: 'w-full',\n notUseVirtualScroll: true,\n rows: convertObjectToSignal([\n {\n classCols: 'flex items-center',\n cols: [\n {\n getPopover: (item: ITabsItem) => {\n if (!tabs.hasStep) {\n return;\n }\n const step = (item.order || 0) + 1;\n let classStep = 'bg-[#f8f9fa] text-[#9ca2ad]';\n if (item.invalid) {\n classStep = '!text-[#f15767] !bg-[#fdeaec]';\n }\n if (item.disable || disable) {\n classStep = 'bg-[#f8f9fa] text-[#cdd0d6]';\n }\n return {\n classInclude: 'flex',\n dataView: `\n <div class=\"libs-ui-font-h6m rounded-full min-w-[24px] min-h-[24px] flex items-center justify-center mr-[8px] ${classStep}\">\n ${step <= (tabs.stepCompleted || -1) ? `<i class=\"libs-ui-icon-check text-[#ffffff]\"></i>` : `${step}`}\n </div>\n `,\n };\n },\n },\n {\n getPopover: (item: ITabsItem) => (item.iconLeft ? { classInclude: 'flex', dataView: `<i class=\"${item.iconLeft} text-[16px] mr-[8px]\"></i>` } : undefined),\n },\n {\n getClassCol: (item: ITabsItem) => `libs-ui-font-h6m ${item.invalid ? '!text-[#f15767]' : 'text-[#6a7383]'}`,\n getValue: (data: IDataFunctionCallInConfig) => of(escapeHtml(translate.instant(data.item[fieldLabel] || ' '))),\n },\n {\n getPopover: (item: ITabsItem) => (item.popover ? { config: item.popover } : undefined),\n },\n {\n getPopover: (item: ITabsItem) => (item.iconRight ? { classInclude: 'flex', dataView: `<i class=\"${item.iconRight} text-[16px] ml-[8px]\"></i>` } : undefined),\n },\n {\n getConfigBadge: (item: ITabsItem) => {\n if (isNil(item.count)) {\n return;\n }\n return {\n mode: item.modeCount || 'x+',\n count: item.count,\n maxCount: item.maxCount || 99,\n classCircle: (item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : ''),\n };\n },\n },\n ],\n },\n ]),\n }),\n };\n};\n","import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, model, OnDestroy, OnInit, output, signal, untracked, viewChild, WritableSignal } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IDrop, LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective } from '@libs-ui/components-drag-drop';\nimport { IListDataEmitKey, LibsUiComponentsListComponent } from '@libs-ui/components-list';\nimport { IPopover, IPopoverFunctionControlEvent, LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { convertObjectToSignal, isNil, uuid } from '@libs-ui/utils';\nimport { TranslateService } from '@ngx-translate/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { ITabCssConfig, ITabs, ITabsFunctionControlEvent, ITabsItem, ITabsItemEvent, TYPE_TAB_MODE } from './interfaces/tab.interface';\nimport { LibsUiComponentsTabsItemComponent } from './item/item.component';\nimport { tabMoreListConfig } from './utils/tabs';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective, LibsUiComponentsPopoverComponent, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsTabsItemComponent, LibsUiComponentsListComponent],\n})\nexport class LibsUiComponentsTabsComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n protected itemsDisplay = signal<Array<WritableSignal<ITabsItem>>>([]);\n protected displayMoreItem = signal<boolean>(false);\n protected tabMoreListConfig = computed(() => tabMoreListConfig(this.translate, this.fieldKey(), this.fieldLabel(), this.tabs(), this.disable()));\n protected changeViewTab = new Subject<void>();\n protected groupName = signal<string>(uuid());\n protected stylesDragDropOverrideComputed = computed(() => this.updateStylesDragDropOverride());\n\n private popoverFunctionControlEvent = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n private onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly tabs = input.required<ITabs>();\n readonly keySelected = model.required<string>();\n readonly mode = input<TYPE_TAB_MODE>('left');\n readonly fieldKey = input<string>('key');\n readonly fieldLabel = input<string>('label');\n readonly disable = input<boolean>();\n readonly disableLabel = input<boolean>();\n readonly heightTabItem = input<number>(40);\n readonly ignoreCalculatorTab = input<boolean>(false);\n readonly size = input<'langer' | 'medium'>('medium');\n readonly allowDragDropPosition = input<boolean>();\n readonly zIndex = input<number>();\n readonly configCss = model<ITabCssConfig>();\n readonly popoverShowMoreTabItem = input<IPopover>();\n readonly checkCanChangeTabSelected = input<() => boolean | Promise<boolean>>();\n readonly useEffectUpdateItems = input<boolean>();\n\n // #region OUTPUT\n readonly outKeySelected = output<string>();\n readonly outFunctionsControl = output<ITabsFunctionControlEvent>();\n readonly outDragTabChange = output<void>();\n readonly outDisplayMoreItem = output<boolean>();\n readonly outAction = output<ITabsItemEvent>();\n\n /* VIEW CHILD */\n private readonly headerEl = viewChild.required<ElementRef>('headerEl');\n private readonly headerLeftEl = viewChild.required<ElementRef>('headerLeftEl');\n private readonly headerRightEl = viewChild.required<ElementRef>('headerRightEl');\n\n /* INJECT*/\n private translate = inject(TranslateService);\n\n constructor() {\n effect(() => {\n const items = this.tabs()?.items();\n if (!this.useEffectUpdateItems()) return;\n untracked(() => {\n this.updateItemsDisplay(items);\n });\n });\n }\n\n ngOnInit() {\n this.updateTabsCssConfig();\n this.outFunctionsControl.emit(this.FunctionsControl);\n if (!this.useEffectUpdateItems()) {\n this.updateItemsDisplay(this.tabs()?.items());\n }\n fromEvent(window, 'resize')\n .pipe(debounceTime(250), takeUntil(this.onDestroy))\n .subscribe(() => {\n if (!this.tabs().items().length) {\n return;\n }\n this.displayMoreItem.set(false);\n this.calculatorTabsItemDisplay();\n });\n this.changeViewTab.pipe(debounceTime(20), takeUntil(this.onDestroy)).subscribe(() => this.calculatorTabsItemDisplay());\n }\n\n private updateItemsDisplay(items: Array<WritableSignal<ITabsItem>>) {\n if (!items) return;\n untracked(() => {\n if (this.mode() !== 'left' || this.ignoreCalculatorTab()) {\n items.forEach((item) => item.update((data) => ({ ...data, specificDisplay: true })));\n this.itemsDisplay.set(items);\n return;\n }\n this.calculatorTabsItemDisplay();\n });\n }\n\n /* FUNCTIONS */\n public get FunctionsControl(): ITabsFunctionControlEvent {\n return {\n addTabsItem: this.addTabsItem.bind(this),\n calculatorTabsItemsDisplay: this.calculatorTabsItemDisplay.bind(this),\n selectedTabsItem: this.handlerSelectedTabsItem.bind(this),\n };\n }\n\n private updateTabsCssConfig() {\n if (this.configCss()) {\n return;\n }\n switch (this.mode()) {\n case 'left':\n this.configCss.set({\n first: 'ml-[20px] mr-[16px]',\n other: 'ml-[20px] mr-[16px]',\n });\n break;\n case 'center':\n this.configCss.set({\n first: 'px-[12px] ml-[18px] mr-[18px]',\n other: 'px-[12px] mx-[18px]',\n header: 'flex justify-center',\n });\n break;\n case 'center-has-line':\n this.configCss.set({\n first: 'px-[16px]',\n other: 'px-[16px]',\n headerCenter: 'items-center',\n });\n break;\n case 'space-between':\n this.configCss.set({\n first: 'mx-auto',\n other: 'mx-auto',\n headerCenter: 'w-full',\n });\n break;\n }\n }\n\n private updateStylesDragDropOverride() {\n if (this.allowDragDropPosition()) {\n return [\n {\n className: 'libs-ui-drag-drop-item-placeholder',\n styles: '',\n },\n {\n className: 'libs-ui-drag-drop-item',\n styles: 'cursor: move;',\n },\n {\n className: 'libs-ui-drag-drop-item-dragging',\n styles: 'cursor: move; background: #dddddd;',\n },\n ];\n }\n return [\n {\n className: 'libs-ui-drag-drop-item',\n styles: '',\n },\n {\n className: 'libs-ui-drag-drop-item-disable',\n styles: '',\n },\n ];\n }\n\n protected handlerDropContainer(event: IDrop) {\n const { itemDragInfo } = event;\n if (!itemDragInfo) {\n return;\n }\n const items = this.tabs().items;\n const { indexDrag, indexDrop } = itemDragInfo;\n if (isNil(indexDrag) || isNil(indexDrop) || indexDrop === indexDrag) {\n return;\n }\n const itemDrag = items()[indexDrag as number];\n items.update((items) => {\n items.splice(indexDrag as number, 1);\n items.splice(indexDrop as number, 0, itemDrag);\n return [...items];\n });\n this.outDragTabChange.emit();\n }\n\n protected handlerPopoverFunctionControlEvent(event: IPopoverFunctionControlEvent) {\n this.popoverFunctionControlEvent.set(event);\n }\n\n private async handlerSelectedTabsItem(key: string, resetDisable = true) {\n const itemSelected = this.tabs()\n .items()\n .find((item) => item()[this.fieldKey()] === key);\n if (!itemSelected) {\n return;\n }\n if (resetDisable) {\n itemSelected.update((item) => ({ ...item, disable: false }));\n }\n this.handlerClickItem(itemSelected);\n }\n\n protected handlerSelectedKey(event: IListDataEmitKey | undefined) {\n if (!event) {\n return;\n }\n this.handlerClickItem(convertObjectToSignal(event.item));\n this.outDragTabChange.emit();\n }\n\n protected async handlerClickItem(item: WritableSignal<ITabsItem>) {\n if (item().disable || this.disable()) {\n return;\n }\n const checkCanChangeTabSelected = this.checkCanChangeTabSelected();\n if (checkCanChangeTabSelected) {\n const state = await checkCanChangeTabSelected();\n if (state) {\n this.changeItemSelected(item);\n }\n return;\n }\n this.changeItemSelected(item);\n }\n\n private changeItemSelected(item: WritableSignal<ITabsItem>) {\n this.keySelected.set(item()[this.fieldKey()]);\n this.outKeySelected.emit(this.keySelected());\n this.popoverFunctionControlEvent()?.removePopoverOverlay();\n this.calculatorTabsItemDisplay();\n }\n\n protected async handlerAction(event: ITabsItemEvent) {\n this.outAction.emit(event);\n }\n\n private async addTabsItem(item: WritableSignal<ITabsItem>, selected = true, addFirst?: boolean, indexAdd?: number) {\n const items = this.tabs().items;\n items.update((items) => {\n if (addFirst) {\n return [item, ...items];\n }\n if (indexAdd) {\n items.splice(indexAdd, 0, item);\n return items;\n }\n return [...items, item];\n });\n if (selected) {\n this.handlerClickItem(item);\n }\n }\n\n protected async calculatorTabsItemDisplay() {\n let items = this.tabs().items();\n const indexItemSelected = items.findIndex((item) => item()[this.fieldKey()] === this.keySelected());\n if (indexItemSelected < 0) {\n return;\n }\n this.displayMoreItem.set(false);\n let displayMoreItem = false;\n const headerWidth = this.headerEl().nativeElement.clientWidth || 0;\n const itemSelected = items[indexItemSelected];\n const itemSelectedWidth = itemSelected().specificWidth;\n let totalWidthItemsDisplay = (this.headerLeftEl().nativeElement.clientWidth || 0) + (this.headerRightEl().nativeElement.clientWidth || 0) + 32;\n items.forEach((item, index) => {\n if (!item().specificWidth) {\n return;\n }\n item.update((data) => ({ ...data, specificDisplay: false }));\n const itemWidth = item().specificWidth || 0;\n const width = totalWidthItemsDisplay + itemWidth + (index < indexItemSelected ? itemSelectedWidth : 0);\n totalWidthItemsDisplay += itemWidth;\n if (width > headerWidth) {\n displayMoreItem = true;\n return;\n }\n item.update((data) => ({ ...data, specificDisplay: true }));\n });\n itemSelected.update((data) => ({ ...data, specificDisplay: true }));\n const display = items.filter((item) => item().specificDisplay === true);\n const notDisplay = items.filter((item) => item().specificDisplay === false);\n items = display.concat(notDisplay);\n items.forEach((item, index) => item.update((data) => ({ ...data, order: index })));\n const sortedItems = [...items].sort((prev, next) => (prev().order || 0) - (next().order || 0));\n // Check if order actually changed before setting to avoid triggering redundant cycles\n const orderChanged = items.some((item, index) => item()[this.fieldKey()] !== sortedItems[index]()[this.fieldKey()]);\n\n if (orderChanged) {\n this.tabs().items.set(sortedItems);\n }\n\n this.displayMoreItem.set(displayMoreItem);\n this.outDisplayMoreItem.emit(this.displayMoreItem());\n\n const newItemsDisplay = this.tabs()\n .items()\n .filter((item) => item().specificDisplay);\n this.itemsDisplay.set(newItemsDisplay);\n }\n\n ngOnDestroy() {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","<div class=\"libs-ui-tab\">\n <div\n #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div\n #headerLeftEl\n class=\"libs-ui-tab-header-left\">\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div\n class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div\n LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? elementContainerEl.clientWidth / (itemsDisplay().length || 1) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item\n class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index + 1\"\n [class.!pointer-events-none]=\"item().disable || disable()\"\n [disable]=\"item().disable || disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem(item)\"\n (outAction)=\"handlerAction($event)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div\n class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover\n class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277,\n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 },\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [classInclude]=\"'!p-[8px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{ config: { content: popoverShowMoreTabItem()?.config?.content || 'i18n_view_more' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div\n #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n <div class=\"absolute top-0 z-0 w-full\">\n <div\n class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item\n class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index + 1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\" />\n }\n </div>\n </div>\n </div>\n</div>\n<ng-template #menuEl>\n <libs_ui-components-list\n [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["debounceTime"],"mappings":";;;;;;;;;;;;;;;MAsBa,iCAAiC,CAAA;;IAElC,aAAa,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;AACzG,IAAA,aAAa,GAAG,MAAM,CAAU,KAAK,CAAC;AAExC,IAAA,gBAAgB,GAAG,MAAM,CAA+B,SAAS,CAAC;AAClE,IAAA,uBAAuB,GAAG,IAAI,OAAO,EAAQ;AAC7C,IAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AAE/B,IAAA,2BAA2B,GAAG,MAAM,CAA2C,SAAS,CAAC;;AAGxF,IAAA,mBAAmB,GAAG,KAAK,CAAC,QAAQ,EAAW;AAC/C,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAU;AAC/B,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAiB;AACtC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAS;AAC9B,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAa;AAClC,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAU;AACtC,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAU;AACrC,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAU;AACnC,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAU;AACrC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAuB;IAC5C,OAAO,GAAG,KAAK,EAAW;IAC1B,YAAY,GAAG,KAAK,EAAW;IAC/B,MAAM,GAAG,KAAK,EAAU;AACxB,IAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAiB;;IAG/C,SAAS,GAAG,MAAM,EAAkB;;AAGrC,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5B,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEnD,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;gBACxD;YACF;YACA,SAAS,CAAC,MAAK;gBACb,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,mBAAmB,EAAE;AAC1B,oBAAA,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,EAAE;oBACrC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC/F,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC1F,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpH,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACxD;IACF;;IAGQ,mBAAmB,GAAA;QACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,aAAa;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW;AACpD,QAAA,IAAI,KAAK,IAAI,gBAAgB,KAAK,KAAK,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE;QAC7B;IACF;AAEU,IAAA,eAAe,CAAC,KAAY,EAAA;QACpC,KAAK,CAAC,eAAe,EAAE;QACtB,KAAgB,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,cAAc;IAC3D;AAEU,IAAA,kBAAkB,CAAC,KAAmC,EAAA;QAC9D,IAAI,CAAC,KAAK,EAAE;YACV;QACF;QACA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAa,EAAE,CAAC;AACpE,QAAA,IAAI,CAAC,2BAA2B,EAAE,EAAE,oBAAoB,EAAE;IAC5D;AAEU,IAAA,kCAAkC,CAAC,KAAmC,EAAA;AAC9E,QAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7C;AAEU,IAAA,mBAAmB,CAAC,KAAyB,EAAA;QACrD,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,EAAE;YAC1C;QACF;QACA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC;IAC1C;IAEU,kBAAkB,CAAC,KAAY,EAAE,IAAyD,EAAA;QAClG,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACzD;QACF;QACA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM;QACxC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,EAAE;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC3B;wGA3GW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB9C,+5VAkNA,EAAA,MAAA,EAAA,CAAA,u7EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,ED9LY,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sCAAsC,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,yBAAA,EAAA,+BAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,mCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gCAAgC,EAAA,QAAA,EAAA,+DAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,6BAAA,EAAA,cAAA,EAAA,0CAAA,EAAA,4BAAA,EAAA,kCAAA,EAAA,8BAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,8BAA8B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,4BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,6BAA6B,shCAAE,qCAAqC,EAAA,IAAA,EAAA,uCAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAExL,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAT7C,SAAS;AAEE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,cAG5B,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,WACtC,CAAC,SAAS,EAAE,sCAAsC,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,qCAAqC,CAAC,EAAA,QAAA,EAAA,+5VAAA,EAAA,MAAA,EAAA,CAAA,u7EAAA,CAAA,EAAA;;;AEZ/L,MAAM,iBAAiB,GAAG,CAAC,SAA2B,EAAE,QAAgB,EAAE,UAAkB,EAAE,IAAW,EAAE,OAA4B,KAAqB;IACjK,OAAO;AACL,QAAA,IAAI,EAAE,MAAM;QACZ,eAAe,EAAE,MAAM,CAAqB;YAC1C,cAAc,EAAE,gBAAgB,CAC9B;AACG,iBAAA,KAAK;iBACL,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,eAAe;iBACxC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CACzB;AACD,YAAA,YAAY,EAAE,gBAAgB;AAC9B,YAAA,cAAc,EAAE,EAAE;SACnB,CAAC;QACF,kBAAkB,EAAE,MAAM,CAAC;YACzB,QAAQ,EAAE,QAAQ,IAAI,KAAK;AAC3B,YAAA,YAAY,EAAE,MAAM,YAAY;AAChC,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,mBAAmB,EAAE,IAAI;YACzB,IAAI,EAAE,qBAAqB,CAAC;AAC1B,gBAAA;AACE,oBAAA,SAAS,EAAE,mBAAmB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA;AACE,4BAAA,UAAU,EAAE,CAAC,IAAe,KAAI;AAC9B,gCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;oCACjB;gCACF;gCACA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC;gCAClC,IAAI,SAAS,GAAG,6BAA6B;AAC7C,gCAAA,IAAI,IAAI,CAAC,OAAO,EAAE;oCAChB,SAAS,GAAG,+BAA+B;gCAC7C;AACA,gCAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;oCAC3B,SAAS,GAAG,6BAA6B;gCAC3C;gCACA,OAAO;AACL,oCAAA,YAAY,EAAE,MAAM;AACpB,oCAAA,QAAQ,EAAE;kIACsG,SAAS,CAAA;AACrH,oBAAA,EAAA,IAAI,KAAK,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA,iDAAA,CAAmD,GAAG,CAAA,EAAG,IAAI,CAAA,CAAE;;AAEvG,kBAAA,CAAA;iCACF;4BACH,CAAC;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,UAAU,EAAE,CAAC,IAAe,MAAM,IAAI,CAAC,QAAQ,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAA,2BAAA,CAA6B,EAAE,GAAG,SAAS,CAAC;AAC3J,yBAAA;AACD,wBAAA;AACE,4BAAA,WAAW,EAAE,CAAC,IAAe,KAAK,oBAAoB,IAAI,CAAC,OAAO,GAAG,iBAAiB,GAAG,gBAAgB,CAAA,CAAE;4BAC3G,QAAQ,EAAE,CAAC,IAA+B,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAC/G,yBAAA;AACD,wBAAA;4BACE,UAAU,EAAE,CAAC,IAAe,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC;AACvF,yBAAA;AACD,wBAAA;AACE,4BAAA,UAAU,EAAE,CAAC,IAAe,MAAM,IAAI,CAAC,SAAS,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,SAAS,CAAA,2BAAA,CAA6B,EAAE,GAAG,SAAS,CAAC;AAC7J,yBAAA;AACD,wBAAA;AACE,4BAAA,cAAc,EAAE,CAAC,IAAe,KAAI;AAClC,gCAAA,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oCACrB;gCACF;gCACA,OAAO;AACL,oCAAA,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;oCAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oCAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;oCAC7B,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,kBAAkB,KAAK,IAAI,CAAC,OAAO,GAAG,gCAAgC,GAAG,EAAE,CAAC;iCAC/G;4BACH,CAAC;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;aACF,CAAC;SACH,CAAC;KACH;AACH,CAAC;;MC9DY,6BAA6B,CAAA;;AAE9B,IAAA,YAAY,GAAG,MAAM,CAAmC,EAAE,CAAC;AAC3D,IAAA,eAAe,GAAG,MAAM,CAAU,KAAK,CAAC;AACxC,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACtI,IAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;AACnC,IAAA,SAAS,GAAG,MAAM,CAAS,IAAI,EAAE,CAAC;IAClC,8BAA8B,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;AAEtF,IAAA,2BAA2B,GAAG,MAAM,CAA2C,SAAS,CAAC;AACzF,IAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;;AAG9B,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAS;AAC9B,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAU;AACtC,IAAA,IAAI,GAAG,KAAK,CAAgB,MAAM,CAAC;AACnC,IAAA,QAAQ,GAAG,KAAK,CAAS,KAAK,CAAC;AAC/B,IAAA,UAAU,GAAG,KAAK,CAAS,OAAO,CAAC;IACnC,OAAO,GAAG,KAAK,EAAW;IAC1B,YAAY,GAAG,KAAK,EAAW;AAC/B,IAAA,aAAa,GAAG,KAAK,CAAS,EAAE,CAAC;AACjC,IAAA,mBAAmB,GAAG,KAAK,CAAU,KAAK,CAAC;AAC3C,IAAA,IAAI,GAAG,KAAK,CAAsB,QAAQ,CAAC;IAC3C,qBAAqB,GAAG,KAAK,EAAW;IACxC,MAAM,GAAG,KAAK,EAAU;IACxB,SAAS,GAAG,KAAK,EAAiB;IAClC,sBAAsB,GAAG,KAAK,EAAY;IAC1C,yBAAyB,GAAG,KAAK,EAAoC;IACrE,oBAAoB,GAAG,KAAK,EAAW;;IAGvC,cAAc,GAAG,MAAM,EAAU;IACjC,mBAAmB,GAAG,MAAM,EAA6B;IACzD,gBAAgB,GAAG,MAAM,EAAQ;IACjC,kBAAkB,GAAG,MAAM,EAAW;IACtC,SAAS,GAAG,MAAM,EAAkB;;AAG5B,IAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAa,UAAU,CAAC;AACrD,IAAA,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAa,cAAc,CAAC;AAC7D,IAAA,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAa,eAAe,CAAC;;AAGxE,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAAE;YAClC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAChC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;QAC/C;AACA,QAAA,SAAS,CAAC,MAAM,EAAE,QAAQ;AACvB,aAAA,IAAI,CAACA,cAAY,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;aACjD,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;gBAC/B;YACF;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,yBAAyB,EAAE;AAClC,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAACA,cAAY,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACxH;AAEQ,IAAA,kBAAkB,CAAC,KAAuC,EAAA;AAChE,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AACxD,gBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACpF,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B;YACF;YACA,IAAI,CAAC,yBAAyB,EAAE;AAClC,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAW,gBAAgB,GAAA;QACzB,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,0BAA0B,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;YACrE,gBAAgB,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1D;IACH;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB;QACF;AACA,QAAA,QAAQ,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACjB,oBAAA,KAAK,EAAE,qBAAqB;AAC5B,oBAAA,KAAK,EAAE,qBAAqB;AAC7B,iBAAA,CAAC;gBACF;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACjB,oBAAA,KAAK,EAAE,+BAA+B;AACtC,oBAAA,KAAK,EAAE,qBAAqB;AAC5B,oBAAA,MAAM,EAAE,qBAAqB;AAC9B,iBAAA,CAAC;gBACF;AACF,YAAA,KAAK,iBAAiB;AACpB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACjB,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,YAAY,EAAE,cAAc;AAC7B,iBAAA,CAAC;gBACF;AACF,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACjB,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,YAAY,EAAE,QAAQ;AACvB,iBAAA,CAAC;gBACF;;IAEN;IAEQ,4BAA4B,GAAA;AAClC,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;YAChC,OAAO;AACL,gBAAA;AACE,oBAAA,SAAS,EAAE,oCAAoC;AAC/C,oBAAA,MAAM,EAAE,EAAE;AACX,iBAAA;AACD,gBAAA;AACE,oBAAA,SAAS,EAAE,wBAAwB;AACnC,oBAAA,MAAM,EAAE,eAAe;AACxB,iBAAA;AACD,gBAAA;AACE,oBAAA,SAAS,EAAE,iCAAiC;AAC5C,oBAAA,MAAM,EAAE,oCAAoC;AAC7C,iBAAA;aACF;QACH;QACA,OAAO;AACL,YAAA;AACE,gBAAA,SAAS,EAAE,wBAAwB;AACnC,gBAAA,MAAM,EAAE,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,SAAS,EAAE,gCAAgC;AAC3C,gBAAA,MAAM,EAAE,EAAE;AACX,aAAA;SACF;IACH;AAEU,IAAA,oBAAoB,CAAC,KAAY,EAAA;AACzC,QAAA,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK;QAC9B,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK;AAC/B,QAAA,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,YAAY;AAC7C,QAAA,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE;YACnE;QACF;AACA,QAAA,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC,SAAmB,CAAC;AAC7C,QAAA,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AACrB,YAAA,KAAK,CAAC,MAAM,CAAC,SAAmB,EAAE,CAAC,CAAC;YACpC,KAAK,CAAC,MAAM,CAAC,SAAmB,EAAE,CAAC,EAAE,QAAQ,CAAC;AAC9C,YAAA,OAAO,CAAC,GAAG,KAAK,CAAC;AACnB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;IAC9B;AAEU,IAAA,kCAAkC,CAAC,KAAmC,EAAA;AAC9E,QAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7C;AAEQ,IAAA,MAAM,uBAAuB,CAAC,GAAW,EAAE,YAAY,GAAG,IAAI,EAAA;AACpE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI;AAC3B,aAAA,KAAK;AACL,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC;QAClD,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;QACA,IAAI,YAAY,EAAE;AAChB,YAAA,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D;AACA,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;IACrC;AAEU,IAAA,kBAAkB,CAAC,KAAmC,EAAA;QAC9D,IAAI,CAAC,KAAK,EAAE;YACV;QACF;QACA,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;IAC9B;IAEU,MAAM,gBAAgB,CAAC,IAA+B,EAAA;QAC9D,IAAI,IAAI,EAAE,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACpC;QACF;AACA,QAAA,MAAM,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,EAAE;QAClE,IAAI,yBAAyB,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,MAAM,yBAAyB,EAAE;YAC/C,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAC/B;YACA;QACF;AACA,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IAC/B;AAEQ,IAAA,kBAAkB,CAAC,IAA+B,EAAA;AACxD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,2BAA2B,EAAE,EAAE,oBAAoB,EAAE;QAC1D,IAAI,CAAC,yBAAyB,EAAE;IAClC;IAEU,MAAM,aAAa,CAAC,KAAqB,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;IAEQ,MAAM,WAAW,CAAC,IAA+B,EAAE,QAAQ,GAAG,IAAI,EAAE,QAAkB,EAAE,QAAiB,EAAA;QAC/G,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK;AAC/B,QAAA,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;YACrB,IAAI,QAAQ,EAAE;AACZ,gBAAA,OAAO,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC;YACzB;YACA,IAAI,QAAQ,EAAE;gBACZ,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC;AAC/B,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC;AACzB,QAAA,CAAC,CAAC;QACF,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7B;IACF;AAEU,IAAA,MAAM,yBAAyB,GAAA;QACvC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;QAC/B,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;AACnG,QAAA,IAAI,iBAAiB,GAAG,CAAC,EAAE;YACzB;QACF;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B,IAAI,eAAe,GAAG,KAAK;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC;AAClE,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,iBAAiB,CAAC;AAC7C,QAAA,MAAM,iBAAiB,GAAG,YAAY,EAAE,CAAC,aAAa;AACtD,QAAA,IAAI,sBAAsB,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,EAAE;QAC9I,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC5B,YAAA,IAAI,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE;gBACzB;YACF;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,aAAa,IAAI,CAAC;AAC3C,YAAA,MAAM,KAAK,GAAG,sBAAsB,GAAG,SAAS,IAAI,KAAK,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,CAAC,CAAC;YACtG,sBAAsB,IAAI,SAAS;AACnC,YAAA,IAAI,KAAK,GAAG,WAAW,EAAE;gBACvB,eAAe,GAAG,IAAI;gBACtB;YACF;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,QAAA,CAAC,CAAC;AACF,QAAA,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,eAAe,KAAK,IAAI,CAAC;AACvE,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,eAAe,KAAK,KAAK,CAAC;AAC3E,QAAA,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;AAClC,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAClF,QAAA,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;;AAE9F,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEnH,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;QACpC;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC;QACzC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAEpD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI;AAC9B,aAAA,KAAK;aACL,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,eAAe,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC;IACxC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC3B;wGAxSW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB1C,o/LAqIA,EAAA,MAAA,EAAA,CAAA,+iBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjHY,sCAAsC,EAAA,QAAA,EAAA,0CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,MAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,uCAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gCAAgC,EAAA,QAAA,EAAA,+DAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,6BAAA,EAAA,cAAA,EAAA,0CAAA,EAAA,4BAAA,EAAA,kCAAA,EAAA,8BAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sCAAsC,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,yBAAA,EAAA,+BAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,mCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iCAAiC,qSAAE,6BAA6B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,2CAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,kCAAA,EAAA,iDAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,+BAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAE1M,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBATzC,SAAS;AAEE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cAGvB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,WACtC,CAAC,sCAAsC,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,sCAAsC,EAAE,iCAAiC,EAAE,6BAA6B,CAAC,EAAA,QAAA,EAAA,o/LAAA,EAAA,MAAA,EAAA,CAAA,+iBAAA,CAAA,EAAA;;;AEpBxN;;AAEG;;;;"}
1
+ {"version":3,"file":"libs-ui-components-tabs.mjs","sources":["../../../../../libs-ui/components/tabs/src/item/item.component.ts","../../../../../libs-ui/components/tabs/src/item/item.component.html","../../../../../libs-ui/components/tabs/src/utils/tabs.ts","../../../../../libs-ui/components/tabs/src/tabs.component.ts","../../../../../libs-ui/components/tabs/src/tabs.component.html","../../../../../libs-ui/components/tabs/src/libs-ui-components-tabs.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, model, OnDestroy, OnInit, output, signal, untracked } from '@angular/core';\nimport { LibsUiComponentsBadgeComponent } from '@libs-ui/components-badge';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IPopoverFunctionControlEvent, LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { IEvent } from '@libs-ui/interfaces-types';\nimport { escapeHtml, uuid } from '@libs-ui/utils';\nimport { TranslateService } from '@ngx-translate/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { ITabsItem, ITabsItemEvent, ITabs, TYPE_TAB_MODE } from '../interfaces/tab.interface';\nimport { IListDataEmitKey, LibsUiComponentsListComponent } from '@libs-ui/components-list';\nimport { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-tabs-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsPopoverComponent, LibsUiComponentsBadgeComponent, LibsUiComponentsListComponent, LibsUiPipesCallFunctionInTemplatePipe],\n})\nexport class LibsUiComponentsTabsItemComponent implements OnInit, AfterViewInit, OnDestroy {\n // #region PROPERTY\n protected labelComputed = computed(() => escapeHtml(this.translateService.instant(this.item()[this.fieldLabel()])));\n protected actionShowing = signal<boolean>(false);\n\n private mutationObserver = signal<MutationObserver | undefined>(undefined);\n private mutationObserverSubject = new Subject<void>();\n private resizeObserverV2: ResizeObserver | undefined;\n private onDestroy = new Subject<void>();\n\n private popoverFunctionControlEvent = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n\n // #region INPUT\n readonly ignoreCalculatorTab = input.required<boolean>();\n readonly step = input.required<number>();\n readonly mode = input.required<TYPE_TAB_MODE>();\n readonly tabs = input.required<ITabs>();\n readonly item = model.required<ITabsItem>();\n readonly keySelected = input.required<string>();\n readonly fieldLabel = input.required<string>();\n readonly fieldKey = input.required<string>();\n readonly cssDefault = input.required<string>();\n readonly size = input.required<'langer' | 'medium'>();\n readonly disable = input<boolean>();\n readonly disableLabel = input<boolean>();\n readonly zIndex = input<number>();\n readonly changeViewTab = input.required<Subject<void>>();\n /** V2 mode — dùng ResizeObserver thay vì MutationObserver. Mặc định false để giữ behavior cũ. */\n readonly useCalculatorV2 = input<boolean>(false);\n\n // #region OUTPUT\n readonly outAction = output<ITabsItemEvent>();\n\n /* INJECT*/\n private element = inject(ElementRef);\n private translateService = inject(TranslateService);\n\n constructor() {\n effect(() => {\n if (this.useCalculatorV2()) {\n // V2 — ResizeObserver được setup ở ngAfterViewInit, effect không cần làm gì.\n return;\n }\n if (this.mode() !== 'left' || this.ignoreCalculatorTab()) {\n return;\n }\n untracked(() => {\n setTimeout(() => {\n this.updateSpecificWidth();\n this.mutationObserver()?.disconnect();\n this.mutationObserverSubject.pipe(debounceTime(10)).subscribe(() => this.updateSpecificWidth());\n this.mutationObserver.set(new MutationObserver(() => this.mutationObserverSubject.next()));\n this.mutationObserver()?.observe(this.element.nativeElement, { attributes: true, childList: true, subtree: true });\n });\n });\n });\n }\n\n ngOnInit() {\n if (!this.item().key) {\n this.item.update((item) => ({ ...item, key: uuid() }));\n }\n }\n\n ngAfterViewInit() {\n if (!this.useCalculatorV2() || this.ignoreCalculatorTab() || this.mode() !== 'left') {\n return;\n }\n this.setupResizeObserverV2();\n }\n\n /* FUNCTIONS */\n private setupResizeObserverV2() {\n if (this.resizeObserverV2 || typeof ResizeObserver === 'undefined') {\n return;\n }\n this.resizeObserverV2 = new ResizeObserver(() => this.updateSpecificWidth());\n this.resizeObserverV2.observe(this.element.nativeElement);\n }\n\n private updateSpecificWidth() {\n const preSpecificWidth = this.item().specificWidth;\n const width = this.element.nativeElement.offsetWidth;\n if (width && preSpecificWidth !== width) {\n this.item.update((item) => ({ ...item, specificWidth: width }));\n this.changeViewTab().next();\n }\n }\n\n protected handlerImgError(event: Event) {\n event.stopPropagation();\n (event as IEvent).target.src = this.item().linkImageError;\n }\n\n protected handlerSelectedKey(event: IListDataEmitKey | undefined) {\n if (!event) {\n return;\n }\n this.outAction.emit({ item: this.item(), key: event.key as string });\n this.popoverFunctionControlEvent()?.removePopoverOverlay();\n }\n\n protected handlerPopoverFunctionControlEvent(event: IPopoverFunctionControlEvent) {\n this.popoverFunctionControlEvent.set(event);\n }\n\n protected handlerPopoverEvent(event: TYPE_POPOVER_EVENT) {\n if (event !== 'show' && event !== 'remove') {\n return;\n }\n this.actionShowing.set(event === 'show');\n }\n\n protected handlerClickButton(event: Event, type: 'configButtonLeft' | 'configButtonRight' | 'remove') {\n event.stopPropagation();\n if (type === 'remove') {\n this.outAction.emit({ key: 'remove', item: this.item() });\n return;\n }\n const action = this.item()[type]?.action;\n if (action) {\n action(this.item());\n }\n }\n\n ngOnDestroy(): void {\n this.mutationObserver()?.disconnect();\n this.resizeObserverV2?.disconnect();\n this.resizeObserverV2 = undefined;\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","@if (item(); as item) {\n <div\n #itemEl\n class=\"libs-ui-tab-header-center-item {{ cssDefault() }} {{ item.classInclude || '' }} {{ item[fieldKey()] === keySelected() && tabs().classIncludeActiveItem ? tabs().classIncludeActiveItem : '' }}\"\n [attr.key]=\"item[fieldKey()]\"\n [attr.invalid]=\"item.invalid && !tabs().ignoreShowLineBottomInTab\"\n [attr.active]=\"item[fieldKey()] === keySelected() && !tabs().ignoreShowLineBottomInTab\"\n [attr.disable]=\"disable()\"\n [class.!cursor-pointer]=\"!disable()\"\n [class.!cursor-default]=\"disable()\"\n [class.libs-ui-tab-header-center-item-hover]=\"!tabs().ignoreShowLineBottomInTab\"\n [class.libs-ui-tab-header-center-item-action-show]=\"actionShowing()\">\n @if (tabs().hasImage) {\n <img\n class=\"libs-ui-tab-header-center-item-image {{ item.classImageInclude || '' }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverImage\"\n [config]=\"item.popoverImage\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [src]=\"item.linkImage\"\n [attr.key]=\"item[fieldKey()]\"\n (error)=\"handlerImgError($event)\" />\n }\n @if (item.iconLeft) {\n <i\n class=\"libs-ui-tab-header-center-item-icon libs-ui-mr-8px {{ item.iconLeft }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconLeft\"\n [config]=\"item.popoverIconLeft\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.is_pin) {\n <i\n class=\"libs-ui-tab-header-center-item-icon mr-[8px] {{ item[fieldKey()] === keySelected() ? 'libs-ui-icon-pin-solid' : 'libs-ui-icon-pin-outline' }}\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (tabs().hasStep) {\n @if (tabs().stepHasBackGround) {\n <div\n class=\"libs-ui-tab-header-center-item-step !border-none libs-ui-font-h6m\"\n [class.!text-[#ffffff]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [class.bg-[#f8f9fa]]=\"step() > (tabs().stepCompleted || 0) && (tabs().ignoreSelectedBackgroundStep || disable()) && !item.invalid\"\n [class.bg-[#00bc62]]=\"step() <= (tabs().stepCompleted || -1) && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-light-2)]]=\"((item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep) || (step() > (tabs().stepCompleted || 0) && !tabs().ignoreSelectedBackgroundStep)) && !item.invalid\"\n [class.!bg-[#fdeaec]]=\"item.invalid\">\n @if (step() <= (tabs().stepCompleted || -1)) {\n <i class=\"libs-ui-icon-check text-[#ffffff]\"></i>\n } @else {\n <span [class.text-[#cdd0d6]]=\"disable()\">{{ step() }}</span>\n }\n </div>\n } @else {\n <div\n class=\"libs-ui-tab-header-center-item-step\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n <span>{{ step() }}</span>\n </div>\n }\n }\n @if (item.configButtonLeft) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonLeft.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonLeft.classInclude || ''\"\n [classIconLeft]=\"item.configButtonLeft.classIconLeft || ''\"\n [classLabel]=\"item.configButtonLeft.classLabel || ''\"\n [classIconRight]=\"item.configButtonLeft.classIconRight || ''\"\n [label]=\"item.configButtonLeft.label || ''\"\n [popover]=\"item.configButtonLeft.popover || {}\"\n (outClick)=\"handlerClickButton($event, 'configButtonLeft')\" />\n }\n @if (item[fieldLabel()]) {\n <div\n class=\"relative flex\"\n [style.maxWidth.px]=\"tabs().maxWidthTextLabelItem || 160\">\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{ position: { mode: step() === 1 ? 'start' : 'center', distance: 0 }, zIndex: zIndex() }\"\n [attr.size]=\"size()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [ignoreStopPropagationEvent]=\"true\"\n [classInclude]=\"'w-full libs-ui-tab-header-center-item-label ' + (item.classLabel || 'libs-ui-font-h6m') + (disableLabel() && disable() ? ' libs-ui-disable' : '') + (tabs().stepHasBackGround && disable() ? ' text-[#cdd0d6]' : '')\"\n [innerHTML]=\"labelComputed()\"></span>\n @if (item.hasRedDot) {\n <div class=\"absolute right-[-6px] top-[-2px] w-[6px] h-[6px] bg-[#ee2d41] rounded-[6px]\"></div>\n }\n </div>\n }\n @if (item.popover) {\n <i\n class=\"libs-ui-tab-header-center-item-icon ml-[8px] libs-ui-icon-tooltip-outline\"\n LibsUiComponentsPopoverDirective\n [config]=\"item.popover\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"></i>\n }\n @if (item.iconRight && !item.iconRightBehindBadge) {\n <i\n class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.count !== undefined) {\n <libs_ui-components-badge\n [mode]=\"item.modeCount || 'x+'\"\n [count]=\"item.count\"\n [maxCount]=\"item.maxCount || 99\"\n [classCircle]=\"(item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')\"\n [active]=\"item[fieldKey()] === keySelected()\"\n [class.libs-ui-disable]=\"disable()\" />\n }\n @if (item.iconRight && item.iconRightBehindBadge) {\n <i\n class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.configButtonRight) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonRight.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonRight.classInclude || ''\"\n [classIconLeft]=\"item.configButtonRight.classIconLeft || ''\"\n [classLabel]=\"item.configButtonRight.classLabel || ''\"\n [classIconRight]=\"item.configButtonRight.classIconRight || ''\"\n [popover]=\"item.configButtonRight.popover || {}\"\n [label]=\"item.configButtonRight.label || ''\"\n (outClick)=\"handlerClickButton($event, 'configButtonRight')\" />\n }\n @if (tabs().actionRightConfig?.(); as right) {\n <libs_ui-components-popover\n [class]=\"right.classInclude || 'ml-[8px]'\"\n [class.libs-ui-tab-header-center-item-action]=\"right.onlyShowWhenHoverItemActive\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [mode]=\"'click-toggle'\"\n [ignoreStopPropagationEvent]=\"true\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [elementRefCustom]=\"right.onlyShowWhenHoverItemActive ? undefined : itemEl\"\n [config]=\"{\n zIndex: right.config?.()?.zIndex || 1000,\n maxHeight: right.config?.()?.maxHeight || 287,\n maxWidth: right.config?.()?.maxWidth || 2048,\n width: right.config?.()?.width || 220,\n direction: right.config?.()?.direction || 'bottom',\n template: right.config?.()?.template || actionEl,\n classInclude: (right.config?.()?.classInclude || '') + ' !rounded-[4px] overflow-hidden',\n whiteTheme: true,\n ignoreArrow: true,\n position: right.config?.()?.position || { mode: 'start', distance: 0 },\n }\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n @if (right.customView) {\n <div [innerHtml]=\"item[fieldKey()] | LibsUiPipesCallFunctionInTemplatePipe: right.customView : item\"></div>\n } @else {\n <i\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.invalid]=\"item.invalid\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class]=\"right.onlyShowWhenHoverItemActive ? 'libs-ui-icon-more-vertical rotate-90 libs-ui-tab-header-center-item-icon' : 'libs-ui-icon-chevron-right rotate-90 libs-ui-tab-header-center-item-icon'\"></i>\n }\n </libs_ui-components-popover>\n <ng-template #actionEl>\n @if (0 | LibsUiPipesCallFunctionInTemplatePipe: right.getListViewConfig : item : item[fieldKey()] : { valueIs0: 0 } | async; as config) {\n <libs_ui-components-list\n [config]=\"config()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n }\n </ng-template>\n }\n @if (tabs().allowRemove && tabs().items().length > 1) {\n <libs_ui-components-buttons-button\n [type]=\"tabs().configButtonRemove?.type || 'button-link-custom'\"\n [iconOnlyType]=\"tabs().configButtonRemove?.iconOnlyType || true\"\n [classInclude]=\"tabs().configButtonRemove?.classInclude || 'ml-[8px] !p-0'\"\n [classIconLeft]=\"tabs().configButtonRemove?.classIconLeft || 'libs-ui-icon-close'\"\n [classLabel]=\"tabs().configButtonRemove?.classLabel || ''\"\n [classIconRight]=\"tabs().configButtonRemove?.classIconRight || ''\"\n [popover]=\"tabs().configButtonRemove?.popover || { config: { content: 'i18n_delete' } }\"\n [label]=\"tabs().configButtonRemove?.label || ''\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#6a7383',\n text_hover: '#f15767',\n text_active: '#f15767',\n text_disable: '#cdd0d6',\n },\n rootColor: '#f15767',\n }\"\n (outClick)=\"handlerClickButton($event, 'remove')\" />\n }\n </div>\n}\n","import { signal } from '@angular/core';\nimport { IDataFunctionCallInConfig, IListConfigItem } from '@libs-ui/components-list';\nimport { IHttpRequestConfig, returnListObject } from '@libs-ui/services-http-request';\nimport { convertObjectToSignal, escapeHtml, isNil } from '@libs-ui/utils';\nimport { TranslateService } from '@ngx-translate/core';\nimport { of } from 'rxjs';\nimport { ITabs, ITabsItem } from '../interfaces/tab.interface';\n\nexport const tabMoreListConfig = (translate: TranslateService, fieldKey: string, fieldLabel: string, tabs: ITabs, disable: boolean | undefined): IListConfigItem => {\n return {\n type: 'text',\n httpRequestData: signal<IHttpRequestConfig>({\n objectInstance: returnListObject(\n tabs\n .items()\n .filter((item) => !item().specificDisplay)\n .map((item) => item())\n ),\n functionName: 'listObservable',\n argumentsValue: [],\n }),\n configTemplateText: signal({\n fieldKey: fieldKey || 'key',\n getClassItem: () => '!py-[12px]',\n classRows: 'w-full',\n notUseVirtualScroll: true,\n rows: convertObjectToSignal([\n {\n classCols: 'flex items-center',\n cols: [\n {\n getPopover: (item: ITabsItem) => {\n if (!tabs.hasStep) {\n return;\n }\n const step = (item.order || 0) + 1;\n let classStep = 'bg-[#f8f9fa] text-[#9ca2ad]';\n if (item.invalid) {\n classStep = '!text-[#f15767] !bg-[#fdeaec]';\n }\n if (item.disable || disable) {\n classStep = 'bg-[#f8f9fa] text-[#cdd0d6]';\n }\n return {\n classInclude: 'flex',\n dataView: `\n <div class=\"libs-ui-font-h6m rounded-full min-w-[24px] min-h-[24px] flex items-center justify-center mr-[8px] ${classStep}\">\n ${step <= (tabs.stepCompleted || -1) ? `<i class=\"libs-ui-icon-check text-[#ffffff]\"></i>` : `${step}`}\n </div>\n `,\n };\n },\n },\n {\n getPopover: (item: ITabsItem) => (item.iconLeft ? { classInclude: 'flex', dataView: `<i class=\"${item.iconLeft} text-[16px] mr-[8px]\"></i>` } : undefined),\n },\n {\n getClassCol: (item: ITabsItem) => `libs-ui-font-h6m ${item.invalid ? '!text-[#f15767]' : 'text-[#6a7383]'}`,\n getValue: (data: IDataFunctionCallInConfig) => of(escapeHtml(translate.instant(data.item[fieldLabel] || ' '))),\n },\n {\n getPopover: (item: ITabsItem) => (item.popover ? { config: item.popover } : undefined),\n },\n {\n getPopover: (item: ITabsItem) => (item.iconRight ? { classInclude: 'flex', dataView: `<i class=\"${item.iconRight} text-[16px] ml-[8px]\"></i>` } : undefined),\n },\n {\n getConfigBadge: (item: ITabsItem) => {\n if (isNil(item.count)) {\n return;\n }\n return {\n mode: item.modeCount || 'x+',\n count: item.count,\n maxCount: item.maxCount || 99,\n classCircle: (item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : ''),\n };\n },\n },\n ],\n },\n ]),\n }),\n };\n};\n","import { AfterViewInit, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, input, model, OnDestroy, OnInit, output, signal, untracked, viewChild, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IDrop, LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective } from '@libs-ui/components-drag-drop';\nimport { IListDataEmitKey, LibsUiComponentsListComponent } from '@libs-ui/components-list';\nimport { IPopover, IPopoverFunctionControlEvent, LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { convertObjectToSignal, isNil, uuid } from '@libs-ui/utils';\nimport { TranslateService } from '@ngx-translate/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { ITabCssConfig, ITabs, ITabsFunctionControlEvent, ITabsItem, ITabsItemEvent, TYPE_TAB_MODE } from './interfaces/tab.interface';\nimport { LibsUiComponentsTabsItemComponent } from './item/item.component';\nimport { tabMoreListConfig } from './utils/tabs';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective, LibsUiComponentsPopoverComponent, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsTabsItemComponent, LibsUiComponentsListComponent],\n})\nexport class LibsUiComponentsTabsComponent implements OnInit, AfterViewInit, OnDestroy {\n // #region PROPERTY\n protected itemsDisplay = signal<Array<WritableSignal<ITabsItem>>>([]);\n protected displayMoreItem = signal<boolean>(false);\n protected tabMoreListConfig = computed(() => tabMoreListConfig(this.translate, this.fieldKey(), this.fieldLabel(), this.tabs(), this.disable()));\n protected changeViewTab = new Subject<void>();\n protected groupName = signal<string>(uuid());\n protected stylesDragDropOverrideComputed = computed(() => this.updateStylesDragDropOverride());\n /**\n * V2 — số item đang hiển thị (specificDisplay !== false). Dùng cho mode `space-between`\n * tính width đều cho các item visible (item hidden ở `position: absolute` không chiếm chỗ).\n */\n protected displayedCount = computed(() => {\n if (!this.useCalculatorV2()) return this.itemsDisplay().length || 1;\n const count = this.itemsDisplay().filter((s) => s().specificDisplay !== false).length;\n return count || 1;\n });\n\n /** V2 — kích thước container do ResizeObserver cập nhật, dùng để compute synchronous. */\n private containerWidthV2 = signal<number>(0);\n private headerLeftWidthV2 = signal<number>(0);\n private headerRightWidthV2 = signal<number>(0);\n private resizeObserverV2: ResizeObserver | undefined;\n\n private popoverFunctionControlEvent = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n private onDestroy = new Subject<void>();\n private destroyRef = inject(DestroyRef);\n\n // #region INPUT\n readonly tabs = input.required<ITabs>();\n readonly keySelected = model.required<string>();\n readonly mode = input<TYPE_TAB_MODE>('left');\n readonly fieldKey = input<string>('key');\n readonly fieldLabel = input<string>('label');\n readonly disable = input<boolean>();\n readonly disableLabel = input<boolean>();\n readonly heightTabItem = input<number>(40);\n readonly ignoreCalculatorTab = input<boolean>(false);\n readonly size = input<'langer' | 'medium'>('medium');\n readonly allowDragDropPosition = input<boolean>();\n readonly zIndex = input<number>();\n readonly configCss = model<ITabCssConfig>();\n readonly popoverShowMoreTabItem = input<IPopover>();\n readonly checkCanChangeTabSelected = input<() => boolean | Promise<boolean>>();\n readonly useEffectUpdateItems = input<boolean>();\n /**\n * V2 mode — khi `true`:\n * - Bỏ container đo song song (không render 2 lần).\n * - Dùng ResizeObserver thay MutationObserver/setTimeout/debounce.\n * - Compute synchronous, không reorder items → không flicker.\n * Mặc định `false` để giữ 100% behavior cũ (backward compatible).\n */\n readonly useCalculatorV2 = input<boolean>(false);\n\n // #region OUTPUT\n readonly outKeySelected = output<string>();\n readonly outFunctionsControl = output<ITabsFunctionControlEvent>();\n readonly outDragTabChange = output<void>();\n readonly outDisplayMoreItem = output<boolean>();\n readonly outAction = output<ITabsItemEvent>();\n\n /* VIEW CHILD */\n private readonly headerEl = viewChild.required<ElementRef>('headerEl');\n private readonly headerLeftEl = viewChild.required<ElementRef>('headerLeftEl');\n private readonly headerRightEl = viewChild.required<ElementRef>('headerRightEl');\n\n /* INJECT*/\n private translate = inject(TranslateService);\n\n constructor() {\n effect(() => {\n const items = this.tabs()?.items();\n if (!this.useEffectUpdateItems()) return;\n untracked(() => {\n this.updateItemsDisplay(items);\n });\n });\n\n // V2 — effect tự động recompute khi container/headerLeft/headerRight đổi kích thước hoặc selected đổi.\n effect(() => {\n if (!this.useCalculatorV2()) return;\n const containerWidth = this.containerWidthV2();\n // Đọc cả các signal phụ thuộc để effect tự re-run khi chúng đổi.\n this.headerLeftWidthV2();\n this.headerRightWidthV2();\n this.keySelected();\n const items = this.tabs()?.items();\n if (!containerWidth || !items?.length) return;\n untracked(() => this.computeDisplayItemsV2(items));\n });\n }\n\n ngOnInit() {\n this.updateTabsCssConfig();\n this.outFunctionsControl.emit(this.FunctionsControl);\n if (!this.useEffectUpdateItems()) {\n this.updateItemsDisplay(this.tabs()?.items());\n }\n fromEvent(window, 'resize')\n .pipe(debounceTime(250), takeUntil(this.onDestroy))\n .subscribe(() => {\n if (!this.tabs().items().length) {\n return;\n }\n // V2 không cần xử lý resize ở đây — ResizeObserver tự fire.\n if (this.useCalculatorV2()) {\n return;\n }\n this.displayMoreItem.set(false);\n this.calculatorTabsItemDisplay();\n });\n // V1 path: preserve old behavior với debounce(20).\n this.changeViewTab.pipe(debounceTime(20), takeUntil(this.onDestroy)).subscribe(() => {\n if (this.useCalculatorV2()) return;\n this.calculatorTabsItemDisplay();\n });\n // V2 path: chạy sync (không debounce) — ResizeObserver đã batch theo frame.\n this.changeViewTab.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (!this.useCalculatorV2()) return;\n const items = this.tabs()?.items();\n if (items?.length) this.computeDisplayItemsV2(items);\n });\n }\n\n ngAfterViewInit() {\n if (this.useCalculatorV2()) {\n this.setupResizeObserverV2();\n }\n }\n\n private setupResizeObserverV2() {\n if (this.resizeObserverV2 || typeof ResizeObserver === 'undefined') {\n return;\n }\n const headerEl = this.headerEl()?.nativeElement;\n const headerLeftEl = this.headerLeftEl()?.nativeElement;\n const headerRightEl = this.headerRightEl()?.nativeElement;\n if (!headerEl) return;\n\n this.resizeObserverV2 = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const target = entry.target;\n const width = (target as HTMLElement).clientWidth || 0;\n switch (target) {\n case headerEl:\n if (this.containerWidthV2() !== width) this.containerWidthV2.set(width);\n break;\n case headerLeftEl:\n if (this.headerLeftWidthV2() !== width) this.headerLeftWidthV2.set(width);\n break;\n case headerRightEl:\n if (this.headerRightWidthV2() !== width) this.headerRightWidthV2.set(width);\n break;\n }\n }\n });\n this.resizeObserverV2.observe(headerEl);\n if (headerLeftEl) this.resizeObserverV2.observe(headerLeftEl);\n if (headerRightEl) this.resizeObserverV2.observe(headerRightEl);\n }\n\n private updateItemsDisplay(items: Array<WritableSignal<ITabsItem>>) {\n if (!items) return;\n untracked(() => {\n if (this.mode() !== 'left' || this.ignoreCalculatorTab()) {\n items.forEach((item) => item.update((data) => ({ ...data, specificDisplay: true })));\n this.itemsDisplay.set(items);\n return;\n }\n if (this.useCalculatorV2()) {\n // V2: itemsDisplay chứa toàn bộ items (không filter). ResizeObserver sẽ đo width\n // và compute sẽ set specificDisplay flag — style binding ẩn item overflow.\n items.forEach((item) => item.update((data) => ({ ...data, specificDisplay: true })));\n this.itemsDisplay.set([...items]);\n if (this.containerWidthV2()) {\n this.computeDisplayItemsV2(items);\n }\n return;\n }\n this.calculatorTabsItemDisplay();\n });\n }\n\n /* FUNCTIONS */\n public get FunctionsControl(): ITabsFunctionControlEvent {\n return {\n addTabsItem: this.addTabsItem.bind(this),\n calculatorTabsItemsDisplay: this.calculatorTabsItemDisplayDispatch.bind(this),\n selectedTabsItem: this.handlerSelectedTabsItem.bind(this),\n };\n }\n\n private updateTabsCssConfig() {\n if (this.configCss()) {\n return;\n }\n switch (this.mode()) {\n case 'left':\n this.configCss.set({\n first: 'ml-[20px] mr-[16px]',\n other: 'ml-[20px] mr-[16px]',\n });\n break;\n case 'center':\n this.configCss.set({\n first: 'px-[12px] ml-[18px] mr-[18px]',\n other: 'px-[12px] mx-[18px]',\n header: 'flex justify-center',\n });\n break;\n case 'center-has-line':\n this.configCss.set({\n first: 'px-[16px]',\n other: 'px-[16px]',\n headerCenter: 'items-center',\n });\n break;\n case 'space-between':\n this.configCss.set({\n first: 'mx-auto',\n other: 'mx-auto',\n headerCenter: 'w-full',\n });\n break;\n }\n }\n\n private updateStylesDragDropOverride() {\n if (this.allowDragDropPosition()) {\n return [\n {\n className: 'libs-ui-drag-drop-item-placeholder',\n styles: '',\n },\n {\n className: 'libs-ui-drag-drop-item',\n styles: 'cursor: move;',\n },\n {\n className: 'libs-ui-drag-drop-item-dragging',\n styles: 'cursor: move; background: #dddddd;',\n },\n ];\n }\n return [\n {\n className: 'libs-ui-drag-drop-item',\n styles: '',\n },\n {\n className: 'libs-ui-drag-drop-item-disable',\n styles: '',\n },\n ];\n }\n\n protected handlerDropContainer(event: IDrop) {\n const { itemDragInfo } = event;\n if (!itemDragInfo) {\n return;\n }\n const items = this.tabs().items;\n const { indexDrag, indexDrop } = itemDragInfo;\n if (isNil(indexDrag) || isNil(indexDrop) || indexDrop === indexDrag) {\n return;\n }\n const itemDrag = items()[indexDrag as number];\n items.update((items) => {\n items.splice(indexDrag as number, 1);\n items.splice(indexDrop as number, 0, itemDrag);\n return [...items];\n });\n this.outDragTabChange.emit();\n }\n\n protected handlerPopoverFunctionControlEvent(event: IPopoverFunctionControlEvent) {\n this.popoverFunctionControlEvent.set(event);\n }\n\n private async handlerSelectedTabsItem(key: string, resetDisable = true) {\n const itemSelected = this.tabs()\n .items()\n .find((item) => item()[this.fieldKey()] === key);\n if (!itemSelected) {\n return;\n }\n if (resetDisable) {\n itemSelected.update((item) => ({ ...item, disable: false }));\n }\n this.handlerClickItem(itemSelected);\n }\n\n protected handlerSelectedKey(event: IListDataEmitKey | undefined) {\n if (!event) {\n return;\n }\n this.handlerClickItem(convertObjectToSignal(event.item));\n this.outDragTabChange.emit();\n }\n\n protected async handlerClickItem(item: WritableSignal<ITabsItem>) {\n if (item().disable || this.disable()) {\n return;\n }\n const checkCanChangeTabSelected = this.checkCanChangeTabSelected();\n if (checkCanChangeTabSelected) {\n const state = await checkCanChangeTabSelected();\n if (state) {\n this.changeItemSelected(item);\n }\n return;\n }\n this.changeItemSelected(item);\n }\n\n private changeItemSelected(item: WritableSignal<ITabsItem>) {\n this.keySelected.set(item()[this.fieldKey()]);\n this.outKeySelected.emit(this.keySelected());\n this.popoverFunctionControlEvent()?.removePopoverOverlay();\n this.calculatorTabsItemDisplayDispatch();\n }\n\n protected async handlerAction(event: ITabsItemEvent) {\n this.outAction.emit(event);\n }\n\n private async addTabsItem(item: WritableSignal<ITabsItem>, selected = true, addFirst?: boolean, indexAdd?: number) {\n const items = this.tabs().items;\n items.update((items) => {\n if (addFirst) {\n return [item, ...items];\n }\n if (indexAdd) {\n items.splice(indexAdd, 0, item);\n return items;\n }\n return [...items, item];\n });\n if (selected) {\n this.handlerClickItem(item);\n }\n }\n\n /** Dispatch sang nhánh V1 hoặc V2 dựa theo flag. Public API giữ nguyên signature. */\n private async calculatorTabsItemDisplayDispatch() {\n if (this.useCalculatorV2()) {\n const items = this.tabs()?.items();\n if (items?.length) this.computeDisplayItemsV2(items);\n return;\n }\n await this.calculatorTabsItemDisplay();\n }\n\n protected async calculatorTabsItemDisplay() {\n let items = this.tabs().items();\n const indexItemSelected = items.findIndex((item) => item()[this.fieldKey()] === this.keySelected());\n if (indexItemSelected < 0) {\n return;\n }\n this.displayMoreItem.set(false);\n let displayMoreItem = false;\n const headerWidth = this.headerEl().nativeElement.clientWidth || 0;\n const itemSelected = items[indexItemSelected];\n const itemSelectedWidth = itemSelected().specificWidth;\n let totalWidthItemsDisplay = (this.headerLeftEl().nativeElement.clientWidth || 0) + (this.headerRightEl().nativeElement.clientWidth || 0) + 32;\n items.forEach((item, index) => {\n if (!item().specificWidth) {\n return;\n }\n item.update((data) => ({ ...data, specificDisplay: false }));\n const itemWidth = item().specificWidth || 0;\n const width = totalWidthItemsDisplay + itemWidth + (index < indexItemSelected ? itemSelectedWidth : 0);\n totalWidthItemsDisplay += itemWidth;\n if (width > headerWidth) {\n displayMoreItem = true;\n return;\n }\n item.update((data) => ({ ...data, specificDisplay: true }));\n });\n itemSelected.update((data) => ({ ...data, specificDisplay: true }));\n const display = items.filter((item) => item().specificDisplay === true);\n const notDisplay = items.filter((item) => item().specificDisplay === false);\n items = display.concat(notDisplay);\n items.forEach((item, index) => item.update((data) => ({ ...data, order: index })));\n const sortedItems = [...items].sort((prev, next) => (prev().order || 0) - (next().order || 0));\n // Check if order actually changed before setting to avoid triggering redundant cycles\n const orderChanged = items.some((item, index) => item()[this.fieldKey()] !== sortedItems[index]()[this.fieldKey()]);\n\n if (orderChanged) {\n this.tabs().items.set(sortedItems);\n }\n\n this.displayMoreItem.set(displayMoreItem);\n this.outDisplayMoreItem.emit(this.displayMoreItem());\n\n const newItemsDisplay = this.tabs()\n .items()\n .filter((item) => item().specificDisplay);\n this.itemsDisplay.set(newItemsDisplay);\n }\n\n /**\n * V2 — Tính displayItems synchronous, không reorder, không setTimeout.\n *\n * Why: tránh flicker do reorder DOM + bỏ thuật toán \"cảm tính\" debounce.\n * How to apply: gọi mỗi khi container width / headerLeft / headerRight / item widths / selected key đổi.\n */\n private computeDisplayItemsV2(items: Array<WritableSignal<ITabsItem>>) {\n if (this.mode() !== 'left' || this.ignoreCalculatorTab()) {\n items.forEach((item) => item.update((data) => ({ ...data, specificDisplay: true })));\n this.itemsDisplay.set([...items]);\n this.displayMoreItem.set(false);\n this.outDisplayMoreItem.emit(false);\n return;\n }\n\n const headerWidth = this.containerWidthV2();\n if (!headerWidth) return;\n\n const indexItemSelected = items.findIndex((item) => item()[this.fieldKey()] === this.keySelected());\n if (indexItemSelected < 0) return;\n\n const itemSelected = items[indexItemSelected];\n const itemSelectedWidth = itemSelected().specificWidth || 0;\n const reservedWidth = this.headerLeftWidthV2() + this.headerRightWidthV2() + 32;\n\n let totalWidth = reservedWidth;\n let displayMoreItem = false;\n\n items.forEach((item, index) => {\n const itemWidth = item().specificWidth || 0;\n if (!itemWidth) {\n // Chưa có width — tạm hiển thị để ResizeObserver có element mà đo.\n item.update((data) => ({ ...data, specificDisplay: true }));\n return;\n }\n // Reserve space cho selected nếu item này nằm trước selected.\n const projected = totalWidth + itemWidth + (index < indexItemSelected ? itemSelectedWidth : 0);\n totalWidth += itemWidth;\n if (projected > headerWidth) {\n item.update((data) => ({ ...data, specificDisplay: false }));\n displayMoreItem = true;\n return;\n }\n item.update((data) => ({ ...data, specificDisplay: true }));\n });\n // Selected luôn hiển thị.\n itemSelected.update((data) => ({ ...data, specificDisplay: true }));\n\n // V2: itemsDisplay chứa TẤT CẢ items — không filter. Item overflow được ẩn qua style binding\n // (visibility: hidden + position: absolute) để giữ DOM stable, tránh mount/unmount gây flicker.\n // ResizeObserver luôn đo được width vì mọi item luôn có DOM.\n const allItems = [...items];\n const currentDisplay = this.itemsDisplay();\n // Chỉ set khi nội dung array thực sự đổi (tránh CD thừa).\n const arrayChanged = allItems.length !== currentDisplay.length || allItems.some((it, i) => it !== currentDisplay[i]);\n if (arrayChanged) {\n this.itemsDisplay.set(allItems);\n }\n\n if (this.displayMoreItem() !== displayMoreItem) {\n this.displayMoreItem.set(displayMoreItem);\n this.outDisplayMoreItem.emit(displayMoreItem);\n }\n }\n\n ngOnDestroy() {\n this.resizeObserverV2?.disconnect();\n this.resizeObserverV2 = undefined;\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","<div class=\"libs-ui-tab\">\n <div\n #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div\n #headerLeftEl\n class=\"libs-ui-tab-header-left\">\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div\n class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div\n LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition() || (useCalculatorV2() && item().specificDisplay === false)\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? elementContainerEl.clientWidth / displayedCount() : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\"\n [style.visibility]=\"useCalculatorV2() && item().specificDisplay === false ? 'hidden' : null\"\n [style.position]=\"useCalculatorV2() && item().specificDisplay === false ? 'absolute' : null\"\n [style.pointer-events]=\"useCalculatorV2() && item().specificDisplay === false ? 'none' : null\"\n [attr.aria-hidden]=\"useCalculatorV2() && item().specificDisplay === false ? 'true' : null\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item\n class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index + 1\"\n [class.!pointer-events-none]=\"item().disable || disable()\"\n [disable]=\"item().disable || disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab() || !useCalculatorV2()\"\n [useCalculatorV2]=\"useCalculatorV2()\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem(item)\"\n (outAction)=\"handlerAction($event)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div\n class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover\n class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277,\n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 },\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [classInclude]=\"'!p-[8px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{ config: { content: popoverShowMoreTabItem()?.config?.content || 'i18n_view_more' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div\n #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n @if (!useCalculatorV2()) {\n <div class=\"absolute top-0 z-0 w-full\">\n <div\n class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item\n class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index + 1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\" />\n }\n </div>\n </div>\n </div>\n }\n</div>\n<ng-template #menuEl>\n <libs_ui-components-list\n [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["debounceTime"],"mappings":"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"}
@@ -49,6 +49,7 @@ export interface ITabsItem {
49
49
  label?: string;
50
50
  classLabel?: string;
51
51
  popover?: IPopoverOverlay;
52
+ iconRightBehindBadge?: boolean;
52
53
  iconRight?: string;
53
54
  popoverIconRight?: IPopoverOverlay;
54
55
  count?: number;
@@ -1,14 +1,15 @@
1
- import { OnDestroy, OnInit } from '@angular/core';
1
+ import { AfterViewInit, OnDestroy, OnInit } from '@angular/core';
2
2
  import { IPopoverFunctionControlEvent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';
3
3
  import { Subject } from 'rxjs';
4
4
  import { ITabsItem, ITabsItemEvent, ITabs, TYPE_TAB_MODE } from '../interfaces/tab.interface';
5
5
  import { IListDataEmitKey } from '@libs-ui/components-list';
6
6
  import * as i0 from "@angular/core";
7
- export declare class LibsUiComponentsTabsItemComponent implements OnInit, OnDestroy {
7
+ export declare class LibsUiComponentsTabsItemComponent implements OnInit, AfterViewInit, OnDestroy {
8
8
  protected labelComputed: import("@angular/core").Signal<string>;
9
9
  protected actionShowing: import("@angular/core").WritableSignal<boolean>;
10
10
  private mutationObserver;
11
11
  private mutationObserverSubject;
12
+ private resizeObserverV2;
12
13
  private onDestroy;
13
14
  private popoverFunctionControlEvent;
14
15
  readonly ignoreCalculatorTab: import("@angular/core").InputSignal<boolean>;
@@ -25,11 +26,15 @@ export declare class LibsUiComponentsTabsItemComponent implements OnInit, OnDest
25
26
  readonly disableLabel: import("@angular/core").InputSignal<boolean | undefined>;
26
27
  readonly zIndex: import("@angular/core").InputSignal<number | undefined>;
27
28
  readonly changeViewTab: import("@angular/core").InputSignal<Subject<void>>;
29
+ /** V2 mode — dùng ResizeObserver thay vì MutationObserver. Mặc định false để giữ behavior cũ. */
30
+ readonly useCalculatorV2: import("@angular/core").InputSignal<boolean>;
28
31
  readonly outAction: import("@angular/core").OutputEmitterRef<ITabsItemEvent>;
29
32
  private element;
30
33
  private translateService;
31
34
  constructor();
32
35
  ngOnInit(): void;
36
+ ngAfterViewInit(): void;
37
+ private setupResizeObserverV2;
33
38
  private updateSpecificWidth;
34
39
  protected handlerImgError(event: Event): void;
35
40
  protected handlerSelectedKey(event: IListDataEmitKey | undefined): void;
@@ -38,5 +43,5 @@ export declare class LibsUiComponentsTabsItemComponent implements OnInit, OnDest
38
43
  protected handlerClickButton(event: Event, type: 'configButtonLeft' | 'configButtonRight' | 'remove'): void;
39
44
  ngOnDestroy(): void;
40
45
  static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsTabsItemComponent, never>;
41
- static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsTabsItemComponent, "libs_ui-components-tabs-item", never, { "ignoreCalculatorTab": { "alias": "ignoreCalculatorTab"; "required": true; "isSignal": true; }; "step": { "alias": "step"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": true; "isSignal": true; }; "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "item": { "alias": "item"; "required": true; "isSignal": true; }; "keySelected": { "alias": "keySelected"; "required": true; "isSignal": true; }; "fieldLabel": { "alias": "fieldLabel"; "required": true; "isSignal": true; }; "fieldKey": { "alias": "fieldKey"; "required": true; "isSignal": true; }; "cssDefault": { "alias": "cssDefault"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": true; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "disableLabel": { "alias": "disableLabel"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "changeViewTab": { "alias": "changeViewTab"; "required": true; "isSignal": true; }; }, { "item": "itemChange"; "outAction": "outAction"; }, never, never, true, never>;
46
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsTabsItemComponent, "libs_ui-components-tabs-item", never, { "ignoreCalculatorTab": { "alias": "ignoreCalculatorTab"; "required": true; "isSignal": true; }; "step": { "alias": "step"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": true; "isSignal": true; }; "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "item": { "alias": "item"; "required": true; "isSignal": true; }; "keySelected": { "alias": "keySelected"; "required": true; "isSignal": true; }; "fieldLabel": { "alias": "fieldLabel"; "required": true; "isSignal": true; }; "fieldKey": { "alias": "fieldKey"; "required": true; "isSignal": true; }; "cssDefault": { "alias": "cssDefault"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": true; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "disableLabel": { "alias": "disableLabel"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "changeViewTab": { "alias": "changeViewTab"; "required": true; "isSignal": true; }; "useCalculatorV2": { "alias": "useCalculatorV2"; "required": false; "isSignal": true; }; }, { "item": "itemChange"; "outAction": "outAction"; }, never, never, true, never>;
42
47
  }
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@libs-ui/components-tabs",
3
- "version": "0.2.356-25",
3
+ "version": "0.2.356-26",
4
4
  "peerDependencies": {
5
5
  "@angular/core": ">=18.0.0",
6
- "@libs-ui/components-badge": "0.2.356-25",
7
- "@libs-ui/components-buttons-button": "0.2.356-25",
8
- "@libs-ui/components-list": "0.2.356-25",
9
- "@libs-ui/components-popover": "0.2.356-25",
6
+ "@libs-ui/components-badge": "0.2.356-26",
7
+ "@libs-ui/components-buttons-button": "0.2.356-26",
8
+ "@libs-ui/components-list": "0.2.356-26",
9
+ "@libs-ui/components-popover": "0.2.356-26",
10
10
  "rxjs": "~7.8.0",
11
- "@libs-ui/interfaces-types": "0.2.356-25",
12
- "@libs-ui/utils": "0.2.356-25",
11
+ "@libs-ui/interfaces-types": "0.2.356-26",
12
+ "@libs-ui/utils": "0.2.356-26",
13
13
  "@ngx-translate/core": "^15.0.0",
14
- "@libs-ui/pipes-call-function-in-template": "0.2.356-25",
15
- "@libs-ui/components-drag-drop": "0.2.356-25",
16
- "@libs-ui/services-http-request": "0.2.356-25",
14
+ "@libs-ui/pipes-call-function-in-template": "0.2.356-26",
15
+ "@libs-ui/components-drag-drop": "0.2.356-26",
16
+ "@libs-ui/services-http-request": "0.2.356-26",
17
17
  "@angular/common": "~18.2.0"
18
18
  },
19
19
  "sideEffects": false,
@@ -1,11 +1,11 @@
1
- import { OnDestroy, OnInit, WritableSignal } from '@angular/core';
1
+ import { AfterViewInit, OnDestroy, OnInit, WritableSignal } from '@angular/core';
2
2
  import { IDrop } from '@libs-ui/components-drag-drop';
3
3
  import { IListDataEmitKey } from '@libs-ui/components-list';
4
4
  import { IPopover, IPopoverFunctionControlEvent } from '@libs-ui/components-popover';
5
5
  import { Subject } from 'rxjs';
6
6
  import { ITabCssConfig, ITabs, ITabsFunctionControlEvent, ITabsItem, ITabsItemEvent, TYPE_TAB_MODE } from './interfaces/tab.interface';
7
7
  import * as i0 from "@angular/core";
8
- export declare class LibsUiComponentsTabsComponent implements OnInit, OnDestroy {
8
+ export declare class LibsUiComponentsTabsComponent implements OnInit, AfterViewInit, OnDestroy {
9
9
  protected itemsDisplay: WritableSignal<WritableSignal<ITabsItem>[]>;
10
10
  protected displayMoreItem: WritableSignal<boolean>;
11
11
  protected tabMoreListConfig: import("@angular/core").Signal<import("@libs-ui/components-list").IListConfigItem>;
@@ -15,8 +15,19 @@ export declare class LibsUiComponentsTabsComponent implements OnInit, OnDestroy
15
15
  className: string;
16
16
  styles: string;
17
17
  }[]>;
18
+ /**
19
+ * V2 — số item đang hiển thị (specificDisplay !== false). Dùng cho mode `space-between`
20
+ * tính width đều cho các item visible (item hidden ở `position: absolute` không chiếm chỗ).
21
+ */
22
+ protected displayedCount: import("@angular/core").Signal<number>;
23
+ /** V2 — kích thước container do ResizeObserver cập nhật, dùng để compute synchronous. */
24
+ private containerWidthV2;
25
+ private headerLeftWidthV2;
26
+ private headerRightWidthV2;
27
+ private resizeObserverV2;
18
28
  private popoverFunctionControlEvent;
19
29
  private onDestroy;
30
+ private destroyRef;
20
31
  readonly tabs: import("@angular/core").InputSignal<ITabs>;
21
32
  readonly keySelected: import("@angular/core").ModelSignal<string>;
22
33
  readonly mode: import("@angular/core").InputSignal<TYPE_TAB_MODE>;
@@ -33,6 +44,14 @@ export declare class LibsUiComponentsTabsComponent implements OnInit, OnDestroy
33
44
  readonly popoverShowMoreTabItem: import("@angular/core").InputSignal<IPopover | undefined>;
34
45
  readonly checkCanChangeTabSelected: import("@angular/core").InputSignal<(() => boolean | Promise<boolean>) | undefined>;
35
46
  readonly useEffectUpdateItems: import("@angular/core").InputSignal<boolean | undefined>;
47
+ /**
48
+ * V2 mode — khi `true`:
49
+ * - Bỏ container đo song song (không render 2 lần).
50
+ * - Dùng ResizeObserver thay MutationObserver/setTimeout/debounce.
51
+ * - Compute synchronous, không reorder items → không flicker.
52
+ * Mặc định `false` để giữ 100% behavior cũ (backward compatible).
53
+ */
54
+ readonly useCalculatorV2: import("@angular/core").InputSignal<boolean>;
36
55
  readonly outKeySelected: import("@angular/core").OutputEmitterRef<string>;
37
56
  readonly outFunctionsControl: import("@angular/core").OutputEmitterRef<ITabsFunctionControlEvent>;
38
57
  readonly outDragTabChange: import("@angular/core").OutputEmitterRef<void>;
@@ -44,6 +63,8 @@ export declare class LibsUiComponentsTabsComponent implements OnInit, OnDestroy
44
63
  private translate;
45
64
  constructor();
46
65
  ngOnInit(): void;
66
+ ngAfterViewInit(): void;
67
+ private setupResizeObserverV2;
47
68
  private updateItemsDisplay;
48
69
  get FunctionsControl(): ITabsFunctionControlEvent;
49
70
  private updateTabsCssConfig;
@@ -56,8 +77,17 @@ export declare class LibsUiComponentsTabsComponent implements OnInit, OnDestroy
56
77
  private changeItemSelected;
57
78
  protected handlerAction(event: ITabsItemEvent): Promise<void>;
58
79
  private addTabsItem;
80
+ /** Dispatch sang nhánh V1 hoặc V2 dựa theo flag. Public API giữ nguyên signature. */
81
+ private calculatorTabsItemDisplayDispatch;
59
82
  protected calculatorTabsItemDisplay(): Promise<void>;
83
+ /**
84
+ * V2 — Tính displayItems synchronous, không reorder, không setTimeout.
85
+ *
86
+ * Why: tránh flicker do reorder DOM + bỏ thuật toán "cảm tính" debounce.
87
+ * How to apply: gọi mỗi khi container width / headerLeft / headerRight / item widths / selected key đổi.
88
+ */
89
+ private computeDisplayItemsV2;
60
90
  ngOnDestroy(): void;
61
91
  static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsTabsComponent, never>;
62
- static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsTabsComponent, "libs_ui-components-tabs", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "keySelected": { "alias": "keySelected"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "fieldKey": { "alias": "fieldKey"; "required": false; "isSignal": true; }; "fieldLabel": { "alias": "fieldLabel"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "disableLabel": { "alias": "disableLabel"; "required": false; "isSignal": true; }; "heightTabItem": { "alias": "heightTabItem"; "required": false; "isSignal": true; }; "ignoreCalculatorTab": { "alias": "ignoreCalculatorTab"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "allowDragDropPosition": { "alias": "allowDragDropPosition"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "configCss": { "alias": "configCss"; "required": false; "isSignal": true; }; "popoverShowMoreTabItem": { "alias": "popoverShowMoreTabItem"; "required": false; "isSignal": true; }; "checkCanChangeTabSelected": { "alias": "checkCanChangeTabSelected"; "required": false; "isSignal": true; }; "useEffectUpdateItems": { "alias": "useEffectUpdateItems"; "required": false; "isSignal": true; }; }, { "keySelected": "keySelectedChange"; "configCss": "configCssChange"; "outKeySelected": "outKeySelected"; "outFunctionsControl": "outFunctionsControl"; "outDragTabChange": "outDragTabChange"; "outDisplayMoreItem": "outDisplayMoreItem"; "outAction": "outAction"; }, never, ["div.libs-ui-tab-header-left", "div.libs-ui-tab-header-right"], true, never>;
92
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsTabsComponent, "libs_ui-components-tabs", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "keySelected": { "alias": "keySelected"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "fieldKey": { "alias": "fieldKey"; "required": false; "isSignal": true; }; "fieldLabel": { "alias": "fieldLabel"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "disableLabel": { "alias": "disableLabel"; "required": false; "isSignal": true; }; "heightTabItem": { "alias": "heightTabItem"; "required": false; "isSignal": true; }; "ignoreCalculatorTab": { "alias": "ignoreCalculatorTab"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "allowDragDropPosition": { "alias": "allowDragDropPosition"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "configCss": { "alias": "configCss"; "required": false; "isSignal": true; }; "popoverShowMoreTabItem": { "alias": "popoverShowMoreTabItem"; "required": false; "isSignal": true; }; "checkCanChangeTabSelected": { "alias": "checkCanChangeTabSelected"; "required": false; "isSignal": true; }; "useEffectUpdateItems": { "alias": "useEffectUpdateItems"; "required": false; "isSignal": true; }; "useCalculatorV2": { "alias": "useCalculatorV2"; "required": false; "isSignal": true; }; }, { "keySelected": "keySelectedChange"; "configCss": "configCssChange"; "outKeySelected": "outKeySelected"; "outFunctionsControl": "outFunctionsControl"; "outDragTabChange": "outDragTabChange"; "outDisplayMoreItem": "outDisplayMoreItem"; "outAction": "outAction"; }, never, ["div.libs-ui-tab-header-left", "div.libs-ui-tab-header-right"], true, never>;
63
93
  }