{"version":3,"file":"koobiq-components-ellipsis-center.mjs","sources":["../../../packages/components/ellipsis-center/ellipsis-center.directive.ts","../../../packages/components/ellipsis-center/koobiq-components-ellipsis-center.ts"],"sourcesContent":["import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Directive,\n    inject,\n    Input,\n    NgModule,\n    numberAttribute,\n    OnDestroy,\n    OnInit\n} from '@angular/core';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nconst MIN_VISIBLE_LENGTH = 50;\n\n@Directive({\n    selector: '[kbqEllipsisCenter]',\n    host: {\n        class: 'kbq-ellipsis-center',\n        '(window:resize)': 'resizeStream.next($event)'\n    }\n})\nexport class KbqEllipsisCenterDirective extends KbqTooltipTrigger implements OnInit, AfterViewInit, OnDestroy {\n    private cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n    @Input() set kbqEllipsisCenter(value: string) {\n        this._kbqEllipsisCenter = value;\n        this.refresh();\n        // check the view to properly calculate text-start and text-end on text initialized\n        this.cdr.detectChanges();\n    }\n\n    @Input() minVisibleLength: number = MIN_VISIBLE_LENGTH;\n\n    @Input() charWidth = 7;\n\n    /**\n     * Debounce time (ms) for resize events before recalculating ellipsis position.\n     * @default 50\n     */\n    @Input({ transform: numberAttribute }) debounceInterval: number = 50;\n\n    /** @docs-private */\n    readonly resizeStream = new Subject<Event>();\n\n    private _kbqEllipsisCenter: string;\n\n    private resizeSubscription = Subscription.EMPTY;\n\n    override ngOnInit(): void {\n        super.ngOnInit();\n        this.content = this._kbqEllipsisCenter;\n        this.refresh();\n    }\n\n    ngAfterViewInit(): void {\n        this.resizeSubscription = this.resizeStream\n            .pipe(debounceTime(this.debounceInterval))\n            .subscribe(() => this.refresh());\n    }\n\n    ngOnDestroy() {\n        super.ngOnDestroy();\n        this.resizeSubscription.unsubscribe();\n    }\n\n    /**\n     * Updates the displayed text with center ellipsis truncation based on container width.\n     * Recreates start/end span elements, measures available space, and adjusts text accordingly.\n     * @docs-private\n     */\n    refresh(): void {\n        let start = '';\n        let end = '';\n\n        this.content = this._kbqEllipsisCenter;\n\n        const [dataTextStart, dataTextEnd] = [\n            'kbq-ellipsis-center_data-text-start',\n            'kbq-ellipsis-center_data-text-end'\n        ].map((querySelector) => {\n            const element = this.elementRef.nativeElement.querySelector(`.${querySelector}`);\n\n            if (element) {\n                this.renderer.removeChild(this.elementRef.nativeElement, element);\n            }\n\n            const newElement = this.renderer.createElement('span');\n\n            this.renderer.addClass(newElement, querySelector);\n\n            return newElement;\n        });\n\n        this.renderer.appendChild(dataTextStart, this.renderer.createText(this._kbqEllipsisCenter));\n        this.renderer.appendChild(dataTextEnd, this.renderer.createText(end));\n        setTimeout(() => {\n            this.disabled = this.elementRef.nativeElement.clientWidth > dataTextStart.scrollWidth;\n\n            if (this.disabled) {\n                start = '';\n                end = this._kbqEllipsisCenter;\n            } else {\n                const averageCharWidth = this.charWidth;\n                const lastCharsLength = Math.round(this.elementRef.nativeElement.clientWidth / 2 / averageCharWidth);\n                const sliceIndex: number = Math.round(this._kbqEllipsisCenter.length - lastCharsLength);\n\n                start = this._kbqEllipsisCenter.slice(0, sliceIndex);\n                end = this._kbqEllipsisCenter.slice(sliceIndex);\n            }\n\n            dataTextStart.innerText = start;\n            dataTextEnd.innerText = end;\n\n            this.cdr.markForCheck();\n        });\n\n        this.renderer.appendChild(this.elementRef.nativeElement, dataTextStart);\n        this.renderer.appendChild(this.elementRef.nativeElement, dataTextEnd);\n    }\n}\n\n@NgModule({\n    imports: [KbqEllipsisCenterDirective],\n    exports: [KbqEllipsisCenterDirective]\n})\nexport class KbqEllipsisCenterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}