ngx-kit 7.2.0 → 7.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angle-selector/README.md +34 -34
- package/box-shadow/README.md +33 -33
- package/color-picker/README.md +52 -52
- package/{shared → core}/README.md +117 -117
- package/data-table/README.md +120 -120
- package/date-picker/README.md +74 -74
- package/dialog/README.md +122 -92
- package/drag-resize/README.md +53 -55
- package/fesm2022/ngx-kit-angle-selector.mjs +9 -26
- package/fesm2022/ngx-kit-angle-selector.mjs.map +1 -1
- package/fesm2022/ngx-kit-box-shadow.mjs +330 -356
- package/fesm2022/ngx-kit-box-shadow.mjs.map +1 -1
- package/fesm2022/ngx-kit-color-picker.mjs +132 -272
- package/fesm2022/ngx-kit-color-picker.mjs.map +1 -1
- package/fesm2022/{ngx-kit-shared.mjs → ngx-kit-core.mjs} +845 -277
- package/fesm2022/ngx-kit-core.mjs.map +1 -0
- package/fesm2022/ngx-kit-data-table.mjs +3 -3
- package/fesm2022/ngx-kit-data-table.mjs.map +1 -1
- package/fesm2022/ngx-kit-date-picker.mjs +153 -147
- package/fesm2022/ngx-kit-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-kit-dialog.mjs +430 -331
- package/fesm2022/ngx-kit-dialog.mjs.map +1 -1
- package/fesm2022/ngx-kit-drag-resize.mjs +126 -45
- package/fesm2022/ngx-kit-drag-resize.mjs.map +1 -1
- package/fesm2022/ngx-kit-drawer-menu.mjs +2 -2
- package/fesm2022/ngx-kit-drawer-menu.mjs.map +1 -1
- package/fesm2022/ngx-kit-dropzone.mjs.map +1 -1
- package/fesm2022/ngx-kit-form-field.mjs.map +1 -1
- package/fesm2022/ngx-kit-gallery.mjs +3 -3
- package/fesm2022/ngx-kit-gallery.mjs.map +1 -1
- package/fesm2022/ngx-kit-gradient-picker.mjs +20 -38
- package/fesm2022/ngx-kit-gradient-picker.mjs.map +1 -1
- package/fesm2022/ngx-kit-grid-layout.mjs +19 -18
- package/fesm2022/ngx-kit-grid-layout.mjs.map +1 -1
- package/fesm2022/ngx-kit-image-editor.mjs +3 -3
- package/fesm2022/ngx-kit-image-editor.mjs.map +1 -1
- package/fesm2022/ngx-kit-menu.mjs +1 -1
- package/fesm2022/ngx-kit-menu.mjs.map +1 -1
- package/fesm2022/ngx-kit-message.mjs +1 -1
- package/fesm2022/ngx-kit-message.mjs.map +1 -1
- package/fesm2022/ngx-kit-notify.mjs +1 -1
- package/fesm2022/ngx-kit-notify.mjs.map +1 -1
- package/fesm2022/ngx-kit-time-picker.mjs +1 -1
- package/fesm2022/ngx-kit-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-kit-virtual-scroll.mjs +2 -2
- package/fesm2022/ngx-kit-virtual-scroll.mjs.map +1 -1
- package/gallery/README.md +71 -71
- package/gradient-picker/README.md +41 -41
- package/grid-layout/README.md +64 -64
- package/image-editor/README.md +44 -44
- package/menu/README.md +85 -85
- package/message/README.md +70 -70
- package/notify/README.md +56 -56
- package/package.json +5 -9
- package/time-picker/README.md +89 -89
- package/types/ngx-kit-angle-selector.d.ts +13 -16
- package/types/ngx-kit-box-shadow.d.ts +37 -95
- package/types/ngx-kit-color-picker.d.ts +61 -58
- package/types/{ngx-kit-shared.d.ts → ngx-kit-core.d.ts} +156 -34
- package/types/ngx-kit-data-table.d.ts +2 -2
- package/types/ngx-kit-date-picker.d.ts +30 -29
- package/types/ngx-kit-dialog.d.ts +208 -107
- package/types/ngx-kit-drag-resize.d.ts +33 -6
- package/types/ngx-kit-gradient-picker.d.ts +4 -7
- package/types/ngx-kit-grid-layout.d.ts +0 -1
- package/types/ngx-kit-menu.d.ts +1 -1
- package/types/ngx-kit-time-picker.d.ts +1 -1
- package/virtual-scroll/README.md +199 -199
- package/fesm2022/ngx-kit-shared.mjs.map +0 -1
- package/fesm2022/ngx-kit-webflow.mjs +0 -709
- package/fesm2022/ngx-kit-webflow.mjs.map +0 -1
- package/types/ngx-kit-webflow.d.ts +0 -286
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-kit-box-shadow.mjs","sources":["../../../projects/libs/box-shadow/utils/box-shadow.ts","../../../projects/libs/box-shadow/components/box-shadow.component.ts","../../../projects/libs/box-shadow/components/box-shadow.component.html","../../../projects/libs/box-shadow/directives/ngx-input-box-shadow.directive.ts","../../../projects/libs/box-shadow/ngx-kit-box-shadow.ts"],"sourcesContent":["import { BoxShadowValue } from '../contracts/BoxShadowValue';\nexport function parseBoxShadowToPx(shadow: string, contextPx = 16): BoxShadowValue | null {\n if (!shadow || !shadow?.trim()) return null;\n let inset = false;\n shadow = shadow.trim();\n\n if (shadow.startsWith('inset')) {\n inset = true;\n shadow = shadow.slice(5).trim();\n }\n\n const colorRegex =\n /(#(?:[a-f0-9]{3}|[a-f0-9]{6}|[a-f0-9]{4}|[a-f0-9]{8})\\b|rgb\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3}\\)|rgba\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3},\\s*\\d*(?:\\.\\d+)?\\)|hsl\\(\\s*\\d+,\\s*\\d*(?:\\.\\d+)?%,\\s*\\d*(?:\\.\\d+)?%\\)|hsla\\(\\d+,\\s*[\\d.]+%,\\s*[\\d.]+%,\\s*\\d*(?:\\.\\d+)?\\))/gi;\n const colorMatch = shadow.match(colorRegex);\n let color = 'black';\n if (colorMatch) {\n color = colorMatch[0];\n shadow = shadow.replace(color, '').trim();\n }\n\n const toPx = (value: number, unit: string): number => {\n switch (unit.toLowerCase()) {\n case 'px':\n case '':\n return value;\n case 'em':\n case 'rem':\n return value * contextPx;\n case '%':\n return (value / 100) * contextPx;\n case 'pt':\n return value * 1.333;\n default:\n return value; // fallback\n }\n };\n\n const matches = [...shadow.matchAll(/(-?\\d*\\.?\\d+)([a-zA-Z%]*)/g)];\n const values = matches.map(([_, num, unit]) => toPx(parseFloat(num), unit));\n\n const [offsetX, offsetY, blur, spread] = values;\n\n return {\n inset,\n offsetX: offsetX ?? 0,\n offsetY: offsetY ?? 0,\n blurRadius: blur ?? 0,\n spreadRadius: spread ?? 0,\n color,\n };\n}\n\nexport function stringifyBoxShadow(obj: BoxShadowValue): string {\n const { inset, offsetX, offsetY, blurRadius, spreadRadius, color } = obj;\n\n const parts = [\n inset ? 'inset' : '',\n `${offsetX}px`,\n `${offsetY}px`,\n `${blurRadius}px`,\n `${spreadRadius}px`,\n color,\n ];\n\n return parts.filter(Boolean).join(' ').trim();\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n forwardRef,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n HostListener,\n ElementRef,\n ViewChild,\n AfterViewInit,\n Input,\n Output,\n EventEmitter,\n inject,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n FormsModule,\n ControlValueAccessor,\n Validator,\n AbstractControl,\n ValidationErrors,\n} from '@angular/forms';\nimport { parseBoxShadowToPx, stringifyBoxShadow } from '../utils/box-shadow';\nimport { IPosition, getOffsetPosition, startDragSession } from 'ngx-kit/shared';\nimport { NgxInputColor } from 'ngx-kit/color-picker';\nimport { BrowserService } from 'ngx-kit/shared';\n\n@Component({\n selector: 'ngx-box-shadow',\n templateUrl: './box-shadow.component.html',\n styleUrls: ['./box-shadow.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxBoxShadowComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: NgxBoxShadowComponent,\n },\n ],\n imports: [FormsModule, NgxInputColor],\n host: {\n '[class.dark]': 'theme==\"dark\"',\n },\n})\nexport class NgxBoxShadowComponent\n implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, Validator\n{\n theme: 'light' | 'dark' | 'auto' = 'light';\n @Input('theme') set setTheme(val: 'light' | 'dark' | 'auto') {\n if (!val || val == 'auto') {\n this.theme = this.browserService.prefersDarkMode ? 'dark' : 'light';\n } else {\n this.theme = val;\n }\n }\n /**\n * The maximum range of the box shadow.\n * @default 25\n */\n @Input() maxRange = 25;\n @Output() change = new EventEmitter<string>();\n isDisabled = false;\n isDragging = false;\n value: IPosition = { x: 0, y: 0 };\n x = 0;\n y = 0;\n blur = 0;\n spread = 0;\n color = 'black';\n line: { x1: number; y1: number; x2: number; y2: number } = { x1: 0, y1: 0, x2: 0, y2: 0 };\n center: { x: number; y: number } = { x: 0, y: 0 };\n\n padRect?: DOMRect;\n thumbRect?: DOMRect;\n protected _onChange = (value: string) => {};\n protected _onTouched = () => {};\n _onValidateChange = () => {};\n private stopDrag?: () => void;\n\n @ViewChild('pad', { static: true }) pad!: ElementRef<HTMLDivElement>;\n @ViewChild('thumb', { static: true }) thumb!: ElementRef<HTMLDivElement>;\n\n browserService = inject(BrowserService);\n\n constructor(private cd: ChangeDetectorRef) {}\n\n ngOnInit(): void {}\n ngAfterViewInit(): void {\n this.updateRects();\n }\n ngOnDestroy(): void {\n this.stopDrag?.();\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 registerOnValidatorChange(fn: () => void): void {\n this._onValidateChange = fn;\n }\n validate(control: AbstractControl): ValidationErrors | null {\n return null;\n }\n\n writeValue(value: any): void {\n this.resetPosition();\n if (value) {\n const boxShadow = parseBoxShadowToPx(value);\n // console.log(boxShadow);\n if (boxShadow) {\n this.value = { x: boxShadow.offsetX, y: boxShadow.offsetY };\n this.blur = boxShadow.blurRadius;\n this.spread = boxShadow.spreadRadius;\n this.color = boxShadow.color;\n this.convertValueToPosition(boxShadow.offsetX, boxShadow.offsetY);\n }\n }\n }\n\n dragStart(ev: MouseEvent | TouchEvent) {\n ev.stopPropagation();\n ev.preventDefault();\n this.isDragging = true;\n this.updatePosition(ev);\n this.updateRects();\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 private updateRects() {\n this.padRect = this.pad.nativeElement.getBoundingClientRect();\n this.thumbRect = this.thumb.nativeElement.getBoundingClientRect();\n }\n private resetPosition() {\n if (!this.padRect || !this.thumbRect) this.updateRects();\n this.center = { x: this.padRect!.width / 2, y: this.padRect!.height / 2 };\n this.x = this.center.x - this.thumbRect!.width / 2;\n this.y = this.center.y - this.thumbRect!.height / 2;\n this.line = { x1: this.center.x, y1: this.center.y, x2: this.center.x, y2: this.center.y };\n this.cd.detectChanges();\n }\n\n @HostListener('window:resize')\n onResize() {\n this.writeValue(this.value);\n }\n\n private updatePosition(ev: MouseEvent | TouchEvent) {\n if (!this.isDragging) return;\n if (!this.padRect || !this.thumbRect) this.updateRects();\n const position = getOffsetPosition(ev, this.pad.nativeElement);\n\n const padRec = this.padRect!;\n const thumbRec = this.thumbRect!;\n\n const minX = thumbRec.width / 2;\n const maxX = padRec.width - thumbRec.width / 2;\n const minY = thumbRec.height / 2;\n const maxY = padRec.height - thumbRec.height / 2;\n\n const clampedX = Math.max(minX, Math.min(position.x, maxX));\n const clampedY = Math.max(minY, Math.min(position.y, maxY));\n\n // فقط یکبار از وسط اصلاح کن\n this.x = clampedX - thumbRec.width / 2;\n this.y = clampedY - thumbRec.height / 2;\n\n this.line = {\n x1: this.center.x,\n y1: this.center.y,\n x2: this.x + thumbRec.width / 2,\n y2: this.y + thumbRec.height / 2,\n };\n\n this.setValueByPosition(thumbRec, padRec);\n this.cd.markForCheck();\n }\n\n setValueByPosition(thumbRec: DOMRect, padRec: DOMRect) {\n const padCenterX = (padRec.width - thumbRec.width) / 2;\n const padCenterY = (padRec.height - thumbRec.height) / 2;\n\n // فاصله thumb از مرکز\n const dx = this.x - padCenterX;\n const dy = this.y - padCenterY;\n\n // مقیاس تبدیل به -50 تا +50 (یا هرچقدر بخوای)\n const halfRangeX = (padRec.width - thumbRec.width) / 2;\n const halfRangeY = (padRec.height - thumbRec.height) / 2;\n\n let valueX = (dx / halfRangeX) * this.maxRange; // -50 تا +50\n let valueY = (dy / halfRangeY) * this.maxRange;\n\n // رُند کردن\n valueX = Math.round(valueX);\n valueY = Math.round(valueY);\n\n // محدود کردن به -50 تا +50 یا هر مقدار دلخواه\n valueX = Math.min(Math.max(valueX, -this.maxRange), this.maxRange);\n valueY = Math.min(Math.max(valueY, -this.maxRange), this.maxRange);\n\n const newValue = { x: valueX, y: valueY };\n\n if (!this.value || this.value.x !== valueX || this.value.y !== valueY) {\n this.value = newValue;\n this.onChangeData();\n }\n }\n\n public onChangeValue() {\n this.convertValueToPosition(this.value.x, this.value.y);\n this.onChangeData();\n }\n private convertValueToPosition(offsetX: number, offsetY: number) {\n if (!this.padRect || !this.thumbRect) this.updateRects();\n\n // موقعیت پیشنهادی بر اساس offset\n let proposedX = this.padRect!.width / 2 + offsetX - this.thumbRect!.width / 2;\n let proposedY = this.padRect!.height / 2 + offsetY - this.thumbRect!.height / 2;\n\n // محدود کردن (clamp) تا خارج از pad نره\n const minX = 0;\n const maxX = this.padRect!.width - this.thumbRect!.width;\n const minY = 0;\n const maxY = this.padRect!.height - this.thumbRect!.height;\n\n this.x = Math.min(Math.max(proposedX, minX), maxX);\n this.y = Math.min(Math.max(proposedY, minY), maxY);\n\n // رسم خط راهنما از مرکز به thumb\n this.line = {\n x1: this.center.x,\n y1: this.center.y,\n x2: this.x + this.thumbRect!.width / 2,\n y2: this.y + this.thumbRect!.height / 2,\n };\n\n this.cd.detectChanges();\n }\n\n onChangeData() {\n const boxShadow = stringifyBoxShadow({\n inset: false,\n offsetX: this.value.x,\n offsetY: this.value.y,\n blurRadius: this.blur,\n spreadRadius: this.spread,\n color: this.color,\n });\n this._onChange(boxShadow);\n this.change.emit(boxShadow);\n }\n\n stopPropagation(ev: Event) {\n ev.stopPropagation();\n }\n}\n","<div class=\"ngx-box-shadow-container\" (click)=\"stopPropagation($event)\">\n <div class=\"pad-container\" #pad>\n <svg viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n <line\n [attr.x1]=\"line.x1\"\n [attr.y1]=\"line.y1\"\n [attr.x2]=\"line.x2\"\n [attr.y2]=\"line.y2\"\n stroke=\"blue\"\n stroke-width=\"2\" />\n </svg>\n <div\n class=\"thumb\"\n #thumb\n [style.left.px]=\"x\"\n [style.top.px]=\"y\"\n (mousedown)=\"dragStart($event)\"\n (touchstart)=\"dragStart($event)\"></div>\n </div>\n\n <div class=\"ngx-settings\">\n <div class=\"ngx-setting-item\">\n <div class=\"ngx-row\">\n <span>Offset X</span>\n <input\n type=\"number\"\n id=\"offsetX\"\n [(ngModel)]=\"value.x\"\n name=\"offsetX\"\n (ngModelChange)=\"onChangeValue()\" />\n </div>\n <input\n type=\"range\"\n id=\"offsetX\"\n [(ngModel)]=\"value.x\"\n name=\"rangeOffsetX\"\n (ngModelChange)=\"onChangeValue()\"\n step=\"1\"\n [min]=\"-maxRange\"\n [max]=\"maxRange\" />\n </div>\n <div class=\"ngx-setting-item\">\n <div class=\"ngx-row\">\n <span>Offset Y</span>\n <input\n type=\"number\"\n id=\"offsetY\"\n [(ngModel)]=\"value.y\"\n name=\"offsetY\"\n (ngModelChange)=\"onChangeValue()\" />\n </div>\n <input\n type=\"range\"\n id=\"offsetY\"\n [(ngModel)]=\"value.y\"\n name=\"rangeOffsetY\"\n (ngModelChange)=\"onChangeValue()\"\n step=\"1\"\n [min]=\"-maxRange\"\n [max]=\"maxRange\" />\n </div>\n <div class=\"ngx-setting-item\">\n <div class=\"ngx-row\">\n <span>Blur</span>\n <input\n type=\"number\"\n id=\"blur\"\n [(ngModel)]=\"blur\"\n name=\"blur\"\n (ngModelChange)=\"onChangeValue()\" />\n </div>\n <input\n type=\"range\"\n id=\"blur\"\n [(ngModel)]=\"blur\"\n name=\"rangeBlur\"\n (ngModelChange)=\"onChangeValue()\"\n step=\"1\" />\n </div>\n <div class=\"ngx-setting-item\">\n <div class=\"ngx-row\">\n <span>Spread</span>\n <input\n type=\"number\"\n id=\"spread\"\n [(ngModel)]=\"spread\"\n name=\"spread\"\n (ngModelChange)=\"onChangeValue()\" />\n </div>\n <input\n type=\"range\"\n id=\"spread\"\n [(ngModel)]=\"spread\"\n name=\"rangeSpread\"\n (ngModelChange)=\"onChangeValue()\"\n step=\"1\" />\n </div>\n <div class=\"ngx-setting-item\">\n <div class=\"ngx-row\">\n <span>color</span>\n <input\n type=\"text\"\n readonly\n id=\"color\"\n [(ngModel)]=\"color\"\n name=\"color\"\n ngxInputColor\n [simpleMode]=\"true\"\n (ngModelChange)=\"onChangeData()\"\n autocomplete=\"off\" />\n </div>\n </div>\n </div>\n</div>\n","import {\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n Renderer2,\n ViewContainerRef,\n forwardRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { DOCUMENT } from '@angular/common';\nimport { NgxBoxShadowComponent } from '../components/box-shadow.component';\nimport { OverlayRef, OverlayService } from 'ngx-kit/shared';\n\n@Directive({\n selector: '[ngxInputBoxShadow]',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgxInputBoxShadow), multi: true },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: NgxInputBoxShadow,\n },\n ],\n})\nexport class NgxInputBoxShadow implements OnDestroy, ControlValueAccessor, Validator {\n @Input() setInputBackground = true;\n\n private pickerRef?: OverlayRef<NgxBoxShadowComponent>;\n\n value = '';\n\n protected _onChange = (value: string) => {};\n protected _onTouched = () => {};\n _onValidateChange = () => {};\n constructor(\n private el: ElementRef,\n private viewContainerRef: ViewContainerRef,\n private renderer: Renderer2,\n private overlayService: OverlayService,\n ) {}\n\n @HostListener('click', ['$event']) onClick(ev: Event) {\n ev.stopPropagation();\n ev.preventDefault();\n this.toggleColorPicker();\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 if (disabled) {\n this.renderer.setProperty(this.el.nativeElement, 'disabled', disabled);\n } else {\n this.renderer.removeAttribute(this.el.nativeElement, 'disabled');\n }\n }\n registerOnValidatorChange(fn: () => void): void {\n this._onValidateChange = fn;\n }\n validate(control: AbstractControl): ValidationErrors | null {\n return null;\n }\n\n ngOnDestroy(): void {\n this.destroyPicker();\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n toggleColorPicker() {\n if (this.pickerRef) {\n this.destroyPicker();\n return;\n }\n this.pickerRef = this.overlayService.open({\n anchor: this.el.nativeElement,\n component: NgxBoxShadowComponent,\n viewContainerRef: this.viewContainerRef,\n alignment: 'start',\n placement: 'auto',\n configure: (instance, ref) => {\n instance.writeValue(this.value);\n\n instance.change.subscribe((c: string) => {\n this._onChange(c);\n });\n\n // instance.closed.subscribe(() => ref.close());\n },\n onClosed: () => {\n this.pickerRef = undefined;\n },\n });\n }\n\n destroyPicker() {\n if (this.pickerRef) {\n this.pickerRef.close();\n this.pickerRef = undefined;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-kit-box-shadow.mjs","sources":["../../../projects/libs/box-shadow/utils/box-shadow-parser.ts","../../../projects/libs/box-shadow/components/shadow-control/shadow-control.ts","../../../projects/libs/box-shadow/components/shadow-control/shadow-control.html","../../../projects/libs/box-shadow/components/shadow-list/box-shadow.ts","../../../projects/libs/box-shadow/components/shadow-list/box-shadow.html","../../../projects/libs/box-shadow/ngx-kit-box-shadow.ts"],"sourcesContent":["import { extractCssColors } from 'ngx-kit/core';\nimport { BoxShadow } from '../contracts/BoxShadowValue';\n\nexport function parseBoxShadow(cssValue: string): BoxShadow[] {\n if (!cssValue || typeof cssValue !== 'string') {\n return [];\n }\n // Split multiple shadows by comma\n const shadows = cssValue\n .split(/,(?![^\\(]*\\))/)\n .map((shadow) => shadow.trim())\n .filter((shadow) => shadow);\n\n const boxShadows: BoxShadow[] = [];\n const unitRegex = /(px|rem|em)/;\n const numberRegex = /-?\\d*\\.?\\d*(?:px|rem|em)?/g;\n\n for (const shadow of shadows) {\n const boxShadow: BoxShadow = {\n xOffset: 0,\n yOffset: 0,\n color: 'rgba(0, 0, 0, 0)', // Default color\n unit: 'px', // Default unit\n cssValue: '',\n };\n\n // Check for inset\n boxShadow.inset = shadow.includes('inset');\n\n // Extract color\n const colorMatch = extractCssColors(shadow);\n if (colorMatch) {\n boxShadow.color = colorMatch[0];\n }\n\n // Remove inset and color to parse numbers\n let numberString = shadow.replace('inset', '').replace(boxShadow.color, '').trim();\n\n // Extract numbers\n const numbers = (numberString.match(numberRegex) ?? [])\n .map((shadow) => shadow.trim())\n .filter((shadow) => shadow);\n if (!numbers) continue;\n\n // Parse numbers\n for (let i = 0; i < numbers.length; i++) {\n const num = parseFloat(numbers[i]);\n const unit = numbers[i].match(unitRegex)?.[0] || 'px';\n boxShadow.unit = unit; // Update unit based on first detected unit\n\n if (i === 0) {\n boxShadow.xOffset = isNaN(num) ? 0 : num;\n } else if (i === 1) {\n boxShadow.yOffset = isNaN(num) ? 0 : num;\n } else if (i === 2) {\n boxShadow.blurRadius = isNaN(num) ? 0 : Math.max(0, num); // Blur can't be negative\n } else if (i === 3) {\n boxShadow.spreadRadius = isNaN(num) ? 0 : num;\n }\n }\n boxShadow.cssValue = shadow;\n boxShadows.push(boxShadow);\n }\n\n return boxShadows;\n}\n\n// Utility to validate and format color\nexport function validateColor(color: string): string {\n const hexRegex = /^#[0-9a-fA-F]{3,8}$/;\n const rgbRegex = /^rgba?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*(,\\s*[\\d.]+)?\\)$/;\n const hslRegex = /^hsl\\(\\s*\\d+\\s*,\\s*\\d+%\\s*,\\s*\\d+%\\s*\\)$/;\n const namedColors = [\n 'black',\n 'white',\n 'red',\n 'blue',\n 'green',\n 'yellow',\n 'purple',\n 'orange',\n // Add more named colors as needed\n ];\n\n color = color.trim();\n if (hexRegex.test(color) || rgbRegex.test(color) || hslRegex.test(color)) {\n return color;\n }\n if (namedColors.includes(color.toLowerCase())) {\n return color.toLowerCase();\n }\n return 'rgba(0, 0, 0, 0)'; // Fallback to transparent\n}\n\n// Utility to format BoxShadow back to CSS string\nexport function formatBoxShadowToCSS(shadows: BoxShadow[]): string {\n return shadows\n .map((shadow) => {\n const parts: string[] = [];\n if (shadow.inset) {\n parts.push('inset');\n }\n parts.push(`${shadow.xOffset}${shadow.unit}`, `${shadow.yOffset}${shadow.unit}`);\n if (shadow.blurRadius !== undefined) {\n parts.push(`${shadow.blurRadius}${shadow.unit}`);\n }\n if (shadow.spreadRadius !== undefined) {\n parts.push(`${shadow.spreadRadius}${shadow.unit}`);\n }\n parts.push(shadow.color);\n return parts.join(' ');\n })\n .join(', ');\n}\n\n// Example usage:\n/*\nconst css = \"10px 20px 5px 0px rgba(0, 0, 0, 0.5), inset -10px -20px 10px #ff0000\";\nconst parsed = parseBoxShadow(css);\nconsole.log(parsed);\n// Output: [\n// { xOffset: 10, yOffset: 20, blurRadius: 5, spreadRadius: 0, color: \"rgba(0, 0, 0, 0.5)\", unit: \"px\" },\n// { inset: true, xOffset: -10, yOffset: -20, blurRadius: 10, color: \"#ff0000\", unit: \"px\" }\n// ]\nconst cssString = formatBoxShadowToCSS(parsed);\nconsole.log(cssString);\n// Output: \"10px 20px 5px 0px rgba(0, 0, 0, 0.5), inset -10px -20px 10px #ff0000\"\n*/\n","import {\n Component,\n HostListener,\n input,\n model,\n output,\n signal,\n ViewChild,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BoxShadow } from '../../contracts/BoxShadowValue';\nimport { NgxInputColor } from 'ngx-kit/color-picker';\nimport { formatBoxShadowToCSS } from '../../utils/box-shadow-parser';\nimport { getOffsetPosition } from 'ngx-kit/core';\n\n@Component({\n selector: 'ngx-shadow-control',\n templateUrl: './shadow-control.html',\n styleUrl: './shadow-control.scss',\n imports: [FormsModule, NgxInputColor],\n})\nexport class NgxShadowControl implements OnInit {\n protected readonly maxRange = input(25);\n readonly selectedShadow = model.required<BoxShadow>();\n\n private _previousCssValue?: string = '';\n readonly shadowChange = output<BoxShadow>();\n\n padRect?: DOMRect;\n flashlightRect?: DOMRect;\n center: { x: number; y: number } = { x: 0, y: 0 };\n x = signal(0);\n y = signal(0);\n isDragging = false;\n @ViewChild('pad', { static: false }) pad!: ElementRef<HTMLDivElement>;\n @ViewChild('flashlight', { static: false }) flashlight!: ElementRef<SVGSVGElement>;\n\n private radius: number = 0;\n\n ngOnInit(): void {\n this.setXyFromShadow(this.selectedShadow());\n this._previousCssValue = this.selectedShadow().cssValue;\n }\n\n onPadClick(ev: MouseEvent | TouchEvent) {\n const position = getOffsetPosition(ev, this.pad.nativeElement);\n this.isDragging = true;\n this.updatePosition(position);\n }\n\n dragStart(ev: MouseEvent | TouchEvent) {\n ev.stopPropagation();\n ev.preventDefault();\n this.updateContainerDimensions();\n this.isDragging = true;\n const position = getOffsetPosition(ev, this.pad.nativeElement);\n this.updatePosition(position);\n }\n\n @HostListener('document:mouseup', ['$event'])\n @HostListener('document:touchend', ['$event'])\n onDragEnd(ev: MouseEvent | TouchEvent) {\n this.isDragging = false;\n }\n\n @HostListener('mousemove', ['$event'])\n @HostListener('touchmove', ['$event'])\n onMouseMove(ev: MouseEvent | TouchEvent) {\n if (!this.isDragging) return;\n const position = getOffsetPosition(ev, this.pad.nativeElement);\n this.updatePosition(position);\n }\n\n private updatePosition(position: { x: number; y: number }) {\n const padRec = this.padRect!;\n const flashlightRec = this.flashlightRect!;\n\n const centerX = this.center.x;\n const centerY = this.center.y;\n\n const dx = position.x - centerX;\n const dy = position.y - centerY;\n\n // زاویه\n const angleRad = Math.atan2(dy, dx);\n const minX = flashlightRec.width / 2;\n const maxX = padRec.width - flashlightRec.width / 2;\n const minY = flashlightRec.height / 2;\n const maxY = padRec.height - flashlightRec.height / 2;\n const clampedX = Math.max(minX, Math.min(position.x, maxX));\n const clampedY = Math.max(minY, Math.min(position.y, maxY));\n\n // فقط یکبار از وسط اصلاح کن\n this.x.set(clampedX - flashlightRec.width / 2);\n this.y.set(clampedY - flashlightRec.height / 2);\n\n // ✅ ولی مقدار واقعی shadow رو از موقعیت موس (dx, dy) بگیر\n const halfRangeX = (padRec.width - flashlightRec.width) / 2;\n const halfRangeY = (padRec.height - flashlightRec.height) / 2;\n\n let valueX = (-dx / halfRangeX) * this.maxRange();\n let valueY = (-dy / halfRangeY) * this.maxRange();\n\n valueX = Math.round(Math.min(Math.max(valueX, -this.maxRange()), this.maxRange()));\n valueY = Math.round(Math.min(Math.max(valueY, -this.maxRange()), this.maxRange()));\n\n // چرخش چراغ قوه\n const angleDeg = angleRad * (180 / Math.PI);\n if (this.flashlight.nativeElement) {\n this.flashlight.nativeElement.style.transform = `rotate(${angleDeg + 180}deg)`;\n }\n\n // آپدیت shadow\n this.selectedShadow.set({\n ...this.selectedShadow(),\n xOffset: valueX,\n yOffset: valueY,\n });\n this.updateShadow(this.selectedShadow());\n }\n\n private updateContainerDimensions() {\n setTimeout(() => {\n if (!this.pad) return;\n this.padRect = this.pad.nativeElement.getBoundingClientRect();\n this.flashlightRect = this.flashlight.nativeElement.getBoundingClientRect();\n this.center = { x: this.padRect.width / 2, y: this.padRect.height / 2 };\n this.radius =\n Math.min(this.padRect.width, this.padRect.height) / 2 - this.flashlightRect.width / 2;\n this.x.set(0); // Reset to center\n this.y.set(0);\n });\n }\n\n updateShadow(updatedShadow: Partial<BoxShadow>) {\n this.selectedShadow().cssValue = formatBoxShadowToCSS([this.selectedShadow()]);\n this.setXyFromShadow(this.selectedShadow());\n if (this._previousCssValue != this.selectedShadow().cssValue) {\n this.shadowChange.emit(this.selectedShadow());\n }\n }\n\n setXyFromShadow(item: BoxShadow) {\n this.updateContainerDimensions();\n setTimeout(() => {\n const padRec = this.padRect!;\n const flashlightRec = this.flashlightRect!;\n const centerX = this.center.x;\n const centerY = this.center.y;\n\n const halfRangeX = (padRec.width - flashlightRec.width) / 2;\n const halfRangeY = (padRec.height - flashlightRec.height) / 2;\n\n // معکوس فرمول برای بهدست آوردن dx , dy\n const dx = -(item.xOffset / this.maxRange()) * halfRangeX;\n const dy = -(item.yOffset / this.maxRange()) * halfRangeY;\n\n // موقعیت واقعی چراغقوه\n const posX = centerX + dx;\n const posY = centerY + dy;\n\n this.x.set(posX - flashlightRec.width / 2);\n this.y.set(posY - flashlightRec.height / 2);\n\n // زاویه چراغقوه\n const angleRad = Math.atan2(dy, dx);\n const angleDeg = angleRad * (180 / Math.PI);\n if (this.flashlight.nativeElement) {\n this.flashlight.nativeElement.style.transform = `rotate(${angleDeg + 180}deg)`;\n }\n });\n }\n\n close() {}\n}\n","<div class=\"ngx-shadow-control\">\n <div\n class=\"pad-container\"\n #pad\n (mousedown)=\"onPadClick($event)\"\n (touchstart)=\"onPadClick($event)\">\n <div class=\"card-sample\" [style.boxShadow]=\"selectedShadow().cssValue\"></div>\n <svg\n class=\"flashlight-svg\"\n viewBox=\"0 0 640 512\"\n xmlns=\"http://www.w3.org/2000/svg\"\n #flashlight\n [style.left.px]=\"x()\"\n [style.top.px]=\"y()\"\n (mousedown)=\"dragStart($event)\"\n (touchstart)=\"dragStart($event)\">\n <defs>\n <style>\n .fa-secondary {\n opacity: 0.4;\n }\n </style>\n </defs>\n <path\n class=\"fa-primary\"\n d=\"M607.1 96h-32v320h32c17.62 0 32-14.38 32-32V128C639.1 110.4 625.6 96 607.1 96zM287.1 224h-32c-17.62 0-32 14.38-32 32s14.38 32 32 32h32c17.62 0 32-14.38 32-32S305.6 224 287.1 224z\" />\n <path\n class=\"fa-secondary\"\n d=\"M400.1 149.2L383.1 160H31.1c-17.62 0-32 14.38-32 32v128c0 17.62 14.38 32 32 32h352l16.12 10.75C443.2 391.5 511.1 416 575.1 416V96C511.1 96 443.2 120.5 400.1 149.2zM287.1 288h-32c-17.62 0-32-14.38-32-32s14.38-32 32-32h32c17.62 0 32 14.38 32 32S305.6 288 287.1 288z\" />\n </svg>\n </div>\n <div class=\"pi-btn-group\" role=\"group\">\n <input\n type=\"radio\"\n class=\"btn-check\"\n name=\"showside\"\n id=\"SHoutside\"\n autocomplete=\"off\"\n [(ngModel)]=\"selectedShadow().inset\"\n (ngModelChange)=\"updateShadow({ inset: selectedShadow().inset })\"\n [value]=\"false\" />\n <label class=\"button\" for=\"SHoutside\" title=\"Outside\">Outside</label>\n <input\n type=\"radio\"\n class=\"btn-check\"\n name=\"showside\"\n id=\"SHinside\"\n autocomplete=\"off\"\n [(ngModel)]=\"selectedShadow().inset\"\n (ngModelChange)=\"updateShadow({ inset: selectedShadow().inset })\"\n [value]=\"true\" />\n <label class=\"button\" for=\"SHinside\" title=\"Inside\">Inside</label>\n </div>\n <div class=\"shadow-item\">\n <table>\n <tr>\n <th>\n <span>X</span>\n </th>\n <td>\n <div class=\"d-flex\">\n <input\n type=\"range\"\n [min]=\"-maxRange()\"\n [max]=\"maxRange()\"\n [(ngModel)]=\"selectedShadow().xOffset\"\n (ngModelChange)=\"updateShadow({ xOffset: selectedShadow().xOffset })\" />\n <input\n type=\"number\"\n [min]=\"-maxRange()\"\n [max]=\"maxRange()\"\n [(ngModel)]=\"selectedShadow().xOffset\"\n (ngModelChange)=\"updateShadow({ xOffset: selectedShadow().xOffset })\" />\n </div>\n </td>\n </tr>\n <tr>\n <th>\n <span>Y</span>\n </th>\n <td>\n <div class=\"d-flex\">\n <input\n type=\"range\"\n [min]=\"-maxRange()\"\n [max]=\"maxRange()\"\n [(ngModel)]=\"selectedShadow().yOffset\"\n (ngModelChange)=\"updateShadow({ yOffset: selectedShadow().yOffset })\" />\n <input\n type=\"number\"\n [min]=\"-maxRange()\"\n [max]=\"maxRange()\"\n [(ngModel)]=\"selectedShadow().yOffset\"\n (ngModelChange)=\"updateShadow({ yOffset: selectedShadow().yOffset })\" />\n </div>\n </td>\n </tr>\n <tr>\n <th>\n <span>Blur</span>\n </th>\n <td>\n <div class=\"d-flex\">\n <input\n type=\"range\"\n [min]=\"0\"\n [max]=\"maxRange()\"\n [(ngModel)]=\"selectedShadow().blurRadius\"\n min=\"0\"\n (ngModelChange)=\"updateShadow({ blurRadius: selectedShadow().blurRadius })\" />\n <input\n type=\"number\"\n [min]=\"0\"\n [max]=\"maxRange()\"\n [(ngModel)]=\"selectedShadow().blurRadius\"\n min=\"0\"\n (ngModelChange)=\"updateShadow({ blurRadius: selectedShadow().blurRadius })\" />\n </div>\n </td>\n </tr>\n <tr>\n <th>\n <span>Spread</span>\n </th>\n <td>\n <div class=\"d-flex\">\n <input\n type=\"range\"\n [min]=\"0\"\n [max]=\"maxRange()\"\n [(ngModel)]=\"selectedShadow().spreadRadius\"\n (ngModelChange)=\"updateShadow({ spreadRadius: selectedShadow().spreadRadius })\" />\n <input\n type=\"number\"\n [min]=\"0\"\n [max]=\"maxRange()\"\n [(ngModel)]=\"selectedShadow().spreadRadius\"\n (ngModelChange)=\"updateShadow({ spreadRadius: selectedShadow().spreadRadius })\" />\n </div>\n </td>\n </tr>\n <tr>\n <th>\n <span>Color</span>\n </th>\n <td>\n <input\n type=\"text\"\n [(ngModel)]=\"selectedShadow().color\"\n (ngModelChange)=\"updateShadow({ color: selectedShadow().color })\"\n ngxInputColor\n [simpleMode]=\"true\" />\n </td>\n </tr>\n </table>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DOCUMENT,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n input,\n Input,\n OnInit,\n output,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { formatBoxShadowToCSS, parseBoxShadow, validateColor } from '../../utils/box-shadow-parser';\nimport { getOffsetPosition, OverlayService, WINDOW } from 'ngx-kit/core';\nimport { BoxShadow } from '../../contracts/BoxShadowValue';\nimport { NgxShadowControl } from '../shadow-control/shadow-control';\n\n@Component({\n selector: 'ngx-box-shadow',\n templateUrl: './box-shadow.html',\n styleUrls: ['./box-shadow.scss'],\n standalone: true,\n imports: [CommonModule, FormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxShadowBox),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxShadowBox implements OnInit, AfterViewInit {\n protected readonly maxRange = input(25);\n protected readonly shadowChange = output<string>();\n\n selectedIndex = signal(-1);\n\n shadows = signal<BoxShadow[]>([]);\n\n result = '';\n protected readonly doc = inject(DOCUMENT);\n protected readonly win = inject(WINDOW);\n protected readonly overlay = inject(OverlayService);\n protected readonly chdr = inject(ChangeDetectorRef);\n\n isDisabled: boolean = false;\n onChange = (_: string) => {};\n onTouched = () => {};\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n constructor() {}\n ngOnInit() {}\n ngAfterViewInit() {}\n writeValue(val: string): void {\n if (!val) {\n this.shadows.set([]);\n this.result = '';\n return;\n }\n this.shadows.set(parseBoxShadow(val));\n this.result = formatBoxShadowToCSS(this.shadows());\n // if (val !== this.result) {\n // this.update();\n // }\n }\n\n addShadow(container: HTMLElement) {\n this.shadows.update((u) => [\n ...u,\n {\n xOffset: 0,\n yOffset: 0,\n blurRadius: 10,\n spreadRadius: 0,\n color: 'rgba(0, 0, 0, 0.5)',\n unit: 'px',\n inset: false,\n },\n ]);\n this.update();\n setTimeout(() => {\n container.scrollTop = container.scrollHeight;\n }, 100);\n }\n\n setShadow(el: HTMLElement, item: BoxShadow, index: number) {\n this.selectedIndex.set(index);\n this.overlay.open({\n component: NgxShadowControl,\n anchor: el,\n configure: (instance, ref) => {\n ref.componentRef?.setInput('maxRange', this.maxRange());\n ref.componentRef?.setInput('selectedShadow', item);\n instance.shadowChange.subscribe((v) => {\n item = v;\n this.shadows.update((shadows) => {\n shadows[this.selectedIndex()] = item;\n return shadows;\n });\n this.chdr.markForCheck();\n this.update();\n });\n },\n onClosed: () => {\n this.selectedIndex.set(-1);\n },\n });\n }\n\n removeShadow(ev: Event, index: number) {\n ev.stopPropagation();\n\n this.shadows().splice(index, 1);\n this.update();\n }\n\n private update() {\n this.result = formatBoxShadowToCSS(this.shadows());\n this.shadows().forEach((m) => (m.cssValue = formatBoxShadowToCSS([m])));\n this.onChange(this.result);\n this.shadowChange.emit(this.result);\n }\n}\n","<div class=\"\">\n <button (click)=\"addShadow(list)\" type=\"button\" class=\"action-btn add-btn\">Add</button>\n</div>\n<div class=\"list-box\" #list>\n @for (item of shadows(); let i = $index; track i) {\n <button\n type=\"button\"\n class=\"list-item\"\n [class.active]=\"i == selectedIndex()\"\n #el\n (click)=\"setShadow(el, item, i)\">\n <span>{{ item.cssValue }}</span>\n <button (click)=\"removeShadow($event, i)\" type=\"button\" class=\"action-btn\">\n <svg fill=\"currentColor\" viewBox=\"0 0 320 512\">\n <path\n d=\"M315.3 411.3c-6.253 6.253-16.37 6.253-22.63 0L160 278.6l-132.7 132.7c-6.253 6.253-16.37 6.253-22.63 0c-6.253-6.253-6.253-16.37 0-22.63L137.4 256L4.69 123.3c-6.253-6.253-6.253-16.37 0-22.63c6.253-6.253 16.37-6.253 22.63 0L160 233.4l132.7-132.7c6.253-6.253 16.37-6.253 22.63 0c6.253 6.253 6.253 16.37 0 22.63L182.6 256l132.7 132.7C321.6 394.9 321.6 405.1 315.3 411.3z\" />\n </svg>\n </button>\n </button>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|