ngx-kit 3.2.0 → 4.0.0

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-shared.mjs","sources":["../../../projects/libs/shared/utils/get-offset-position.ts","../../../projects/libs/shared/range-slider/range-slider.component.ts","../../../projects/libs/shared/range-slider/range-slider.component.html","../../../projects/libs/shared/saturation/saturation.component.ts","../../../projects/libs/shared/saturation/saturation.component.html","../../../projects/libs/shared/slider/slider.component.ts","../../../projects/libs/shared/slider/slider.component.html","../../../projects/libs/shared/utils/window.ts","../../../projects/libs/shared/utils/string.ts","../../../projects/libs/shared/utils/is-rtl.ts","../../../projects/libs/shared/utils/confetti.ts","../../../projects/libs/shared/services/browser.service.ts","../../../projects/libs/shared/overlay/overlay-ref.ts","../../../projects/libs/shared/overlay/overlay.service.ts","../../../projects/libs/shared/ngx-kit-shared.ts"],"sourcesContent":["export function getOffsetPosition(\r\n evt: MouseEvent | TouchEvent,\r\n parent: HTMLElement\r\n) {\r\n let position = {\r\n x: 0,\r\n y: 0,\r\n };\r\n\r\n if (evt instanceof MouseEvent) {\r\n position.x = evt.pageX;\r\n position.y = evt.pageY;\r\n } else if (evt.touches && evt.touches.length > 0) {\r\n position.x = evt.touches[0].pageX;\r\n position.y = evt.touches[0].pageY;\r\n }\r\n\r\n // Adjust for the parent's offset\r\n let parentRect = parent.getBoundingClientRect();\r\n position.x -= parentRect.left + window.scrollX;\r\n position.y -= parentRect.top + window.scrollY;\r\n\r\n return position;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewChild,\r\n forwardRef,\r\n type OnInit,\r\n} from '@angular/core';\r\nimport { getOffsetPosition } from '../utils/get-offset-position';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\n\r\nexport interface IValue {\r\n id?: string;\r\n value: number;\r\n}\r\nexport class ValueModel {\r\n id!: string;\r\n value!: number;\r\n x?: number;\r\n thumb?: HTMLElement;\r\n color?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'range-slider',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n templateUrl: './range-slider.component.html',\r\n styleUrls: ['./range-slider.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RangeSliderComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => RangeSliderComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class RangeSliderComponent implements OnInit, ControlValueAccessor, Validator {\r\n /**\r\n * The step value for the slider\r\n */\r\n @Input() step = 1;\r\n /**\r\n * The minimum value for the slider\r\n */\r\n @Input() min = 0;\r\n /**\r\n * The maximum value for the slider\r\n */\r\n @Input() max = 100;\r\n /**\r\n * The background color of the slider\r\n * - can use css like `background: linear-gradient(to right, red, blue);`\r\n * - or a solid color like `background: red;`\r\n */\r\n @Input() background?: string;\r\n /**\r\n * If true, the background will be transparent\r\n */\r\n @Input() isBgTransparent = false;\r\n /**\r\n * If true, clicking on the slider will add a new range at that position\r\n */\r\n @Input() addNewRangeOnClick = false;\r\n\r\n /**\r\n * The current value of the slider\r\n */\r\n @Output() change = new EventEmitter<IValue[]>();\r\n @Input() selectedIndex?: number;\r\n @Output() selectedIndexChange = new EventEmitter<number>();\r\n\r\n private isDragging = false;\r\n\r\n @ViewChild('slider', { static: true }) slider!: ElementRef<HTMLDivElement>;\r\n @ViewChild('thumb', { static: false }) thumb?: ElementRef<HTMLDivElement>;\r\n\r\n values: ValueModel[] = [];\r\n isDisabled = false;\r\n protected _onChange = (value: IValue[]) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n private sliderRect?: DOMRect;\r\n private thumbRect?: DOMRect;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {}\r\n ngOnInit(): void {}\r\n\r\n private generateId(): string {\r\n let id = 'ngx-thumb-' + Math.random().toString(36).substring(2, 9);\r\n if (this.values.findIndex((x) => x.id == id) >= 0) {\r\n return this.generateId();\r\n }\r\n return id;\r\n }\r\n\r\n writeValue(items?: IValue[]): void {\r\n this.values = [];\r\n if (!items || !Array.isArray(items)) {\r\n items = [];\r\n }\r\n if (items.length === 0) {\r\n items.push({ id: this.generateId(), value: this.min });\r\n }\r\n for (let val of items) {\r\n if (typeof val.value !== 'number' || isNaN(val.value)) {\r\n throw new Error('RangeSliderComponent: value must be an array of numbers');\r\n }\r\n let newVal = +val.value;\r\n if (newVal < +this.min) newVal = +this.min;\r\n else if (newVal > +this.max) newVal = +this.max;\r\n this.values.push({\r\n ...val,\r\n id: val.id ?? this.generateId(),\r\n value: newVal,\r\n });\r\n }\r\n this.updateAllThumbPositions();\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return null; // TODO: return errors if any;\r\n }\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n setDisabledState?(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n }\r\n private updateRects() {\r\n this.sliderRect = this.slider.nativeElement.getBoundingClientRect();\r\n if (this.thumb) {\r\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\r\n }\r\n }\r\n @HostListener('document:mousemove', ['$event'])\r\n @HostListener('document:touchmove', ['$event'])\r\n onDrag(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging) return;\r\n this.updateThumbPosition(ev);\r\n }\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.writeValue(this.values);\r\n }\r\n dragStart(ev: MouseEvent | TouchEvent, index: number) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.isDragging = true;\r\n this.selectedIndex = index;\r\n this.updateRects();\r\n this.updateThumbPosition(ev);\r\n this.selectedIndexChange.emit(this.selectedIndex);\r\n }\r\n\r\n addnewRangeOnSliderClick(event: MouseEvent | TouchEvent) {\r\n if (!this.addNewRangeOnClick) return;\r\n const position = getOffsetPosition(event, this.slider.nativeElement);\r\n const newValue = this.min + (position.x / this.sliderRect!.width) * (this.max - this.min);\r\n // must be add with order by position\r\n const indexByOrderValue = this.values.findIndex((item) => item.value > newValue);\r\n const insertIndex = indexByOrderValue >= 0 ? indexByOrderValue : this.values.length;\r\n this.values.splice(insertIndex, 0, {\r\n id: this.generateId(),\r\n value: newValue,\r\n });\r\n this.dragStart(event, insertIndex);\r\n // this.updateAllThumbPositions();\r\n // this.valueChanged();\r\n }\r\n\r\n private updateThumbPosition(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging || this.selectedIndex == undefined) return;\r\n if (!this.sliderRect || !this.thumbRect) this.updateRects();\r\n let position = getOffsetPosition(ev, this.slider.nativeElement);\r\n let thumbRec = this.thumbRect!;\r\n position.x -= thumbRec.width / 2;\r\n let sliderRec = this.sliderRect!;\r\n const thumb = this.values[this.selectedIndex];\r\n if (position.x < 0) {\r\n thumb.x = 0;\r\n } else if (position.x > sliderRec.width - thumbRec.width) {\r\n thumb.x = sliderRec.width - thumbRec.width;\r\n } else {\r\n thumb.x = position.x;\r\n }\r\n this.setValueByPosition(thumb, thumbRec, sliderRec);\r\n }\r\n\r\n updateAllThumbPositions() {\r\n // wait to add thumbs\r\n setTimeout(() => {\r\n this.updateRects();\r\n const sliderRec = this.sliderRect!;\r\n const thumbRec = this.thumbRect!;\r\n for (let item of this.values) {\r\n item.x = ((item.value - this.min) * (sliderRec.width - thumbRec.width)) / (this.max - this.min);\r\n }\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n setValueByPosition(thumb: ValueModel, thumbRec: DOMRect, sliderRec: DOMRect) {\r\n const percentage = (thumb.x ?? 0) / (sliderRec.width - thumbRec.width);\r\n let newValue = this.min + percentage * (this.max - this.min);\r\n const stepDecimalPlaces = (this.step.toString().split('.')[1] || '').length;\r\n newValue = parseFloat((Math.round(newValue / this.step) * this.step).toFixed(stepDecimalPlaces));\r\n let value = Math.min(Math.max(newValue, this.min), this.max);\r\n if (thumb.value !== value) {\r\n thumb.value = value;\r\n this.valueChanged();\r\n }\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n @HostListener('document:touchend', ['$event'])\r\n onDragEnd(ev: MouseEvent | TouchEvent) {\r\n this.isDragging = false;\r\n // this.selectedIndex = undefined;\r\n }\r\n\r\n valueChanged() {\r\n const v = this.values; // this.values.map(({ x, thumb, ...rest }) => ({ ...rest }));\r\n this._onChange(v);\r\n this.change.emit(v);\r\n }\r\n}\r\n","<div class=\"slider-container\">\r\n <ng-content></ng-content>\r\n <div\r\n #slider\r\n class=\"slider\"\r\n [class.add-range-cursor]=\"addNewRangeOnClick\"\r\n [ngStyle]=\"{ '--ngx-slider-bg': background }\"\r\n [class.bg-transparent]=\"isBgTransparent\"\r\n (mousedown)=\"addnewRangeOnSliderClick($event)\"\r\n (touchstart)=\"addnewRangeOnSliderClick($event)\">\r\n @for (item of values; track $index; let i = $index) {\r\n <div\r\n class=\"thumb\"\r\n [class.is-active]=\"selectedIndex == i\"\r\n #thumb\r\n [style.left.px]=\"item.x\"\r\n [style.background]=\"item.color\"\r\n [title]=\"item.value\"\r\n (mousedown)=\"dragStart($event, i)\"\r\n (touchstart)=\"dragStart($event, i)\"></div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- {{ selectedIndex }}\r\n<pre dir=\"ltr\" style=\"text-align: left\">{{ values | json }}</pre> -->\r\n\r\n","\r\nimport { Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, forwardRef } from '@angular/core';\r\nimport { getOffsetPosition } from '../utils/get-offset-position';\r\nimport {\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n FormControl,\r\n AbstractControl,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { IPosition } from '../contracts/IPosition';\r\n\r\n@Component({\r\n selector: 'saturation',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './saturation.component.html',\r\n styleUrl: './saturation.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SaturationComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SaturationComponent implements ControlValueAccessor {\r\n @Input() width?: number;\r\n @Input() height?: number;\r\n @Input() color = 'red';\r\n @Input() step = 1;\r\n @Input() min: IPosition = { x: 0, y: 0 };\r\n @Input() max = { x: 100, y: 100 };\r\n @Output() change = new EventEmitter<IPosition>();\r\n\r\n isDragging = false;\r\n @ViewChild('saturation', { static: true }) saturation!: ElementRef<HTMLDivElement>;\r\n @ViewChild('thumb', { static: true }) thumb!: ElementRef<HTMLDivElement>;\r\n x = 0;\r\n y = 0;\r\n myControl = new FormControl<IPosition | null>(null);\r\n isDisabled = false;\r\n protected _onChange = (value: any) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n\r\n private saturationRect?: DOMRect;\r\n private thumbRect?: DOMRect;\r\n\r\n constructor() {}\r\n\r\n private updateRects() {\r\n this.saturationRect = this.saturation.nativeElement.getBoundingClientRect();\r\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\r\n }\r\n\r\n writeValue(val?: IPosition | null): void {\r\n if (!val) val = { x: 0, y: 0 };\r\n let value: IPosition = val;\r\n this.myControl.setValue(value, { emitEvent: false });\r\n this.updateRects();\r\n const saturationRec = this.saturationRect!;\r\n const thumbRec = this.thumbRect!;\r\n this.x = ((value.x - this.min.x) * (saturationRec.width - thumbRec.width / 2)) / (this.max.x - this.min.x);\r\n this.y = ((value.y - this.min.y) * (saturationRec.height - thumbRec.height / 2)) / (this.max.y - this.min.y);\r\n if (val !== value) {\r\n this.valueChanged(value);\r\n }\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.myControl.errors;\r\n }\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n setDisabledState?(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n if (disabled) this.myControl.disable();\r\n else this.myControl.enable();\r\n }\r\n\r\n dragStart(ev: MouseEvent | TouchEvent) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.isDragging = true;\r\n this.updateRects();\r\n this.updatePosition(ev);\r\n }\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.writeValue(this.myControl.value);\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n @HostListener('document:touchmove', ['$event'])\r\n onDrag(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging) return;\r\n this.updatePosition(ev);\r\n }\r\n\r\n private updatePosition(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging) return;\r\n if (!this.saturationRect || !this.thumbRect) this.updateRects();\r\n let position = getOffsetPosition(ev, this.saturation.nativeElement);\r\n let thumbRec = this.thumbRect!;\r\n let saturationRec = this.saturationRect!;\r\n if (position.x < 0) {\r\n this.x = 0;\r\n } else if (position.x > saturationRec.width - (thumbRec.width / 2 - 3)) {\r\n this.x = saturationRec.width - (thumbRec.width / 2 - 3);\r\n } else {\r\n this.x = position.x;\r\n }\r\n // this.x = this.x - thumbRec.width / 2;\r\n\r\n if (position.y < 0) {\r\n this.y = 0;\r\n } else if (position.y > saturationRec.height - (thumbRec.height / 2 - 3)) {\r\n this.y = saturationRec.height - (thumbRec.height / 2 - 3);\r\n } else {\r\n this.y = position.y;\r\n }\r\n // this.y = this.y - thumbRec.height / 2;\r\n this.setValueByPosition(thumbRec, saturationRec);\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n @HostListener('document:touchend', ['$event'])\r\n onDragEnd(ev: MouseEvent | TouchEvent) {\r\n this.isDragging = false;\r\n }\r\n\r\n setValueByPosition(thumbRec: DOMRect, saturationRec: DOMRect) {\r\n const percentageX = this.x / (saturationRec.width - thumbRec.width);\r\n let newValueX = this.min.x + percentageX * (this.max.x - this.min.x);\r\n newValueX = Math.round(newValueX / this.step) * this.step;\r\n let valueX = Math.min(Math.max(newValueX, this.min.x), this.max.x);\r\n //-----------------------------\r\n const percentageY = this.y / (saturationRec.height - thumbRec.height);\r\n let newValueY = this.min.y + percentageY * (this.max.y - this.min.y);\r\n newValueY = Math.round(newValueY / this.step) * this.step;\r\n let valueY = Math.min(Math.max(newValueY, this.min.y), this.max.y);\r\n const newValue = { x: valueX, y: valueY };\r\n if (!this.myControl.value || this.myControl.value.x !== valueX || this.myControl.value.y !== valueY) {\r\n this.valueChanged(newValue);\r\n }\r\n }\r\n\r\n valueChanged(value: IPosition) {\r\n this.myControl.setValue(value, { emitEvent: false });\r\n this._onChange(value);\r\n this.change.emit(value);\r\n }\r\n}\r\n","<div\r\n class=\"saturation-container\"\r\n [style.width.px]=\"width\"\r\n [style.height.px]=\"height\"\r\n (mousedown)=\"dragStart($event)\"\r\n (touchstart)=\"dragStart($event)\">\r\n <div class=\"saturation\" #saturation>\r\n <div class=\"s-bg\" [style.background]=\"color\"></div>\r\n <div class=\"s-white\"></div>\r\n <div class=\"s-black\"></div>\r\n </div>\r\n <div class=\"thumb\" #thumb [style.left.px]=\"x\" [style.top.px]=\"y\"></div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewChild,\r\n forwardRef,\r\n type OnInit,\r\n} from '@angular/core';\r\nimport { getOffsetPosition } from '../utils/get-offset-position';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n Validators,\r\n} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'slider',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './slider.component.html',\r\n styleUrls: ['./slider.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SliderComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => SliderComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SliderComponent implements OnInit, ControlValueAccessor, Validator {\r\n @Input() step = 1;\r\n @Input() min = 0;\r\n @Input() max = 100;\r\n @Input() background?: string;\r\n @Input() isBgTransparent = false;\r\n @Output() change = new EventEmitter<number>();\r\n isDragging = false;\r\n @ViewChild('slider', { static: true }) slider!: ElementRef<HTMLDivElement>;\r\n @ViewChild('thumb', { static: true }) thumb!: ElementRef<HTMLDivElement>;\r\n x = 0;\r\n myControl = new FormControl<number | null>(null);\r\n isDisabled = false;\r\n protected _onChange = (value: any) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n private sliderRect?: DOMRect;\r\n private thumbRect?: DOMRect;\r\n constructor() {}\r\n ngOnInit(): void {\r\n this.myControl.setValidators([Validators.min(this.min), Validators.max(this.max)]);\r\n }\r\n\r\n private updateRects() {\r\n this.sliderRect = this.slider.nativeElement.getBoundingClientRect();\r\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\r\n }\r\n\r\n writeValue(val?: number | string | null): void {\r\n let value = 0;\r\n if (!val) value = 0;\r\n else if (+val < +this.min) value = +this.min;\r\n else if (+val > +this.max) value = +this.max;\r\n else value = +val;\r\n this.myControl.setValue(value, { emitEvent: false });\r\n this.updateRects();\r\n const sliderRec = this.sliderRect!;\r\n const thumbRec = this.thumbRect!;\r\n this.x = ((value - this.min) * (sliderRec.width - thumbRec.width)) / (this.max - this.min);\r\n if (val !== value) {\r\n this.valueChanged(value);\r\n }\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.myControl.errors;\r\n }\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n setDisabledState?(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n if (disabled) this.myControl.disable();\r\n else this.myControl.enable();\r\n }\r\n\r\n dragStart(ev: MouseEvent | TouchEvent) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.isDragging = true;\r\n this.updateRects();\r\n this.updatePosition(ev);\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n @HostListener('document:touchmove', ['$event'])\r\n onDrag(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging) return;\r\n this.updatePosition(ev);\r\n }\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.writeValue(this.myControl.value);\r\n }\r\n\r\n private updatePosition(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging) return;\r\n if (!this.sliderRect || !this.thumbRect) this.updateRects();\r\n let position = getOffsetPosition(ev, this.slider.nativeElement);\r\n let thumbRec = this.thumbRect!;\r\n position.x -= thumbRec.width / 2;\r\n let sliderRec = this.sliderRect!;\r\n if (position.x < 0) {\r\n this.x = 0;\r\n } else if (position.x > sliderRec.width - thumbRec.width) {\r\n this.x = sliderRec.width - thumbRec.width;\r\n } else {\r\n this.x = position.x;\r\n }\r\n this.setValueByPosition(thumbRec, sliderRec);\r\n }\r\n\r\n setValueByPosition(thumbRec: DOMRect, sliderRec: DOMRect) {\r\n const percentage = this.x / (sliderRec.width - thumbRec.width);\r\n let newValue = this.min + percentage * (this.max - this.min);\r\n const stepDecimalPlaces = (this.step.toString().split('.')[1] || '').length;\r\n newValue = parseFloat((Math.round(newValue / this.step) * this.step).toFixed(stepDecimalPlaces));\r\n let value = Math.min(Math.max(newValue, this.min), this.max);\r\n if (this.myControl.value !== value) {\r\n this.valueChanged(value);\r\n }\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n @HostListener('document:touchend', ['$event'])\r\n onDragEnd(ev: MouseEvent | TouchEvent) {\r\n this.isDragging = false;\r\n }\r\n\r\n valueChanged(value: number) {\r\n this.myControl.setValue(value, { emitEvent: false });\r\n this._onChange(value);\r\n this.change.emit(value);\r\n }\r\n}\r\n","<div class=\"slider-container\">\r\n <ng-content></ng-content>\r\n <div\r\n #slider\r\n class=\"slider\"\r\n (mousedown)=\"dragStart($event)\"\r\n (touchstart)=\"dragStart($event)\"\r\n [ngStyle]=\"{ '--ngx-slider-bg': background }\"\r\n [class.bg-transparent]=\"isBgTransparent\">\r\n <div class=\"thumb\" #thumb [style.left.px]=\"x\" [title]=\"myControl.value\"></div>\r\n </div>\r\n</div>\r\n","import { inject, InjectionToken } from '@angular/core';\r\n\r\nexport const WINDOW = new InjectionToken<Window | null>('WINDOW', {\r\n factory: () => (typeof window !== 'undefined' ? window : null),\r\n});\r\n","export function randomStrnig(extraLength = 4, useNumeric = false) {\r\n const len = Math.max(0, Math.floor(extraLength));\r\n if (len === 0) return '';\r\n\r\n let charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n if (useNumeric) {\r\n charset += '0123456789';\r\n }\r\n const cryptoObj =\r\n typeof globalThis !== 'undefined'\r\n ? (globalThis as unknown as { crypto?: Crypto }).crypto\r\n : undefined;\r\n const out: string[] = new Array(len);\r\n\r\n if (cryptoObj?.getRandomValues) {\r\n const bytes = new Uint8Array(len);\r\n cryptoObj.getRandomValues(bytes);\r\n for (let i = 0; i < len; i++) {\r\n out[i] = charset[bytes[i] % charset.length];\r\n }\r\n } else {\r\n for (let i = 0; i < len; i++) {\r\n out[i] = charset[Math.floor(Math.random() * charset.length)];\r\n }\r\n }\r\n\r\n return `${Date.now().toString(36)}-${out.join('')}`;\r\n}\r\n","\r\nexport function IsRtl(doc:Document) {\r\n return getComputedStyle(doc.documentElement).direction === 'rtl';\r\n}\r\n","export function makeConfetti(doc: Document, wrap: HTMLElement) {\r\n wrap.innerHTML = '';\r\n const colors = ['#3ee08f', '#43e0d8', '#8b7bff', '#ffc45c'];\r\n for (let i = 0; i < 24; i++) {\r\n const s = doc.createElement('span');\r\n s.style.left = Math.random() * 100 + '%';\r\n s.style.background = colors[i % colors.length];\r\n s.style.animationDelay = Math.random() * 0.4 + 's';\r\n s.style.animationDuration = 1.2 + Math.random() * 0.8 + 's';\r\n s.style.borderRadius = Math.random() > 0.5 ? '50%' : '2px';\r\n wrap.appendChild(s);\r\n }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class BrowserService {\r\n constructor(@Inject(PLATFORM_ID) private platformId: object) {}\r\n\r\n get isBrowser(): boolean {\r\n return isPlatformBrowser(this.platformId);\r\n }\r\n\r\n get prefersDarkMode(): boolean {\r\n if (!this.isBrowser) return false;\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n }\r\n}\r\n","import { ComponentRef, TemplateRef } from '@angular/core';\r\n\r\nexport class OverlayRef<T> {\r\n constructor(\r\n private readonly dialogEl: HTMLDialogElement,\r\n private readonly teardownFn: () => void,\r\n public readonly componentRef?: ComponentRef<T>,\r\n public readonly templateRef?: TemplateRef<T>,\r\n ) {}\r\n\r\n close(): void {\r\n this.teardownFn();\r\n }\r\n\r\n get nativeElement(): HTMLElement {\r\n return this.dialogEl;\r\n }\r\n}\r\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { OverlayOptions, TemplateOptions } from './overlay-options';\nimport { OverlayRef } from './overlay-ref';\nimport { PlacementConfig } from './placement-config';\nimport { OverlayInstance } from './overlay-instance';\nimport { IsRtl } from '../utils/is-rtl';\nexport const FOCUSABLE_SELECTOR =\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\nexport const DIALOG_OVERLAY_CLASSNAME = 'ngx-ui-overlay';\n\n@Injectable({ providedIn: 'root' })\nexport class OverlayService implements OnDestroy {\n private readonly overlayStacks: OverlayInstance[] = [];\n\n private zIndexCounter = 1000;\n private listenersAttached = false;\n private resizeRafPending = false;\n\n private readonly doc = inject(DOCUMENT);\n private readonly abortController = new AbortController();\n\n ngOnDestroy(): void {\n this.closeAll();\n this.abortController.abort();\n }\n\n open<T>(options: OverlayOptions<T>): OverlayRef<T> {\n const {\n anchor,\n point,\n component,\n viewContainerRef,\n configure,\n onClosed,\n placement,\n alignment,\n margin,\n } = options;\n\n if (!viewContainerRef) {\n throw new Error('ViewContainerRef is required to render overlay content.');\n }\n\n this.attachGlobalListeners();\n\n const element = this.createDialogElement();\n const componentRef = viewContainerRef.createComponent(component);\n\n if (componentRef.location.nativeElement) {\n element.appendChild(componentRef.location.nativeElement);\n }\n\n const instance: OverlayInstance = {\n element,\n anchor,\n point,\n placementConfig: this.resolvePlacementConfig(placement, alignment, margin),\n componentRef,\n onClosed,\n rafId: null,\n focusTimeoutId: null,\n cleanup: () => {},\n };\n instance.cleanup = () => this.destroyInstance(instance);\n\n this.overlayStacks.push(instance);\n element.showModal();\n\n const ref = new OverlayRef(element, instance.cleanup, componentRef);\n configure?.(componentRef.instance, ref);\n\n this.scheduleInitialLayout(instance);\n\n return ref;\n }\n\n openTemplate(options: TemplateOptions): OverlayRef<any> {\n const { anchor, point, template, appRef, configure, onClosed, placement, alignment, margin } =\n options;\n\n this.attachGlobalListeners();\n\n const element = this.createDialogElement();\n const view = template.createEmbeddedView({});\n appRef.attachView(view);\n element.append(...view.rootNodes);\n\n const instance: OverlayInstance = {\n element,\n anchor,\n point,\n placementConfig: this.resolvePlacementConfig(placement, alignment, margin),\n embeddedView: view,\n appRef,\n onClosed,\n rafId: null,\n focusTimeoutId: null,\n cleanup: () => {},\n };\n instance.cleanup = () => this.destroyInstance(instance);\n\n this.overlayStacks.push(instance);\n element.showModal();\n\n const ref = new OverlayRef(element, instance.cleanup, undefined, template);\n configure?.(instance, ref);\n\n this.scheduleInitialLayout(instance);\n\n return ref;\n }\n\n closeAll(): void {\n // اسنپ‌شات می‌گیریم چون cleanup حین اجرا آرایه‌ی اصلی رو تغییر می‌ده\n [...this.overlayStacks].forEach((instance) => instance.cleanup());\n }\n\n // ---------------------------------------------------------------------\n // lifecycle\n // ---------------------------------------------------------------------\n\n private resolvePlacementConfig(\n placement?: PlacementConfig['placement'],\n alignment?: PlacementConfig['alignment'],\n margin?: number,\n ): PlacementConfig {\n return {\n placement: placement ?? 'auto',\n alignment: alignment ?? 'start',\n margin: margin ?? 8,\n };\n }\n\n private createDialogElement(): HTMLDialogElement {\n const element = this.doc.createElement('dialog');\n element.className = DIALOG_OVERLAY_CLASSNAME;\n const style = element.style;\n style.position = 'absolute';\n style.outline = 'none';\n style.padding = '0';\n style.margin = '0';\n style.border = 'none';\n style.background = 'transparent';\n style.maxWidth = '100vw';\n style.maxHeight = '100vh';\n style.overflow = 'visible';\n style.visibility = 'hidden';\n\n // شمارنده‌ی صعودی مستقل از تعداد فعلی دیالوگ‌های باز؛ در نسخه‌ی قبلی\n // با استفاده از openDialogs.size محاسبه می‌شد که بعد از بستن دیالوگ‌ها\n // می‌تونست باعث تکرار zIndex بین دو دیالوگ بشه.\n style.zIndex = `${++this.zIndexCounter}`;\n\n this.doc.body.appendChild(element);\n return element;\n }\n\n private scheduleInitialLayout(instance: OverlayInstance): void {\n instance.rafId = requestAnimationFrame(() => {\n instance.rafId = null;\n this.positionDialog(instance);\n });\n\n instance.focusTimeoutId = setTimeout(() => {\n instance.focusTimeoutId = null;\n const focusable = instance.element.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n focusable?.focus();\n }, 0);\n }\n\n private destroyInstance(instance: OverlayInstance): void {\n const index = this.overlayStacks.indexOf(instance);\n if (index === -1) return; // جلوگیری از پاک‌سازی دوباره\n\n this.overlayStacks.splice(index, 1);\n\n // لغو کارهای زمان‌بندی‌شده‌ای که هنوز اجرا نشدن (نشتی حافظه در نسخه‌ی قبلی)\n if (instance.rafId !== null) cancelAnimationFrame(instance.rafId);\n if (instance.focusTimeoutId !== null) clearTimeout(instance.focusTimeoutId);\n\n if (instance.componentRef) {\n instance.componentRef.location.nativeElement?.remove();\n instance.componentRef.destroy();\n }\n\n if (instance.embeddedView && instance.appRef) {\n instance.appRef.detachView(instance.embeddedView);\n instance.embeddedView.destroy();\n }\n\n instance.element.remove();\n instance.onClosed?.();\n }\n\n // ---------------------------------------------------------------------\n // global listeners (فقط یک‌بار در کل عمر سرویس attach می‌شن)\n // ---------------------------------------------------------------------\n\n private attachGlobalListeners(): void {\n if (this.listenersAttached) return;\n this.listenersAttached = true;\n\n const { signal } = this.abortController;\n\n this.doc.addEventListener('keydown', this.onGlobalKeyDown, { signal });\n window.addEventListener('resize', this.onGlobalResize, { signal, passive: true });\n this.doc.addEventListener('click', this.onGlobalPointerEvent, { signal });\n this.doc.addEventListener('contextmenu', this.onGlobalPointerEvent, { signal });\n }\n\n private readonly onGlobalKeyDown = (e: KeyboardEvent): void => {\n if (e.key !== 'Escape') return;\n this.getLastDialog()?.cleanup();\n };\n\n private readonly onGlobalResize = (): void => {\n // چند رویداد resize پشت‌سرهم فقط یک reposition واقعی اجرا می‌کنن\n if (this.resizeRafPending) return;\n this.resizeRafPending = true;\n requestAnimationFrame(() => {\n this.resizeRafPending = false;\n this.repositionAll();\n });\n };\n\n private readonly onGlobalPointerEvent = (e: MouseEvent): void => {\n this.handleClickOnBackdrop(e);\n };\n\n private handleClickOnBackdrop(event: MouseEvent): void {\n const lastDialog = this.getLastDialog();\n if (!lastDialog || !lastDialog.element.open) return;\n // کلیک باید دقیقاً روی خودِ دیالوگ (بک‌دراپ) باشه، نه محتوای داخلش\n if (event.target !== lastDialog.element) return;\n\n // اگه فرم داخل دیالوگه، با کلیک بیرون بسته نشه\n if (lastDialog.element.querySelector('form')) return;\n\n const rect = lastDialog.element.getBoundingClientRect();\n const clickWasInsideDialog =\n rect.top <= event.clientY &&\n event.clientY <= rect.bottom &&\n rect.left <= event.clientX &&\n event.clientX <= rect.right;\n\n const anchRect = lastDialog.anchor.getBoundingClientRect();\n const clickWasInsideAnchor =\n anchRect.top <= event.clientY &&\n event.clientY <= anchRect.bottom &&\n anchRect.left <= event.clientX &&\n event.clientX <= anchRect.right;\n\n if (!clickWasInsideDialog) {\n if (event.type == 'contextmenu' && lastDialog.point && clickWasInsideAnchor) {\n event.preventDefault();\n lastDialog.point = {\n x: event.clientX,\n y: event.clientY,\n };\n this.positionDialog(lastDialog);\n } else {\n lastDialog.cleanup();\n }\n }\n }\n\n private getLastDialog(): OverlayInstance | undefined {\n return this.overlayStacks[this.overlayStacks.length - 1];\n }\n\n // ---------------------------------------------------------------------\n // positioning\n // ---------------------------------------------------------------------\n\n private repositionAll(): void {\n this.overlayStacks.forEach((instance) => {\n if (instance.element.isConnected) {\n this.positionDialog(instance);\n }\n });\n }\n\n private positionDialog(instance: OverlayInstance): void {\n const { anchor, element: dialog, placementConfig, point } = instance;\n const { placement, alignment, margin } = placementConfig;\n\n if (!dialog.isConnected) return;\n\n let anchorRect: DOMRect;\n if (point) {\n anchorRect = new DOMRect(point.x, point.y, 0, 0);\n } else {\n anchorRect = anchor.getBoundingClientRect();\n }\n const dialogRect = dialog.getBoundingClientRect();\n\n const vw = Math.min(document.body.clientWidth, window.innerWidth);\n const vh = Math.min(document.body.clientHeight, window.innerHeight);\n const isRTL = IsRtl(this.doc);\n\n let top = 0;\n let left: number | 'auto' = 'auto';\n let right: number | 'auto' = 'auto';\n\n const spaceBelow = vh - anchorRect.bottom;\n const spaceAbove = anchorRect.top;\n let verticalPos: 'above' | 'bottom' = 'above';\n\n if (\n placement === 'bottom' ||\n (placement === 'auto' && spaceBelow >= dialogRect.height + margin)\n ) {\n top = anchorRect.bottom + margin;\n verticalPos = 'above';\n if (top + dialogRect.height > vh - margin) {\n top = vh - dialogRect.height - margin;\n verticalPos = 'bottom';\n }\n } else {\n top = anchorRect.top - dialogRect.height - margin;\n verticalPos = 'bottom';\n if (top > spaceAbove) {\n top = anchorRect.top + anchorRect.height + margin;\n verticalPos = 'above';\n }\n }\n\n if (alignment === 'center') {\n left = anchorRect.left + anchorRect.width / 2 - dialogRect.width / 2;\n } else if (alignment === 'start') {\n if (isRTL) {\n right = vw - anchorRect.right;\n } else {\n left = anchorRect.left;\n }\n } else {\n left = isRTL ? anchorRect.left : anchorRect.right; //- dialogRect.width;\n }\n if (left !== 'auto') {\n left = Math.min(Math.max(left, margin), vw - dialogRect.width - margin);\n }\n if (right !== 'auto') {\n right = Math.min(Math.max(right, margin), vw - dialogRect.width - margin);\n }\n\n if (top < 0) {\n top = 0;\n }\n\n dialog.className = `${DIALOG_OVERLAY_CLASSNAME} tips-${verticalPos}`;\n dialog.style.top = `${top + window.scrollY}px`;\n dialog.style.left = left !== 'auto' ? `${left + window.scrollX}px` : 'auto';\n dialog.style.right = right !== 'auto' ? `${right + window.scrollX}px` : 'auto';\n dialog.style.transformOrigin = verticalPos == 'above' ? 'left top' : 'left bottom';\n // dialog.style.transform = 'none';\n dialog.style.visibility = 'visible';\n dialog.style.animation = 'menu-enter 120ms cubic-bezier(0, 0, 0.2, 1)';\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-shared.mjs","sources":["../../../projects/libs/shared/utils/get-offset-position.ts","../../../projects/libs/shared/range-slider/range-slider.component.ts","../../../projects/libs/shared/range-slider/range-slider.component.html","../../../projects/libs/shared/saturation/saturation.component.ts","../../../projects/libs/shared/saturation/saturation.component.html","../../../projects/libs/shared/slider/slider.component.ts","../../../projects/libs/shared/slider/slider.component.html","../../../projects/libs/shared/utils/merge-config.ts","../../../projects/libs/shared/utils/window.ts","../../../projects/libs/shared/utils/string.ts","../../../projects/libs/shared/utils/is-rtl.ts","../../../projects/libs/shared/utils/confetti.ts","../../../projects/libs/shared/services/browser.service.ts","../../../projects/libs/shared/overlay/overlay-ref.ts","../../../projects/libs/shared/overlay/overlay.service.ts","../../../projects/libs/shared/ngx-kit-shared.ts"],"sourcesContent":["export function getOffsetPosition(\r\n evt: MouseEvent | TouchEvent,\r\n parent: HTMLElement\r\n) {\r\n let position = {\r\n x: 0,\r\n y: 0,\r\n };\r\n\r\n if (evt instanceof MouseEvent) {\r\n position.x = evt.pageX;\r\n position.y = evt.pageY;\r\n } else if (evt.touches && evt.touches.length > 0) {\r\n position.x = evt.touches[0].pageX;\r\n position.y = evt.touches[0].pageY;\r\n }\r\n\r\n // Adjust for the parent's offset\r\n let parentRect = parent.getBoundingClientRect();\r\n position.x -= parentRect.left + window.scrollX;\r\n position.y -= parentRect.top + window.scrollY;\r\n\r\n return position;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewChild,\r\n forwardRef,\r\n type OnInit,\r\n} from '@angular/core';\r\nimport { getOffsetPosition } from '../utils/get-offset-position';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\n\r\nexport interface IValue {\r\n id?: string;\r\n value: number;\r\n}\r\nexport class ValueModel {\r\n id!: string;\r\n value!: number;\r\n x?: number;\r\n thumb?: HTMLElement;\r\n color?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'range-slider',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n templateUrl: './range-slider.component.html',\r\n styleUrls: ['./range-slider.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RangeSliderComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => RangeSliderComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class RangeSliderComponent implements OnInit, ControlValueAccessor, Validator {\r\n /**\r\n * The step value for the slider\r\n */\r\n @Input() step = 1;\r\n /**\r\n * The minimum value for the slider\r\n */\r\n @Input() min = 0;\r\n /**\r\n * The maximum value for the slider\r\n */\r\n @Input() max = 100;\r\n /**\r\n * The background color of the slider\r\n * - can use css like `background: linear-gradient(to right, red, blue);`\r\n * - or a solid color like `background: red;`\r\n */\r\n @Input() background?: string;\r\n /**\r\n * If true, the background will be transparent\r\n */\r\n @Input() isBgTransparent = false;\r\n /**\r\n * If true, clicking on the slider will add a new range at that position\r\n */\r\n @Input() addNewRangeOnClick = false;\r\n\r\n /**\r\n * The current value of the slider\r\n */\r\n @Output() change = new EventEmitter<IValue[]>();\r\n @Input() selectedIndex?: number;\r\n @Output() selectedIndexChange = new EventEmitter<number>();\r\n\r\n private isDragging = false;\r\n\r\n @ViewChild('slider', { static: true }) slider!: ElementRef<HTMLDivElement>;\r\n @ViewChild('thumb', { static: false }) thumb?: ElementRef<HTMLDivElement>;\r\n\r\n values: ValueModel[] = [];\r\n isDisabled = false;\r\n protected _onChange = (value: IValue[]) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n private sliderRect?: DOMRect;\r\n private thumbRect?: DOMRect;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {}\r\n ngOnInit(): void {}\r\n\r\n private generateId(): string {\r\n let id = 'ngx-thumb-' + Math.random().toString(36).substring(2, 9);\r\n if (this.values.findIndex((x) => x.id == id) >= 0) {\r\n return this.generateId();\r\n }\r\n return id;\r\n }\r\n\r\n writeValue(items?: IValue[]): void {\r\n this.values = [];\r\n if (!items || !Array.isArray(items)) {\r\n items = [];\r\n }\r\n if (items.length === 0) {\r\n items.push({ id: this.generateId(), value: this.min });\r\n }\r\n for (let val of items) {\r\n if (typeof val.value !== 'number' || isNaN(val.value)) {\r\n throw new Error('RangeSliderComponent: value must be an array of numbers');\r\n }\r\n let newVal = +val.value;\r\n if (newVal < +this.min) newVal = +this.min;\r\n else if (newVal > +this.max) newVal = +this.max;\r\n this.values.push({\r\n ...val,\r\n id: val.id ?? this.generateId(),\r\n value: newVal,\r\n });\r\n }\r\n this.updateAllThumbPositions();\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return null; // TODO: return errors if any;\r\n }\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n setDisabledState?(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n }\r\n private updateRects() {\r\n this.sliderRect = this.slider.nativeElement.getBoundingClientRect();\r\n if (this.thumb) {\r\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\r\n }\r\n }\r\n @HostListener('document:mousemove', ['$event'])\r\n @HostListener('document:touchmove', ['$event'])\r\n onDrag(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging) return;\r\n this.updateThumbPosition(ev);\r\n }\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.writeValue(this.values);\r\n }\r\n dragStart(ev: MouseEvent | TouchEvent, index: number) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.isDragging = true;\r\n this.selectedIndex = index;\r\n this.updateRects();\r\n this.updateThumbPosition(ev);\r\n this.selectedIndexChange.emit(this.selectedIndex);\r\n }\r\n\r\n addnewRangeOnSliderClick(event: MouseEvent | TouchEvent) {\r\n if (!this.addNewRangeOnClick) return;\r\n const position = getOffsetPosition(event, this.slider.nativeElement);\r\n const newValue = this.min + (position.x / this.sliderRect!.width) * (this.max - this.min);\r\n // must be add with order by position\r\n const indexByOrderValue = this.values.findIndex((item) => item.value > newValue);\r\n const insertIndex = indexByOrderValue >= 0 ? indexByOrderValue : this.values.length;\r\n this.values.splice(insertIndex, 0, {\r\n id: this.generateId(),\r\n value: newValue,\r\n });\r\n this.dragStart(event, insertIndex);\r\n // this.updateAllThumbPositions();\r\n // this.valueChanged();\r\n }\r\n\r\n private updateThumbPosition(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging || this.selectedIndex == undefined) return;\r\n if (!this.sliderRect || !this.thumbRect) this.updateRects();\r\n let position = getOffsetPosition(ev, this.slider.nativeElement);\r\n let thumbRec = this.thumbRect!;\r\n position.x -= thumbRec.width / 2;\r\n let sliderRec = this.sliderRect!;\r\n const thumb = this.values[this.selectedIndex];\r\n if (position.x < 0) {\r\n thumb.x = 0;\r\n } else if (position.x > sliderRec.width - thumbRec.width) {\r\n thumb.x = sliderRec.width - thumbRec.width;\r\n } else {\r\n thumb.x = position.x;\r\n }\r\n this.setValueByPosition(thumb, thumbRec, sliderRec);\r\n }\r\n\r\n updateAllThumbPositions() {\r\n // wait to add thumbs\r\n setTimeout(() => {\r\n this.updateRects();\r\n const sliderRec = this.sliderRect!;\r\n const thumbRec = this.thumbRect!;\r\n for (let item of this.values) {\r\n item.x = ((item.value - this.min) * (sliderRec.width - thumbRec.width)) / (this.max - this.min);\r\n }\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n setValueByPosition(thumb: ValueModel, thumbRec: DOMRect, sliderRec: DOMRect) {\r\n const percentage = (thumb.x ?? 0) / (sliderRec.width - thumbRec.width);\r\n let newValue = this.min + percentage * (this.max - this.min);\r\n const stepDecimalPlaces = (this.step.toString().split('.')[1] || '').length;\r\n newValue = parseFloat((Math.round(newValue / this.step) * this.step).toFixed(stepDecimalPlaces));\r\n let value = Math.min(Math.max(newValue, this.min), this.max);\r\n if (thumb.value !== value) {\r\n thumb.value = value;\r\n this.valueChanged();\r\n }\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n @HostListener('document:touchend', ['$event'])\r\n onDragEnd(ev: MouseEvent | TouchEvent) {\r\n this.isDragging = false;\r\n // this.selectedIndex = undefined;\r\n }\r\n\r\n valueChanged() {\r\n const v = this.values; // this.values.map(({ x, thumb, ...rest }) => ({ ...rest }));\r\n this._onChange(v);\r\n this.change.emit(v);\r\n }\r\n}\r\n","<div class=\"slider-container\">\r\n <ng-content></ng-content>\r\n <div\r\n #slider\r\n class=\"slider\"\r\n [class.add-range-cursor]=\"addNewRangeOnClick\"\r\n [ngStyle]=\"{ '--ngx-slider-bg': background }\"\r\n [class.bg-transparent]=\"isBgTransparent\"\r\n (mousedown)=\"addnewRangeOnSliderClick($event)\"\r\n (touchstart)=\"addnewRangeOnSliderClick($event)\">\r\n @for (item of values; track $index; let i = $index) {\r\n <div\r\n class=\"thumb\"\r\n [class.is-active]=\"selectedIndex == i\"\r\n #thumb\r\n [style.left.px]=\"item.x\"\r\n [style.background]=\"item.color\"\r\n [title]=\"item.value\"\r\n (mousedown)=\"dragStart($event, i)\"\r\n (touchstart)=\"dragStart($event, i)\"></div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- {{ selectedIndex }}\r\n<pre dir=\"ltr\" style=\"text-align: left\">{{ values | json }}</pre> -->\r\n\r\n","\r\nimport { Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, forwardRef } from '@angular/core';\r\nimport { getOffsetPosition } from '../utils/get-offset-position';\r\nimport {\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n FormControl,\r\n AbstractControl,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { IPosition } from '../contracts/IPosition';\r\n\r\n@Component({\r\n selector: 'saturation',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './saturation.component.html',\r\n styleUrl: './saturation.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SaturationComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SaturationComponent implements ControlValueAccessor {\r\n @Input() width?: number;\r\n @Input() height?: number;\r\n @Input() color = 'red';\r\n @Input() step = 1;\r\n @Input() min: IPosition = { x: 0, y: 0 };\r\n @Input() max = { x: 100, y: 100 };\r\n @Output() change = new EventEmitter<IPosition>();\r\n\r\n isDragging = false;\r\n @ViewChild('saturation', { static: true }) saturation!: ElementRef<HTMLDivElement>;\r\n @ViewChild('thumb', { static: true }) thumb!: ElementRef<HTMLDivElement>;\r\n x = 0;\r\n y = 0;\r\n myControl = new FormControl<IPosition | null>(null);\r\n isDisabled = false;\r\n protected _onChange = (value: any) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n\r\n private saturationRect?: DOMRect;\r\n private thumbRect?: DOMRect;\r\n\r\n constructor() {}\r\n\r\n private updateRects() {\r\n this.saturationRect = this.saturation.nativeElement.getBoundingClientRect();\r\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\r\n }\r\n\r\n writeValue(val?: IPosition | null): void {\r\n if (!val) val = { x: 0, y: 0 };\r\n let value: IPosition = val;\r\n this.myControl.setValue(value, { emitEvent: false });\r\n this.updateRects();\r\n const saturationRec = this.saturationRect!;\r\n const thumbRec = this.thumbRect!;\r\n this.x = ((value.x - this.min.x) * (saturationRec.width - thumbRec.width / 2)) / (this.max.x - this.min.x);\r\n this.y = ((value.y - this.min.y) * (saturationRec.height - thumbRec.height / 2)) / (this.max.y - this.min.y);\r\n if (val !== value) {\r\n this.valueChanged(value);\r\n }\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.myControl.errors;\r\n }\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n setDisabledState?(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n if (disabled) this.myControl.disable();\r\n else this.myControl.enable();\r\n }\r\n\r\n dragStart(ev: MouseEvent | TouchEvent) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.isDragging = true;\r\n this.updateRects();\r\n this.updatePosition(ev);\r\n }\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.writeValue(this.myControl.value);\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n @HostListener('document:touchmove', ['$event'])\r\n onDrag(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging) return;\r\n this.updatePosition(ev);\r\n }\r\n\r\n private updatePosition(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging) return;\r\n if (!this.saturationRect || !this.thumbRect) this.updateRects();\r\n let position = getOffsetPosition(ev, this.saturation.nativeElement);\r\n let thumbRec = this.thumbRect!;\r\n let saturationRec = this.saturationRect!;\r\n if (position.x < 0) {\r\n this.x = 0;\r\n } else if (position.x > saturationRec.width - (thumbRec.width / 2 - 3)) {\r\n this.x = saturationRec.width - (thumbRec.width / 2 - 3);\r\n } else {\r\n this.x = position.x;\r\n }\r\n // this.x = this.x - thumbRec.width / 2;\r\n\r\n if (position.y < 0) {\r\n this.y = 0;\r\n } else if (position.y > saturationRec.height - (thumbRec.height / 2 - 3)) {\r\n this.y = saturationRec.height - (thumbRec.height / 2 - 3);\r\n } else {\r\n this.y = position.y;\r\n }\r\n // this.y = this.y - thumbRec.height / 2;\r\n this.setValueByPosition(thumbRec, saturationRec);\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n @HostListener('document:touchend', ['$event'])\r\n onDragEnd(ev: MouseEvent | TouchEvent) {\r\n this.isDragging = false;\r\n }\r\n\r\n setValueByPosition(thumbRec: DOMRect, saturationRec: DOMRect) {\r\n const percentageX = this.x / (saturationRec.width - thumbRec.width);\r\n let newValueX = this.min.x + percentageX * (this.max.x - this.min.x);\r\n newValueX = Math.round(newValueX / this.step) * this.step;\r\n let valueX = Math.min(Math.max(newValueX, this.min.x), this.max.x);\r\n //-----------------------------\r\n const percentageY = this.y / (saturationRec.height - thumbRec.height);\r\n let newValueY = this.min.y + percentageY * (this.max.y - this.min.y);\r\n newValueY = Math.round(newValueY / this.step) * this.step;\r\n let valueY = Math.min(Math.max(newValueY, this.min.y), this.max.y);\r\n const newValue = { x: valueX, y: valueY };\r\n if (!this.myControl.value || this.myControl.value.x !== valueX || this.myControl.value.y !== valueY) {\r\n this.valueChanged(newValue);\r\n }\r\n }\r\n\r\n valueChanged(value: IPosition) {\r\n this.myControl.setValue(value, { emitEvent: false });\r\n this._onChange(value);\r\n this.change.emit(value);\r\n }\r\n}\r\n","<div\r\n class=\"saturation-container\"\r\n [style.width.px]=\"width\"\r\n [style.height.px]=\"height\"\r\n (mousedown)=\"dragStart($event)\"\r\n (touchstart)=\"dragStart($event)\">\r\n <div class=\"saturation\" #saturation>\r\n <div class=\"s-bg\" [style.background]=\"color\"></div>\r\n <div class=\"s-white\"></div>\r\n <div class=\"s-black\"></div>\r\n </div>\r\n <div class=\"thumb\" #thumb [style.left.px]=\"x\" [style.top.px]=\"y\"></div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewChild,\r\n forwardRef,\r\n type OnInit,\r\n} from '@angular/core';\r\nimport { getOffsetPosition } from '../utils/get-offset-position';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n Validators,\r\n} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'slider',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './slider.component.html',\r\n styleUrls: ['./slider.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SliderComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => SliderComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SliderComponent implements OnInit, ControlValueAccessor, Validator {\r\n @Input() step = 1;\r\n @Input() min = 0;\r\n @Input() max = 100;\r\n @Input() background?: string;\r\n @Input() isBgTransparent = false;\r\n @Output() change = new EventEmitter<number>();\r\n isDragging = false;\r\n @ViewChild('slider', { static: true }) slider!: ElementRef<HTMLDivElement>;\r\n @ViewChild('thumb', { static: true }) thumb!: ElementRef<HTMLDivElement>;\r\n x = 0;\r\n myControl = new FormControl<number | null>(null);\r\n isDisabled = false;\r\n protected _onChange = (value: any) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n private sliderRect?: DOMRect;\r\n private thumbRect?: DOMRect;\r\n constructor() {}\r\n ngOnInit(): void {\r\n this.myControl.setValidators([Validators.min(this.min), Validators.max(this.max)]);\r\n }\r\n\r\n private updateRects() {\r\n this.sliderRect = this.slider.nativeElement.getBoundingClientRect();\r\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\r\n }\r\n\r\n writeValue(val?: number | string | null): void {\r\n let value = 0;\r\n if (!val) value = 0;\r\n else if (+val < +this.min) value = +this.min;\r\n else if (+val > +this.max) value = +this.max;\r\n else value = +val;\r\n this.myControl.setValue(value, { emitEvent: false });\r\n this.updateRects();\r\n const sliderRec = this.sliderRect!;\r\n const thumbRec = this.thumbRect!;\r\n this.x = ((value - this.min) * (sliderRec.width - thumbRec.width)) / (this.max - this.min);\r\n if (val !== value) {\r\n this.valueChanged(value);\r\n }\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.myControl.errors;\r\n }\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n setDisabledState?(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n if (disabled) this.myControl.disable();\r\n else this.myControl.enable();\r\n }\r\n\r\n dragStart(ev: MouseEvent | TouchEvent) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.isDragging = true;\r\n this.updateRects();\r\n this.updatePosition(ev);\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n @HostListener('document:touchmove', ['$event'])\r\n onDrag(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging) return;\r\n this.updatePosition(ev);\r\n }\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.writeValue(this.myControl.value);\r\n }\r\n\r\n private updatePosition(ev: MouseEvent | TouchEvent) {\r\n if (!this.isDragging) return;\r\n if (!this.sliderRect || !this.thumbRect) this.updateRects();\r\n let position = getOffsetPosition(ev, this.slider.nativeElement);\r\n let thumbRec = this.thumbRect!;\r\n position.x -= thumbRec.width / 2;\r\n let sliderRec = this.sliderRect!;\r\n if (position.x < 0) {\r\n this.x = 0;\r\n } else if (position.x > sliderRec.width - thumbRec.width) {\r\n this.x = sliderRec.width - thumbRec.width;\r\n } else {\r\n this.x = position.x;\r\n }\r\n this.setValueByPosition(thumbRec, sliderRec);\r\n }\r\n\r\n setValueByPosition(thumbRec: DOMRect, sliderRec: DOMRect) {\r\n const percentage = this.x / (sliderRec.width - thumbRec.width);\r\n let newValue = this.min + percentage * (this.max - this.min);\r\n const stepDecimalPlaces = (this.step.toString().split('.')[1] || '').length;\r\n newValue = parseFloat((Math.round(newValue / this.step) * this.step).toFixed(stepDecimalPlaces));\r\n let value = Math.min(Math.max(newValue, this.min), this.max);\r\n if (this.myControl.value !== value) {\r\n this.valueChanged(value);\r\n }\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n @HostListener('document:touchend', ['$event'])\r\n onDragEnd(ev: MouseEvent | TouchEvent) {\r\n this.isDragging = false;\r\n }\r\n\r\n valueChanged(value: number) {\r\n this.myControl.setValue(value, { emitEvent: false });\r\n this._onChange(value);\r\n this.change.emit(value);\r\n }\r\n}\r\n","<div class=\"slider-container\">\r\n <ng-content></ng-content>\r\n <div\r\n #slider\r\n class=\"slider\"\r\n (mousedown)=\"dragStart($event)\"\r\n (touchstart)=\"dragStart($event)\"\r\n [ngStyle]=\"{ '--ngx-slider-bg': background }\"\r\n [class.bg-transparent]=\"isBgTransparent\">\r\n <div class=\"thumb\" #thumb [style.left.px]=\"x\" [title]=\"myControl.value\"></div>\r\n </div>\r\n</div>\r\n","function isPlainObject(value: unknown): value is Record<string, any> {\r\n return (\r\n value !== null && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype\r\n );\r\n}\r\n\r\nexport function mergeConfig<T>(base: T, override?: Partial<T>): T {\r\n if (override == null) {\r\n return structuredClone(base);\r\n }\r\n\r\n return merge(base, override) as T;\r\n}\r\n\r\nfunction merge(base: any, override: any): any {\r\n if (override === undefined) {\r\n return base;\r\n }\r\n\r\n if (base === undefined) {\r\n return override;\r\n }\r\n\r\n if (Array.isArray(base) && Array.isArray(override)) {\r\n return [...override];\r\n }\r\n\r\n if (isPlainObject(base) && isPlainObject(override)) {\r\n const result: Record<string, any> = {};\r\n\r\n const keys = new Set([...Object.keys(base), ...Object.keys(override)]);\r\n\r\n for (const key of keys) {\r\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\r\n continue;\r\n }\r\n\r\n result[key] = merge(base[key], override[key]);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // Primitive / Function / Class / Date / RegExp ...\r\n return override;\r\n}\r\n","import { inject, InjectionToken } from '@angular/core';\r\n\r\nexport const WINDOW = new InjectionToken<Window | null>('WINDOW', {\r\n factory: () => (typeof window !== 'undefined' ? window : null),\r\n});\r\n","export function randomStrnig(extraLength = 4, useNumeric = false) {\r\n const len = Math.max(0, Math.floor(extraLength));\r\n if (len === 0) return '';\r\n\r\n let charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n if (useNumeric) {\r\n charset += '0123456789';\r\n }\r\n const cryptoObj =\r\n typeof globalThis !== 'undefined'\r\n ? (globalThis as unknown as { crypto?: Crypto }).crypto\r\n : undefined;\r\n const out: string[] = new Array(len);\r\n\r\n if (cryptoObj?.getRandomValues) {\r\n const bytes = new Uint8Array(len);\r\n cryptoObj.getRandomValues(bytes);\r\n for (let i = 0; i < len; i++) {\r\n out[i] = charset[bytes[i] % charset.length];\r\n }\r\n } else {\r\n for (let i = 0; i < len; i++) {\r\n out[i] = charset[Math.floor(Math.random() * charset.length)];\r\n }\r\n }\r\n\r\n return `${Date.now().toString(36)}-${out.join('')}`;\r\n}\r\n","\r\nexport function IsRtl(doc:Document) {\r\n return getComputedStyle(doc.documentElement).direction === 'rtl';\r\n}\r\n","export function makeConfetti(doc: Document, wrap: HTMLElement) {\r\n wrap.innerHTML = '';\r\n const colors = ['#3ee08f', '#43e0d8', '#8b7bff', '#ffc45c'];\r\n for (let i = 0; i < 24; i++) {\r\n const s = doc.createElement('span');\r\n s.style.left = Math.random() * 100 + '%';\r\n s.style.background = colors[i % colors.length];\r\n s.style.animationDelay = Math.random() * 0.4 + 's';\r\n s.style.animationDuration = 1.2 + Math.random() * 0.8 + 's';\r\n s.style.borderRadius = Math.random() > 0.5 ? '50%' : '2px';\r\n wrap.appendChild(s);\r\n }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class BrowserService {\r\n constructor(@Inject(PLATFORM_ID) private platformId: object) {}\r\n\r\n get isBrowser(): boolean {\r\n return isPlatformBrowser(this.platformId);\r\n }\r\n\r\n get prefersDarkMode(): boolean {\r\n if (!this.isBrowser) return false;\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n }\r\n}\r\n","import { ComponentRef, TemplateRef } from '@angular/core';\r\n\r\nexport class OverlayRef<T> {\r\n constructor(\r\n private readonly dialogEl: HTMLDialogElement,\r\n private readonly teardownFn: () => void,\r\n public readonly componentRef?: ComponentRef<T>,\r\n public readonly templateRef?: TemplateRef<T>,\r\n ) {}\r\n\r\n close(): void {\r\n this.teardownFn();\r\n }\r\n\r\n get nativeElement(): HTMLElement {\r\n return this.dialogEl;\r\n }\r\n}\r\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { OverlayOptions, TemplateOptions } from './overlay-options';\nimport { OverlayRef } from './overlay-ref';\nimport { PlacementConfig } from './placement-config';\nimport { OverlayInstance } from './overlay-instance';\nimport { IsRtl } from '../utils/is-rtl';\nexport const FOCUSABLE_SELECTOR =\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\nexport const DIALOG_OVERLAY_CLASSNAME = 'ngx-ui-overlay';\n\n@Injectable({ providedIn: 'root' })\nexport class OverlayService implements OnDestroy {\n private readonly overlayStacks: OverlayInstance[] = [];\n\n private zIndexCounter = 1000;\n private listenersAttached = false;\n private resizeRafPending = false;\n\n private readonly doc = inject(DOCUMENT);\n private readonly abortController = new AbortController();\n\n ngOnDestroy(): void {\n this.closeAll();\n this.abortController.abort();\n }\n\n open<T>(options: OverlayOptions<T>): OverlayRef<T> {\n const {\n anchor,\n point,\n component,\n viewContainerRef,\n configure,\n onClosed,\n placement,\n alignment,\n margin,\n } = options;\n\n if (!viewContainerRef) {\n throw new Error('ViewContainerRef is required to render overlay content.');\n }\n\n this.attachGlobalListeners();\n\n const element = this.createDialogElement();\n const componentRef = viewContainerRef.createComponent(component);\n\n if (componentRef.location.nativeElement) {\n element.appendChild(componentRef.location.nativeElement);\n }\n\n const instance: OverlayInstance = {\n element,\n anchor,\n point,\n placementConfig: this.resolvePlacementConfig(placement, alignment, margin),\n componentRef,\n onClosed,\n rafId: null,\n focusTimeoutId: null,\n cleanup: () => {},\n };\n instance.cleanup = () => this.destroyInstance(instance);\n\n this.overlayStacks.push(instance);\n element.showModal();\n\n const ref = new OverlayRef(element, instance.cleanup, componentRef);\n configure?.(componentRef.instance, ref);\n\n this.scheduleInitialLayout(instance);\n\n return ref;\n }\n\n openTemplate(options: TemplateOptions): OverlayRef<any> {\n const { anchor, point, template, appRef, configure, onClosed, placement, alignment, margin } =\n options;\n\n this.attachGlobalListeners();\n\n const element = this.createDialogElement();\n const view = template.createEmbeddedView({});\n appRef.attachView(view);\n element.append(...view.rootNodes);\n\n const instance: OverlayInstance = {\n element,\n anchor,\n point,\n placementConfig: this.resolvePlacementConfig(placement, alignment, margin),\n embeddedView: view,\n appRef,\n onClosed,\n rafId: null,\n focusTimeoutId: null,\n cleanup: () => {},\n };\n instance.cleanup = () => this.destroyInstance(instance);\n\n this.overlayStacks.push(instance);\n element.showModal();\n\n const ref = new OverlayRef(element, instance.cleanup, undefined, template);\n configure?.(instance, ref);\n\n this.scheduleInitialLayout(instance);\n\n return ref;\n }\n\n closeAll(): void {\n // اسنپ‌شات می‌گیریم چون cleanup حین اجرا آرایه‌ی اصلی رو تغییر می‌ده\n [...this.overlayStacks].forEach((instance) => instance.cleanup());\n }\n\n // ---------------------------------------------------------------------\n // lifecycle\n // ---------------------------------------------------------------------\n\n private resolvePlacementConfig(\n placement?: PlacementConfig['placement'],\n alignment?: PlacementConfig['alignment'],\n margin?: number,\n ): PlacementConfig {\n return {\n placement: placement ?? 'auto',\n alignment: alignment ?? 'start',\n margin: margin ?? 8,\n };\n }\n\n private createDialogElement(): HTMLDialogElement {\n const element = this.doc.createElement('dialog');\n element.className = DIALOG_OVERLAY_CLASSNAME;\n const style = element.style;\n style.position = 'absolute';\n style.outline = 'none';\n style.padding = '0';\n style.margin = '0';\n style.border = 'none';\n style.background = 'transparent';\n style.maxWidth = '100vw';\n style.maxHeight = '100vh';\n style.overflow = 'visible';\n style.visibility = 'hidden';\n\n // شمارنده‌ی صعودی مستقل از تعداد فعلی دیالوگ‌های باز؛ در نسخه‌ی قبلی\n // با استفاده از openDialogs.size محاسبه می‌شد که بعد از بستن دیالوگ‌ها\n // می‌تونست باعث تکرار zIndex بین دو دیالوگ بشه.\n style.zIndex = `${++this.zIndexCounter}`;\n\n this.doc.body.appendChild(element);\n return element;\n }\n\n private scheduleInitialLayout(instance: OverlayInstance): void {\n instance.rafId = requestAnimationFrame(() => {\n instance.rafId = null;\n this.positionDialog(instance);\n });\n\n instance.focusTimeoutId = setTimeout(() => {\n instance.focusTimeoutId = null;\n const focusable = instance.element.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n focusable?.focus();\n }, 0);\n }\n\n private destroyInstance(instance: OverlayInstance): void {\n const index = this.overlayStacks.indexOf(instance);\n if (index === -1) return; // جلوگیری از پاک‌سازی دوباره\n\n this.overlayStacks.splice(index, 1);\n\n // لغو کارهای زمان‌بندی‌شده‌ای که هنوز اجرا نشدن (نشتی حافظه در نسخه‌ی قبلی)\n if (instance.rafId !== null) cancelAnimationFrame(instance.rafId);\n if (instance.focusTimeoutId !== null) clearTimeout(instance.focusTimeoutId);\n\n if (instance.componentRef) {\n instance.componentRef.location.nativeElement?.remove();\n instance.componentRef.destroy();\n }\n\n if (instance.embeddedView && instance.appRef) {\n instance.appRef.detachView(instance.embeddedView);\n instance.embeddedView.destroy();\n }\n\n instance.element.remove();\n instance.onClosed?.();\n }\n\n // ---------------------------------------------------------------------\n // global listeners (فقط یک‌بار در کل عمر سرویس attach می‌شن)\n // ---------------------------------------------------------------------\n\n private attachGlobalListeners(): void {\n if (this.listenersAttached) return;\n this.listenersAttached = true;\n\n const { signal } = this.abortController;\n\n this.doc.addEventListener('keydown', this.onGlobalKeyDown, { signal });\n window.addEventListener('resize', this.onGlobalResize, { signal, passive: true });\n this.doc.addEventListener('click', this.onGlobalPointerEvent, { signal });\n this.doc.addEventListener('contextmenu', this.onGlobalPointerEvent, { signal });\n }\n\n private readonly onGlobalKeyDown = (e: KeyboardEvent): void => {\n if (e.key !== 'Escape') return;\n this.getLastDialog()?.cleanup();\n };\n\n private readonly onGlobalResize = (): void => {\n // چند رویداد resize پشت‌سرهم فقط یک reposition واقعی اجرا می‌کنن\n if (this.resizeRafPending) return;\n this.resizeRafPending = true;\n requestAnimationFrame(() => {\n this.resizeRafPending = false;\n this.repositionAll();\n });\n };\n\n private readonly onGlobalPointerEvent = (e: MouseEvent): void => {\n this.handleClickOnBackdrop(e);\n };\n\n private handleClickOnBackdrop(event: MouseEvent): void {\n const lastDialog = this.getLastDialog();\n if (!lastDialog || !lastDialog.element.open) return;\n // کلیک باید دقیقاً روی خودِ دیالوگ (بک‌دراپ) باشه، نه محتوای داخلش\n if (event.target !== lastDialog.element) return;\n\n // اگه فرم داخل دیالوگه، با کلیک بیرون بسته نشه\n if (lastDialog.element.querySelector('form')) return;\n\n const rect = lastDialog.element.getBoundingClientRect();\n const clickWasInsideDialog =\n rect.top <= event.clientY &&\n event.clientY <= rect.bottom &&\n rect.left <= event.clientX &&\n event.clientX <= rect.right;\n\n const anchRect = lastDialog.anchor.getBoundingClientRect();\n const clickWasInsideAnchor =\n anchRect.top <= event.clientY &&\n event.clientY <= anchRect.bottom &&\n anchRect.left <= event.clientX &&\n event.clientX <= anchRect.right;\n\n if (!clickWasInsideDialog) {\n if (event.type == 'contextmenu' && lastDialog.point && clickWasInsideAnchor) {\n event.preventDefault();\n lastDialog.point = {\n x: event.clientX,\n y: event.clientY,\n };\n this.positionDialog(lastDialog);\n } else {\n lastDialog.cleanup();\n }\n }\n }\n\n private getLastDialog(): OverlayInstance | undefined {\n return this.overlayStacks[this.overlayStacks.length - 1];\n }\n\n // ---------------------------------------------------------------------\n // positioning\n // ---------------------------------------------------------------------\n\n private repositionAll(): void {\n this.overlayStacks.forEach((instance) => {\n if (instance.element.isConnected) {\n this.positionDialog(instance);\n }\n });\n }\n\n private positionDialog(instance: OverlayInstance): void {\n const { anchor, element: dialog, placementConfig, point } = instance;\n const { placement, alignment, margin } = placementConfig;\n\n if (!dialog.isConnected) return;\n\n let anchorRect: DOMRect;\n if (point) {\n anchorRect = new DOMRect(point.x, point.y, 0, 0);\n } else {\n anchorRect = anchor.getBoundingClientRect();\n }\n const dialogRect = dialog.getBoundingClientRect();\n\n const vw = Math.min(document.body.clientWidth, window.innerWidth);\n const vh = Math.min(document.body.clientHeight, window.innerHeight);\n const isRTL = IsRtl(this.doc);\n\n let top = 0;\n let left: number | 'auto' = 'auto';\n let right: number | 'auto' = 'auto';\n\n const spaceBelow = vh - anchorRect.bottom;\n const spaceAbove = anchorRect.top;\n let verticalPos: 'above' | 'bottom' = 'above';\n\n if (\n placement === 'bottom' ||\n (placement === 'auto' && spaceBelow >= dialogRect.height + margin)\n ) {\n top = anchorRect.bottom + margin;\n verticalPos = 'above';\n if (top + dialogRect.height > vh - margin) {\n top = vh - dialogRect.height - margin;\n verticalPos = 'bottom';\n }\n } else {\n top = anchorRect.top - dialogRect.height - margin;\n verticalPos = 'bottom';\n if (top > spaceAbove) {\n top = anchorRect.top + anchorRect.height + margin;\n verticalPos = 'above';\n }\n }\n\n if (alignment === 'center') {\n left = anchorRect.left + anchorRect.width / 2 - dialogRect.width / 2;\n } else if (alignment === 'start') {\n if (isRTL) {\n right = vw - anchorRect.right;\n } else {\n left = anchorRect.left;\n }\n } else {\n left = isRTL ? anchorRect.left : anchorRect.right; //- dialogRect.width;\n }\n if (left !== 'auto') {\n left = Math.min(Math.max(left, margin), vw - dialogRect.width - margin);\n }\n if (right !== 'auto') {\n right = Math.min(Math.max(right, margin), vw - dialogRect.width - margin);\n }\n\n if (top < 0) {\n top = 0;\n }\n\n dialog.className = `${DIALOG_OVERLAY_CLASSNAME} tips-${verticalPos}`;\n dialog.style.top = `${top + window.scrollY}px`;\n dialog.style.left = left !== 'auto' ? `${left + window.scrollX}px` : 'auto';\n dialog.style.right = right !== 'auto' ? `${right + window.scrollX}px` : 'auto';\n dialog.style.transformOrigin = verticalPos == 'above' ? 'left top' : 'left bottom';\n // dialog.style.transform = 'none';\n dialog.style.visibility = 'visible';\n dialog.style.animation = 'menu-enter 120ms cubic-bezier(0, 0, 0.2, 1)';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-kit",
3
- "version": "3.2.0",
3
+ "version": "4.0.0",
4
4
  "description": "Angular input components",
5
5
  "author": "Mohammadreza Samani <mr.samani1368@gmail.com>",
6
6
  "license": "MIT",
@@ -45,6 +45,10 @@
45
45
  "types": "./types/ngx-kit-color-picker.d.ts",
46
46
  "default": "./fesm2022/ngx-kit-color-picker.mjs"
47
47
  },
