ngx-kit 8.3.4 → 8.3.6

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":"ngx-kit-core.mjs","sources":["../../../projects/libs/core/utils/get-offset-position.ts","../../../projects/libs/core/utils/drag-session.ts","../../../projects/libs/core/range-slider/range-slider.component.ts","../../../projects/libs/core/range-slider/range-slider.component.html","../../../projects/libs/core/saturation/saturation.component.ts","../../../projects/libs/core/saturation/saturation.component.html","../../../projects/libs/core/slider/slider.component.ts","../../../projects/libs/core/slider/slider.component.html","../../../projects/libs/core/utils/window.ts","../../../projects/libs/core/utils/string.ts","../../../projects/libs/core/utils/confetti.ts","../../../projects/libs/core/utils/sequential-guid.ts","../../../projects/libs/core/utils/merge-deep.ts","../../../projects/libs/core/utils/filter-tree-list.ts","../../../projects/libs/core/utils/color.utils.ts","../../../projects/libs/core/services/browser.service.ts","../../../projects/libs/core/services/direction.service.ts","../../../projects/libs/core/overlay/overlay-ref.ts","../../../projects/libs/core/overlay/overlay.service.ts","../../../projects/libs/core/ngx-kit-core.ts"],"sourcesContent":["export function getOffsetPosition(evt: MouseEvent | TouchEvent, parent: HTMLElement) {\n let position = {\n x: 0,\n y: 0,\n };\n\n if (evt instanceof MouseEvent) {\n position.x = evt.pageX;\n position.y = evt.pageY;\n } else if (evt.touches && evt.touches.length > 0) {\n position.x = evt.touches[0].pageX;\n position.y = evt.touches[0].pageY;\n }\n\n // Adjust for the parent's offset\n let parentRect = parent.getBoundingClientRect();\n position.x -= parentRect.left + window.scrollX;\n position.y -= parentRect.top + window.scrollY;\n\n return position;\n}\n","/**\n * تمام کامپوننت‌های قابل‌درگ کتابخانه (saturation، slider، range-slider،\n * box-shadow) قبلاً یک الگوی تکراری داشتن:\n *\n * @HostListener('document:mousemove', ['$event'])\n * @HostListener('document:touchmove', ['$event'])\n * onDrag(ev) { if (!this.isDragging) return; ... }\n *\n * مشکل: این listenerها برای کل عمر کامپوننت روی `document` باقی می‌مونن —\n * حتی وقتی اصلاً دراگی در حال انجام نیست. یعنی روی صفحه‌ای با چند تا\n * color-picker/slider، هر حرکت موس/انگشت روی کل صفحه (نه فقط روی خودِ\n * اسلایدر) باعث اجرای N تابع (به تعداد اینستنس‌ها) می‌شه که هرکدوم هم چرخه‌ی\n * زون انگیولار رو تریگر می‌کنن — یک مشکل واقعی پرفورمنس، مخصوصاً در صفحاتی\n * با چند نمونه هم‌زمان یا حرکت زیاد موس.\n *\n * این تابع جایگزین اون الگو می‌شه: listenerها فقط در طول یک دراگِ واقعی\n * (بین mousedown/touchstart تا mouseup/touchend) روی document اضافه می‌شن و\n * بلافاصله بعدش پاک می‌شن.\n *\n * یه فایده‌ی جانبیِ مهم دیگه هم داره: روی touchmove مقدار `{ passive: false }`\n * ست می‌شه و preventDefault صدا زده می‌شه، پس در حین درگ کردنِ thumb روی\n * موبایل، صفحه اسکرول نمی‌خوره (باگی که با @HostListener قبلی وجود داشت،\n * چون هیچ‌جا preventDefault روی touchmove صدا زده نمی‌شد).\n */\nexport interface DragSessionCallbacks {\n onMove: (ev: MouseEvent | TouchEvent) => void;\n onEnd?: (ev: MouseEvent | TouchEvent) => void;\n}\n\n/** با فراخوانی این تابع (مثلاً داخل dragStart) یک نشست‌ درگ شروع می‌شه. */\nexport function startDragSession({ onMove, onEnd }: DragSessionCallbacks): () => void {\n const handleMove = (ev: MouseEvent | TouchEvent) => {\n if (ev.type === 'touchmove') {\n // جلوگیری از اسکرول شدن صفحه هم‌زمان با درگ کردن روی موبایل/تاچ\n ev.preventDefault();\n }\n onMove(ev);\n };\n\n const handleEnd = (ev: MouseEvent | TouchEvent) => {\n stop();\n onEnd?.(ev);\n };\n\n const stop = (): void => {\n document.removeEventListener('mousemove', handleMove);\n document.removeEventListener('touchmove', handleMove);\n document.removeEventListener('mouseup', handleEnd);\n document.removeEventListener('touchend', handleEnd);\n document.removeEventListener('touchcancel', handleEnd);\n };\n\n document.addEventListener('mousemove', handleMove);\n document.addEventListener('touchmove', handleMove, { passive: false });\n document.addEventListener('mouseup', handleEnd);\n document.addEventListener('touchend', handleEnd);\n document.addEventListener('touchcancel', handleEnd);\n\n // تابع stop برگردونده می‌شه تا هم بشه دستی صداش زد (مثلاً در ngOnDestroy،\n // اگه کامپوننت درست وسط یه درگ نابود بشه) و هم به‌صورت خودکار روی\n // mouseup/touchend صدا زده می‌شه.\n return stop;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n forwardRef,\n OnInit,\n} from '@angular/core';\nimport { getOffsetPosition } from '../utils/get-offset-position';\nimport { startDragSession } from '../utils/drag-session';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nexport interface IValue {\n id?: string;\n value: number;\n}\nexport class ValueModel {\n id!: string;\n value!: number;\n x?: number;\n thumb?: HTMLElement;\n color?: string;\n}\n\n@Component({\n selector: 'range-slider',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n templateUrl: './range-slider.component.html',\n styleUrls: ['./range-slider.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeSliderComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RangeSliderComponent),\n multi: true,\n },\n ],\n})\nexport class RangeSliderComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {\n /**\n * The step value for the slider\n */\n @Input() step = 1;\n /**\n * The minimum value for the slider\n */\n @Input() min = 0;\n /**\n * The maximum value for the slider\n */\n @Input() max = 100;\n /**\n * The background color of the slider\n * - can use css like `background: linear-gradient(to right, red, blue);`\n * - or a solid color like `background: red;`\n */\n @Input() background?: string;\n /**\n * If true, the background will be transparent\n */\n @Input() isBgTransparent = false;\n /**\n * If true, clicking on the slider will add a new range at that position\n */\n @Input() addNewRangeOnClick = false;\n\n /**\n * The current value of the slider\n */\n @Output() change = new EventEmitter<IValue[]>();\n @Input() selectedIndex?: number;\n @Output() selectedIndexChange = new EventEmitter<number>();\n\n private isDragging = false;\n\n @ViewChild('slider', { static: true }) slider!: ElementRef<HTMLDivElement>;\n @ViewChild('thumb', { static: false }) thumb?: ElementRef<HTMLDivElement>;\n\n values: ValueModel[] = [];\n isDisabled = false;\n protected _onChange = (value: IValue[]) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n private sliderRect?: DOMRect;\n private thumbRect?: DOMRect;\n private stopDrag?: () => void;\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {}\n ngOnInit(): void {}\n ngOnDestroy(): void {\n this.stopDrag?.();\n }\n\n private generateId(): string {\n let id = 'ngx-thumb-' + Math.random().toString(36).substring(2, 9);\n if (this.values.findIndex((x) => x.id == id) >= 0) {\n return this.generateId();\n }\n return id;\n }\n\n writeValue(items?: IValue[]): void {\n this.values = [];\n if (!items || !Array.isArray(items)) {\n items = [];\n }\n if (items.length === 0) {\n items.push({ id: this.generateId(), value: this.min });\n }\n for (let val of items) {\n if (typeof val.value !== 'number' || isNaN(val.value)) {\n throw new Error('RangeSliderComponent: value must be an array of numbers');\n }\n let newVal = +val.value;\n if (newVal < +this.min) newVal = +this.min;\n else if (newVal > +this.max) newVal = +this.max;\n this.values.push({\n ...val,\n id: val.id ?? this.generateId(),\n value: newVal,\n });\n }\n this.updateAllThumbPositions();\n }\n validate(control: AbstractControl): ValidationErrors | null {\n return null; // TODO: return errors if any;\n }\n registerOnValidatorChange?(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n setDisabledState?(disabled: boolean): void {\n this.isDisabled = disabled;\n }\n private updateRects() {\n this.sliderRect = this.slider.nativeElement.getBoundingClientRect();\n if (this.thumb) {\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\n }\n }\n @HostListener('window:resize')\n onResize() {\n this.writeValue(this.values);\n }\n dragStart(ev: MouseEvent | TouchEvent, index: number) {\n ev.stopPropagation();\n ev.preventDefault();\n this.isDragging = true;\n this.selectedIndex = index;\n this.updateRects();\n this.updateThumbPosition(ev);\n this.selectedIndexChange.emit(this.selectedIndex);\n\n this.stopDrag?.();\n this.stopDrag = startDragSession({\n onMove: (moveEv) => this.updateThumbPosition(moveEv),\n onEnd: () => {\n this.isDragging = false;\n this.stopDrag = undefined;\n this.changeDetectorRef.markForCheck();\n },\n });\n }\n\n addnewRangeOnSliderClick(event: MouseEvent | TouchEvent) {\n if (!this.addNewRangeOnClick) return;\n const position = getOffsetPosition(event, this.slider.nativeElement);\n const newValue = this.min + (position.x / this.sliderRect!.width) * (this.max - this.min);\n // must be add with order by position\n const indexByOrderValue = this.values.findIndex((item) => item.value > newValue);\n const insertIndex = indexByOrderValue >= 0 ? indexByOrderValue : this.values.length;\n this.values.splice(insertIndex, 0, {\n id: this.generateId(),\n value: newValue,\n });\n this.dragStart(event, insertIndex);\n // this.updateAllThumbPositions();\n // this.valueChanged();\n }\n\n private updateThumbPosition(ev: MouseEvent | TouchEvent) {\n if (!this.isDragging || this.selectedIndex == undefined) return;\n if (!this.sliderRect || !this.thumbRect) this.updateRects();\n let position = getOffsetPosition(ev, this.slider.nativeElement);\n let thumbRec = this.thumbRect!;\n position.x -= thumbRec.width / 2;\n let sliderRec = this.sliderRect!;\n const thumb = this.values[this.selectedIndex];\n if (position.x < 0) {\n thumb.x = 0;\n } else if (position.x > sliderRec.width - thumbRec.width) {\n thumb.x = sliderRec.width - thumbRec.width;\n } else {\n thumb.x = position.x;\n }\n this.setValueByPosition(thumb, thumbRec, sliderRec);\n this.changeDetectorRef.markForCheck();\n }\n\n updateAllThumbPositions() {\n // wait to add thumbs\n setTimeout(() => {\n this.updateRects();\n const sliderRec = this.sliderRect!;\n const thumbRec = this.thumbRect!;\n for (let item of this.values) {\n item.x =\n ((item.value - this.min) * (sliderRec.width - thumbRec.width)) / (this.max - this.min);\n }\n this.changeDetectorRef.detectChanges();\n });\n }\n setValueByPosition(thumb: ValueModel, thumbRec: DOMRect, sliderRec: DOMRect) {\n const percentage = (thumb.x ?? 0) / (sliderRec.width - thumbRec.width);\n let newValue = this.min + percentage * (this.max - this.min);\n const stepDecimalPlaces = (this.step.toString().split('.')[1] || '').length;\n newValue = parseFloat(\n (Math.round(newValue / this.step) * this.step).toFixed(stepDecimalPlaces),\n );\n let value = Math.min(Math.max(newValue, this.min), this.max);\n if (thumb.value !== value) {\n thumb.value = value;\n this.valueChanged();\n }\n }\n\n valueChanged() {\n const v = this.values; // this.values.map(({ x, thumb, ...rest }) => ({ ...rest }));\n this._onChange(v);\n this.change.emit(v);\n }\n}\n","<div class=\"slider-container\">\n <ng-content></ng-content>\n <div\n #slider\n class=\"slider\"\n [class.add-range-cursor]=\"addNewRangeOnClick\"\n [ngStyle]=\"{ '--ngx-slider-bg': background }\"\n [class.bg-transparent]=\"isBgTransparent\"\n (mousedown)=\"addnewRangeOnSliderClick($event)\"\n (touchstart)=\"addnewRangeOnSliderClick($event)\">\n @for (item of values; track $index; let i = $index) {\n <div\n class=\"thumb\"\n [class.is-active]=\"selectedIndex == i\"\n #thumb\n [style.left.px]=\"item.x\"\n [style.background]=\"item.color\"\n [title]=\"item.value\"\n (mousedown)=\"dragStart($event, i)\"\n (touchstart)=\"dragStart($event, i)\"></div>\n }\n </div>\n</div>\n\n<!-- {{ selectedIndex }}\n<pre dir=\"ltr\" style=\"text-align: left\">{{ values | json }}</pre> -->\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n FormControl,\n AbstractControl,\n ValidationErrors,\n} from '@angular/forms';\nimport { IPosition } from '../contracts/IPosition';\nimport { startDragSession } from '../utils/drag-session';\nimport { getOffsetPosition } from '../utils/get-offset-position';\n\n@Component({\n selector: 'saturation',\n standalone: true,\n imports: [],\n templateUrl: './saturation.component.html',\n styleUrl: './saturation.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SaturationComponent),\n multi: true,\n },\n ],\n})\nexport class SaturationComponent implements ControlValueAccessor, OnDestroy {\n @Input() width?: number;\n @Input() height?: number;\n @Input() color = 'red';\n @Input() step = 1;\n @Input() min: IPosition = { x: 0, y: 0 };\n @Input() max = { x: 100, y: 100 };\n @Output() change = new EventEmitter<IPosition>();\n\n isDragging = false;\n @ViewChild('saturation', { static: true }) saturation!: ElementRef<HTMLDivElement>;\n @ViewChild('thumb', { static: true }) thumb!: ElementRef<HTMLDivElement>;\n x = 0;\n y = 0;\n myControl = new FormControl<IPosition | null>(null);\n isDisabled = false;\n protected _onChange = (value: any) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n\n private saturationRect?: DOMRect;\n private thumbRect?: DOMRect;\n private stopDrag?: () => void;\n\n constructor() {}\n\n ngOnDestroy(): void {\n // اگه کامپوننت درست وسط یه درگ نابود بشه (مثلاً پیکر بسته بشه)، باید\n // listenerهای document رو دستی پاک کنیم؛ برخلاف @HostListener که\n // انگیولار خودش موقع destroy پاکش می‌کرد، این‌جا چون addEventListener\n // دستیه، خودمون مسئول پاک‌سازی‌شیم.\n this.stopDrag?.();\n }\n\n private updateRects() {\n this.saturationRect = this.saturation.nativeElement.getBoundingClientRect();\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\n }\n\n writeValue(val?: IPosition | null): void {\n if (!val) val = { x: 0, y: 0 };\n let value: IPosition = val;\n this.myControl.setValue(value, { emitEvent: false });\n this.updateRects();\n const saturationRec = this.saturationRect!;\n const thumbRec = this.thumbRect!;\n this.x =\n ((value.x - this.min.x) * (saturationRec.width - thumbRec.width / 2)) /\n (this.max.x - this.min.x);\n this.y =\n ((value.y - this.min.y) * (saturationRec.height - thumbRec.height / 2)) /\n (this.max.y - this.min.y);\n if (val !== value) {\n this.valueChanged(value);\n }\n }\n validate(control: AbstractControl): ValidationErrors | null {\n return this.myControl.errors;\n }\n registerOnValidatorChange?(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n setDisabledState?(disabled: boolean): void {\n this.isDisabled = disabled;\n if (disabled) this.myControl.disable();\n else this.myControl.enable();\n }\n\n dragStart(ev: MouseEvent | TouchEvent) {\n ev.stopPropagation();\n ev.preventDefault();\n this.isDragging = true;\n this.updateRects();\n this.updatePosition(ev);\n this.stopDrag?.();\n this.stopDrag = startDragSession({\n onMove: (moveEv) => this.updatePosition(moveEv),\n onEnd: () => {\n this.isDragging = false;\n this.stopDrag = undefined;\n },\n });\n }\n\n @HostListener('window:resize')\n onResize() {\n this.writeValue(this.myControl.value);\n }\n\n private updatePosition(ev: MouseEvent | TouchEvent) {\n if (!this.isDragging) return;\n if (!this.saturationRect || !this.thumbRect) this.updateRects();\n let position = getOffsetPosition(ev, this.saturation.nativeElement);\n let thumbRec = this.thumbRect!;\n let saturationRec = this.saturationRect!;\n if (position.x < 0) {\n this.x = 0;\n } else if (position.x > saturationRec.width - (thumbRec.width / 2 - 3)) {\n this.x = saturationRec.width - (thumbRec.width / 2 - 3);\n } else {\n this.x = position.x;\n }\n // this.x = this.x - thumbRec.width / 2;\n\n if (position.y < 0) {\n this.y = 0;\n } else if (position.y > saturationRec.height - (thumbRec.height / 2 - 3)) {\n this.y = saturationRec.height - (thumbRec.height / 2 - 3);\n } else {\n this.y = position.y;\n }\n // this.y = this.y - thumbRec.height / 2;\n this.setValueByPosition(thumbRec, saturationRec);\n }\n\n setValueByPosition(thumbRec: DOMRect, saturationRec: DOMRect) {\n const percentageX = this.x / (saturationRec.width - thumbRec.width);\n let newValueX = this.min.x + percentageX * (this.max.x - this.min.x);\n newValueX = Math.round(newValueX / this.step) * this.step;\n let valueX = Math.min(Math.max(newValueX, this.min.x), this.max.x);\n //-----------------------------\n const percentageY = this.y / (saturationRec.height - thumbRec.height);\n let newValueY = this.min.y + percentageY * (this.max.y - this.min.y);\n newValueY = Math.round(newValueY / this.step) * this.step;\n let valueY = Math.min(Math.max(newValueY, this.min.y), this.max.y);\n const newValue = { x: valueX, y: valueY };\n if (\n !this.myControl.value ||\n this.myControl.value.x !== valueX ||\n this.myControl.value.y !== valueY\n ) {\n this.valueChanged(newValue);\n }\n }\n\n valueChanged(value: IPosition) {\n this.myControl.setValue(value, { emitEvent: false });\n this._onChange(value);\n this.change.emit(value);\n }\n}\n","<div\n class=\"saturation-container\"\n [style.width.px]=\"width\"\n [style.height.px]=\"height\"\n (mousedown)=\"dragStart($event)\"\n (touchstart)=\"dragStart($event)\">\n <div class=\"saturation\" #saturation>\n <div class=\"s-bg\" [style.background]=\"color\"></div>\n <div class=\"s-white\"></div>\n <div class=\"s-black\"></div>\n </div>\n <div class=\"thumb\" #thumb [style.left.px]=\"x\" [style.top.px]=\"y\"></div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n forwardRef,\n inject,\n OnInit,\n} from '@angular/core';\nimport { getOffsetPosition } from '../utils/get-offset-position';\nimport { startDragSession } from '../utils/drag-session';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n Validators,\n} from '@angular/forms';\n\n@Component({\n selector: 'slider',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './slider.component.html',\n styleUrls: ['./slider.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SliderComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SliderComponent),\n multi: true,\n },\n ],\n})\nexport class SliderComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {\n @Input() step = 1;\n @Input() min = 0;\n @Input() max = 100;\n @Input() background?: string;\n @Input() isBgTransparent = false;\n @Output() change = new EventEmitter<number>();\n isDragging = false;\n @ViewChild('slider', { static: true }) slider!: ElementRef<HTMLDivElement>;\n @ViewChild('thumb', { static: true }) thumb!: ElementRef<HTMLDivElement>;\n x = 0;\n myControl = new FormControl<number | null>(null);\n isDisabled = false;\n protected _onChange = (value: any) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n private sliderRect?: DOMRect;\n private thumbRect?: DOMRect;\n private stopDrag?: () => void;\n private readonly cd = inject(ChangeDetectorRef);\n constructor() {}\n ngOnInit(): void {\n this.myControl.setValidators([Validators.min(this.min), Validators.max(this.max)]);\n }\n\n ngOnDestroy(): void {\n this.stopDrag?.();\n }\n\n private updateRects() {\n this.sliderRect = this.slider.nativeElement.getBoundingClientRect();\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\n }\n\n writeValue(val?: number | string | null): void {\n let value = 0;\n if (!val) value = 0;\n else if (+val < +this.min) value = +this.min;\n else if (+val > +this.max) value = +this.max;\n else value = +val;\n this.myControl.setValue(value, { emitEvent: false });\n this.updateRects();\n const sliderRec = this.sliderRect!;\n const thumbRec = this.thumbRect!;\n this.x = ((value - this.min) * (sliderRec.width - thumbRec.width)) / (this.max - this.min);\n if (val !== value) {\n this.valueChanged(value);\n }\n }\n validate(control: AbstractControl): ValidationErrors | null {\n return this.myControl.errors;\n }\n registerOnValidatorChange?(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n setDisabledState?(disabled: boolean): void {\n this.isDisabled = disabled;\n if (disabled) this.myControl.disable();\n else this.myControl.enable();\n }\n\n dragStart(ev: MouseEvent | TouchEvent) {\n ev.stopPropagation();\n ev.preventDefault();\n this.isDragging = true;\n this.updateRects();\n this.updatePosition(ev);\n this.stopDrag?.();\n this.stopDrag = startDragSession({\n onMove: (moveEv) => this.updatePosition(moveEv),\n onEnd: () => {\n this.isDragging = false;\n this.stopDrag = undefined;\n this.cd.markForCheck();\n },\n });\n }\n\n @HostListener('window:resize')\n onResize() {\n this.writeValue(this.myControl.value);\n }\n\n private updatePosition(ev: MouseEvent | TouchEvent) {\n if (!this.isDragging) return;\n if (!this.sliderRect || !this.thumbRect) this.updateRects();\n let position = getOffsetPosition(ev, this.slider.nativeElement);\n let thumbRec = this.thumbRect!;\n position.x -= thumbRec.width / 2;\n let sliderRec = this.sliderRect!;\n if (position.x < 0) {\n this.x = 0;\n } else if (position.x > sliderRec.width - thumbRec.width) {\n this.x = sliderRec.width - thumbRec.width;\n } else {\n this.x = position.x;\n }\n this.setValueByPosition(thumbRec, sliderRec);\n // OnPush + addEventListener دستی (به‌جای HostListener) یعنی خودمون باید\n // view رو dirty کنیم، وگرنه thumb حین درگ روی صفحه آپدیت نمی‌شه.\n this.cd.markForCheck();\n }\n\n setValueByPosition(thumbRec: DOMRect, sliderRec: DOMRect) {\n const percentage = this.x / (sliderRec.width - thumbRec.width);\n let newValue = this.min + percentage * (this.max - this.min);\n const stepDecimalPlaces = (this.step.toString().split('.')[1] || '').length;\n newValue = parseFloat(\n (Math.round(newValue / this.step) * this.step).toFixed(stepDecimalPlaces),\n );\n let value = Math.min(Math.max(newValue, this.min), this.max);\n if (this.myControl.value !== value) {\n this.valueChanged(value);\n }\n }\n\n valueChanged(value: number) {\n this.myControl.setValue(value, { emitEvent: false });\n this._onChange(value);\n this.change.emit(value);\n }\n}\n","<div class=\"slider-container\">\n <ng-content></ng-content>\n <div\n #slider\n class=\"slider\"\n (mousedown)=\"dragStart($event)\"\n (touchstart)=\"dragStart($event)\"\n [ngStyle]=\"{ '--ngx-slider-bg': background }\"\n [class.bg-transparent]=\"isBgTransparent\">\n <div class=\"thumb\" #thumb [style.left.px]=\"x\" [title]=\"myControl.value\"></div>\n </div>\n</div>\n","import { inject, InjectionToken } from '@angular/core';\n\nexport const WINDOW = new InjectionToken<Window | null>('WINDOW', {\n factory: () => (typeof window !== 'undefined' ? window : null),\n});\n","export function randomStrnig(extraLength = 4, useNumeric = false) {\n const len = Math.max(0, Math.floor(extraLength));\n if (len === 0) return '';\n\n let charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n if (useNumeric) {\n charset += '0123456789';\n }\n const cryptoObj =\n typeof globalThis !== 'undefined'\n ? (globalThis as unknown as { crypto?: Crypto }).crypto\n : undefined;\n const out: string[] = new Array(len);\n\n if (cryptoObj?.getRandomValues) {\n const bytes = new Uint8Array(len);\n cryptoObj.getRandomValues(bytes);\n for (let i = 0; i < len; i++) {\n out[i] = charset[bytes[i] % charset.length];\n }\n } else {\n for (let i = 0; i < len; i++) {\n out[i] = charset[Math.floor(Math.random() * charset.length)];\n }\n }\n\n return `${Date.now().toString(36)}-${out.join('')}`;\n}\n","export function makeConfetti(doc: Document, wrap: HTMLElement) {\n wrap.innerHTML = '';\n const colors = ['#3ee08f', '#43e0d8', '#8b7bff', '#ffc45c'];\n for (let i = 0; i < 24; i++) {\n const s = doc.createElement('span');\n s.style.left = Math.random() * 100 + '%';\n s.style.background = colors[i % colors.length];\n s.style.animationDelay = Math.random() * 0.4 + 's';\n s.style.animationDuration = 1.2 + Math.random() * 0.8 + 's';\n s.style.borderRadius = Math.random() > 0.5 ? '50%' : '2px';\n wrap.appendChild(s);\n }\n}\n","export function generateSequentialGuid(): string {\n // تولید 10 بایت تصادفی\n const randomBytes = new Uint8Array(10);\n crypto.getRandomValues(randomBytes);\n\n // زمان بر حسب میلی‌ثانیه از epoch (1970)\n const now = Date.now();\n\n // 6 بایت از زمان (به big-endian)\n const timeBytes = new Uint8Array(6);\n const timeBig = BigInt(now);\n for (let i = 0; i < 6; i++) {\n timeBytes[5 - i] = Number((timeBig >> BigInt(i * 8)) & 0xffn);\n }\n\n // ترکیب: 10 بایت تصادفی + 6 بایت زمان\n const allBytes = new Uint8Array(16);\n allBytes.set(randomBytes, 0);\n allBytes.set(timeBytes, 10);\n\n // تبدیل به فرمت استاندارد GUID\n const hex = Array.from(allBytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n\n // اضافه کردن خط تیره‌ها در مکان‌های استاندارد UUID\n return `${hex.substring(0, 8)}-${hex.substring(8, 12)}-${hex.substring(12, 16)}-${hex.substring(\n 16,\n 20,\n )}-${hex.substring(20)}`;\n}\n","/**\n * Performs a deep merge of objects and returns new object. Does not modify\n * objects (immutable) and merges arrays via concatenation.\n *\n * @param {...object} objects - Objects to merge\n * @returns {object} New object with merged key/values\n */\nexport function mergeDeep(...objects: any[]) {\n const isObject = (obj: any) => obj && typeof obj === 'object';\n\n return objects.reduce((prev, obj) => {\n Object.keys(obj).forEach((key) => {\n const pVal = prev[key];\n const oVal = obj[key];\n\n if (Array.isArray(pVal) && Array.isArray(oVal)) {\n prev[key] = pVal.concat(...oVal);\n } else if (isObject(pVal) && isObject(oVal)) {\n prev[key] = mergeDeep(pVal, oVal);\n } else {\n prev[key] = oVal;\n }\n });\n\n return prev;\n }, {});\n}\n","/**\n * Filters a hierarchical tree while preserving the branches\n * that contain matching nodes.\n *\n * A node is included when:\n * - the filter function matches the node itself, or\n * - one or more of its descendants match.\n *\n * When only a descendant matches, a shallow copy of the parent\n * is returned with only the matching descendants preserved.\n *\n * @param data The tree nodes to filter.\n * @param filterFn Function used to determine whether a node matches.\n * @param options Optional filtering configuration.\n *\n * @example\n * ```ts\n * const result = filterTreeList(\n * dataTree,\n * item =>\n * item.name.toLowerCase().includes(filter) ||\n * item.type.toLowerCase().includes(filter),\n * );\n * ```\n *\n * @example\n * ```ts\n * const result = filterTreeList(\n * data,\n * item => item.title.includes('angular'),\n * { childrenKeyName: 'items' },\n * );\n * ```\n */\nexport function filterTreeList<T extends Record<string, any>>(\n data: readonly T[] | null | undefined,\n filterFn: (item: T) => boolean,\n options?: {\n childrenKeyName?: string;\n },\n): T[] {\n if (!data?.length) {\n return [];\n }\n\n const childrenKeyName = options?.childrenKeyName ?? 'children';\n\n return filterNodes(data, filterFn, childrenKeyName);\n}\n\nfunction filterNodes<T extends Record<string, any>>(\n nodes: readonly T[],\n filterFn: (item: T) => boolean,\n childrenKeyName: string,\n): T[] {\n const result: T[] = [];\n\n for (const node of nodes) {\n if (filterFn(node)) {\n result.push(node);\n continue;\n }\n\n const children = node[childrenKeyName];\n\n if (!Array.isArray(children) || children.length === 0) {\n continue;\n }\n\n const filteredChildren = filterNodes(children, filterFn, childrenKeyName);\n\n if (filteredChildren.length > 0) {\n result.push({\n ...node,\n [childrenKeyName]: filteredChildren,\n });\n }\n }\n\n return result;\n}\n","const COLOR_FUNCTION_REGEX = /\\b(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\\(\\s*[^)]*\\)/gi;\n\nconst HEX_COLOR_REGEX = /#[a-f\\d]{3,4}(?:[a-f\\d]{2}){0,2}\\b/gi;\n\n/**\n * CSS named colors.\n *\n * Includes all standard CSS color keywords plus:\n * - transparent\n * - currentcolor\n */\nexport const CSS_COLOR_NAMES: Record<string, string> = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n\n/**\n * Extract all CSS colors from an arbitrary CSS string.\n *\n * Supports:\n * - Hex: #fff, #ffff, #ffffff, #ffffffff\n * - rgb()\n * - rgba()\n * - hsl()\n * - hsla()\n * - hwb()\n * - lab()\n * - lch()\n * - oklab()\n * - oklch()\n * - color()\n * - CSS named colors\n * - transparent\n * - currentcolor\n *\n * Works with values such as:\n *\n * box-shadow: 0 0 10px red, 0 0 20px #00ff00;\n * linear-gradient(red, rgba(0, 0, 0, .5));\n * radial-gradient(circle, blue 0%, transparent 100%);\n * conic-gradient(from 90deg, yellow, #ff0000);\n */\nexport function extractCssColors(value: string | null | undefined): string[] {\n if (!value) {\n return [];\n }\n\n const colors: string[] = [];\n const seen = new Set<string>();\n\n const addColor = (color: string): void => {\n const normalized = color.trim();\n\n if (!normalized) {\n return;\n }\n\n const key = normalized.toLowerCase();\n\n if (seen.has(key)) {\n return;\n }\n\n seen.add(key);\n colors.push(normalized);\n };\n\n // ---------------------------------------------------------\n // 1. Hex colors\n // ---------------------------------------------------------\n\n for (const match of value.matchAll(HEX_COLOR_REGEX)) {\n addColor(match[0]);\n }\n\n // ---------------------------------------------------------\n // 2. CSS color functions\n // ---------------------------------------------------------\n\n for (const match of value.matchAll(COLOR_FUNCTION_REGEX)) {\n const candidate = match[0];\n\n if (isValidCssColor(candidate)) {\n addColor(candidate);\n }\n }\n\n // ---------------------------------------------------------\n // 3. Named colors\n // ---------------------------------------------------------\n\n /**\n * We intentionally extract words instead of putting all named\n * colors into one huge regex.\n */\n const words = value.match(/\\b[a-z][a-z0-9-]*\\b/gi) ?? [];\n\n for (const word of words) {\n const normalized = word.toLowerCase();\n\n if (!CSS_COLOR_NAMES[normalized]) {\n continue;\n }\n\n if (isValidCssColor(word)) {\n addColor(word);\n }\n }\n\n return colors;\n}\n\n/**\n * Uses the browser's CSS parser to validate a color.\n *\n * This is much safer than trying to validate every possible\n * CSS color syntax manually.\n */\nfunction isValidCssColor(value: string): boolean {\n if (typeof CSS !== 'undefined' && typeof CSS.supports === 'function') {\n return CSS.supports('color', value);\n }\n\n // SSR / Node fallback.\n return isFallbackCssColor(value);\n}\n\n/**\n * Minimal validation for environments without CSS.supports(),\n * such as SSR or Node tests.\n */\nfunction isFallbackCssColor(value: string): boolean {\n const normalized = value.trim().toLowerCase();\n\n if (CSS_COLOR_NAMES[normalized]) {\n return true;\n }\n\n return /^#[a-f\\d]{3,4}(?:[a-f\\d]{2}){0,2}$/i.test(normalized);\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BrowserService {\n constructor(@Inject(PLATFORM_ID) private platformId: object) {}\n\n get isBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n\n get prefersDarkMode(): boolean {\n if (!this.isBrowser) return false;\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { computed, DestroyRef, inject, Injectable, signal } from '@angular/core';\n\nexport type Direction = 'ltr' | 'rtl';\n\n/**\n * جهت واقعیِ سند را تشخیص می‌دهد: اول dir روی <body>، بعد dir روی <html>،\n * و در نهایت مقدار محاسبه‌شده‌ی CSS (getComputedStyle) به‌عنوان fallback\n * (برای وقتی جهت با استایل/کلاس تنظیم شده، نه attribute مستقیم).\n */\nfunction resolveDirection(doc: Document): Direction {\n const bodyDir = doc.body?.dir;\n if (bodyDir === 'rtl' || bodyDir === 'ltr') return bodyDir;\n\n const htmlDir = doc.documentElement.dir;\n if (htmlDir === 'rtl' || htmlDir === 'ltr') return htmlDir;\n\n return getComputedStyle?.(doc.documentElement)?.direction === 'rtl' ? 'rtl' : 'ltr';\n}\n\n/**\n * جهت صفحه را به‌صورت خودکار و زنده تشخیص می‌دهد — بدون این‌که کاربرِ این\n * سرویس مجبور باشد چیزی به آن بدهد. هر تغییری در attribute های dir/class\n * روی <html> یا <body> (چه از طریق Angular، چه با یک تم‌سوییچر خارج از\n * Angular) بلافاصله signal را آپدیت می‌کند.\n *\n * نکته: effect() اینجا جواب نمی‌دهد چون هیچ‌کدام از این مقادیر (attribute\n * روی DOM) یک Signal نیستند؛ effect فقط به تغییر Signalها reactive است، نه\n * به تغییرات دلخواه DOM. برای گوش‌دادن به تغییرات DOM باید از MutationObserver\n * استفاده کرد و مقدار را دستی داخل یک Signal نوشت (که دقیقاً کاری است که\n * این سرویس انجام می‌دهد).\n */\n@Injectable({ providedIn: 'root' })\nexport class DirectionService {\n private readonly doc = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly _direction = signal<Direction>(resolveDirection(this.doc));\n\n /** جهت جاری، به‌صورت Signal فقط-خواندنی. */\n readonly direction = this._direction.asReadonly();\n readonly isRtl = computed(() => this._direction() === 'rtl');\n\n constructor() {\n const observer = new MutationObserver(() => {\n const next = resolveDirection(this.doc );\n if (next !== this._direction()) {\n this._direction.set(next);\n }\n });\n\n const options: MutationObserverInit = { attributes: true, attributeFilter: ['dir', 'class'] };\n observer.observe(this.doc.documentElement, options);\n if (this.doc.body) observer.observe(this.doc.body, options);\n\n this.destroyRef.onDestroy(() => observer.disconnect());\n }\n}\n","import { ComponentRef, TemplateRef } from '@angular/core';\n\nexport class OverlayRef<T> {\n constructor(\n private readonly element: HTMLElement | null,\n private readonly closeFn: () => void,\n readonly componentRef?: ComponentRef<T>,\n readonly template?: TemplateRef<unknown>,\n ) {}\n\n close(): void {\n this.closeFn();\n }\n\n get nativeElement(): HTMLElement | null {\n return this.element;\n }\n\n static noop<T>(): OverlayRef<T> {\n return new OverlayRef<T>(null, () => {});\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n ApplicationRef,\n ComponentRef,\n EmbeddedViewRef,\n EnvironmentInjector,\n Injectable,\n Injector,\n PLATFORM_ID,\n TemplateRef,\n ViewContainerRef,\n createComponent,\n inject,\n} from '@angular/core';\n\nimport { Alignment, OverlayOptions, Placement, TemplateOptions } from './overlay-options';\nimport { OverlayRef } from './overlay-ref';\nimport { PlacementConfig } from './placement-config';\nimport { DirectionService } from '../services/direction.service';\n\nexport const FOCUSABLE_SELECTOR = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\nexport const DIALOG_OVERLAY_CLASSNAME = 'ngx-ui-overlay';\nexport const OVERLAY_HOST_CLASSNAME = 'ngx-ui-overlay-host';\n\nconst BASE_Z_INDEX = 1000;\n\ninterface OverlayInstance<T = unknown> {\n host: HTMLElement;\n backdrop: HTMLElement;\n element: HTMLElement;\n anchor?: HTMLElement;\n point?: { x: number; y: number };\n placementConfig: PlacementConfig;\n\n usePopover: boolean;\n closeOnEscape: boolean;\n closeOnOutsideClick: boolean;\n canClose?: () => boolean;\n autoFocus: boolean;\n restoreFocus: boolean;\n lockBodyScroll: boolean;\n\n componentRef?: ComponentRef<T>;\n /** true when `componentRef` was attached directly to the ApplicationRef\n * (no ViewContainerRef supplied) and therefore needs an explicit detach. */\n attachedToAppRef?: boolean;\n embeddedView?: EmbeddedViewRef<unknown>;\n appRef?: {\n attachView(view: EmbeddedViewRef<unknown>): void;\n detachView(view: EmbeddedViewRef<unknown>): void;\n };\n\n onClosed?: () => void;\n previousActiveElement: HTMLElement | null;\n rafId: number | null;\n focusTimeoutId: ReturnType<typeof setTimeout> | null;\n cleanup: () => void;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OverlayService {\n private readonly document = inject(DOCUMENT);\n private readonly directionService = inject(DirectionService);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly applicationRef = inject(ApplicationRef);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private readonly overlayStack: OverlayInstance[] = [];\n private globalListenersAttached = false;\n private layoutRaf: number | null = null;\n\n private bodyScrollLockCount = 0;\n private previousBodyOverflow: string | null = null;\n private previousBodyPaddingRight: string | null = null;\n\n private get isBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n\n /** Number of overlays currently open. */\n get openCount(): number {\n return this.overlayStack.length;\n }\n\n open<T>(options: OverlayOptions<T>): OverlayRef<T> {\n if (!this.isBrowser) {\n return OverlayRef.noop<T>();\n }\n\n const { component, viewContainerRef, configure, onClosed } = options;\n const instance = this.createComponentInstance<T>(options, component, viewContainerRef);\n this.pushInstance(instance);\n this.renderHost(instance);\n this.attachGlobalListeners();\n instance.onClosed = onClosed;\n configure?.(\n instance.componentRef!.instance,\n new OverlayRef(instance.element, instance.cleanup, instance.componentRef),\n );\n this.scheduleInitialLayout(instance);\n return new OverlayRef(instance.element, instance.cleanup, instance.componentRef);\n }\n\n openTemplate(options: TemplateOptions): OverlayRef<any> {\n if (!this.isBrowser) {\n return OverlayRef.noop();\n }\n const { template, appRef, configure, onClosed } = options;\n const instance = this.createTemplateInstance(options, template, appRef ?? this.applicationRef);\n this.pushInstance(instance);\n this.renderHost(instance);\n this.attachGlobalListeners();\n instance.onClosed = onClosed;\n const ref = new OverlayRef(instance.element, instance.cleanup, undefined, template);\n configure?.(instance, ref);\n this.scheduleInitialLayout(instance);\n return ref;\n }\n\n closeAll(): void {\n if (!this.isBrowser) {\n return;\n }\n [...this.overlayStack].forEach((instance) => {\n instance.cleanup();\n });\n }\n\n // ---------------------------------------------------------------------------\n // instance creation\n // ---------------------------------------------------------------------------\n\n private createComponentInstance<T>(\n options: OverlayOptions<T>,\n component: OverlayOptions<T>['component'],\n viewContainerRef: ViewContainerRef | undefined,\n ): OverlayInstance<T> {\n const host = this.createHostElement(options);\n const backdrop = this.createBackdropElement(options);\n const element = this.createOverlayElement(options);\n\n host.appendChild(backdrop);\n host.appendChild(element);\n\n let componentRef: ComponentRef<T>;\n let attachedToAppRef = false;\n if (viewContainerRef) {\n componentRef = options.injector\n ? viewContainerRef.createComponent<T>(component, { injector: options.injector })\n : viewContainerRef.createComponent<T>(component);\n } else {\n // No host ViewContainerRef available (e.g. a global service opening an\n // overlay outside of any component template) - create and attach the\n // component directly against the application, like a root component.\n componentRef = createComponent<T>(component, {\n environmentInjector: this.environmentInjector,\n elementInjector: options.injector,\n });\n this.applicationRef.attachView(componentRef.hostView);\n attachedToAppRef = true;\n }\n element.appendChild(componentRef.location.nativeElement);\n\n const instance: OverlayInstance<T> = {\n host,\n backdrop,\n element,\n anchor: options.anchor,\n point: options.point,\n placementConfig: this.resolvePlacementConfig(\n options.placement,\n options.alignment,\n options.margin,\n ),\n usePopover: this.resolveUsePopover(options),\n closeOnEscape: options.closeOnEscape ?? true,\n closeOnOutsideClick: options.closeOnOutsideClick ?? true,\n canClose: options.canClose,\n autoFocus: options.autoFocus ?? true,\n restoreFocus: options.restoreFocus ?? true,\n lockBodyScroll: options.lockBodyScroll ?? false,\n componentRef,\n attachedToAppRef,\n previousActiveElement: this.getActiveElement(),\n rafId: null,\n focusTimeoutId: null,\n cleanup: () => {},\n };\n instance.cleanup = () => this.destroyInstance(instance);\n return instance;\n }\n\n private createTemplateInstance(\n options: TemplateOptions,\n template: TemplateRef<unknown>,\n appRef: {\n attachView(view: EmbeddedViewRef<unknown>): void;\n detachView(view: EmbeddedViewRef<unknown>): void;\n },\n ): OverlayInstance {\n const host = this.createHostElement(options);\n const backdrop = this.createBackdropElement(options);\n const element = this.createOverlayElement(options);\n host.appendChild(backdrop);\n host.appendChild(element);\n const view = template.createEmbeddedView({});\n appRef.attachView(view);\n element.append(...view.rootNodes);\n const instance: OverlayInstance = {\n host,\n backdrop,\n element,\n anchor: options.anchor,\n point: options.point,\n placementConfig: this.resolvePlacementConfig(\n options.placement,\n options.alignment,\n options.margin,\n ),\n usePopover: this.resolveUsePopover(options),\n closeOnEscape: options.closeOnEscape ?? true,\n closeOnOutsideClick: options.closeOnOutsideClick ?? true,\n canClose: options.canClose,\n autoFocus: options.autoFocus ?? true,\n restoreFocus: options.restoreFocus ?? true,\n lockBodyScroll: options.lockBodyScroll ?? false,\n embeddedView: view,\n appRef,\n previousActiveElement: this.getActiveElement(),\n rafId: null,\n focusTimeoutId: null,\n cleanup: () => {},\n };\n instance.cleanup = () => this.destroyInstance(instance);\n return instance;\n }\n\n private pushInstance(instance: OverlayInstance): void {\n this.overlayStack.push(instance);\n // Only matters as a fallback for browsers without the Popover API -\n // real popovers stack by top-layer show order regardless of z-index.\n instance.host.style.zIndex = String(BASE_Z_INDEX + this.overlayStack.length);\n if (instance.lockBodyScroll) {\n this.lockBodyScroll();\n }\n }\n\n // ---------------------------------------------------------------------------\n // DOM\n // ---------------------------------------------------------------------------\n\n private createHostElement(options: { usePopover?: boolean }): HTMLElement {\n const usePopover = this.resolveUsePopover(options);\n const host = this.document.createElement('div');\n host.className = OVERLAY_HOST_CLASSNAME;\n host.setAttribute('data-ngx-overlay', '');\n host.style.position = 'fixed';\n host.style.inset = '0';\n // Neutralize the browser's default `[popover]` UA stylesheet\n // (margin: auto; width/height: fit-content; border: solid; padding: .25em;\n // background: Canvas; overflow: auto) so the host reliably fills the\n // viewport whether or not it ends up being a real popover.\n host.style.margin = '0';\n host.style.padding = '0';\n host.style.border = 'none';\n host.style.width = '100%';\n host.style.height = '100%';\n host.style.maxWidth = 'none';\n host.style.maxHeight = 'none';\n host.style.overflow = 'visible';\n host.style.background = 'transparent';\n host.style.color = 'inherit';\n host.style.zIndex = String(BASE_Z_INDEX);\n host.style.pointerEvents = 'auto';\n\n // Popover goes on the ROOT element, not the inner panel. This puts the\n // whole overlay (backdrop + panel) in the top layer as a single unit,\n // so stacking \"just works\" above everything on the page - including\n // ancestors with `overflow: hidden`, `transform`, or their own z-index\n // stacking contexts, which regular `position: fixed` cannot escape.\n // The inner `element` stays a normal `position: fixed` div and keeps\n // computing against the viewport, so all the placement math is unchanged.\n if (usePopover) {\n host.setAttribute('popover', 'manual');\n }\n\n return host;\n }\n\n private createBackdropElement(options: { backdropClass?: string | string[] }): HTMLElement {\n const backdrop = this.document.createElement('div');\n backdrop.className = 'ngx-ui-overlay-backdrop';\n backdrop.style.position = 'absolute';\n backdrop.style.inset = '0';\n backdrop.style.pointerEvents = 'auto';\n backdrop.style.background = 'transparent';\n this.addClasses(backdrop, options.backdropClass);\n return backdrop;\n }\n\n private createOverlayElement(options: {\n panelClass?: string | string[];\n role?: string;\n ariaModal?: boolean;\n ariaLabel?: string;\n ariaLabelledby?: string;\n ariaDescribedby?: string;\n }): HTMLElement {\n const element = this.document.createElement('div');\n element.className = DIALOG_OVERLAY_CLASSNAME;\n element.setAttribute('role', options.role ?? 'dialog');\n if (options.ariaModal ?? true) {\n element.setAttribute('aria-modal', 'true');\n }\n if (options.ariaLabel) {\n element.setAttribute('aria-label', options.ariaLabel);\n }\n if (options.ariaLabelledby) {\n element.setAttribute('aria-labelledby', options.ariaLabelledby);\n }\n if (options.ariaDescribedby) {\n element.setAttribute('aria-describedby', options.ariaDescribedby);\n }\n element.setAttribute('tabindex', '-1');\n element.style.position = 'fixed';\n element.style.pointerEvents = 'auto';\n element.style.boxSizing = 'border-box';\n element.style.maxWidth = '100dvw'; // 'calc(100vw - 16px)';\n element.style.maxHeight = '100dvh'; // 'calc(100vh - 16px)';\n element.style.outline = 'none';\n element.style.border = 'none';\n element.style.padding = '0';\n element.style.margin = '0';\n element.style.overflow = 'auto';\n element.style.transformOrigin = 'left top';\n element.style.background = 'none';\n element.style.filter = 'drop-shadow(0px 0px 6px black)';\n element.style.borderRadius = 'var(--ngx-dialog-corner-radius,8px)';\n this.addClasses(element, options.panelClass);\n return element;\n }\n\n private addClasses(element: HTMLElement, classes: string | string[] | undefined): void {\n if (!classes) {\n return;\n }\n const list = Array.isArray(classes) ? classes : classes.split(' ');\n for (const c of list) {\n if (c.trim()) {\n element.classList.add(c.trim());\n }\n }\n }\n\n private renderHost(instance: OverlayInstance): void {\n this.document.body.appendChild(instance.host);\n // Must show the popover (enter the top layer) BEFORE we ever measure\n // `instance.element`'s rect - while a popover host is closed it's\n // `display: none`, and everything inside it (including the panel)\n // would measure as a 0x0 box.\n this.showHostPopover(instance);\n instance.element.style.visibility = 'hidden';\n instance.element.style.position = 'fixed';\n instance.element.style.top = '0';\n instance.element.style.left = '0';\n }\n\n // ---------------------------------------------------------------------------\n // lifecycle\n // ---------------------------------------------------------------------------\n\n private destroyInstance(instance: OverlayInstance): void {\n const index = this.overlayStack.indexOf(instance);\n if (index === -1) {\n return;\n }\n this.overlayStack.splice(index, 1);\n if (instance.rafId !== null) {\n this.cancelAnimationFrame(instance.rafId);\n instance.rafId = null;\n }\n if (instance.focusTimeoutId !== null) {\n clearTimeout(instance.focusTimeoutId);\n instance.focusTimeoutId = null;\n }\n if (instance.componentRef) {\n if (instance.attachedToAppRef) {\n this.applicationRef.detachView(instance.componentRef.hostView);\n }\n instance.componentRef.destroy();\n instance.componentRef = undefined;\n }\n if (instance.embeddedView && instance.appRef) {\n instance.appRef.detachView(instance.embeddedView);\n instance.embeddedView.destroy();\n instance.embeddedView = undefined;\n }\n this.hideHostPopover(instance);\n instance.host.remove();\n if (instance.lockBodyScroll) {\n this.unlockBodyScroll();\n }\n instance.onClosed?.();\n // Only tear down the shared/global listeners once *every* overlay is\n // closed - previously this ran unconditionally on every close, which\n // silently broke Escape/outside-click/reposition for any overlays that\n // were still open underneath.\n if (this.overlayStack.length === 0) {\n this.detachGlobalListeners();\n }\n if (instance.restoreFocus) {\n this.restoreFocus(instance.previousActiveElement);\n }\n }\n\n // ---------------------------------------------------------------------------\n // popover helpers\n // ---------------------------------------------------------------------------\n\n private resolveUsePopover(options: { usePopover?: boolean }): boolean {\n return (options.usePopover ?? true) && this.supportsPopover();\n }\n\n private showHostPopover(instance: OverlayInstance): void {\n if (!instance.usePopover) {\n return;\n }\n try {\n instance.host.showPopover();\n } catch {\n // Already open, or environment doesn't fully support it - ignore.\n }\n }\n\n private hideHostPopover(instance: OverlayInstance): void {\n if (!instance.usePopover) {\n return;\n }\n try {\n if (instance.host.matches(':popover-open')) {\n instance.host.hidePopover();\n }\n } catch {\n // Not open, or already removed from the DOM - ignore.\n }\n }\n\n private supportsPopover(): boolean {\n return (\n typeof HTMLElement !== 'undefined' &&\n 'popover' in HTMLElement.prototype &&\n typeof HTMLElement.prototype.showPopover === 'function' &&\n typeof HTMLElement.prototype.hidePopover === 'function'\n );\n }\n\n // ---------------------------------------------------------------------------\n // body scroll lock\n // ---------------------------------------------------------------------------\n\n private lockBodyScroll(): void {\n if (!this.isBrowser) {\n return;\n }\n this.bodyScrollLockCount++;\n if (this.bodyScrollLockCount > 1) {\n return;\n }\n const body = this.document.body;\n this.previousBodyOverflow = body.style.overflow;\n this.previousBodyPaddingRight = body.style.paddingRight;\n const scrollbarWidth = window.innerWidth - this.document.documentElement.clientWidth;\n body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n const currentPaddingRight = parseFloat(window.getComputedStyle(body).paddingRight) || 0;\n body.style.paddingRight = `${currentPaddingRight + scrollbarWidth}px`;\n }\n }\n\n private unlockBodyScroll(): void {\n if (this.bodyScrollLockCount === 0) {\n return;\n }\n this.bodyScrollLockCount--;\n if (this.bodyScrollLockCount > 0) {\n return;\n }\n const body = this.document.body;\n body.style.overflow = this.previousBodyOverflow ?? '';\n body.style.paddingRight = this.previousBodyPaddingRight ?? '';\n this.previousBodyOverflow = null;\n this.previousBodyPaddingRight = null;\n }\n\n // ---------------------------------------------------------------------------\n // global listeners\n // ---------------------------------------------------------------------------\n\n private attachGlobalListeners(): void {\n if (!this.isBrowser || this.globalListenersAttached) {\n return;\n }\n // Flip the flag synchronously to avoid a race: if two overlays open in\n // the same tick, the second call must see the flag already set instead\n // of scheduling a second (duplicate) round of addEventListener calls.\n this.globalListenersAttached = true;\n setTimeout(() => {\n this.document.addEventListener('keydown', this.onDocumentKeydown);\n this.document.addEventListener('click', this.onDocumentClick);\n this.document.addEventListener('contextmenu', this.onDocumentContextMenu);\n this.document.addEventListener('scroll', this.onDocumentScroll, true);\n window.addEventListener('resize', this.onWindowResize);\n }, 0);\n }\n\n private detachGlobalListeners(): void {\n if (!this.isBrowser || !this.globalListenersAttached) {\n return;\n }\n this.globalListenersAttached = false;\n this.document.removeEventListener('keydown', this.onDocumentKeydown);\n this.document.removeEventListener('click', this.onDocumentClick);\n this.document.removeEventListener('contextmenu', this.onDocumentContextMenu);\n this.document.removeEventListener('scroll', this.onDocumentScroll, true);\n window.removeEventListener('resize', this.onWindowResize);\n }\n\n private readonly onDocumentKeydown = (event: KeyboardEvent): void => {\n const instance = this.getLastInstance();\n if (!instance) {\n return;\n }\n if (event.key === 'Escape') {\n if (!instance.closeOnEscape || (instance.canClose && !instance.canClose())) {\n return;\n }\n event.preventDefault();\n instance.cleanup();\n return;\n }\n if (event.key === 'Tab') {\n this.trapFocus(event, instance);\n }\n };\n\n private readonly onDocumentClick = (event: MouseEvent): void => {\n const instance = this.getLastInstance();\n if (!instance) {\n return;\n }\n const target = event.target as Node | null;\n if (!target) {\n return;\n }\n if (instance.element.contains(target)) {\n return;\n }\n if (instance.anchor && instance.anchor.contains(target)) {\n return;\n }\n if (!instance.closeOnOutsideClick || (instance.canClose && !instance.canClose())) {\n return;\n }\n if (event.target !== instance.backdrop) {\n return;\n }\n instance.cleanup();\n };\n\n private readonly onDocumentContextMenu = (event: MouseEvent): void => {\n const instance = this.getLastInstance();\n if (!instance) {\n return;\n }\n if (instance.point && instance.anchor && instance.anchor.contains(event.target as Node)) {\n event.preventDefault();\n instance.point = {\n x: event.clientX,\n y: event.clientY,\n };\n this.scheduleReposition();\n return;\n }\n if (instance.element.contains(event.target as Node)) {\n return;\n }\n if (!instance.closeOnOutsideClick || (instance.canClose && !instance.canClose())) {\n return;\n }\n if (event.target !== instance.backdrop) {\n return;\n }\n instance.cleanup();\n };\n\n private readonly onDocumentScroll = (): void => {\n this.scheduleReposition();\n };\n\n private readonly onWindowResize = (): void => {\n this.scheduleReposition();\n };\n\n private scheduleReposition(): void {\n if (this.layoutRaf !== null) {\n return;\n }\n this.layoutRaf = this.requestAnimationFrame(() => {\n this.layoutRaf = null;\n const instances = [...this.overlayStack];\n for (const instance of instances) {\n this.positionOverlay(instance);\n }\n });\n }\n\n // ---------------------------------------------------------------------------\n // focus\n // ---------------------------------------------------------------------------\n\n private scheduleInitialLayout(instance: OverlayInstance): void {\n instance.rafId = this.requestAnimationFrame(() => {\n instance.rafId = null;\n this.positionOverlay(instance);\n if (!instance.autoFocus) {\n return;\n }\n instance.focusTimeoutId = setTimeout(() => {\n instance.focusTimeoutId = null;\n this.focusInitialElement(instance);\n }, 0);\n });\n }\n\n private focusInitialElement(instance: OverlayInstance): void {\n const focusable = instance.element.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n focusable?.focus() ?? instance.element.focus();\n }\n\n private trapFocus(event: KeyboardEvent, instance: OverlayInstance): void {\n const elements = Array.from(instance.element.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n if (!elements.length) {\n event.preventDefault();\n instance.element.focus();\n return;\n }\n const first = elements[0];\n const last = elements[elements.length - 1];\n const active = this.getActiveElement();\n if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n return;\n }\n if (event.shiftKey && active === first) {\n event.preventDefault();\n last.focus();\n }\n }\n\n private restoreFocus(element: HTMLElement | null): void {\n if (element && element.isConnected) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n\n private getActiveElement(): HTMLElement | null {\n const active = this.document.activeElement;\n return active?.nodeType === Node.ELEMENT_NODE ? (active as HTMLElement) : null;\n }\n\n // ---------------------------------------------------------------------------\n // positioning\n // ---------------------------------------------------------------------------\n\n private positionOverlay(instance: OverlayInstance): void {\n if (!instance.host.isConnected || !instance.element.isConnected) {\n return;\n }\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const anchorRect = this.getAnchorRect(instance);\n const overlay = instance.element;\n const overlayRect = overlay.getBoundingClientRect();\n const { placement, alignment, margin } = instance.placementConfig;\n const isRTL = this.directionService.isRtl();\n\n let top: number;\n if (placement === 'center') {\n top = anchorRect.top + anchorRect.height / 2 - overlayRect.height / 2;\n } else {\n const spaceBelow = viewportHeight - anchorRect.bottom;\n const placeBelow =\n placement === 'bottom' ||\n (placement === 'auto' && spaceBelow >= overlayRect.height + margin);\n if (placeBelow) {\n top = anchorRect.bottom + margin;\n } else {\n top = anchorRect.top - overlayRect.height - margin;\n }\n overlay.classList.toggle('tips-below', placeBelow);\n overlay.classList.toggle('tips-above', !placeBelow);\n }\n if (top + overlayRect.height > viewportHeight - margin) {\n top = viewportHeight - overlayRect.height - margin;\n }\n if (top < margin) {\n top = margin;\n }\n\n let left: number;\n switch (alignment) {\n case 'center':\n left = anchorRect.left + anchorRect.width / 2 - overlayRect.width / 2;\n break;\n case 'end':\n left = isRTL ? anchorRect.left : anchorRect.right - overlayRect.width;\n break;\n case 'start':\n default:\n left = isRTL ? anchorRect.right - overlayRect.width : anchorRect.left;\n break;\n }\n left = Math.min(\n Math.max(left, margin),\n Math.max(margin, viewportWidth - overlayRect.width - margin),\n );\n overlay.style.top = `${Math.round(top)}px`;\n overlay.style.left = `${Math.round(left)}px`;\n overlay.style.right = 'auto';\n overlay.style.bottom = 'auto';\n overlay.style.visibility = 'visible';\n // NOTE: showPopover() is intentionally NOT called here. It already\n // happened once in renderHost(); calling it again on every reposition\n // (scroll/resize) throws InvalidStateError since the popover is\n // already open.\n }\n\n private getAnchorRect(instance: OverlayInstance): DOMRect {\n if (instance.point) {\n return new DOMRect(instance.point.x, instance.point.y, 0, 0);\n }\n if (instance.anchor && instance.anchor.isConnected) {\n return instance.anchor.getBoundingClientRect();\n }\n return new DOMRect(window.innerWidth / 2, window.innerHeight / 2, 0, 0);\n }\n\n private resolvePlacementConfig(\n placement?: Placement,\n alignment?: Alignment,\n margin?: number,\n ): PlacementConfig {\n return {\n placement: placement ?? 'auto',\n alignment: alignment ?? 'start',\n margin: margin ?? 8,\n };\n }\n\n // ---------------------------------------------------------------------------\n // utilities\n // ---------------------------------------------------------------------------\n\n private getLastInstance(): OverlayInstance | undefined {\n return this.overlayStack[this.overlayStack.length - 1];\n }\n\n private requestAnimationFrame(callback: FrameRequestCallback): number {\n if (typeof window.requestAnimationFrame === 'function') {\n return window.requestAnimationFrame(callback);\n }\n return window.setTimeout(() => callback(Date.now()), 16) as unknown as number;\n }\n\n private cancelAnimationFrame(id: number): void {\n if (typeof window.cancelAnimationFrame === 'function') {\n window.cancelAnimationFrame(id);\n } else {\n clearTimeout(id as unknown as ReturnType<typeof setTimeout>);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-kit-core.mjs","sources":["../../../projects/libs/core/utils/get-offset-position.ts","../../../projects/libs/core/utils/drag-session.ts","../../../projects/libs/core/range-slider/range-slider.component.ts","../../../projects/libs/core/range-slider/range-slider.component.html","../../../projects/libs/core/saturation/saturation.component.ts","../../../projects/libs/core/saturation/saturation.component.html","../../../projects/libs/core/slider/slider.component.ts","../../../projects/libs/core/slider/slider.component.html","../../../projects/libs/core/utils/window.ts","../../../projects/libs/core/utils/string.ts","../../../projects/libs/core/utils/confetti.ts","../../../projects/libs/core/utils/sequential-guid.ts","../../../projects/libs/core/utils/merge-deep.ts","../../../projects/libs/core/utils/filter-tree-list.ts","../../../projects/libs/core/utils/color.utils.ts","../../../projects/libs/core/services/browser.service.ts","../../../projects/libs/core/services/direction.service.ts","../../../projects/libs/core/overlay/overlay-ref.ts","../../../projects/libs/core/overlay/overlay.service.ts","../../../projects/libs/core/ngx-kit-core.ts"],"sourcesContent":["export function getOffsetPosition(evt: MouseEvent | TouchEvent, parent: HTMLElement) {\n let position = {\n x: 0,\n y: 0,\n };\n\n if (evt instanceof MouseEvent) {\n position.x = evt.pageX;\n position.y = evt.pageY;\n } else if (evt.touches && evt.touches.length > 0) {\n position.x = evt.touches[0].pageX;\n position.y = evt.touches[0].pageY;\n }\n\n // Adjust for the parent's offset\n let parentRect = parent.getBoundingClientRect();\n position.x -= parentRect.left + window.scrollX;\n position.y -= parentRect.top + window.scrollY;\n\n return position;\n}\n","/**\n * تمام کامپوننت‌های قابل‌درگ کتابخانه (saturation، slider، range-slider،\n * box-shadow) قبلاً یک الگوی تکراری داشتن:\n *\n * @HostListener('document:mousemove', ['$event'])\n * @HostListener('document:touchmove', ['$event'])\n * onDrag(ev) { if (!this.isDragging) return; ... }\n *\n * مشکل: این listenerها برای کل عمر کامپوننت روی `document` باقی می‌مونن —\n * حتی وقتی اصلاً دراگی در حال انجام نیست. یعنی روی صفحه‌ای با چند تا\n * color-picker/slider، هر حرکت موس/انگشت روی کل صفحه (نه فقط روی خودِ\n * اسلایدر) باعث اجرای N تابع (به تعداد اینستنس‌ها) می‌شه که هرکدوم هم چرخه‌ی\n * زون انگیولار رو تریگر می‌کنن — یک مشکل واقعی پرفورمنس، مخصوصاً در صفحاتی\n * با چند نمونه هم‌زمان یا حرکت زیاد موس.\n *\n * این تابع جایگزین اون الگو می‌شه: listenerها فقط در طول یک دراگِ واقعی\n * (بین mousedown/touchstart تا mouseup/touchend) روی document اضافه می‌شن و\n * بلافاصله بعدش پاک می‌شن.\n *\n * یه فایده‌ی جانبیِ مهم دیگه هم داره: روی touchmove مقدار `{ passive: false }`\n * ست می‌شه و preventDefault صدا زده می‌شه، پس در حین درگ کردنِ thumb روی\n * موبایل، صفحه اسکرول نمی‌خوره (باگی که با @HostListener قبلی وجود داشت،\n * چون هیچ‌جا preventDefault روی touchmove صدا زده نمی‌شد).\n */\nexport interface DragSessionCallbacks {\n onMove: (ev: MouseEvent | TouchEvent) => void;\n onEnd?: (ev: MouseEvent | TouchEvent) => void;\n}\n\n/** با فراخوانی این تابع (مثلاً داخل dragStart) یک نشست‌ درگ شروع می‌شه. */\nexport function startDragSession({ onMove, onEnd }: DragSessionCallbacks): () => void {\n const handleMove = (ev: MouseEvent | TouchEvent) => {\n if (ev.type === 'touchmove') {\n // جلوگیری از اسکرول شدن صفحه هم‌زمان با درگ کردن روی موبایل/تاچ\n ev.preventDefault();\n }\n onMove(ev);\n };\n\n const handleEnd = (ev: MouseEvent | TouchEvent) => {\n stop();\n onEnd?.(ev);\n };\n\n const stop = (): void => {\n document.removeEventListener('mousemove', handleMove);\n document.removeEventListener('touchmove', handleMove);\n document.removeEventListener('mouseup', handleEnd);\n document.removeEventListener('touchend', handleEnd);\n document.removeEventListener('touchcancel', handleEnd);\n };\n\n document.addEventListener('mousemove', handleMove);\n document.addEventListener('touchmove', handleMove, { passive: false });\n document.addEventListener('mouseup', handleEnd);\n document.addEventListener('touchend', handleEnd);\n document.addEventListener('touchcancel', handleEnd);\n\n // تابع stop برگردونده می‌شه تا هم بشه دستی صداش زد (مثلاً در ngOnDestroy،\n // اگه کامپوننت درست وسط یه درگ نابود بشه) و هم به‌صورت خودکار روی\n // mouseup/touchend صدا زده می‌شه.\n return stop;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n forwardRef,\n OnInit,\n} from '@angular/core';\nimport { getOffsetPosition } from '../utils/get-offset-position';\nimport { startDragSession } from '../utils/drag-session';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nexport interface IValue {\n id?: string;\n value: number;\n}\nexport class ValueModel {\n id!: string;\n value!: number;\n x?: number;\n thumb?: HTMLElement;\n color?: string;\n}\n\n@Component({\n selector: 'range-slider',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n templateUrl: './range-slider.component.html',\n styleUrls: ['./range-slider.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeSliderComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RangeSliderComponent),\n multi: true,\n },\n ],\n})\nexport class RangeSliderComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {\n /**\n * The step value for the slider\n */\n @Input() step = 1;\n /**\n * The minimum value for the slider\n */\n @Input() min = 0;\n /**\n * The maximum value for the slider\n */\n @Input() max = 100;\n /**\n * The background color of the slider\n * - can use css like `background: linear-gradient(to right, red, blue);`\n * - or a solid color like `background: red;`\n */\n @Input() background?: string;\n /**\n * If true, the background will be transparent\n */\n @Input() isBgTransparent = false;\n /**\n * If true, clicking on the slider will add a new range at that position\n */\n @Input() addNewRangeOnClick = false;\n\n /**\n * The current value of the slider\n */\n @Output() change = new EventEmitter<IValue[]>();\n @Input() selectedIndex?: number;\n @Output() selectedIndexChange = new EventEmitter<number>();\n\n private isDragging = false;\n\n @ViewChild('slider', { static: true }) slider!: ElementRef<HTMLDivElement>;\n @ViewChild('thumb', { static: false }) thumb?: ElementRef<HTMLDivElement>;\n\n values: ValueModel[] = [];\n isDisabled = false;\n protected _onChange = (value: IValue[]) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n private sliderRect?: DOMRect;\n private thumbRect?: DOMRect;\n private stopDrag?: () => void;\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {}\n ngOnInit(): void {}\n ngOnDestroy(): void {\n this.stopDrag?.();\n }\n\n private generateId(): string {\n let id = 'ngx-thumb-' + Math.random().toString(36).substring(2, 9);\n if (this.values.findIndex((x) => x.id == id) >= 0) {\n return this.generateId();\n }\n return id;\n }\n\n writeValue(items?: IValue[]): void {\n this.values = [];\n if (!items || !Array.isArray(items)) {\n items = [];\n }\n if (items.length === 0) {\n items.push({ id: this.generateId(), value: this.min });\n }\n for (let val of items) {\n if (typeof val.value !== 'number' || isNaN(val.value)) {\n throw new Error('RangeSliderComponent: value must be an array of numbers');\n }\n let newVal = +val.value;\n if (newVal < +this.min) newVal = +this.min;\n else if (newVal > +this.max) newVal = +this.max;\n this.values.push({\n ...val,\n id: val.id ?? this.generateId(),\n value: newVal,\n });\n }\n this.updateAllThumbPositions();\n }\n validate(control: AbstractControl): ValidationErrors | null {\n return null; // TODO: return errors if any;\n }\n registerOnValidatorChange?(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n setDisabledState?(disabled: boolean): void {\n this.isDisabled = disabled;\n }\n private updateRects() {\n this.sliderRect = this.slider.nativeElement.getBoundingClientRect();\n if (this.thumb) {\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\n }\n }\n @HostListener('window:resize')\n onResize() {\n this.writeValue(this.values);\n }\n dragStart(ev: MouseEvent | TouchEvent, index: number) {\n ev.stopPropagation();\n ev.preventDefault();\n this.isDragging = true;\n this.selectedIndex = index;\n this.updateRects();\n this.updateThumbPosition(ev);\n this.selectedIndexChange.emit(this.selectedIndex);\n\n this.stopDrag?.();\n this.stopDrag = startDragSession({\n onMove: (moveEv) => this.updateThumbPosition(moveEv),\n onEnd: () => {\n this.isDragging = false;\n this.stopDrag = undefined;\n this.changeDetectorRef.markForCheck();\n },\n });\n }\n\n addnewRangeOnSliderClick(event: MouseEvent | TouchEvent) {\n if (!this.addNewRangeOnClick) return;\n const position = getOffsetPosition(event, this.slider.nativeElement);\n const newValue = this.min + (position.x / this.sliderRect!.width) * (this.max - this.min);\n // must be add with order by position\n const indexByOrderValue = this.values.findIndex((item) => item.value > newValue);\n const insertIndex = indexByOrderValue >= 0 ? indexByOrderValue : this.values.length;\n this.values.splice(insertIndex, 0, {\n id: this.generateId(),\n value: newValue,\n });\n this.dragStart(event, insertIndex);\n // this.updateAllThumbPositions();\n // this.valueChanged();\n }\n\n private updateThumbPosition(ev: MouseEvent | TouchEvent) {\n if (!this.isDragging || this.selectedIndex == undefined) return;\n if (!this.sliderRect || !this.thumbRect) this.updateRects();\n let position = getOffsetPosition(ev, this.slider.nativeElement);\n let thumbRec = this.thumbRect!;\n position.x -= thumbRec.width / 2;\n let sliderRec = this.sliderRect!;\n const thumb = this.values[this.selectedIndex];\n if (position.x < 0) {\n thumb.x = 0;\n } else if (position.x > sliderRec.width - thumbRec.width) {\n thumb.x = sliderRec.width - thumbRec.width;\n } else {\n thumb.x = position.x;\n }\n this.setValueByPosition(thumb, thumbRec, sliderRec);\n this.changeDetectorRef.markForCheck();\n }\n\n updateAllThumbPositions() {\n // wait to add thumbs\n setTimeout(() => {\n this.updateRects();\n const sliderRec = this.sliderRect!;\n const thumbRec = this.thumbRect!;\n for (let item of this.values) {\n item.x =\n ((item.value - this.min) * (sliderRec.width - thumbRec.width)) / (this.max - this.min);\n }\n this.changeDetectorRef.detectChanges();\n });\n }\n setValueByPosition(thumb: ValueModel, thumbRec: DOMRect, sliderRec: DOMRect) {\n const percentage = (thumb.x ?? 0) / (sliderRec.width - thumbRec.width);\n let newValue = this.min + percentage * (this.max - this.min);\n const stepDecimalPlaces = (this.step.toString().split('.')[1] || '').length;\n newValue = parseFloat(\n (Math.round(newValue / this.step) * this.step).toFixed(stepDecimalPlaces),\n );\n let value = Math.min(Math.max(newValue, this.min), this.max);\n if (thumb.value !== value) {\n thumb.value = value;\n this.valueChanged();\n }\n }\n\n valueChanged() {\n const v = this.values; // this.values.map(({ x, thumb, ...rest }) => ({ ...rest }));\n this._onChange(v);\n this.change.emit(v);\n }\n}\n","<div class=\"slider-container\">\n <ng-content></ng-content>\n <div\n #slider\n class=\"slider\"\n [class.add-range-cursor]=\"addNewRangeOnClick\"\n [ngStyle]=\"{ '--ngx-slider-bg': background }\"\n [class.bg-transparent]=\"isBgTransparent\"\n (mousedown)=\"addnewRangeOnSliderClick($event)\"\n (touchstart)=\"addnewRangeOnSliderClick($event)\">\n @for (item of values; track $index; let i = $index) {\n <div\n class=\"thumb\"\n [class.is-active]=\"selectedIndex == i\"\n #thumb\n [style.left.px]=\"item.x\"\n [style.background]=\"item.color\"\n [title]=\"item.value\"\n (mousedown)=\"dragStart($event, i)\"\n (touchstart)=\"dragStart($event, i)\"></div>\n }\n </div>\n</div>\n\n<!-- {{ selectedIndex }}\n<pre dir=\"ltr\" style=\"text-align: left\">{{ values | json }}</pre> -->\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n FormControl,\n AbstractControl,\n ValidationErrors,\n} from '@angular/forms';\nimport { IPosition } from '../contracts/IPosition';\nimport { startDragSession } from '../utils/drag-session';\nimport { getOffsetPosition } from '../utils/get-offset-position';\n\n@Component({\n selector: 'saturation',\n standalone: true,\n imports: [],\n templateUrl: './saturation.component.html',\n styleUrl: './saturation.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SaturationComponent),\n multi: true,\n },\n ],\n})\nexport class SaturationComponent implements ControlValueAccessor, OnDestroy {\n @Input() width?: number;\n @Input() height?: number;\n @Input() color = 'red';\n @Input() step = 1;\n @Input() min: IPosition = { x: 0, y: 0 };\n @Input() max = { x: 100, y: 100 };\n @Output() change = new EventEmitter<IPosition>();\n\n isDragging = false;\n @ViewChild('saturation', { static: true }) saturation!: ElementRef<HTMLDivElement>;\n @ViewChild('thumb', { static: true }) thumb!: ElementRef<HTMLDivElement>;\n x = 0;\n y = 0;\n myControl = new FormControl<IPosition | null>(null);\n isDisabled = false;\n protected _onChange = (value: any) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n\n private saturationRect?: DOMRect;\n private thumbRect?: DOMRect;\n private stopDrag?: () => void;\n\n constructor() {}\n\n ngOnDestroy(): void {\n // اگه کامپوننت درست وسط یه درگ نابود بشه (مثلاً پیکر بسته بشه)، باید\n // listenerهای document رو دستی پاک کنیم؛ برخلاف @HostListener که\n // انگیولار خودش موقع destroy پاکش می‌کرد، این‌جا چون addEventListener\n // دستیه، خودمون مسئول پاک‌سازی‌شیم.\n this.stopDrag?.();\n }\n\n private updateRects() {\n this.saturationRect = this.saturation.nativeElement.getBoundingClientRect();\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\n }\n\n writeValue(val?: IPosition | null): void {\n if (!val) val = { x: 0, y: 0 };\n let value: IPosition = val;\n this.myControl.setValue(value, { emitEvent: false });\n this.updateRects();\n const saturationRec = this.saturationRect!;\n const thumbRec = this.thumbRect!;\n this.x =\n ((value.x - this.min.x) * (saturationRec.width - thumbRec.width / 2)) /\n (this.max.x - this.min.x);\n this.y =\n ((value.y - this.min.y) * (saturationRec.height - thumbRec.height / 2)) /\n (this.max.y - this.min.y);\n if (val !== value) {\n this.valueChanged(value);\n }\n }\n validate(control: AbstractControl): ValidationErrors | null {\n return this.myControl.errors;\n }\n registerOnValidatorChange?(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n setDisabledState?(disabled: boolean): void {\n this.isDisabled = disabled;\n if (disabled) this.myControl.disable();\n else this.myControl.enable();\n }\n\n dragStart(ev: MouseEvent | TouchEvent) {\n ev.stopPropagation();\n ev.preventDefault();\n this.isDragging = true;\n this.updateRects();\n this.updatePosition(ev);\n this.stopDrag?.();\n this.stopDrag = startDragSession({\n onMove: (moveEv) => this.updatePosition(moveEv),\n onEnd: () => {\n this.isDragging = false;\n this.stopDrag = undefined;\n },\n });\n }\n\n @HostListener('window:resize')\n onResize() {\n this.writeValue(this.myControl.value);\n }\n\n private updatePosition(ev: MouseEvent | TouchEvent) {\n if (!this.isDragging) return;\n if (!this.saturationRect || !this.thumbRect) this.updateRects();\n let position = getOffsetPosition(ev, this.saturation.nativeElement);\n let thumbRec = this.thumbRect!;\n let saturationRec = this.saturationRect!;\n if (position.x < 0) {\n this.x = 0;\n } else if (position.x > saturationRec.width - (thumbRec.width / 2 - 3)) {\n this.x = saturationRec.width - (thumbRec.width / 2 - 3);\n } else {\n this.x = position.x;\n }\n // this.x = this.x - thumbRec.width / 2;\n\n if (position.y < 0) {\n this.y = 0;\n } else if (position.y > saturationRec.height - (thumbRec.height / 2 - 3)) {\n this.y = saturationRec.height - (thumbRec.height / 2 - 3);\n } else {\n this.y = position.y;\n }\n // this.y = this.y - thumbRec.height / 2;\n this.setValueByPosition(thumbRec, saturationRec);\n }\n\n setValueByPosition(thumbRec: DOMRect, saturationRec: DOMRect) {\n const percentageX = this.x / (saturationRec.width - thumbRec.width);\n let newValueX = this.min.x + percentageX * (this.max.x - this.min.x);\n newValueX = Math.round(newValueX / this.step) * this.step;\n let valueX = Math.min(Math.max(newValueX, this.min.x), this.max.x);\n //-----------------------------\n const percentageY = this.y / (saturationRec.height - thumbRec.height);\n let newValueY = this.min.y + percentageY * (this.max.y - this.min.y);\n newValueY = Math.round(newValueY / this.step) * this.step;\n let valueY = Math.min(Math.max(newValueY, this.min.y), this.max.y);\n const newValue = { x: valueX, y: valueY };\n if (\n !this.myControl.value ||\n this.myControl.value.x !== valueX ||\n this.myControl.value.y !== valueY\n ) {\n this.valueChanged(newValue);\n }\n }\n\n valueChanged(value: IPosition) {\n this.myControl.setValue(value, { emitEvent: false });\n this._onChange(value);\n this.change.emit(value);\n }\n}\n","<div\n class=\"saturation-container\"\n [style.width.px]=\"width\"\n [style.height.px]=\"height\"\n (mousedown)=\"dragStart($event)\"\n (touchstart)=\"dragStart($event)\">\n <div class=\"saturation\" #saturation>\n <div class=\"s-bg\" [style.background]=\"color\"></div>\n <div class=\"s-white\"></div>\n <div class=\"s-black\"></div>\n </div>\n <div class=\"thumb\" #thumb [style.left.px]=\"x\" [style.top.px]=\"y\"></div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n forwardRef,\n inject,\n OnInit,\n} from '@angular/core';\nimport { getOffsetPosition } from '../utils/get-offset-position';\nimport { startDragSession } from '../utils/drag-session';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n Validators,\n} from '@angular/forms';\n\n@Component({\n selector: 'slider',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './slider.component.html',\n styleUrls: ['./slider.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SliderComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SliderComponent),\n multi: true,\n },\n ],\n})\nexport class SliderComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {\n @Input() step = 1;\n @Input() min = 0;\n @Input() max = 100;\n @Input() background?: string;\n @Input() isBgTransparent = false;\n @Output() change = new EventEmitter<number>();\n isDragging = false;\n @ViewChild('slider', { static: true }) slider!: ElementRef<HTMLDivElement>;\n @ViewChild('thumb', { static: true }) thumb!: ElementRef<HTMLDivElement>;\n x = 0;\n myControl = new FormControl<number | null>(null);\n isDisabled = false;\n protected _onChange = (value: any) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n private sliderRect?: DOMRect;\n private thumbRect?: DOMRect;\n private stopDrag?: () => void;\n private readonly cd = inject(ChangeDetectorRef);\n constructor() {}\n ngOnInit(): void {\n this.myControl.setValidators([Validators.min(this.min), Validators.max(this.max)]);\n }\n\n ngOnDestroy(): void {\n this.stopDrag?.();\n }\n\n private updateRects() {\n this.sliderRect = this.slider.nativeElement.getBoundingClientRect();\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\n }\n\n writeValue(val?: number | string | null): void {\n let value = 0;\n if (!val) value = 0;\n else if (+val < +this.min) value = +this.min;\n else if (+val > +this.max) value = +this.max;\n else value = +val;\n this.myControl.setValue(value, { emitEvent: false });\n this.updateRects();\n const sliderRec = this.sliderRect!;\n const thumbRec = this.thumbRect!;\n this.x = ((value - this.min) * (sliderRec.width - thumbRec.width)) / (this.max - this.min);\n if (val !== value) {\n this.valueChanged(value);\n }\n }\n validate(control: AbstractControl): ValidationErrors | null {\n return this.myControl.errors;\n }\n registerOnValidatorChange?(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n setDisabledState?(disabled: boolean): void {\n this.isDisabled = disabled;\n if (disabled) this.myControl.disable();\n else this.myControl.enable();\n }\n\n dragStart(ev: MouseEvent | TouchEvent) {\n ev.stopPropagation();\n ev.preventDefault();\n this.isDragging = true;\n this.updateRects();\n this.updatePosition(ev);\n this.stopDrag?.();\n this.stopDrag = startDragSession({\n onMove: (moveEv) => this.updatePosition(moveEv),\n onEnd: () => {\n this.isDragging = false;\n this.stopDrag = undefined;\n this.cd.markForCheck();\n },\n });\n }\n\n @HostListener('window:resize')\n onResize() {\n this.writeValue(this.myControl.value);\n }\n\n private updatePosition(ev: MouseEvent | TouchEvent) {\n if (!this.isDragging) return;\n if (!this.sliderRect || !this.thumbRect) this.updateRects();\n let position = getOffsetPosition(ev, this.slider.nativeElement);\n let thumbRec = this.thumbRect!;\n position.x -= thumbRec.width / 2;\n let sliderRec = this.sliderRect!;\n if (position.x < 0) {\n this.x = 0;\n } else if (position.x > sliderRec.width - thumbRec.width) {\n this.x = sliderRec.width - thumbRec.width;\n } else {\n this.x = position.x;\n }\n this.setValueByPosition(thumbRec, sliderRec);\n // OnPush + addEventListener دستی (به‌جای HostListener) یعنی خودمون باید\n // view رو dirty کنیم، وگرنه thumb حین درگ روی صفحه آپدیت نمی‌شه.\n this.cd.markForCheck();\n }\n\n setValueByPosition(thumbRec: DOMRect, sliderRec: DOMRect) {\n const percentage = this.x / (sliderRec.width - thumbRec.width);\n let newValue = this.min + percentage * (this.max - this.min);\n const stepDecimalPlaces = (this.step.toString().split('.')[1] || '').length;\n newValue = parseFloat(\n (Math.round(newValue / this.step) * this.step).toFixed(stepDecimalPlaces),\n );\n let value = Math.min(Math.max(newValue, this.min), this.max);\n if (this.myControl.value !== value) {\n this.valueChanged(value);\n }\n }\n\n valueChanged(value: number) {\n this.myControl.setValue(value, { emitEvent: false });\n this._onChange(value);\n this.change.emit(value);\n }\n}\n","<div class=\"slider-container\">\n <ng-content></ng-content>\n <div\n #slider\n class=\"slider\"\n (mousedown)=\"dragStart($event)\"\n (touchstart)=\"dragStart($event)\"\n [ngStyle]=\"{ '--ngx-slider-bg': background }\"\n [class.bg-transparent]=\"isBgTransparent\">\n <div class=\"thumb\" #thumb [style.left.px]=\"x\" [title]=\"myControl.value\"></div>\n </div>\n</div>\n","import { inject, InjectionToken } from '@angular/core';\n\nexport const WINDOW = new InjectionToken<Window | null>('WINDOW', {\n factory: () => (typeof window !== 'undefined' ? window : null),\n});\n","export function randomStrnig(extraLength = 4, useNumeric = false) {\n const len = Math.max(0, Math.floor(extraLength));\n if (len === 0) return '';\n\n let charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n if (useNumeric) {\n charset += '0123456789';\n }\n const cryptoObj =\n typeof globalThis !== 'undefined'\n ? (globalThis as unknown as { crypto?: Crypto }).crypto\n : undefined;\n const out: string[] = new Array(len);\n\n if (cryptoObj?.getRandomValues) {\n const bytes = new Uint8Array(len);\n cryptoObj.getRandomValues(bytes);\n for (let i = 0; i < len; i++) {\n out[i] = charset[bytes[i] % charset.length];\n }\n } else {\n for (let i = 0; i < len; i++) {\n out[i] = charset[Math.floor(Math.random() * charset.length)];\n }\n }\n\n return `${Date.now().toString(36)}-${out.join('')}`;\n}\n","export function makeConfetti(doc: Document, wrap: HTMLElement) {\n wrap.innerHTML = '';\n const colors = ['#3ee08f', '#43e0d8', '#8b7bff', '#ffc45c'];\n for (let i = 0; i < 24; i++) {\n const s = doc.createElement('span');\n s.style.left = Math.random() * 100 + '%';\n s.style.background = colors[i % colors.length];\n s.style.animationDelay = Math.random() * 0.4 + 's';\n s.style.animationDuration = 1.2 + Math.random() * 0.8 + 's';\n s.style.borderRadius = Math.random() > 0.5 ? '50%' : '2px';\n wrap.appendChild(s);\n }\n}\n","export function generateSequentialGuid(): string {\n // تولید 10 بایت تصادفی\n const randomBytes = new Uint8Array(10);\n crypto.getRandomValues(randomBytes);\n\n // زمان بر حسب میلی‌ثانیه از epoch (1970)\n const now = Date.now();\n\n // 6 بایت از زمان (به big-endian)\n const timeBytes = new Uint8Array(6);\n const timeBig = BigInt(now);\n for (let i = 0; i < 6; i++) {\n timeBytes[5 - i] = Number((timeBig >> BigInt(i * 8)) & 0xffn);\n }\n\n // ترکیب: 10 بایت تصادفی + 6 بایت زمان\n const allBytes = new Uint8Array(16);\n allBytes.set(randomBytes, 0);\n allBytes.set(timeBytes, 10);\n\n // تبدیل به فرمت استاندارد GUID\n const hex = Array.from(allBytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n\n // اضافه کردن خط تیره‌ها در مکان‌های استاندارد UUID\n return `${hex.substring(0, 8)}-${hex.substring(8, 12)}-${hex.substring(12, 16)}-${hex.substring(\n 16,\n 20,\n )}-${hex.substring(20)}`;\n}\n","/**\n * Performs a deep merge of objects and returns new object. Does not modify\n * objects (immutable) and merges arrays via concatenation.\n *\n * @param {...object} objects - Objects to merge\n * @returns {object} New object with merged key/values\n */\nexport function mergeDeep(...objects: any[]) {\n const isObject = (obj: any) => obj && typeof obj === 'object';\n\n return objects.reduce((prev, obj) => {\n Object.keys(obj).forEach((key) => {\n const pVal = prev[key];\n const oVal = obj[key];\n\n if (Array.isArray(pVal) && Array.isArray(oVal)) {\n prev[key] = pVal.concat(...oVal);\n } else if (isObject(pVal) && isObject(oVal)) {\n prev[key] = mergeDeep(pVal, oVal);\n } else {\n prev[key] = oVal;\n }\n });\n\n return prev;\n }, {});\n}\n","/**\n * Filters a hierarchical tree while preserving the branches\n * that contain matching nodes.\n *\n * A node is included when:\n * - the filter function matches the node itself, or\n * - one or more of its descendants match.\n *\n * When only a descendant matches, a shallow copy of the parent\n * is returned with only the matching descendants preserved.\n *\n * @param data The tree nodes to filter.\n * @param filterFn Function used to determine whether a node matches.\n * @param options Optional filtering configuration.\n *\n * @example\n * ```ts\n * const result = filterTreeList(\n * dataTree,\n * item =>\n * item.name.toLowerCase().includes(filter) ||\n * item.type.toLowerCase().includes(filter),\n * );\n * ```\n *\n * @example\n * ```ts\n * const result = filterTreeList(\n * data,\n * item => item.title.includes('angular'),\n * { childrenKeyName: 'items' },\n * );\n * ```\n */\nexport function filterTreeList<T extends Record<string, any>>(\n data: readonly T[] | null | undefined,\n filterFn: (item: T) => boolean,\n options?: {\n childrenKeyName?: string;\n },\n): T[] {\n if (!data?.length) {\n return [];\n }\n\n const childrenKeyName = options?.childrenKeyName ?? 'children';\n\n return filterNodes(data, filterFn, childrenKeyName);\n}\n\nfunction filterNodes<T extends Record<string, any>>(\n nodes: readonly T[],\n filterFn: (item: T) => boolean,\n childrenKeyName: string,\n): T[] {\n const result: T[] = [];\n\n for (const node of nodes) {\n if (filterFn(node)) {\n result.push(node);\n continue;\n }\n\n const children = node[childrenKeyName];\n\n if (!Array.isArray(children) || children.length === 0) {\n continue;\n }\n\n const filteredChildren = filterNodes(children, filterFn, childrenKeyName);\n\n if (filteredChildren.length > 0) {\n result.push({\n ...node,\n [childrenKeyName]: filteredChildren,\n });\n }\n }\n\n return result;\n}\n","const COLOR_FUNCTION_REGEX = /\\b(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\\(\\s*[^)]*\\)/gi;\n\nconst HEX_COLOR_REGEX = /#[a-f\\d]{3,4}(?:[a-f\\d]{2}){0,2}\\b/gi;\n\n/**\n * CSS named colors.\n *\n * Includes all standard CSS color keywords plus:\n * - transparent\n * - currentcolor\n */\nexport const CSS_COLOR_NAMES: Record<string, string> = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n\n/**\n * Extract all CSS colors from an arbitrary CSS string.\n *\n * Supports:\n * - Hex: #fff, #ffff, #ffffff, #ffffffff\n * - rgb()\n * - rgba()\n * - hsl()\n * - hsla()\n * - hwb()\n * - lab()\n * - lch()\n * - oklab()\n * - oklch()\n * - color()\n * - CSS named colors\n * - transparent\n * - currentcolor\n *\n * Works with values such as:\n *\n * box-shadow: 0 0 10px red, 0 0 20px #00ff00;\n * linear-gradient(red, rgba(0, 0, 0, .5));\n * radial-gradient(circle, blue 0%, transparent 100%);\n * conic-gradient(from 90deg, yellow, #ff0000);\n */\nexport function extractCssColors(value: string | null | undefined): string[] {\n if (!value) {\n return [];\n }\n\n const colors: string[] = [];\n const seen = new Set<string>();\n\n const addColor = (color: string): void => {\n const normalized = color.trim();\n\n if (!normalized) {\n return;\n }\n\n const key = normalized.toLowerCase();\n\n if (seen.has(key)) {\n return;\n }\n\n seen.add(key);\n colors.push(normalized);\n };\n\n // ---------------------------------------------------------\n // 1. Hex colors\n // ---------------------------------------------------------\n\n for (const match of value.matchAll(HEX_COLOR_REGEX)) {\n addColor(match[0]);\n }\n\n // ---------------------------------------------------------\n // 2. CSS color functions\n // ---------------------------------------------------------\n\n for (const match of value.matchAll(COLOR_FUNCTION_REGEX)) {\n const candidate = match[0];\n\n if (isValidCssColor(candidate)) {\n addColor(candidate);\n }\n }\n\n // ---------------------------------------------------------\n // 3. Named colors\n // ---------------------------------------------------------\n\n /**\n * We intentionally extract words instead of putting all named\n * colors into one huge regex.\n */\n const words = value.match(/\\b[a-z][a-z0-9-]*\\b/gi) ?? [];\n\n for (const word of words) {\n const normalized = word.toLowerCase();\n\n if (!CSS_COLOR_NAMES[normalized]) {\n continue;\n }\n\n if (isValidCssColor(word)) {\n addColor(word);\n }\n }\n\n return colors;\n}\n\n/**\n * Uses the browser's CSS parser to validate a color.\n *\n * This is much safer than trying to validate every possible\n * CSS color syntax manually.\n */\nfunction isValidCssColor(value: string): boolean {\n if (typeof CSS !== 'undefined' && typeof CSS.supports === 'function') {\n return CSS.supports('color', value);\n }\n\n // SSR / Node fallback.\n return isFallbackCssColor(value);\n}\n\n/**\n * Minimal validation for environments without CSS.supports(),\n * such as SSR or Node tests.\n */\nfunction isFallbackCssColor(value: string): boolean {\n const normalized = value.trim().toLowerCase();\n\n if (CSS_COLOR_NAMES[normalized]) {\n return true;\n }\n\n return /^#[a-f\\d]{3,4}(?:[a-f\\d]{2}){0,2}$/i.test(normalized);\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BrowserService {\n constructor(@Inject(PLATFORM_ID) private platformId: object) {}\n\n get isBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n\n get prefersDarkMode(): boolean {\n if (!this.isBrowser) return false;\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { computed, DestroyRef, inject, Injectable, signal } from '@angular/core';\n\nexport type Direction = 'ltr' | 'rtl';\n\n/**\n * جهت واقعیِ سند را تشخیص می‌دهد: اول dir روی <body>، بعد dir روی <html>،\n * و در نهایت مقدار محاسبه‌شده‌ی CSS (getComputedStyle) به‌عنوان fallback\n * (برای وقتی جهت با استایل/کلاس تنظیم شده، نه attribute مستقیم).\n */\nfunction resolveDirection(doc: Document): Direction {\n const bodyDir = doc.body?.dir;\n if (bodyDir === 'rtl' || bodyDir === 'ltr') return bodyDir;\n\n const htmlDir = doc.documentElement.dir;\n if (htmlDir === 'rtl' || htmlDir === 'ltr') return htmlDir;\n\n return getComputedStyle?.(doc.documentElement)?.direction === 'rtl' ? 'rtl' : 'ltr';\n}\n\n/**\n * جهت صفحه را به‌صورت خودکار و زنده تشخیص می‌دهد — بدون این‌که کاربرِ این\n * سرویس مجبور باشد چیزی به آن بدهد. هر تغییری در attribute های dir/class\n * روی <html> یا <body> (چه از طریق Angular، چه با یک تم‌سوییچر خارج از\n * Angular) بلافاصله signal را آپدیت می‌کند.\n *\n * نکته: effect() اینجا جواب نمی‌دهد چون هیچ‌کدام از این مقادیر (attribute\n * روی DOM) یک Signal نیستند؛ effect فقط به تغییر Signalها reactive است، نه\n * به تغییرات دلخواه DOM. برای گوش‌دادن به تغییرات DOM باید از MutationObserver\n * استفاده کرد و مقدار را دستی داخل یک Signal نوشت (که دقیقاً کاری است که\n * این سرویس انجام می‌دهد).\n */\n@Injectable({ providedIn: 'root' })\nexport class DirectionService {\n private readonly doc = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly _direction = signal<Direction>(resolveDirection(this.doc));\n\n /** جهت جاری، به‌صورت Signal فقط-خواندنی. */\n readonly direction = this._direction.asReadonly();\n readonly isRtl = computed(() => this._direction() === 'rtl');\n\n constructor() {\n const observer = new MutationObserver(() => {\n const next = resolveDirection(this.doc );\n if (next !== this._direction()) {\n this._direction.set(next);\n }\n });\n\n const options: MutationObserverInit = { attributes: true, attributeFilter: ['dir', 'class'] };\n observer.observe(this.doc.documentElement, options);\n if (this.doc.body) observer.observe(this.doc.body, options);\n\n this.destroyRef.onDestroy(() => observer.disconnect());\n }\n}\n","import { ComponentRef, TemplateRef } from '@angular/core';\n\nexport class OverlayRef<T> {\n constructor(\n private readonly element: HTMLElement | null,\n private readonly closeFn: () => void,\n readonly componentRef?: ComponentRef<T>,\n readonly template?: TemplateRef<unknown>,\n ) {}\n\n close(): void {\n this.closeFn();\n }\n\n get nativeElement(): HTMLElement | null {\n return this.element;\n }\n\n static noop<T>(): OverlayRef<T> {\n return new OverlayRef<T>(null, () => {});\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n ApplicationRef,\n ComponentRef,\n EmbeddedViewRef,\n EnvironmentInjector,\n Injectable,\n Injector,\n PLATFORM_ID,\n TemplateRef,\n ViewContainerRef,\n createComponent,\n inject,\n} from '@angular/core';\n\nimport { Alignment, OverlayOptions, Placement, TemplateOptions } from './overlay-options';\nimport { OverlayRef } from './overlay-ref';\nimport { PlacementConfig } from './placement-config';\nimport { DirectionService } from '../services/direction.service';\n\nexport const FOCUSABLE_SELECTOR = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\nexport const DIALOG_OVERLAY_CLASSNAME = 'ngx-ui-overlay';\nexport const OVERLAY_HOST_CLASSNAME = 'ngx-ui-overlay-host';\n\nconst BASE_Z_INDEX = 1000;\n\ninterface OverlayInstance<T = unknown> {\n host: HTMLElement;\n backdrop: HTMLElement;\n element: HTMLElement;\n anchor?: HTMLElement;\n point?: { x: number; y: number };\n placementConfig: PlacementConfig;\n\n usePopover: boolean;\n closeOnEscape: boolean;\n closeOnOutsideClick: boolean;\n canClose?: () => boolean;\n autoFocus: boolean;\n restoreFocus: boolean;\n lockBodyScroll: boolean;\n\n componentRef?: ComponentRef<T>;\n /** true when `componentRef` was attached directly to the ApplicationRef\n * (no ViewContainerRef supplied) and therefore needs an explicit detach. */\n attachedToAppRef?: boolean;\n embeddedView?: EmbeddedViewRef<unknown>;\n appRef?: {\n attachView(view: EmbeddedViewRef<unknown>): void;\n detachView(view: EmbeddedViewRef<unknown>): void;\n };\n\n onClosed?: () => void;\n previousActiveElement: HTMLElement | null;\n rafId: number | null;\n focusTimeoutId: ReturnType<typeof setTimeout> | null;\n cleanup: () => void;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OverlayService {\n private readonly document = inject(DOCUMENT);\n private readonly directionService = inject(DirectionService);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly applicationRef = inject(ApplicationRef);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private readonly overlayStack: OverlayInstance[] = [];\n private globalListenersAttached = false;\n private layoutRaf: number | null = null;\n\n private bodyScrollLockCount = 0;\n private previousBodyOverflow: string | null = null;\n private previousBodyPaddingRight: string | null = null;\n\n private get isBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n\n /** Number of overlays currently open. */\n get openCount(): number {\n return this.overlayStack.length;\n }\n\n open<T>(options: OverlayOptions<T>): OverlayRef<T> {\n if (!this.isBrowser) {\n return OverlayRef.noop<T>();\n }\n\n const { component, viewContainerRef, configure, onClosed } = options;\n const instance = this.createComponentInstance<T>(options, component, viewContainerRef);\n this.pushInstance(instance);\n this.renderHost(instance);\n this.attachGlobalListeners();\n instance.onClosed = onClosed;\n configure?.(\n instance.componentRef!.instance,\n new OverlayRef(instance.element, instance.cleanup, instance.componentRef),\n );\n this.scheduleInitialLayout(instance);\n return new OverlayRef(instance.element, instance.cleanup, instance.componentRef);\n }\n\n openTemplate(options: TemplateOptions): OverlayRef<any> {\n if (!this.isBrowser) {\n return OverlayRef.noop();\n }\n const { template, appRef, configure, onClosed } = options;\n const instance = this.createTemplateInstance(options, template, appRef ?? this.applicationRef);\n this.pushInstance(instance);\n this.renderHost(instance);\n this.attachGlobalListeners();\n instance.onClosed = onClosed;\n const ref = new OverlayRef(instance.element, instance.cleanup, undefined, template);\n configure?.(instance, ref);\n this.scheduleInitialLayout(instance);\n return ref;\n }\n\n closeAll(): void {\n if (!this.isBrowser) {\n return;\n }\n [...this.overlayStack].forEach((instance) => {\n instance.cleanup();\n });\n }\n\n // ---------------------------------------------------------------------------\n // instance creation\n // ---------------------------------------------------------------------------\n\n private createComponentInstance<T>(\n options: OverlayOptions<T>,\n component: OverlayOptions<T>['component'],\n viewContainerRef: ViewContainerRef | undefined,\n ): OverlayInstance<T> {\n const host = this.createHostElement(options);\n const backdrop = this.createBackdropElement(options);\n const element = this.createOverlayElement(options);\n\n host.appendChild(backdrop);\n host.appendChild(element);\n\n let componentRef: ComponentRef<T>;\n let attachedToAppRef = false;\n if (viewContainerRef) {\n componentRef = viewContainerRef.createComponent<T>(component, {\n injector: options.injector,\n environmentInjector: options.environmentInjector,\n });\n } else {\n // No host ViewContainerRef available (e.g. a global service opening an\n // overlay outside of any component template) - create and attach the\n // component directly against the application, like a root component.\n const elementInjector = options.injector ?? Injector.NULL;\n componentRef = createComponent<T>(component, {\n environmentInjector: options.environmentInjector ?? this.environmentInjector,\n elementInjector: options.injector,\n });\n this.applicationRef.attachView(componentRef.hostView);\n attachedToAppRef = true;\n }\n element.appendChild(componentRef.location.nativeElement);\n\n const instance: OverlayInstance<T> = {\n host,\n backdrop,\n element,\n anchor: options.anchor,\n point: options.point,\n placementConfig: this.resolvePlacementConfig(\n options.placement,\n options.alignment,\n options.margin,\n ),\n usePopover: this.resolveUsePopover(options),\n closeOnEscape: options.closeOnEscape ?? true,\n closeOnOutsideClick: options.closeOnOutsideClick ?? true,\n canClose: options.canClose,\n autoFocus: options.autoFocus ?? true,\n restoreFocus: options.restoreFocus ?? true,\n lockBodyScroll: options.lockBodyScroll ?? false,\n componentRef,\n attachedToAppRef,\n previousActiveElement: this.getActiveElement(),\n rafId: null,\n focusTimeoutId: null,\n cleanup: () => {},\n };\n instance.cleanup = () => this.destroyInstance(instance);\n return instance;\n }\n\n private createTemplateInstance(\n options: TemplateOptions,\n template: TemplateRef<unknown>,\n appRef: {\n attachView(view: EmbeddedViewRef<unknown>): void;\n detachView(view: EmbeddedViewRef<unknown>): void;\n },\n ): OverlayInstance {\n const host = this.createHostElement(options);\n const backdrop = this.createBackdropElement(options);\n const element = this.createOverlayElement(options);\n host.appendChild(backdrop);\n host.appendChild(element);\n const view = template.createEmbeddedView({});\n appRef.attachView(view);\n element.append(...view.rootNodes);\n const instance: OverlayInstance = {\n host,\n backdrop,\n element,\n anchor: options.anchor,\n point: options.point,\n placementConfig: this.resolvePlacementConfig(\n options.placement,\n options.alignment,\n options.margin,\n ),\n usePopover: this.resolveUsePopover(options),\n closeOnEscape: options.closeOnEscape ?? true,\n closeOnOutsideClick: options.closeOnOutsideClick ?? true,\n canClose: options.canClose,\n autoFocus: options.autoFocus ?? true,\n restoreFocus: options.restoreFocus ?? true,\n lockBodyScroll: options.lockBodyScroll ?? false,\n embeddedView: view,\n appRef,\n previousActiveElement: this.getActiveElement(),\n rafId: null,\n focusTimeoutId: null,\n cleanup: () => {},\n };\n instance.cleanup = () => this.destroyInstance(instance);\n return instance;\n }\n\n private pushInstance(instance: OverlayInstance): void {\n this.overlayStack.push(instance);\n // Only matters as a fallback for browsers without the Popover API -\n // real popovers stack by top-layer show order regardless of z-index.\n instance.host.style.zIndex = String(BASE_Z_INDEX + this.overlayStack.length);\n if (instance.lockBodyScroll) {\n this.lockBodyScroll();\n }\n }\n\n // ---------------------------------------------------------------------------\n // DOM\n // ---------------------------------------------------------------------------\n\n private createHostElement(options: { usePopover?: boolean }): HTMLElement {\n const usePopover = this.resolveUsePopover(options);\n const host = this.document.createElement('div');\n host.className = OVERLAY_HOST_CLASSNAME;\n host.setAttribute('data-ngx-overlay', '');\n host.style.position = 'fixed';\n host.style.inset = '0';\n // Neutralize the browser's default `[popover]` UA stylesheet\n // (margin: auto; width/height: fit-content; border: solid; padding: .25em;\n // background: Canvas; overflow: auto) so the host reliably fills the\n // viewport whether or not it ends up being a real popover.\n host.style.margin = '0';\n host.style.padding = '0';\n host.style.border = 'none';\n host.style.width = '100%';\n host.style.height = '100%';\n host.style.maxWidth = 'none';\n host.style.maxHeight = 'none';\n host.style.overflow = 'visible';\n host.style.background = 'transparent';\n host.style.color = 'inherit';\n host.style.zIndex = String(BASE_Z_INDEX);\n host.style.pointerEvents = 'auto';\n\n // Popover goes on the ROOT element, not the inner panel. This puts the\n // whole overlay (backdrop + panel) in the top layer as a single unit,\n // so stacking \"just works\" above everything on the page - including\n // ancestors with `overflow: hidden`, `transform`, or their own z-index\n // stacking contexts, which regular `position: fixed` cannot escape.\n // The inner `element` stays a normal `position: fixed` div and keeps\n // computing against the viewport, so all the placement math is unchanged.\n if (usePopover) {\n host.setAttribute('popover', 'manual');\n }\n\n return host;\n }\n\n private createBackdropElement(options: { backdropClass?: string | string[] }): HTMLElement {\n const backdrop = this.document.createElement('div');\n backdrop.className = 'ngx-ui-overlay-backdrop';\n backdrop.style.position = 'absolute';\n backdrop.style.inset = '0';\n backdrop.style.pointerEvents = 'auto';\n backdrop.style.background = 'transparent';\n this.addClasses(backdrop, options.backdropClass);\n return backdrop;\n }\n\n private createOverlayElement(options: {\n panelClass?: string | string[];\n role?: string;\n ariaModal?: boolean;\n ariaLabel?: string;\n ariaLabelledby?: string;\n ariaDescribedby?: string;\n }): HTMLElement {\n const element = this.document.createElement('div');\n element.className = DIALOG_OVERLAY_CLASSNAME;\n element.setAttribute('role', options.role ?? 'dialog');\n if (options.ariaModal ?? true) {\n element.setAttribute('aria-modal', 'true');\n }\n if (options.ariaLabel) {\n element.setAttribute('aria-label', options.ariaLabel);\n }\n if (options.ariaLabelledby) {\n element.setAttribute('aria-labelledby', options.ariaLabelledby);\n }\n if (options.ariaDescribedby) {\n element.setAttribute('aria-describedby', options.ariaDescribedby);\n }\n element.setAttribute('tabindex', '-1');\n element.style.position = 'fixed';\n element.style.pointerEvents = 'auto';\n element.style.boxSizing = 'border-box';\n element.style.maxWidth = '100dvw'; // 'calc(100vw - 16px)';\n element.style.maxHeight = '100dvh'; // 'calc(100vh - 16px)';\n element.style.outline = 'none';\n element.style.border = 'none';\n element.style.padding = '0';\n element.style.margin = '0';\n element.style.overflow = 'auto';\n element.style.transformOrigin = 'left top';\n element.style.background = 'none';\n element.style.filter = 'drop-shadow(0px 0px 6px black)';\n element.style.borderRadius = 'var(--ngx-dialog-corner-radius,8px)';\n this.addClasses(element, options.panelClass);\n return element;\n }\n\n private addClasses(element: HTMLElement, classes: string | string[] | undefined): void {\n if (!classes) {\n return;\n }\n const list = Array.isArray(classes) ? classes : classes.split(' ');\n for (const c of list) {\n if (c.trim()) {\n element.classList.add(c.trim());\n }\n }\n }\n\n private renderHost(instance: OverlayInstance): void {\n this.document.body.appendChild(instance.host);\n // Must show the popover (enter the top layer) BEFORE we ever measure\n // `instance.element`'s rect - while a popover host is closed it's\n // `display: none`, and everything inside it (including the panel)\n // would measure as a 0x0 box.\n this.showHostPopover(instance);\n instance.element.style.visibility = 'hidden';\n instance.element.style.position = 'fixed';\n instance.element.style.top = '0';\n instance.element.style.left = '0';\n }\n\n // ---------------------------------------------------------------------------\n // lifecycle\n // ---------------------------------------------------------------------------\n\n private destroyInstance(instance: OverlayInstance): void {\n const index = this.overlayStack.indexOf(instance);\n if (index === -1) {\n return;\n }\n this.overlayStack.splice(index, 1);\n if (instance.rafId !== null) {\n this.cancelAnimationFrame(instance.rafId);\n instance.rafId = null;\n }\n if (instance.focusTimeoutId !== null) {\n clearTimeout(instance.focusTimeoutId);\n instance.focusTimeoutId = null;\n }\n if (instance.componentRef) {\n if (instance.attachedToAppRef) {\n this.applicationRef.detachView(instance.componentRef.hostView);\n }\n instance.componentRef.destroy();\n instance.componentRef = undefined;\n }\n if (instance.embeddedView && instance.appRef) {\n instance.appRef.detachView(instance.embeddedView);\n instance.embeddedView.destroy();\n instance.embeddedView = undefined;\n }\n this.hideHostPopover(instance);\n instance.host.remove();\n if (instance.lockBodyScroll) {\n this.unlockBodyScroll();\n }\n instance.onClosed?.();\n // Only tear down the shared/global listeners once *every* overlay is\n // closed - previously this ran unconditionally on every close, which\n // silently broke Escape/outside-click/reposition for any overlays that\n // were still open underneath.\n if (this.overlayStack.length === 0) {\n this.detachGlobalListeners();\n }\n if (instance.restoreFocus) {\n this.restoreFocus(instance.previousActiveElement);\n }\n }\n\n // ---------------------------------------------------------------------------\n // popover helpers\n // ---------------------------------------------------------------------------\n\n private resolveUsePopover(options: { usePopover?: boolean }): boolean {\n return (options.usePopover ?? true) && this.supportsPopover();\n }\n\n private showHostPopover(instance: OverlayInstance): void {\n if (!instance.usePopover) {\n return;\n }\n try {\n instance.host.showPopover();\n } catch {\n // Already open, or environment doesn't fully support it - ignore.\n }\n }\n\n private hideHostPopover(instance: OverlayInstance): void {\n if (!instance.usePopover) {\n return;\n }\n try {\n if (instance.host.matches(':popover-open')) {\n instance.host.hidePopover();\n }\n } catch {\n // Not open, or already removed from the DOM - ignore.\n }\n }\n\n private supportsPopover(): boolean {\n return (\n typeof HTMLElement !== 'undefined' &&\n 'popover' in HTMLElement.prototype &&\n typeof HTMLElement.prototype.showPopover === 'function' &&\n typeof HTMLElement.prototype.hidePopover === 'function'\n );\n }\n\n // ---------------------------------------------------------------------------\n // body scroll lock\n // ---------------------------------------------------------------------------\n\n private lockBodyScroll(): void {\n if (!this.isBrowser) {\n return;\n }\n this.bodyScrollLockCount++;\n if (this.bodyScrollLockCount > 1) {\n return;\n }\n const body = this.document.body;\n this.previousBodyOverflow = body.style.overflow;\n this.previousBodyPaddingRight = body.style.paddingRight;\n const scrollbarWidth = window.innerWidth - this.document.documentElement.clientWidth;\n body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n const currentPaddingRight = parseFloat(window.getComputedStyle(body).paddingRight) || 0;\n body.style.paddingRight = `${currentPaddingRight + scrollbarWidth}px`;\n }\n }\n\n private unlockBodyScroll(): void {\n if (this.bodyScrollLockCount === 0) {\n return;\n }\n this.bodyScrollLockCount--;\n if (this.bodyScrollLockCount > 0) {\n return;\n }\n const body = this.document.body;\n body.style.overflow = this.previousBodyOverflow ?? '';\n body.style.paddingRight = this.previousBodyPaddingRight ?? '';\n this.previousBodyOverflow = null;\n this.previousBodyPaddingRight = null;\n }\n\n // ---------------------------------------------------------------------------\n // global listeners\n // ---------------------------------------------------------------------------\n\n private attachGlobalListeners(): void {\n if (!this.isBrowser || this.globalListenersAttached) {\n return;\n }\n // Flip the flag synchronously to avoid a race: if two overlays open in\n // the same tick, the second call must see the flag already set instead\n // of scheduling a second (duplicate) round of addEventListener calls.\n this.globalListenersAttached = true;\n setTimeout(() => {\n this.document.addEventListener('keydown', this.onDocumentKeydown);\n this.document.addEventListener('click', this.onDocumentClick);\n this.document.addEventListener('contextmenu', this.onDocumentContextMenu);\n this.document.addEventListener('scroll', this.onDocumentScroll, true);\n window.addEventListener('resize', this.onWindowResize);\n }, 0);\n }\n\n private detachGlobalListeners(): void {\n if (!this.isBrowser || !this.globalListenersAttached) {\n return;\n }\n this.globalListenersAttached = false;\n this.document.removeEventListener('keydown', this.onDocumentKeydown);\n this.document.removeEventListener('click', this.onDocumentClick);\n this.document.removeEventListener('contextmenu', this.onDocumentContextMenu);\n this.document.removeEventListener('scroll', this.onDocumentScroll, true);\n window.removeEventListener('resize', this.onWindowResize);\n }\n\n private readonly onDocumentKeydown = (event: KeyboardEvent): void => {\n const instance = this.getLastInstance();\n if (!instance) {\n return;\n }\n if (event.key === 'Escape') {\n if (!instance.closeOnEscape || (instance.canClose && !instance.canClose())) {\n return;\n }\n event.preventDefault();\n instance.cleanup();\n return;\n }\n if (event.key === 'Tab') {\n this.trapFocus(event, instance);\n }\n };\n\n private readonly onDocumentClick = (event: MouseEvent): void => {\n const instance = this.getLastInstance();\n if (!instance) {\n return;\n }\n const target = event.target as Node | null;\n if (!target) {\n return;\n }\n if (instance.element.contains(target)) {\n return;\n }\n if (instance.anchor && instance.anchor.contains(target)) {\n return;\n }\n if (!instance.closeOnOutsideClick || (instance.canClose && !instance.canClose())) {\n return;\n }\n if (event.target !== instance.backdrop) {\n return;\n }\n instance.cleanup();\n };\n\n private readonly onDocumentContextMenu = (event: MouseEvent): void => {\n const instance = this.getLastInstance();\n if (!instance) {\n return;\n }\n if (instance.point && instance.anchor && instance.anchor.contains(event.target as Node)) {\n event.preventDefault();\n instance.point = {\n x: event.clientX,\n y: event.clientY,\n };\n this.scheduleReposition();\n return;\n }\n if (instance.element.contains(event.target as Node)) {\n return;\n }\n if (!instance.closeOnOutsideClick || (instance.canClose && !instance.canClose())) {\n return;\n }\n if (event.target !== instance.backdrop) {\n return;\n }\n instance.cleanup();\n };\n\n private readonly onDocumentScroll = (): void => {\n this.scheduleReposition();\n };\n\n private readonly onWindowResize = (): void => {\n this.scheduleReposition();\n };\n\n private scheduleReposition(): void {\n if (this.layoutRaf !== null) {\n return;\n }\n this.layoutRaf = this.requestAnimationFrame(() => {\n this.layoutRaf = null;\n const instances = [...this.overlayStack];\n for (const instance of instances) {\n this.positionOverlay(instance);\n }\n });\n }\n\n // ---------------------------------------------------------------------------\n // focus\n // ---------------------------------------------------------------------------\n\n private scheduleInitialLayout(instance: OverlayInstance): void {\n instance.rafId = this.requestAnimationFrame(() => {\n instance.rafId = null;\n this.positionOverlay(instance);\n if (!instance.autoFocus) {\n return;\n }\n instance.focusTimeoutId = setTimeout(() => {\n instance.focusTimeoutId = null;\n this.focusInitialElement(instance);\n }, 0);\n });\n }\n\n private focusInitialElement(instance: OverlayInstance): void {\n const focusable = instance.element.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n focusable?.focus() ?? instance.element.focus();\n }\n\n private trapFocus(event: KeyboardEvent, instance: OverlayInstance): void {\n const elements = Array.from(instance.element.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n if (!elements.length) {\n event.preventDefault();\n instance.element.focus();\n return;\n }\n const first = elements[0];\n const last = elements[elements.length - 1];\n const active = this.getActiveElement();\n if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n return;\n }\n if (event.shiftKey && active === first) {\n event.preventDefault();\n last.focus();\n }\n }\n\n private restoreFocus(element: HTMLElement | null): void {\n if (element && element.isConnected) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n\n private getActiveElement(): HTMLElement | null {\n const active = this.document.activeElement;\n return active?.nodeType === Node.ELEMENT_NODE ? (active as HTMLElement) : null;\n }\n\n // ---------------------------------------------------------------------------\n // positioning\n // ---------------------------------------------------------------------------\n\n private positionOverlay(instance: OverlayInstance): void {\n if (!instance.host.isConnected || !instance.element.isConnected) {\n return;\n }\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const anchorRect = this.getAnchorRect(instance);\n const overlay = instance.element;\n const overlayRect = overlay.getBoundingClientRect();\n const { placement, alignment, margin } = instance.placementConfig;\n const isRTL = this.directionService.isRtl();\n\n let top: number;\n if (placement === 'center') {\n top = anchorRect.top + anchorRect.height / 2 - overlayRect.height / 2;\n } else {\n const spaceBelow = viewportHeight - anchorRect.bottom;\n const placeBelow =\n placement === 'bottom' ||\n (placement === 'auto' && spaceBelow >= overlayRect.height + margin);\n if (placeBelow) {\n top = anchorRect.bottom + margin;\n } else {\n top = anchorRect.top - overlayRect.height - margin;\n }\n overlay.classList.toggle('tips-below', placeBelow);\n overlay.classList.toggle('tips-above', !placeBelow);\n }\n if (top + overlayRect.height > viewportHeight - margin) {\n top = viewportHeight - overlayRect.height - margin;\n }\n if (top < margin) {\n top = margin;\n }\n\n let left: number;\n switch (alignment) {\n case 'center':\n left = anchorRect.left + anchorRect.width / 2 - overlayRect.width / 2;\n break;\n case 'end':\n left = isRTL ? anchorRect.left : anchorRect.right - overlayRect.width;\n break;\n case 'start':\n default:\n left = isRTL ? anchorRect.right - overlayRect.width : anchorRect.left;\n break;\n }\n left = Math.min(\n Math.max(left, margin),\n Math.max(margin, viewportWidth - overlayRect.width - margin),\n );\n overlay.style.top = `${Math.round(top)}px`;\n overlay.style.left = `${Math.round(left)}px`;\n overlay.style.right = 'auto';\n overlay.style.bottom = 'auto';\n overlay.style.visibility = 'visible';\n // NOTE: showPopover() is intentionally NOT called here. It already\n // happened once in renderHost(); calling it again on every reposition\n // (scroll/resize) throws InvalidStateError since the popover is\n // already open.\n }\n\n private getAnchorRect(instance: OverlayInstance): DOMRect {\n if (instance.point) {\n return new DOMRect(instance.point.x, instance.point.y, 0, 0);\n }\n if (instance.anchor && instance.anchor.isConnected) {\n return instance.anchor.getBoundingClientRect();\n }\n return new DOMRect(window.innerWidth / 2, window.innerHeight / 2, 0, 0);\n }\n\n private resolvePlacementConfig(\n placement?: Placement,\n alignment?: Alignment,\n margin?: number,\n ): PlacementConfig {\n return {\n placement: placement ?? 'auto',\n alignment: alignment ?? 'start',\n margin: margin ?? 8,\n };\n }\n\n // ---------------------------------------------------------------------------\n // utilities\n // ---------------------------------------------------------------------------\n\n private getLastInstance(): OverlayInstance | undefined {\n return this.overlayStack[this.overlayStack.length - 1];\n }\n\n private requestAnimationFrame(callback: FrameRequestCallback): number {\n if (typeof window.requestAnimationFrame === 'function') {\n return window.requestAnimationFrame(callback);\n }\n return window.setTimeout(() => callback(Date.now()), 16) as unknown as number;\n }\n\n private cancelAnimationFrame(id: number): void {\n if (typeof window.cancelAnimationFrame === 'function') {\n window.cancelAnimationFrame(id);\n } else {\n clearTimeout(id as unknown as ReturnType<typeof setTimeout>);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}