48
+ "./data-table": {
49
+ "types": "./types/ngx-kit-data-table.d.ts",
50
+ "default": "./fesm2022/ngx-kit-data-table.mjs"
51
+ },
48
52
  "./date-picker": {
49
53
  "types": "./types/ngx-kit-date-picker.d.ts",
50
54
  "default": "./fesm2022/ngx-kit-date-picker.mjs"
@@ -0,0 +1,192 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { Type, TemplateRef, OnInit, AfterContentInit, ElementRef, EventEmitter, QueryList, InjectionToken, EnvironmentProviders, InputSignal } from '@angular/core';
3
+ import * as ngx_kit_data_table from 'ngx-kit/data-table';
4
+
5
+ interface PageEvent {
6
+ page: number;
7
+ pageSize: number;
8
+ }
9
+
10
+ declare class NgxPagination {
11
+ protected readonly config: ngx_kit_data_table.NgxPaginationOptions;
12
+ readonly total: _angular_core.InputSignal<number>;
13
+ readonly page: _angular_core.ModelSignal<number>;
14
+ readonly pageSize: _angular_core.ModelSignal<number>;
15
+ readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
16
+ readonly labels: _angular_core.InputSignal<ngx_kit_data_table.PaginationLabel>;
17
+ readonly siblingCount: _angular_core.InputSignal<number>;
18
+ readonly boundaryCount: _angular_core.InputSignal<number>;
19
+ readonly paginate: _angular_core.OutputEmitterRef<PageEvent>;
20
+ readonly totalPages: _angular_core.Signal<number>;
21
+ readonly firstItem: _angular_core.Signal<number>;
22
+ readonly lastItem: _angular_core.Signal<number>;
23
+ readonly pages: _angular_core.Signal<(string | number)[]>;
24
+ constructor();
25
+ private buildPages;
26
+ next(): void;
27
+ previous(): void;
28
+ first(): void;
29
+ last(): void;
30
+ goto(page: number): void;
31
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxPagination, never>;
32
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxPagination, "ngx-pagination", never, { "total": { "alias": "total"; "required": true; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "siblingCount": { "alias": "siblingCount"; "required": false; "isSignal": true; }; "boundaryCount": { "alias": "boundaryCount"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; "pageSize": "pageSizeChange"; "paginate": "paginate"; }, never, never, true, never>;
33
+ }
34
+
35
+ type TableRendererRegistry = Readonly<Record<string, Type<unknown>>>;
36
+ type TableCellFormatter = (value: unknown, row: object, field: FieldsType<object>) => unknown;
37
+ interface NgxTableOptions {
38
+ showRecordNumber?: boolean;
39
+ labels: TableLable;
40
+ /** Enable multi-column sort by default (Ctrl/Shift + click) unless a table overrides it. */
41
+ multiSort?: boolean;
42
+ resizable?: boolean;
43
+ stripedRows?: boolean;
44
+ hoverable?: boolean;
45
+ stickyHeader?: boolean;
46
+ renderers?: TableRendererRegistry;
47
+ formatters?: Readonly<Record<string, TableCellFormatter>>;
48
+ }
49
+ interface TableLable {
50
+ operation?: string;
51
+ noData?: string;
52
+ loading?: string;
53
+ }
54
+
55
+ declare class FieldsType<T extends Object> {
56
+ title: string;
57
+ column: Extract<keyof T, string>;
58
+ dataType?: 'text' | 'image' | 'profilePicture' | 'date' | 'time' | 'dateTime' | 'yesNo' | 'boolean' | 'number' | 'localize' | 'template' | 'enum' | 'html' | 'userAgent' | undefined;
59
+ width?: number;
60
+ wrap?: boolean;
61
+ prefix?: string;
62
+ /**
63
+ * نام renderer ثبت‌شده در provideTable
64
+ */
65
+ renderer?: string;
66
+ /**
67
+ * ورودی‌های اضافه برای renderer
68
+ */
69
+ rendererInputs?: Record<string, unknown>;
70
+ /**
71
+ * نام formatter سراسری یا تابع اختصاصی
72
+ */
73
+ formatter?: string | TableCellFormatter;
74
+ }
75
+ declare class SortEvent {
76
+ field: string;
77
+ direction: 'asc' | 'desc';
78
+ }
79
+
80
+ declare class TableCellDirective {
81
+ readonly column: _angular_core.InputSignal<string>;
82
+ readonly template: TemplateRef<any>;
83
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCellDirective, never>;
84
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TableCellDirective, "ng-template[ngxTableCell]", never, { "column": { "alias": "ngxTableCell"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
85
+ }
86
+
87
+ type SortDirection = 'asc' | 'desc';
88
+ interface SortMeta<T> {
89
+ field: Extract<keyof T, string>;
90
+ direction: SortDirection;
91
+ }
92
+ interface PageState {
93
+ pageIndex: number;
94
+ pageSize: number;
95
+ /** Zero-based offset of the first row on the current page (pageIndex * pageSize). */
96
+ first: number;
97
+ }
98
+ /** Emitted by the table whenever the server needs to (re)fetch a page in lazy mode. */
99
+ interface LazyLoadEvent<T> extends PageState {
100
+ sorts: SortMeta<T>[];
101
+ }
102
+
103
+ declare class NgxTable<T extends object> implements OnInit, AfterContentInit {
104
+ protected readonly config: ngx_kit_data_table.NgxTableOptions;
105
+ protected readonly paginationConfig: ngx_kit_data_table.NgxPaginationOptions;
106
+ readonly fields: _angular_core.InputSignal<FieldsType<T>[]>;
107
+ readonly data: _angular_core.InputSignal<T[]>;
108
+ readonly totalRecords: _angular_core.InputSignal<number>;
109
+ readonly showRecordNumber: _angular_core.InputSignal<boolean | undefined>;
110
+ list: _angular_core.WritableSignal<readonly T[]>;
111
+ readonly operations: _angular_core.InputSignal<TemplateRef<any> | undefined>;
112
+ readonly operationWidth: _angular_core.InputSignal<number>;
113
+ readonly numWidth: _angular_core.InputSignal<number>;
114
+ readonly pageSize: _angular_core.InputSignal<number>;
115
+ readonly loading: _angular_core.InputSignal<boolean>;
116
+ readonly multiSort: _angular_core.InputSignal<boolean | undefined>;
117
+ readonly lazy: _angular_core.InputSignal<boolean>;
118
+ readonly lazyLoad: _angular_core.OutputEmitterRef<LazyLoadEvent<T>>;
119
+ sortField: string;
120
+ sortDirection: 'asc' | 'desc';
121
+ tableContainer: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
122
+ sortChange: EventEmitter<SortEvent>;
123
+ cellTemplates: QueryList<TableCellDirective>;
124
+ templateMap: Map<string, TemplateRef<any>>;
125
+ page: number;
126
+ constructor();
127
+ ngOnInit(): void;
128
+ ngAfterContentInit(): void;
129
+ private loadClientPage;
130
+ onSortChange(item: FieldsType<T>): void;
131
+ protected getTemplate(column: Extract<keyof T, string>): TemplateRef<unknown> | null;
132
+ sortList(): void;
133
+ getRecordNumber(item: T): any;
134
+ onPageChange(event: PageEvent): void;
135
+ /**
136
+ * اگر بدنه جدول اسکرول شد هدر جدول نیز منطبق شود
137
+ */
138
+ private adjustScroll;
139
+ protected getRenderer(field: FieldsType<T>): Type<unknown> | null;
140
+ protected getCellValue(row: T, field: FieldsType<T>): unknown;
141
+ protected formatCellValue(row: T, field: FieldsType<T>): string;
142
+ private stringify;
143
+ protected getRendererInputs(row: T, field: FieldsType<T>): Record<string, unknown>;
144
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxTable<any>, never>;
145
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxTable<any>, "ngx-table", never, { "fields": { "alias": "fields"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": true; "isSignal": true; }; "showRecordNumber": { "alias": "showRecordNumber"; "required": false; "isSignal": true; }; "operations": { "alias": "operations"; "required": false; "isSignal": true; }; "operationWidth": { "alias": "operationWidth"; "required": false; "isSignal": true; }; "numWidth": { "alias": "numWidth"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "multiSort": { "alias": "multiSort"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; }, { "lazyLoad": "lazyLoad"; "sortChange": "sortChange"; }, ["cellTemplates"], never, true, never>;
146
+ }
147
+
148
+ interface PaginationLabel {
149
+ first: string;
150
+ last: string;
151
+ next: string;
152
+ previous: string;
153
+ showing: string;
154
+ to: string;
155
+ of: string;
156
+ results: string;
157
+ perPage: string;
158
+ pageSize: string;
159
+ }
160
+
161
+ interface NgxPaginationOptions {
162
+ labels: PaginationLabel;
163
+ pageSizeOptions: number[];
164
+ defaultPageSize: number;
165
+ }
166
+
167
+ declare const NGX_PAGINATION_CONFIG: InjectionToken<NgxPaginationOptions>;
168
+ declare const NGX_PAGINATION_CONFIG_DEFAULT: NgxPaginationOptions;
169
+
170
+ /** Injected into every ngx-table instance. Populate via provideTable(). */
171
+ declare const NGX_TABLE_CONFIG: InjectionToken<NgxTableOptions>;
172
+ declare const NGX_TABLE_CONFIG_DEFAULT: NgxTableOptions;
173
+
174
+ declare function providePagination(options?: NgxPaginationOptions): EnvironmentProviders;
175
+
176
+ declare function provideTable(options?: NgxTableOptions): EnvironmentProviders;
177
+
178
+ /**
179
+ * used in render implements
180
+ */
181
+ interface TableCellRendererComponent<TValue = unknown, TRow extends object = object> {
182
+ value: TValue | InputSignal<TValue>;
183
+ row: TRow | InputSignal<TRow>;
184
+ field: FieldsType<TRow> | InputSignal<FieldsType<TRow>>;
185
+ }
186
+ /**
187
+ * used in registry
188
+ */
189
+ type TableCellRendererType<TValue = unknown, TRow extends object = object> = Type<TableCellRendererComponent<TValue, TRow>>;
190
+
191
+ export { FieldsType, NGX_PAGINATION_CONFIG, NGX_PAGINATION_CONFIG_DEFAULT, NGX_TABLE_CONFIG, NGX_TABLE_CONFIG_DEFAULT, NgxPagination, NgxTable, SortEvent, providePagination, provideTable };
192
+ export type { LazyLoadEvent, NgxPaginationOptions, NgxTableOptions, PageEvent, PageState, PaginationLabel, SortDirection, SortMeta, TableCellFormatter, TableCellRendererComponent, TableCellRendererType, TableLable, TableRendererRegistry };
@@ -165,6 +165,8 @@ declare class SliderComponent implements OnInit, ControlValueAccessor, Validator
165
165
  static ɵcmp: i0.ɵɵComponentDeclaration<SliderComponent, "slider", never, { "step": { "alias": "step"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "background": { "alias": "background"; "required": false; }; "isBgTransparent": { "alias": "isBgTransparent"; "required": false; }; }, { "change": "change"; }, never, ["*"], true, never>;
166
166
  }
167
167
 
168
+ declare function mergeConfig<T>(base: T, override?: Partial<T>): T;
169
+
168
170
  declare function getOffsetPosition(evt: MouseEvent | TouchEvent, parent: HTMLElement): {
169
171
  x: number;
170
172
  y: number;
@@ -274,5 +276,5 @@ interface OverlayInstance {
274
276
  cleanup: () => void;
275
277
  }
276
278
 
277
- export { BrowserService, DIALOG_OVERLAY_CLASSNAME, FOCUSABLE_SELECTOR, IsRtl, OverlayRef, OverlayService, RangeSliderComponent, SaturationComponent, SliderComponent, ValueModel, WINDOW, getOffsetPosition, makeConfetti, randomStrnig };
279
+ export { BrowserService, DIALOG_OVERLAY_CLASSNAME, FOCUSABLE_SELECTOR, IsRtl, OverlayRef, OverlayService, RangeSliderComponent, SaturationComponent, SliderComponent, ValueModel, WINDOW, getOffsetPosition, makeConfetti, mergeConfig, randomStrnig };
278
280
  export type { Alignment, BaseOverlayOptions, IPosition, IValue, OverlayInstance, OverlayOptions, Placement, Point, TemplateOptions };