ngx-kit 6.0.1 → 6.1.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.
Files changed (42) hide show
  1. package/angle-selector/README.md +11 -11
  2. package/box-shadow/README.md +10 -10
  3. package/color-picker/README.md +20 -23
  4. package/data-table/README.md +34 -41
  5. package/date-picker/README.md +21 -26
  6. package/dialog/README.md +31 -33
  7. package/drawer-menu/README.md +51 -50
  8. package/dropzone/README.md +395 -32
  9. package/fesm2022/ngx-kit-box-shadow.mjs +2 -2
  10. package/fesm2022/ngx-kit-box-shadow.mjs.map +1 -1
  11. package/fesm2022/ngx-kit-color-picker.mjs +2 -2
  12. package/fesm2022/ngx-kit-color-picker.mjs.map +1 -1
  13. package/fesm2022/ngx-kit-data-table.mjs +68 -26
  14. package/fesm2022/ngx-kit-data-table.mjs.map +1 -1
  15. package/fesm2022/ngx-kit-dropzone.mjs +274 -29
  16. package/fesm2022/ngx-kit-dropzone.mjs.map +1 -1
  17. package/fesm2022/ngx-kit-form-field.mjs +129 -64
  18. package/fesm2022/ngx-kit-form-field.mjs.map +1 -1
  19. package/fesm2022/ngx-kit-gallery.mjs +2 -2
  20. package/fesm2022/ngx-kit-gallery.mjs.map +1 -1
  21. package/fesm2022/ngx-kit-gradient-picker.mjs +2 -2
  22. package/fesm2022/ngx-kit-gradient-picker.mjs.map +1 -1
  23. package/fesm2022/ngx-kit-image-editor.mjs +33 -10
  24. package/fesm2022/ngx-kit-image-editor.mjs.map +1 -1
  25. package/fesm2022/ngx-kit-message.mjs +5 -0
  26. package/fesm2022/ngx-kit-message.mjs.map +1 -1
  27. package/fesm2022/ngx-kit-time-picker.mjs +17 -4
  28. package/fesm2022/ngx-kit-time-picker.mjs.map +1 -1
  29. package/gallery/README.md +29 -29
  30. package/gradient-picker/README.md +16 -16
  31. package/image-editor/README.md +19 -19
  32. package/menu/README.md +27 -27
  33. package/message/README.md +34 -34
  34. package/notify/README.md +25 -23
  35. package/package.json +1 -1
  36. package/shared/README.md +32 -32
  37. package/time-picker/README.md +95 -0
  38. package/types/ngx-kit-data-table.d.ts +25 -5
  39. package/types/ngx-kit-dropzone.d.ts +129 -18
  40. package/types/ngx-kit-form-field.d.ts +65 -27
  41. package/types/ngx-kit-image-editor.d.ts +23 -3
  42. package/types/ngx-kit-time-picker.d.ts +19 -14
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-kit-message.mjs","sources":["../../../projects/libs/message/models/tokens.ts","../../../projects/libs/message/models/message-result.ts","../../../projects/libs/message/models/icons.ts","../../../projects/libs/message/components/message.component.ts","../../../projects/libs/message/components/message.component.html","../../../projects/libs/message/services/apply-default.ts","../../../projects/libs/message/services/message.service.ts","../../../projects/libs/message/message-facade.ts","../../../projects/libs/message/message-provider.ts","../../../projects/libs/message/models/message-options.ts","../../../projects/libs/message/ngx-kit-message.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IMessageOptions } from './message-options.interface';\nimport { NgxMessageService } from '../public-api';\nimport { MessageOptions } from './message-options';\n\nexport const NGX_MESSAGE_CONFIGS = new InjectionToken<IMessageOptions>('ngx-message-configs');\n\nexport const NGX_MESSAGE_API = new InjectionToken<NgxMessageService>('NgxMessageService');\nexport const NGX_MESSAGE_DEFAULT_OPTIONS: MessageOptions = {\n useOverlay: true,\n title: '',\n text: '',\n html: '',\n backdrop: true,\n icon: 'None',\n width: undefined,\n allowOutsideClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n showConfirmButton: true,\n showDenyButton: false,\n showCancelButton: false,\n confirmButtonText: 'Ok',\n denyButtonText: 'No',\n cancelButtonText: 'Cancel',\n confirmButtonColor: '',\n denyButtonColor: '',\n cancelButtonColor: '',\n confirmButtonAriaLabel: '',\n denyButtonAriaLabel: '',\n cancelButtonAriaLabel: '',\n reverseButtons: false,\n showCloseButton: true,\n containerClass: '',\n};\n","import { EventEmitter } from '@angular/core';\n\nexport type MessageOutput<T = any> = {\n id: number;\n close: () => void;\n afterClose: EventEmitter<MessageResult>;\n};\nexport interface MessageResult<T = any> {\n readonly isConfirmed: boolean;\n readonly isDenied: boolean;\n readonly isDismissed: boolean;\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n readonly value?: T;\n readonly dismiss?: DismissReason;\n}\n\n/**\n * An enum of possible reasons that can explain an alert dismissal.\n */\nexport enum DismissReason {\n cancel,\n backdrop,\n close,\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n esc,\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n timer,\n}\n","// 'None' | 'success' | 'error' | 'warning' | 'info' | 'question' | 'loading';\nexport const ICONS: { [key: string]: string } = {\n None: '',\n success: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M12 24 L20 32 L34 15\"/></svg>`,\n error: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M14 14 L32 32\"/><path class=\"draw\" style=\"animation-delay:.55s\" d=\"M32 14 L14 32\"/></svg>`,\n warning: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M23 10 L23 26\"/><circle class=\"dot-mark\" cx=\"23\" cy=\"34\" r=\"3.4\"/></svg>`,\n info: `<svg viewBox=\"0 0 46 46\"><circle class=\"dot-mark\" cx=\"23\" cy=\"12\" r=\"3.2\" style=\"animation-delay:.28s\"/><path class=\"draw\" style=\"animation-delay:.4s\" d=\"M23 20 L23 36\"/></svg>`,\n question: `<svg viewBox=\"0 0 320 512\"><path fill=\"currentColor\" d=\"M204.3 32.01H96c-52.94 0-96 43.06-96 96c0 17.67 14.31 31.1 32 31.1s32-14.32 32-31.1c0-17.64 14.34-32 32-32h108.3C232.8 96.01 256 119.2 256 147.8c0 19.72-10.97 37.47-30.5 47.33L127.8 252.4C117.1 258.2 112 268.7 112 280v40c0 17.67 14.31 31.99 32 31.99s32-14.32 32-31.99V298.3L256 251.3c39.47-19.75 64-59.42 64-103.5C320 83.95 268.1 32.01 204.3 32.01zM144 400c-22.09 0-40 17.91-40 40s17.91 39.1 40 39.1s40-17.9 40-39.1S166.1 400 144 400z\"/></svg>`,\n loading: `<div class=\"spinner-wrap\"><div class=\"spinner\"></div></div>`,\n};\n","import {\n AfterViewInit,\n Component,\n DOCUMENT,\n ElementRef,\n HostListener,\n inject,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { IMessageOptions } from '../models/message-options.interface';\nimport { Subject } from 'rxjs';\nimport { MessageResult, DismissReason } from '../models/message-result';\nimport { CommonModule } from '@angular/common';\nimport { NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from '../models/tokens';\nimport { ICONS } from '../models/icons';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { makeConfetti } from 'ngx-kit/shared';\nimport { NgxMessageService } from '../services/message.service';\n\n@Component({\n selector: 'ngx-message',\n templateUrl: 'message.component.html',\n styleUrls: ['./message.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule],\n providers: [\n {\n provide: NGX_MESSAGE_CONFIGS,\n useValue: NGX_MESSAGE_DEFAULT_OPTIONS,\n },\n ],\n})\nexport class NgxMessageComponent implements OnInit, AfterViewInit {\n icon?: SafeHtml;\n showIcon = signal(true);\n options!: IMessageOptions;\n confetti = viewChild<ElementRef<HTMLDivElement>>('confetti');\n index = 0;\n\n protected sanitizer = inject(DomSanitizer);\n protected doc = inject(DOCUMENT);\n private readonly messageService = inject(NgxMessageService);\n\n private readonly _onClose = new Subject<{ index: number; result: MessageResult<any> }>();\n public onClose = this._onClose.asObservable();\n\n ngOnInit(): void {\n this.showIcon.update((x) => (x = this.options.icon != 'None'));\n this.icon = this.sanitizer.bypassSecurityTrustHtml(ICONS[this.options.icon ?? 'None']);\n }\n\n ngAfterViewInit(): void {\n const confetti = this.confetti()?.nativeElement;\n if (this.options.icon == 'success' && confetti) {\n makeConfetti(this.doc, confetti);\n }\n }\n\n /**\n * وقتی چند تا پیام هم‌زمان باز باشن، هرکدوم listener خودشو روی document\n * داشت — پس یه فشردن Escape/Enter، رویداد رو به *همه‌شون* هم‌زمان می‌فرستاد،\n * نه فقط آخرین پیامی که باز شده (رفتار طبیعیِ یه استکِ مودال باید این باشه\n * که فقط بالاترین لایه به کیبورد واکنش نشون بده). این چک همون چیزیه که\n * OverlayService با getLastDialog() برای اورلی‌ها انجام می‌ده.\n */\n private isTopmost(): boolean {\n const ids = [...this.messageService.alerts.keys()];\n if (!ids.length) return true;\n return this.index === Math.max(...ids);\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n onScapeKey(event: Event) {\n if (this.options.allowEscapeKey && this.isTopmost()) {\n this.onCancel();\n }\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n onEnterKey(event: Event) {\n if (!this.isTopmost()) return;\n event.stopPropagation();\n event.preventDefault();\n if (this.options.allowEnterKey) {\n if (this.options.showConfirmButton) {\n this.onConfirm();\n } else if (this.options.showDenyButton) {\n this.onDeny();\n } else {\n this.onCancel();\n }\n }\n }\n\n onConfirm() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: true,\n isDismissed: false,\n isDenied: false,\n dismiss: DismissReason.close,\n },\n });\n }\n onCancel() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: false,\n isDismissed: true,\n isDenied: false,\n dismiss: DismissReason.cancel,\n },\n });\n }\n onDeny() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: false,\n isDismissed: false,\n isDenied: true,\n dismiss: DismissReason.close,\n },\n });\n }\n close() {\n this.onCancel();\n }\n\n onOutSideClick() {\n if (this.options.allowOutsideClick) {\n this.onCancel();\n }\n }\n innerOnClick(ev: Event) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n}\n","<div\n class=\"ngx-msg-overlay show\"\n (click)=\"onOutSideClick()\"\n [ngClass]=\"options.containerClass\"\n [class.has-backdrop]=\"options.backdrop\"\n [attr.data-type]=\"options.icon\">\n <div class=\"ngx-msg-modal\" (click)=\"innerOnClick($event)\">\n <div class=\"confetti\" #confetti></div>\n @if (options.showCloseButton) {\n <button class=\"close-x\" (click)=\"close()\" aria-label=\"Close\">✕</button>\n }\n @if (showIcon()) {\n <div class=\"icon-stage\">\n <div class=\"icon-ring\"></div>\n <div class=\"icon-disc\" [innerHTML]=\"icon\"></div>\n </div>\n }\n <h2>{{ options.title }}</h2>\n <p class=\"desc\">\n {{ options.text }}\n <span [innerHTML]=\"options.html\"></span>\n </p>\n\n <div class=\"ngx-msg-actions\">\n @if (options.showCancelButton) {\n <button\n class=\"btn btn-ghost\"\n (click)=\"onCancel()\"\n [attr.aria-label]=\"options.cancelButtonAriaLabel\">\n {{ options.cancelButtonText }}\n </button>\n }\n @if (options.showDenyButton) {\n <button\n class=\"btn btn-ghost\"\n (click)=\"onDeny()\"\n [attr.aria-label]=\"options.denyButtonAriaLabel\">\n {{ options.denyButtonText }}\n </button>\n }\n @if (options.showConfirmButton) {\n <button\n class=\"btn btn-primary\"\n (click)=\"onConfirm()\"\n [attr.aria-label]=\"options.confirmButtonAriaLabel\">\n {{ options.confirmButtonText }}\n </button>\n }\n </div>\n </div>\n</div>\n","export function applyDefaultConfig(config: any, defaultConfig: any): any {\n var config = JSON.parse(JSON.stringify(config));\n for (let key in defaultConfig) {\n if (config[key] === undefined || config[key] === null || config[key] === '') {\n config[key] = defaultConfig[key];\n } else if (typeof config[key] === 'object') {\n config[key] = applyDefaultConfig(config[key], defaultConfig[key]);\n }\n }\n return config;\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n EventEmitter,\n Inject,\n Injectable,\n Injector,\n} from '@angular/core';\nimport { NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from '../models/tokens';\nimport { IMessageOptions } from '../models/message-options.interface';\nimport { MessageOutput, MessageResult } from '../models/message-result';\nimport { DOCUMENT } from '@angular/common';\nimport { NgxMessageComponent } from '../components/message.component';\nimport { applyDefaultConfig } from './apply-default';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxMessageService {\n // قبلاً یه آرایه‌ی معمولی بود (`ComponentRef[]`) و removeDialogComponentFromBody\n // فقط componentRef رو destroy می‌کرد ولی هیچ‌وقت از آرایه حذفش نمی‌کرد — یعنی\n // این سرویس (که providedIn:'root' و singleton سراسریه) به ازای هر پیامی که\n // تا حالا تو کل عمر اپ نشون داده شده، یک رفرنس destroy-شده رو برای همیشه نگه\n // می‌داشت: یک نشتی حافظه‌ی پیوسته. با Map<id, ComponentRef> جایگزین شد که\n // با delete واقعاً entry رو آزاد می‌کنه؛ کلید هم شناسه‌ی پایدارِ پیام (insertedId)\n // هست، نه موقعیتِ آرایه (که با splice ممکن بود جابه‌جا و نامعتبر بشه).\n alerts = new Map<number, ComponentRef<NgxMessageComponent>>();\n insertedId = 0;\n constructor(\n private appRef: ApplicationRef,\n private injector: Injector,\n private envInjector: EnvironmentInjector,\n @Inject(DOCUMENT) private _doc: Document,\n ) {}\n\n public show<T = any>(c?: IMessageOptions): MessageOutput<T> {\n let d = applyDefaultConfig(\n this.injector.get(NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS),\n NGX_MESSAGE_DEFAULT_OPTIONS,\n );\n const config = applyDefaultConfig(c, d);\n\n const componentRef = createComponent(NgxMessageComponent, {\n environmentInjector: this.envInjector,\n });\n\n this.appRef.attachView(componentRef.hostView);\n const id = this.insertedId++;\n const payload: MessageOutput<T> = {\n close: () => componentRef.instance.close(),\n id,\n afterClose: new EventEmitter(),\n };\n this.appendDialogComponentToBody(componentRef, config);\n componentRef.instance.options = config;\n componentRef.instance.index = id;\n componentRef.instance.onClose.subscribe((result) => {\n this.removeDialogComponentFromBody(result.index);\n payload.afterClose.emit(result.result);\n });\n this.alerts.set(id, componentRef);\n\n return payload;\n }\n\n private removeDialogComponentFromBody(id: number): void {\n const ref = this.alerts.get(id);\n if (!ref) return;\n\n const domElem = (ref.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n // قبل از destroy باید hidePopover صدا بزنیم\n if (domElem.popover === 'manual') {\n try {\n domElem.hidePopover();\n } catch {}\n }\n\n this.appRef.detachView(ref.hostView);\n ref.destroy();\n this.alerts.delete(id);\n }\n\n private appendDialogComponentToBody(\n componentRef: ComponentRef<NgxMessageComponent>,\n config: IMessageOptions,\n ) {\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n if (config.containerClass) {\n for (let c of config.containerClass.split(' ')) {\n if (c.trim()) domElem.classList.add(c);\n }\n }\n this._doc.body.appendChild(domElem);\n if (config.useOverlay) {\n domElem.popover = 'manual';\n domElem.showPopover();\n }\n }\n\n closeAll() {\n for (const id of [...this.alerts.keys()]) {\n this.removeDialogComponentFromBody(id);\n }\n }\n}\n","import { Injector } from '@angular/core';\nimport { NGX_MESSAGE_API } from './models/tokens';\nimport { IMessageOptions } from './models/message-options.interface';\n\n/**\n * Static facade so call sites can use: MSG.warn('msg', opts)\n * Module will set the service instance in its constructor.\n */\nexport class MSG {\n static injector: Injector;\n\n static show<T = any>(options?: IMessageOptions) {\n if (!MSG.injector) {\n throw new Error(\n 'ngx-kit: Error on EnvironmentProvider. Ensure \"provideMessage()\" in root provider.',\n );\n }\n\n return MSG.injector.get(NGX_MESSAGE_API).show<T>(options);\n }\n\n static fire(options?: IMessageOptions) {\n return this.show(options);\n }\n\n static info(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'info',\n title,\n text,\n ...options,\n });\n }\n\n static success(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'success',\n title,\n text,\n ...options,\n });\n }\n static warning(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'warning',\n title,\n text,\n ...options,\n });\n }\n static error(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'error',\n title,\n text,\n ...options,\n });\n }\n static question(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'question',\n title,\n text,\n ...options,\n });\n }\n static loading(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'loading',\n title,\n text,\n ...options,\n });\n }\n}\n\nexport class Modal extends MSG {}\n","import {\n EnvironmentProviders,\n inject,\n Injector,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { IMessageOptions } from './models/message-options.interface';\nimport { NGX_MESSAGE_API, NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from './models/tokens';\nimport { NgxMessageService } from './services/message.service';\nimport { MSG as MessageFacade } from './message-facade';\nimport { Modal as ModalFacade } from './message-facade';\n\nexport function provideMessage(options?: IMessageOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_MESSAGE_CONFIGS,\n useValue: { ...NGX_MESSAGE_DEFAULT_OPTIONS, ...(options || {}) },\n },\n {\n provide: NGX_MESSAGE_API,\n useExisting: NgxMessageService,\n },\n provideEnvironmentInitializer(() => {\n MessageFacade.injector = inject(Injector);\n ModalFacade.injector = inject(Injector);\n }),\n ]);\n}\n","import { MessageIcon } from './MessageIcon';\nimport { IMessageOptions } from './message-options.interface';\n\nexport class MessageOptions implements IMessageOptions {\n public constructor(private config?: IMessageOptions) {\n //config = { ...(new MessageOptions()), ...config };\n }\n /**\n * add popover manual to set alert dialog container to top layer\n * - usefull when using alert modal in angular material dialog\n *\n */\n useOverlay?: boolean;\n title?: string = '';\n text?: string = '';\n html?: string | HTMLElement = '';\n backdrop?: boolean = true;\n icon?: MessageIcon;\n width?: number | string;\n allowOutsideClick?: boolean = true;\n allowEscapeKey?: boolean = true;\n allowEnterKey?: boolean = true;\n showConfirmButton?: boolean = true;\n showDenyButton?: boolean = false;\n showCancelButton?: boolean = false;\n confirmButtonText: string = 'Ok';\n denyButtonText?: string = 'No';\n cancelButtonText?: string = 'Cancel';\n confirmButtonColor?: string;\n denyButtonColor?: string;\n cancelButtonColor?: string;\n confirmButtonAriaLabel?: string = '';\n denyButtonAriaLabel?: string = '';\n cancelButtonAriaLabel?: string = '';\n reverseButtons?: boolean = false;\n showCloseButton?: boolean = false;\n containerClass?: string = '';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT","MessageFacade","ModalFacade"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-kit-message.mjs","sources":["../../../projects/libs/message/models/tokens.ts","../../../projects/libs/message/models/message-result.ts","../../../projects/libs/message/models/icons.ts","../../../projects/libs/message/components/message.component.ts","../../../projects/libs/message/components/message.component.html","../../../projects/libs/message/services/apply-default.ts","../../../projects/libs/message/services/message.service.ts","../../../projects/libs/message/message-facade.ts","../../../projects/libs/message/message-provider.ts","../../../projects/libs/message/models/message-options.ts","../../../projects/libs/message/ngx-kit-message.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IMessageOptions } from './message-options.interface';\nimport { NgxMessageService } from '../public-api';\nimport { MessageOptions } from './message-options';\n\nexport const NGX_MESSAGE_CONFIGS = new InjectionToken<IMessageOptions>('ngx-message-configs');\n\nexport const NGX_MESSAGE_API = new InjectionToken<NgxMessageService>('NgxMessageService');\nexport const NGX_MESSAGE_DEFAULT_OPTIONS: MessageOptions = {\n useOverlay: true,\n title: '',\n text: '',\n html: '',\n backdrop: true,\n icon: 'None',\n width: undefined,\n allowOutsideClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n showConfirmButton: true,\n showDenyButton: false,\n showCancelButton: false,\n confirmButtonText: 'Ok',\n denyButtonText: 'No',\n cancelButtonText: 'Cancel',\n confirmButtonColor: '',\n denyButtonColor: '',\n cancelButtonColor: '',\n confirmButtonAriaLabel: '',\n denyButtonAriaLabel: '',\n cancelButtonAriaLabel: '',\n reverseButtons: false,\n showCloseButton: true,\n containerClass: '',\n};\n","import { EventEmitter } from '@angular/core';\n\nexport type MessageOutput<T = any> = {\n id: number;\n close: () => void;\n afterClose: EventEmitter<MessageResult>;\n};\nexport interface MessageResult<T = any> {\n readonly isConfirmed: boolean;\n readonly isDenied: boolean;\n readonly isDismissed: boolean;\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n readonly value?: T;\n readonly dismiss?: DismissReason;\n}\n\n/**\n * An enum of possible reasons that can explain an alert dismissal.\n */\nexport enum DismissReason {\n cancel,\n backdrop,\n close,\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n esc,\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n timer,\n}\n","// 'None' | 'success' | 'error' | 'warning' | 'info' | 'question' | 'loading';\nexport const ICONS: { [key: string]: string } = {\n None: '',\n success: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M12 24 L20 32 L34 15\"/></svg>`,\n error: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M14 14 L32 32\"/><path class=\"draw\" style=\"animation-delay:.55s\" d=\"M32 14 L14 32\"/></svg>`,\n warning: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M23 10 L23 26\"/><circle class=\"dot-mark\" cx=\"23\" cy=\"34\" r=\"3.4\"/></svg>`,\n info: `<svg viewBox=\"0 0 46 46\"><circle class=\"dot-mark\" cx=\"23\" cy=\"12\" r=\"3.2\" style=\"animation-delay:.28s\"/><path class=\"draw\" style=\"animation-delay:.4s\" d=\"M23 20 L23 36\"/></svg>`,\n question: `<svg viewBox=\"0 0 320 512\"><path fill=\"currentColor\" d=\"M204.3 32.01H96c-52.94 0-96 43.06-96 96c0 17.67 14.31 31.1 32 31.1s32-14.32 32-31.1c0-17.64 14.34-32 32-32h108.3C232.8 96.01 256 119.2 256 147.8c0 19.72-10.97 37.47-30.5 47.33L127.8 252.4C117.1 258.2 112 268.7 112 280v40c0 17.67 14.31 31.99 32 31.99s32-14.32 32-31.99V298.3L256 251.3c39.47-19.75 64-59.42 64-103.5C320 83.95 268.1 32.01 204.3 32.01zM144 400c-22.09 0-40 17.91-40 40s17.91 39.1 40 39.1s40-17.9 40-39.1S166.1 400 144 400z\"/></svg>`,\n loading: `<div class=\"spinner-wrap\"><div class=\"spinner\"></div></div>`,\n};\n","import {\n AfterViewInit,\n Component,\n DOCUMENT,\n ElementRef,\n HostListener,\n inject,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { IMessageOptions } from '../models/message-options.interface';\nimport { Subject } from 'rxjs';\nimport { MessageResult, DismissReason } from '../models/message-result';\nimport { CommonModule } from '@angular/common';\nimport { NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from '../models/tokens';\nimport { ICONS } from '../models/icons';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { makeConfetti } from 'ngx-kit/shared';\nimport { NgxMessageService } from '../services/message.service';\n\n@Component({\n selector: 'ngx-message',\n templateUrl: 'message.component.html',\n styleUrls: ['./message.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule],\n providers: [\n {\n provide: NGX_MESSAGE_CONFIGS,\n useValue: NGX_MESSAGE_DEFAULT_OPTIONS,\n },\n ],\n})\nexport class NgxMessageComponent implements OnInit, AfterViewInit {\n icon?: SafeHtml;\n showIcon = signal(true);\n options!: IMessageOptions;\n confetti = viewChild<ElementRef<HTMLDivElement>>('confetti');\n index = 0;\n\n protected sanitizer = inject(DomSanitizer);\n protected doc = inject(DOCUMENT);\n private readonly messageService = inject(NgxMessageService);\n\n private readonly _onClose = new Subject<{ index: number; result: MessageResult<any> }>();\n public onClose = this._onClose.asObservable();\n\n ngOnInit(): void {\n this.showIcon.update((x) => (x = this.options.icon != 'None'));\n this.icon = this.sanitizer.bypassSecurityTrustHtml(ICONS[this.options.icon ?? 'None']);\n }\n\n ngAfterViewInit(): void {\n const confetti = this.confetti()?.nativeElement;\n if (this.options.icon == 'success' && confetti) {\n makeConfetti(this.doc, confetti);\n }\n }\n\n /**\n * وقتی چند تا پیام هم‌زمان باز باشن، هرکدوم listener خودشو روی document\n * داشت — پس یه فشردن Escape/Enter، رویداد رو به *همه‌شون* هم‌زمان می‌فرستاد،\n * نه فقط آخرین پیامی که باز شده (رفتار طبیعیِ یه استکِ مودال باید این باشه\n * که فقط بالاترین لایه به کیبورد واکنش نشون بده). این چک همون چیزیه که\n * OverlayService با getLastDialog() برای اورلی‌ها انجام می‌ده.\n */\n private isTopmost(): boolean {\n const ids = [...this.messageService.alerts.keys()];\n if (!ids.length) return true;\n return this.index === Math.max(...ids);\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n onScapeKey(event: Event) {\n if (this.options.allowEscapeKey && this.isTopmost()) {\n this.onCancel();\n }\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n onEnterKey(event: Event) {\n if (!this.isTopmost()) return;\n event.stopPropagation();\n event.preventDefault();\n if (this.options.allowEnterKey) {\n if (this.options.showConfirmButton) {\n this.onConfirm();\n } else if (this.options.showDenyButton) {\n this.onDeny();\n } else {\n this.onCancel();\n }\n }\n }\n\n onConfirm() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: true,\n isDismissed: false,\n isDenied: false,\n dismiss: DismissReason.close,\n },\n });\n }\n onCancel() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: false,\n isDismissed: true,\n isDenied: false,\n dismiss: DismissReason.cancel,\n },\n });\n }\n onDeny() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: false,\n isDismissed: false,\n isDenied: true,\n dismiss: DismissReason.close,\n },\n });\n }\n close() {\n this.onCancel();\n }\n\n onOutSideClick() {\n if (this.options.allowOutsideClick) {\n this.onCancel();\n }\n }\n innerOnClick(ev: Event) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n}\n","<div\n class=\"ngx-msg-overlay show\"\n (click)=\"onOutSideClick()\"\n [ngClass]=\"options.containerClass\"\n [class.has-backdrop]=\"options.backdrop\"\n [attr.data-type]=\"options.icon\">\n <div class=\"ngx-msg-modal\" (click)=\"innerOnClick($event)\">\n <div class=\"confetti\" #confetti></div>\n @if (options.showCloseButton) {\n <button class=\"close-x\" (click)=\"close()\" aria-label=\"Close\">✕</button>\n }\n @if (showIcon()) {\n <div class=\"icon-stage\">\n <div class=\"icon-ring\"></div>\n <div class=\"icon-disc\" [innerHTML]=\"icon\"></div>\n </div>\n }\n <h2>{{ options.title }}</h2>\n <p class=\"desc\">\n {{ options.text }}\n <span [innerHTML]=\"options.html\"></span>\n </p>\n\n <div class=\"ngx-msg-actions\">\n @if (options.showCancelButton) {\n <button\n class=\"btn btn-ghost\"\n (click)=\"onCancel()\"\n [attr.aria-label]=\"options.cancelButtonAriaLabel\">\n {{ options.cancelButtonText }}\n </button>\n }\n @if (options.showDenyButton) {\n <button\n class=\"btn btn-ghost\"\n (click)=\"onDeny()\"\n [attr.aria-label]=\"options.denyButtonAriaLabel\">\n {{ options.denyButtonText }}\n </button>\n }\n @if (options.showConfirmButton) {\n <button\n class=\"btn btn-primary\"\n (click)=\"onConfirm()\"\n [attr.aria-label]=\"options.confirmButtonAriaLabel\">\n {{ options.confirmButtonText }}\n </button>\n }\n </div>\n </div>\n</div>\n","export function applyDefaultConfig(config: any, defaultConfig: any): any {\n var config = JSON.parse(JSON.stringify(config));\n for (let key in defaultConfig) {\n if (config[key] === undefined || config[key] === null || config[key] === '') {\n config[key] = defaultConfig[key];\n } else if (typeof config[key] === 'object') {\n config[key] = applyDefaultConfig(config[key], defaultConfig[key]);\n }\n }\n return config;\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n EventEmitter,\n Inject,\n Injectable,\n Injector,\n} from '@angular/core';\nimport { NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from '../models/tokens';\nimport { IMessageOptions } from '../models/message-options.interface';\nimport { MessageOutput, MessageResult } from '../models/message-result';\nimport { DOCUMENT } from '@angular/common';\nimport { NgxMessageComponent } from '../components/message.component';\nimport { applyDefaultConfig } from './apply-default';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxMessageService {\n // قبلاً یه آرایه‌ی معمولی بود (`ComponentRef[]`) و removeDialogComponentFromBody\n // فقط componentRef رو destroy می‌کرد ولی هیچ‌وقت از آرایه حذفش نمی‌کرد — یعنی\n // این سرویس (که providedIn:'root' و singleton سراسریه) به ازای هر پیامی که\n // تا حالا تو کل عمر اپ نشون داده شده، یک رفرنس destroy-شده رو برای همیشه نگه\n // می‌داشت: یک نشتی حافظه‌ی پیوسته. با Map<id, ComponentRef> جایگزین شد که\n // با delete واقعاً entry رو آزاد می‌کنه؛ کلید هم شناسه‌ی پایدارِ پیام (insertedId)\n // هست، نه موقعیتِ آرایه (که با splice ممکن بود جابه‌جا و نامعتبر بشه).\n alerts = new Map<number, ComponentRef<NgxMessageComponent>>();\n insertedId = 0;\n constructor(\n private appRef: ApplicationRef,\n private injector: Injector,\n private envInjector: EnvironmentInjector,\n @Inject(DOCUMENT) private _doc: Document,\n ) {}\n\n public show<T = any>(c?: IMessageOptions): MessageOutput<T> {\n let d = applyDefaultConfig(\n this.injector.get(NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS),\n NGX_MESSAGE_DEFAULT_OPTIONS,\n );\n const config = applyDefaultConfig(c, d);\n\n const componentRef = createComponent(NgxMessageComponent, {\n environmentInjector: this.envInjector,\n });\n\n this.appRef.attachView(componentRef.hostView);\n const id = this.insertedId++;\n const payload: MessageOutput<T> = {\n close: () => componentRef.instance.close(),\n id,\n afterClose: new EventEmitter(),\n };\n this.appendDialogComponentToBody(componentRef, config);\n componentRef.instance.options = config;\n componentRef.instance.index = id;\n componentRef.instance.onClose.subscribe((result) => {\n this.removeDialogComponentFromBody(result.index);\n payload.afterClose.emit(result.result);\n });\n this.alerts.set(id, componentRef);\n\n return payload;\n }\n\n private removeDialogComponentFromBody(id: number): void {\n const ref = this.alerts.get(id);\n if (!ref) return;\n\n const domElem = (ref.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n // قبل از destroy باید hidePopover صدا بزنیم\n if (domElem.popover === 'manual') {\n try {\n domElem.hidePopover();\n } catch {}\n }\n\n this.appRef.detachView(ref.hostView);\n ref.destroy();\n this.alerts.delete(id);\n }\n\n private appendDialogComponentToBody(\n componentRef: ComponentRef<NgxMessageComponent>,\n config: IMessageOptions,\n ) {\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n if (config.containerClass) {\n for (let c of config.containerClass.split(' ')) {\n if (c.trim()) domElem.classList.add(c);\n }\n }\n this._doc.body.appendChild(domElem);\n if (config.useOverlay) {\n domElem.popover = 'manual';\n domElem.showPopover();\n }\n }\n\n closeAll() {\n for (const id of [...this.alerts.keys()]) {\n this.removeDialogComponentFromBody(id);\n }\n }\n}\n","import { Injector } from '@angular/core';\nimport { NGX_MESSAGE_API } from './models/tokens';\nimport { IMessageOptions } from './models/message-options.interface';\n\n/**\n * Static facade so call sites can use: MSG.warn('msg', opts)\n * Module will set the service instance in its constructor.\n */\nexport class MSG {\n static injector: Injector;\n\n static show<T = any>(options?: IMessageOptions) {\n if (!MSG.injector) {\n throw new Error(\n 'ngx-kit: Error on EnvironmentProvider. Ensure \"provideMessage()\" in root provider.',\n );\n }\n\n return MSG.injector.get(NGX_MESSAGE_API).show<T>(options);\n }\n\n static fire(options?: IMessageOptions) {\n return this.show(options);\n }\n\n static info(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'info',\n title,\n text,\n ...options,\n });\n }\n\n static success(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'success',\n title,\n text,\n ...options,\n });\n }\n static warning(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'warning',\n title,\n text,\n ...options,\n });\n }\n static error(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'error',\n title,\n text,\n ...options,\n });\n }\n static question(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'question',\n title,\n text,\n ...options,\n showConfirmButton: true,\n showCancelButton: true,\n });\n }\n static loading(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'loading',\n title,\n text,\n ...options,\n showConfirmButton: false,\n showCancelButton: false,\n showDenyButton: false,\n });\n }\n}\n\nexport class Modal extends MSG {}\n","import {\n EnvironmentProviders,\n inject,\n Injector,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { IMessageOptions } from './models/message-options.interface';\nimport { NGX_MESSAGE_API, NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from './models/tokens';\nimport { NgxMessageService } from './services/message.service';\nimport { MSG as MessageFacade } from './message-facade';\nimport { Modal as ModalFacade } from './message-facade';\n\nexport function provideMessage(options?: IMessageOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_MESSAGE_CONFIGS,\n useValue: { ...NGX_MESSAGE_DEFAULT_OPTIONS, ...(options || {}) },\n },\n {\n provide: NGX_MESSAGE_API,\n useExisting: NgxMessageService,\n },\n provideEnvironmentInitializer(() => {\n MessageFacade.injector = inject(Injector);\n ModalFacade.injector = inject(Injector);\n }),\n ]);\n}\n","import { MessageIcon } from './MessageIcon';\nimport { IMessageOptions } from './message-options.interface';\n\nexport class MessageOptions implements IMessageOptions {\n public constructor(private config?: IMessageOptions) {\n //config = { ...(new MessageOptions()), ...config };\n }\n /**\n * add popover manual to set alert dialog container to top layer\n * - usefull when using alert modal in angular material dialog\n *\n */\n useOverlay?: boolean;\n title?: string = '';\n text?: string = '';\n html?: string | HTMLElement = '';\n backdrop?: boolean = true;\n icon?: MessageIcon;\n width?: number | string;\n allowOutsideClick?: boolean = true;\n allowEscapeKey?: boolean = true;\n allowEnterKey?: boolean = true;\n showConfirmButton?: boolean = true;\n showDenyButton?: boolean = false;\n showCancelButton?: boolean = false;\n confirmButtonText: string = 'Ok';\n denyButtonText?: string = 'No';\n cancelButtonText?: string = 'Cancel';\n confirmButtonColor?: string;\n denyButtonColor?: string;\n cancelButtonColor?: string;\n confirmButtonAriaLabel?: string = '';\n denyButtonAriaLabel?: string = '';\n cancelButtonAriaLabel?: string = '';\n reverseButtons?: boolean = false;\n showCloseButton?: boolean = false;\n containerClass?: string = '';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT","MessageFacade","ModalFacade"],"mappings":"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"}
@@ -425,7 +425,7 @@ class NgxInputTimePickerComponent {
425
425
  useExisting: forwardRef(() => NgxInputTimePickerComponent),
426
426
  multi: true,
427
427
  },
428
- ], viewQueries: [{ propertyName: "clock", first: true, predicate: ["clock"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ngx-time-picker\" [class.ngx-time-picker--disabled]=\"disabled()\">\n <!-- Header -->\n <div class=\"ngx-time-picker__header\">\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'hour'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('hour')\">\n {{ formatHour(displayHour()) }}\n </button>\n\n <span class=\"ngx-time-picker__separator\">:</span>\n\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'minute'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('minute')\">\n {{ formatMinute(displayMinute()) }}\n </button>\n\n @if (format() == '12') {\n <div class=\"ngx-time-picker_format\">\n <button [class.active]=\"!isPm()\" (click)=\"togglePmAm('AM')\">\n {{ config.amText }}\n </button>\n <button [class.active]=\"isPm()\" (click)=\"togglePmAm('PM')\">\n {{ config.pmText }}\n </button>\n </div>\n }\n </div>\n\n <!-- Clock -->\n <div class=\"ngx-time-picker__clock-wrapper\">\n <svg\n #clock\n class=\"ngx-time-picker__clock\"\n viewBox=\"0 0 240 240\"\n xmlns=\"http://www.w3.org/2000/svg\"\n (pointerdown)=\"startPointer($event)\"\n (pointermove)=\"movePointer($event)\"\n (pointerup)=\"endPointer($event)\"\n (pointercancel)=\"endPointer($event)\">\n <!-- Background -->\n <circle class=\"clock-background\" cx=\"120\" cy=\"120\" r=\"112\" />\n\n <!-- Selected hand line -->\n <line class=\"clock-hand\" x1=\"120\" y1=\"120\" [attr.x2]=\"handEnd().x\" [attr.y2]=\"handEnd().y\" />\n\n <!-- Selected circle -->\n <circle\n class=\"clock-selected\"\n [attr.cx]=\"selectedPosition().x\"\n [attr.cy]=\"selectedPosition().y\"\n r=\"18\" />\n\n <!-- Center -->\n <circle class=\"clock-center\" cx=\"120\" cy=\"120\" r=\"5\" />\n\n <!-- HOURS -->\n @if (mode() === 'hour') {\n @for (hour of hourNumbers(); track hour) {\n @if (format() === '24' && (hour >= 13 || hour == 0)) {\n <g class=\"clock-number clock-number--inner\" (click)=\"selectHour(hour)\">\n <circle\n [attr.cx]=\"hourPosition(hour - 12, true).x\"\n [attr.cy]=\"hourPosition(hour - 12, true).y\"\n r=\"16\" />\n\n <text\n [attr.x]=\"hourPosition(hour - 12, true).x\"\n [attr.y]=\"hourPosition(hour - 12, true).y\">\n {{ hour == 0 ? '00' : hour }}\n </text>\n </g>\n } @else {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayHour() == hour\"\n (click)=\"selectHour(hour)\">\n <circle [attr.cx]=\"hourPosition(hour).x\" [attr.cy]=\"hourPosition(hour).y\" r=\"18\" />\n\n <text [attr.x]=\"hourPosition(hour).x\" [attr.y]=\"hourPosition(hour).y\">\n {{ hour }}\n </text>\n </g>\n }\n }\n }\n\n <!-- MINUTES -->\n @if (mode() === 'minute') {\n @for (minute of minuteNumbers(); track minute) {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayMinute() == minute\"\n (click)=\"selectMinute(minute)\">\n <circle\n [attr.cx]=\"minutePosition(minute).x\"\n [attr.cy]=\"minutePosition(minute).y\"\n r=\"18\" />\n\n <text [attr.x]=\"minutePosition(minute).x\" [attr.y]=\"minutePosition(minute).y\">\n {{ formatMinute(minute) }}\n </text>\n </g>\n }\n }\n </svg>\n </div>\n <div class=\"ngx-time-picker--footer\">\n <button (click)=\"close()\">\n {{ config.cancelButtonText }}\n </button>\n\n <button (click)=\"ok()\">\n {{ config.confirmButtonText }}\n </button>\n </div>\n</div>\n", styles: [":host{--ngx-time-picker-clock-bg: light-dark(#f8f8f8, #181818);--ngx-time-picker-header-bg: #6200ee;--ngx-time-picker-header-fg: #fff;--ngx-clock-bg: light-dark(#e8e8e8, #35363c);display:inline-block}.ngx-time-picker{width:300px;max-width:100%;border-radius:15px;overflow:hidden;direction:ltr;user-select:none;-webkit-user-select:none;border:1px rgba(191,191,191,.4) solid;box-shadow:0 0 20px #9090904f}.ngx-time-picker__header{display:flex;align-items:center;justify-content:center;height:82px;background:var(--ngx-time-picker-header-bg, );color:var(--ngx-time-picker-header-fg)}.ngx-time-picker__value{border:0;padding:0;background:transparent;color:#ffffff8c;font-size:48px;line-height:1;font-weight:400;cursor:pointer;transition:color .16s ease,opacity .16s ease;font-variant-numeric:tabular-nums}.ngx-time-picker__value:hover{color:#fffc}.ngx-time-picker__value.active{color:#fff}.ngx-time-picker__value:disabled{cursor:default}.ngx-time-picker__separator{margin-inline:4px;font-size:44px;line-height:1;color:#fff}.ngx-time-picker__clock-wrapper{display:flex;align-items:center;justify-content:center;padding:20px;background:var(--ngx-time-picker-clock-bg)}.ngx-time-picker__clock{width:250px;height:250px;touch-action:none;overflow:visible;cursor:pointer}.clock-background{fill:var(--ngx-clock-bg)}.clock-hand{stroke:#1976d2;stroke-width:2;stroke-linecap:round;pointer-events:none}.clock-center,.clock-selected{fill:#1976d2;pointer-events:none}.clock-number{cursor:pointer}.clock-number circle{fill:transparent}.clock-number text{fill:currentColor;font-size:14px;font-family:Roboto,Arial,sans-serif;text-anchor:middle;dominant-baseline:central;pointer-events:none;transition:fill .12s ease}.clock-number:hover circle{fill:#1976d21f}.clock-number.selected text{fill:#000;font-weight:500}.clock-number--inner text{font-size:12px}.ngx-time-picker--disabled{opacity:.5;pointer-events:none}.ngx-time-picker--footer{display:flex;justify-content:flex-end;gap:5px;padding:5px 10px px;background:var(--ngx-time-picker-clock-bg)}.ngx-time-picker--footer button{outline:none;background:none;color:inherit;border:none;border-radius:4px;padding:8px 15px;box-shadow:none;transition:all .3s}.ngx-time-picker--footer button:not([disabled]):hover{cursor:pointer;background:#816ef175}.ngx-time-picker_format{display:flex;flex-direction:column;margin:0 15px;gap:5px}.ngx-time-picker_format button{all:unset;opacity:.4;cursor:pointer}.ngx-time-picker_format button.active{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
428
+ ], viewQueries: [{ propertyName: "clock", first: true, predicate: ["clock"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ngx-time-picker\" [class.ngx-time-picker--disabled]=\"disabled()\">\n <!-- Header -->\n <div class=\"ngx-time-picker__header\">\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'hour'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('hour')\">\n {{ formatHour(displayHour()) }}\n </button>\n\n <span class=\"ngx-time-picker__separator\">:</span>\n\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'minute'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('minute')\">\n {{ formatMinute(displayMinute()) }}\n </button>\n\n @if (format() == '12') {\n <div class=\"ngx-time-picker_format\">\n <button [class.active]=\"!isPm()\" (click)=\"togglePmAm('AM')\">\n {{ config.amText }}\n </button>\n <button [class.active]=\"isPm()\" (click)=\"togglePmAm('PM')\">\n {{ config.pmText }}\n </button>\n </div>\n }\n </div>\n\n <!-- Clock -->\n <div class=\"ngx-time-picker__clock-wrapper\">\n <svg\n #clock\n class=\"ngx-time-picker__clock\"\n viewBox=\"0 0 240 240\"\n xmlns=\"http://www.w3.org/2000/svg\"\n (pointerdown)=\"startPointer($event)\"\n (pointermove)=\"movePointer($event)\"\n (pointerup)=\"endPointer($event)\"\n (pointercancel)=\"endPointer($event)\">\n <!-- Background -->\n <circle class=\"clock-background\" cx=\"120\" cy=\"120\" r=\"112\" />\n\n <!-- Selected hand line -->\n <line class=\"clock-hand\" x1=\"120\" y1=\"120\" [attr.x2]=\"handEnd().x\" [attr.y2]=\"handEnd().y\" />\n\n <!-- Selected circle -->\n <circle\n class=\"clock-selected\"\n [attr.cx]=\"selectedPosition().x\"\n [attr.cy]=\"selectedPosition().y\"\n r=\"18\" />\n\n <!-- Center -->\n <circle class=\"clock-center\" cx=\"120\" cy=\"120\" r=\"5\" />\n\n <!-- HOURS -->\n @if (mode() === 'hour') {\n @for (hour of hourNumbers(); track hour) {\n @if (format() === '24' && (hour >= 13 || hour == 0)) {\n <g class=\"clock-number clock-number--inner\" (click)=\"selectHour(hour)\">\n <circle\n [attr.cx]=\"hourPosition(hour - 12, true).x\"\n [attr.cy]=\"hourPosition(hour - 12, true).y\"\n r=\"16\" />\n\n <text\n [attr.x]=\"hourPosition(hour - 12, true).x\"\n [attr.y]=\"hourPosition(hour - 12, true).y\">\n {{ hour == 0 ? '00' : hour }}\n </text>\n </g>\n } @else {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayHour() == hour\"\n (click)=\"selectHour(hour)\">\n <circle [attr.cx]=\"hourPosition(hour).x\" [attr.cy]=\"hourPosition(hour).y\" r=\"18\" />\n\n <text [attr.x]=\"hourPosition(hour).x\" [attr.y]=\"hourPosition(hour).y\">\n {{ hour }}\n </text>\n </g>\n }\n }\n }\n\n <!-- MINUTES -->\n @if (mode() === 'minute') {\n @for (minute of minuteNumbers(); track minute) {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayMinute() == minute\"\n (click)=\"selectMinute(minute)\">\n <circle\n [attr.cx]=\"minutePosition(minute).x\"\n [attr.cy]=\"minutePosition(minute).y\"\n r=\"18\" />\n\n <text [attr.x]=\"minutePosition(minute).x\" [attr.y]=\"minutePosition(minute).y\">\n {{ formatMinute(minute) }}\n </text>\n </g>\n }\n }\n </svg>\n </div>\n <div class=\"ngx-time-picker--footer\">\n <button (click)=\"close()\">\n {{ config.cancelButtonText }}\n </button>\n\n <button (click)=\"ok()\">\n {{ config.confirmButtonText }}\n </button>\n </div>\n</div>\n", styles: [":host{--ngx-time-picker-clock-bg: light-dark(#f8f8f8, #181818);--ngx-time-picker-header-bg: #6200ee;--ngx-time-picker-header-fg: #fff;--ngx-clock-bg: light-dark(#e8e8e8, #35363c);display:inline-block}.ngx-time-picker{width:300px;max-width:100%;border-radius:15px;overflow:hidden;direction:ltr;user-select:none;-webkit-user-select:none;border:1px rgba(134,134,134,.3490196078) solid;box-shadow:0 0 20px #7a7a7a21}.ngx-time-picker__header{display:flex;align-items:center;justify-content:center;height:82px;background:var(--ngx-time-picker-header-bg, );color:var(--ngx-time-picker-header-fg)}.ngx-time-picker__value{border:0;padding:0;background:transparent;color:#ffffff8c;font-size:48px;line-height:1;font-weight:400;cursor:pointer;transition:color .16s ease,opacity .16s ease;font-variant-numeric:tabular-nums}.ngx-time-picker__value:hover{color:#fffc}.ngx-time-picker__value.active{color:#fff}.ngx-time-picker__value:disabled{cursor:default}.ngx-time-picker__separator{margin-inline:4px;font-size:44px;line-height:1;color:#fff}.ngx-time-picker__clock-wrapper{display:flex;align-items:center;justify-content:center;padding:20px;background:var(--ngx-time-picker-clock-bg)}.ngx-time-picker__clock{width:250px;height:250px;touch-action:none;overflow:visible;cursor:pointer}.clock-background{fill:var(--ngx-clock-bg)}.clock-hand{stroke:#1976d2;stroke-width:2;stroke-linecap:round;pointer-events:none}.clock-center,.clock-selected{fill:#1976d2;pointer-events:none}.clock-number{cursor:pointer}.clock-number circle{fill:transparent}.clock-number text{fill:currentColor;font-size:14px;font-family:Roboto,Arial,sans-serif;text-anchor:middle;dominant-baseline:central;pointer-events:none;transition:fill .12s ease}.clock-number:hover circle{fill:#1976d21f}.clock-number.selected text{fill:#000;font-weight:500}.clock-number--inner text{font-size:12px}.ngx-time-picker--disabled{opacity:.5;pointer-events:none}.ngx-time-picker--footer{display:flex;justify-content:flex-end;gap:5px;padding:5px 10px;background:var(--ngx-time-picker-clock-bg)}.ngx-time-picker--footer button{outline:none;background:none;color:inherit;border:none;border-radius:4px;padding:8px 15px;box-shadow:none;transition:all .3s}.ngx-time-picker--footer button:not([disabled]):hover{cursor:pointer;background:#816ef175}.ngx-time-picker_format{display:flex;flex-direction:column;margin:0 15px;gap:5px}.ngx-time-picker_format button{all:unset;opacity:.4;cursor:pointer}.ngx-time-picker_format button.active{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
429
429
  }
430
430
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputTimePickerComponent, decorators: [{
431
431
  type: Component,
@@ -440,7 +440,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
440
440
  useExisting: forwardRef(() => NgxInputTimePickerComponent),
441
441
  multi: true,
442
442
  },
443
- ], template: "<div class=\"ngx-time-picker\" [class.ngx-time-picker--disabled]=\"disabled()\">\n <!-- Header -->\n <div class=\"ngx-time-picker__header\">\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'hour'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('hour')\">\n {{ formatHour(displayHour()) }}\n </button>\n\n <span class=\"ngx-time-picker__separator\">:</span>\n\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'minute'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('minute')\">\n {{ formatMinute(displayMinute()) }}\n </button>\n\n @if (format() == '12') {\n <div class=\"ngx-time-picker_format\">\n <button [class.active]=\"!isPm()\" (click)=\"togglePmAm('AM')\">\n {{ config.amText }}\n </button>\n <button [class.active]=\"isPm()\" (click)=\"togglePmAm('PM')\">\n {{ config.pmText }}\n </button>\n </div>\n }\n </div>\n\n <!-- Clock -->\n <div class=\"ngx-time-picker__clock-wrapper\">\n <svg\n #clock\n class=\"ngx-time-picker__clock\"\n viewBox=\"0 0 240 240\"\n xmlns=\"http://www.w3.org/2000/svg\"\n (pointerdown)=\"startPointer($event)\"\n (pointermove)=\"movePointer($event)\"\n (pointerup)=\"endPointer($event)\"\n (pointercancel)=\"endPointer($event)\">\n <!-- Background -->\n <circle class=\"clock-background\" cx=\"120\" cy=\"120\" r=\"112\" />\n\n <!-- Selected hand line -->\n <line class=\"clock-hand\" x1=\"120\" y1=\"120\" [attr.x2]=\"handEnd().x\" [attr.y2]=\"handEnd().y\" />\n\n <!-- Selected circle -->\n <circle\n class=\"clock-selected\"\n [attr.cx]=\"selectedPosition().x\"\n [attr.cy]=\"selectedPosition().y\"\n r=\"18\" />\n\n <!-- Center -->\n <circle class=\"clock-center\" cx=\"120\" cy=\"120\" r=\"5\" />\n\n <!-- HOURS -->\n @if (mode() === 'hour') {\n @for (hour of hourNumbers(); track hour) {\n @if (format() === '24' && (hour >= 13 || hour == 0)) {\n <g class=\"clock-number clock-number--inner\" (click)=\"selectHour(hour)\">\n <circle\n [attr.cx]=\"hourPosition(hour - 12, true).x\"\n [attr.cy]=\"hourPosition(hour - 12, true).y\"\n r=\"16\" />\n\n <text\n [attr.x]=\"hourPosition(hour - 12, true).x\"\n [attr.y]=\"hourPosition(hour - 12, true).y\">\n {{ hour == 0 ? '00' : hour }}\n </text>\n </g>\n } @else {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayHour() == hour\"\n (click)=\"selectHour(hour)\">\n <circle [attr.cx]=\"hourPosition(hour).x\" [attr.cy]=\"hourPosition(hour).y\" r=\"18\" />\n\n <text [attr.x]=\"hourPosition(hour).x\" [attr.y]=\"hourPosition(hour).y\">\n {{ hour }}\n </text>\n </g>\n }\n }\n }\n\n <!-- MINUTES -->\n @if (mode() === 'minute') {\n @for (minute of minuteNumbers(); track minute) {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayMinute() == minute\"\n (click)=\"selectMinute(minute)\">\n <circle\n [attr.cx]=\"minutePosition(minute).x\"\n [attr.cy]=\"minutePosition(minute).y\"\n r=\"18\" />\n\n <text [attr.x]=\"minutePosition(minute).x\" [attr.y]=\"minutePosition(minute).y\">\n {{ formatMinute(minute) }}\n </text>\n </g>\n }\n }\n </svg>\n </div>\n <div class=\"ngx-time-picker--footer\">\n <button (click)=\"close()\">\n {{ config.cancelButtonText }}\n </button>\n\n <button (click)=\"ok()\">\n {{ config.confirmButtonText }}\n </button>\n </div>\n</div>\n", styles: [":host{--ngx-time-picker-clock-bg: light-dark(#f8f8f8, #181818);--ngx-time-picker-header-bg: #6200ee;--ngx-time-picker-header-fg: #fff;--ngx-clock-bg: light-dark(#e8e8e8, #35363c);display:inline-block}.ngx-time-picker{width:300px;max-width:100%;border-radius:15px;overflow:hidden;direction:ltr;user-select:none;-webkit-user-select:none;border:1px rgba(191,191,191,.4) solid;box-shadow:0 0 20px #9090904f}.ngx-time-picker__header{display:flex;align-items:center;justify-content:center;height:82px;background:var(--ngx-time-picker-header-bg, );color:var(--ngx-time-picker-header-fg)}.ngx-time-picker__value{border:0;padding:0;background:transparent;color:#ffffff8c;font-size:48px;line-height:1;font-weight:400;cursor:pointer;transition:color .16s ease,opacity .16s ease;font-variant-numeric:tabular-nums}.ngx-time-picker__value:hover{color:#fffc}.ngx-time-picker__value.active{color:#fff}.ngx-time-picker__value:disabled{cursor:default}.ngx-time-picker__separator{margin-inline:4px;font-size:44px;line-height:1;color:#fff}.ngx-time-picker__clock-wrapper{display:flex;align-items:center;justify-content:center;padding:20px;background:var(--ngx-time-picker-clock-bg)}.ngx-time-picker__clock{width:250px;height:250px;touch-action:none;overflow:visible;cursor:pointer}.clock-background{fill:var(--ngx-clock-bg)}.clock-hand{stroke:#1976d2;stroke-width:2;stroke-linecap:round;pointer-events:none}.clock-center,.clock-selected{fill:#1976d2;pointer-events:none}.clock-number{cursor:pointer}.clock-number circle{fill:transparent}.clock-number text{fill:currentColor;font-size:14px;font-family:Roboto,Arial,sans-serif;text-anchor:middle;dominant-baseline:central;pointer-events:none;transition:fill .12s ease}.clock-number:hover circle{fill:#1976d21f}.clock-number.selected text{fill:#000;font-weight:500}.clock-number--inner text{font-size:12px}.ngx-time-picker--disabled{opacity:.5;pointer-events:none}.ngx-time-picker--footer{display:flex;justify-content:flex-end;gap:5px;padding:5px 10px px;background:var(--ngx-time-picker-clock-bg)}.ngx-time-picker--footer button{outline:none;background:none;color:inherit;border:none;border-radius:4px;padding:8px 15px;box-shadow:none;transition:all .3s}.ngx-time-picker--footer button:not([disabled]):hover{cursor:pointer;background:#816ef175}.ngx-time-picker_format{display:flex;flex-direction:column;margin:0 15px;gap:5px}.ngx-time-picker_format button{all:unset;opacity:.4;cursor:pointer}.ngx-time-picker_format button.active{opacity:1}\n"] }]
443
+ ], template: "<div class=\"ngx-time-picker\" [class.ngx-time-picker--disabled]=\"disabled()\">\n <!-- Header -->\n <div class=\"ngx-time-picker__header\">\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'hour'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('hour')\">\n {{ formatHour(displayHour()) }}\n </button>\n\n <span class=\"ngx-time-picker__separator\">:</span>\n\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'minute'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('minute')\">\n {{ formatMinute(displayMinute()) }}\n </button>\n\n @if (format() == '12') {\n <div class=\"ngx-time-picker_format\">\n <button [class.active]=\"!isPm()\" (click)=\"togglePmAm('AM')\">\n {{ config.amText }}\n </button>\n <button [class.active]=\"isPm()\" (click)=\"togglePmAm('PM')\">\n {{ config.pmText }}\n </button>\n </div>\n }\n </div>\n\n <!-- Clock -->\n <div class=\"ngx-time-picker__clock-wrapper\">\n <svg\n #clock\n class=\"ngx-time-picker__clock\"\n viewBox=\"0 0 240 240\"\n xmlns=\"http://www.w3.org/2000/svg\"\n (pointerdown)=\"startPointer($event)\"\n (pointermove)=\"movePointer($event)\"\n (pointerup)=\"endPointer($event)\"\n (pointercancel)=\"endPointer($event)\">\n <!-- Background -->\n <circle class=\"clock-background\" cx=\"120\" cy=\"120\" r=\"112\" />\n\n <!-- Selected hand line -->\n <line class=\"clock-hand\" x1=\"120\" y1=\"120\" [attr.x2]=\"handEnd().x\" [attr.y2]=\"handEnd().y\" />\n\n <!-- Selected circle -->\n <circle\n class=\"clock-selected\"\n [attr.cx]=\"selectedPosition().x\"\n [attr.cy]=\"selectedPosition().y\"\n r=\"18\" />\n\n <!-- Center -->\n <circle class=\"clock-center\" cx=\"120\" cy=\"120\" r=\"5\" />\n\n <!-- HOURS -->\n @if (mode() === 'hour') {\n @for (hour of hourNumbers(); track hour) {\n @if (format() === '24' && (hour >= 13 || hour == 0)) {\n <g class=\"clock-number clock-number--inner\" (click)=\"selectHour(hour)\">\n <circle\n [attr.cx]=\"hourPosition(hour - 12, true).x\"\n [attr.cy]=\"hourPosition(hour - 12, true).y\"\n r=\"16\" />\n\n <text\n [attr.x]=\"hourPosition(hour - 12, true).x\"\n [attr.y]=\"hourPosition(hour - 12, true).y\">\n {{ hour == 0 ? '00' : hour }}\n </text>\n </g>\n } @else {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayHour() == hour\"\n (click)=\"selectHour(hour)\">\n <circle [attr.cx]=\"hourPosition(hour).x\" [attr.cy]=\"hourPosition(hour).y\" r=\"18\" />\n\n <text [attr.x]=\"hourPosition(hour).x\" [attr.y]=\"hourPosition(hour).y\">\n {{ hour }}\n </text>\n </g>\n }\n }\n }\n\n <!-- MINUTES -->\n @if (mode() === 'minute') {\n @for (minute of minuteNumbers(); track minute) {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayMinute() == minute\"\n (click)=\"selectMinute(minute)\">\n <circle\n [attr.cx]=\"minutePosition(minute).x\"\n [attr.cy]=\"minutePosition(minute).y\"\n r=\"18\" />\n\n <text [attr.x]=\"minutePosition(minute).x\" [attr.y]=\"minutePosition(minute).y\">\n {{ formatMinute(minute) }}\n </text>\n </g>\n }\n }\n </svg>\n </div>\n <div class=\"ngx-time-picker--footer\">\n <button (click)=\"close()\">\n {{ config.cancelButtonText }}\n </button>\n\n <button (click)=\"ok()\">\n {{ config.confirmButtonText }}\n </button>\n </div>\n</div>\n", styles: [":host{--ngx-time-picker-clock-bg: light-dark(#f8f8f8, #181818);--ngx-time-picker-header-bg: #6200ee;--ngx-time-picker-header-fg: #fff;--ngx-clock-bg: light-dark(#e8e8e8, #35363c);display:inline-block}.ngx-time-picker{width:300px;max-width:100%;border-radius:15px;overflow:hidden;direction:ltr;user-select:none;-webkit-user-select:none;border:1px rgba(134,134,134,.3490196078) solid;box-shadow:0 0 20px #7a7a7a21}.ngx-time-picker__header{display:flex;align-items:center;justify-content:center;height:82px;background:var(--ngx-time-picker-header-bg, );color:var(--ngx-time-picker-header-fg)}.ngx-time-picker__value{border:0;padding:0;background:transparent;color:#ffffff8c;font-size:48px;line-height:1;font-weight:400;cursor:pointer;transition:color .16s ease,opacity .16s ease;font-variant-numeric:tabular-nums}.ngx-time-picker__value:hover{color:#fffc}.ngx-time-picker__value.active{color:#fff}.ngx-time-picker__value:disabled{cursor:default}.ngx-time-picker__separator{margin-inline:4px;font-size:44px;line-height:1;color:#fff}.ngx-time-picker__clock-wrapper{display:flex;align-items:center;justify-content:center;padding:20px;background:var(--ngx-time-picker-clock-bg)}.ngx-time-picker__clock{width:250px;height:250px;touch-action:none;overflow:visible;cursor:pointer}.clock-background{fill:var(--ngx-clock-bg)}.clock-hand{stroke:#1976d2;stroke-width:2;stroke-linecap:round;pointer-events:none}.clock-center,.clock-selected{fill:#1976d2;pointer-events:none}.clock-number{cursor:pointer}.clock-number circle{fill:transparent}.clock-number text{fill:currentColor;font-size:14px;font-family:Roboto,Arial,sans-serif;text-anchor:middle;dominant-baseline:central;pointer-events:none;transition:fill .12s ease}.clock-number:hover circle{fill:#1976d21f}.clock-number.selected text{fill:#000;font-weight:500}.clock-number--inner text{font-size:12px}.ngx-time-picker--disabled{opacity:.5;pointer-events:none}.ngx-time-picker--footer{display:flex;justify-content:flex-end;gap:5px;padding:5px 10px;background:var(--ngx-time-picker-clock-bg)}.ngx-time-picker--footer button{outline:none;background:none;color:inherit;border:none;border-radius:4px;padding:8px 15px;box-shadow:none;transition:all .3s}.ngx-time-picker--footer button:not([disabled]):hover{cursor:pointer;background:#816ef175}.ngx-time-picker_format{display:flex;flex-direction:column;margin:0 15px;gap:5px}.ngx-time-picker_format button{all:unset;opacity:.4;cursor:pointer}.ngx-time-picker_format button.active{opacity:1}\n"] }]
444
444
  }], ctorParameters: () => [], propDecorators: { change: [{ type: i0.Output, args: ["change"] }], cancel: [{ type: i0.Output, args: ["cancel"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], minuteStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "minuteStep", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], autoSwitchToMinute: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoSwitchToMinute", required: false }] }], clock: [{ type: i0.ViewChild, args: ['clock', { isSignal: true }] }] } });
445
445
 
446
446
  class NgxInputTimePicker {
@@ -542,7 +542,10 @@ class NgxInputTimePicker {
542
542
  this._onTouched();
543
543
  }
544
544
  validate(control) {
545
- return null;
545
+ const raw = this.value();
546
+ if (!raw)
547
+ return null; // empty is handled by Validators.required, not us
548
+ return normalizeTime(raw) === null ? { invalid: true } : null;
546
549
  }
547
550
  _formatValue() {
548
551
  this.renderer.setProperty(this.el.nativeElement, 'value', this.value());
@@ -594,9 +597,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
594
597
  args: ['blur']
595
598
  }] } });
596
599
 
600
+ function provideTimePicker(config) {
601
+ const configuration = { ...DEFAULT_TIME_PICKER_CONFIG, ...config };
602
+ return [
603
+ {
604
+ provide: NGX_TIME_PICKER_CONFIG,
605
+ useValue: configuration,
606
+ },
607
+ ];
608
+ }
609
+
597
610
  /**
598
611
  * Generated bundle index. Do not edit.
599
612
  */
600
613
 
601
- export { NgxInputTimePicker, NgxInputTimePickerComponent };
614
+ export { DEFAULT_TIME_PICKER_CONFIG, NGX_TIME_PICKER_CONFIG, NgxInputTimePicker, NgxInputTimePickerComponent, NgxTimePickerConfig, provideTimePicker };
602
615
  //# sourceMappingURL=ngx-kit-time-picker.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-kit-time-picker.mjs","sources":["../../../projects/libs/time-picker/types/config.ts","../../../projects/libs/time-picker/utils/normalize.ts","../../../projects/libs/time-picker/components/time-picker/time-picker.ts","../../../projects/libs/time-picker/components/time-picker/time-picker.html","../../../projects/libs/time-picker/directives/time-picker.directive.ts","../../../projects/libs/time-picker/ngx-kit-time-picker.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport class NgxTimePickerConfig {\n cancelButtonText: string = 'Cancel';\n confirmButtonText: string = 'Ok';\n amText: string = 'AM';\n pmText: string = 'PM';\n format: '12' | '24' = '12';\n minuteStep: number = 1;\n autoSwitchToMinute: boolean = true;\n}\n\nexport const DEFAULT_TIME_PICKER_CONFIG = new NgxTimePickerConfig();\nexport const NGX_TIME_PICKER_CONFIG = new InjectionToken<NgxTimePickerConfig>(\n 'ngx-time-picker-config',\n {\n factory: () => DEFAULT_TIME_PICKER_CONFIG,\n },\n);\n","export function normalizeTime(value: string): string | null {\r\n const match = value.match(/^(\\d{1,2}):(\\d{2})$/);\r\n\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n const hour = Number(match[1]);\r\n const minute = Number(match[2]);\r\n\r\n if (hour < 0 || hour > 23 || minute < 0 || minute > 59) {\r\n return null;\r\n }\r\n\r\n return [hour.toString().padStart(2, '0'), minute.toString().padStart(2, '0')].join(':');\r\n}\r\n","import {\n Component,\n computed,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n input,\n model,\n OnInit,\n output,\n Output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BrowserService } from 'ngx-kit/shared';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport type { NgxTimePickerMode } from '../../types/mode';\nimport { NGX_TIME_PICKER_CONFIG } from '../../types/config';\nimport { normalizeTime } from '../../utils/normalize';\n\n@Component({\n selector: 'ngx-time-picker',\n templateUrl: './time-picker.html',\n styleUrls: ['./time-picker.scss'],\n imports: [CommonModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxInputTimePickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgxInputTimePickerComponent),\n multi: true,\n },\n ],\n})\nexport class NgxInputTimePickerComponent implements ControlValueAccessor, Validator, OnInit {\n protected readonly browserService = inject(BrowserService);\n\n readonly change = output<string | null>();\n readonly cancel = output<void>();\n\n protected readonly config = inject(NGX_TIME_PICKER_CONFIG);\n isDisabled = false;\n\n /**\n * Time value.\n *\n * Example:\n * 14:35\n */\n readonly value = model<string>('12:00');\n\n /**\n * 12h or 24h.\n */\n readonly format = input<'12' | '24'>(this.config.format);\n\n /**\n * Minute step.\n */\n readonly minuteStep = input(this.config.minuteStep);\n\n /**\n * Whether the clock is disabled.\n */\n readonly disabled = input(false);\n\n /**\n * Whether to automatically switch from hour to minute.\n */\n readonly autoSwitchToMinute = input<boolean>(this.config.autoSwitchToMinute);\n\n readonly clock = viewChild<ElementRef<SVGSVGElement>>('clock');\n\n readonly mode = signal<NgxTimePickerMode>('hour');\n\n private dragging = false;\n\n readonly parsedTime = computed(() => {\n const value = this.value();\n\n const [hour, minute] = value.split(':').map(Number);\n\n return {\n hour: Number.isFinite(hour) ? hour : 12,\n minute: Number.isFinite(minute) ? minute : 0,\n };\n });\n\n readonly displayHour = computed(() => {\n const { hour } = this.parsedTime();\n\n if (this.format() === '12') {\n const h = hour % 12;\n return h === 0 ? 12 : h;\n }\n\n return hour;\n });\n readonly isPm = computed(() => {\n const hour = Number(this.value().split(':')[0]);\n\n return hour >= 12;\n });\n readonly displayMinute = computed(() => {\n return this.parsedTime().minute;\n });\n\n readonly hourNumbers = computed(() => {\n if (this.format() === '24') {\n return Array.from({ length: 24 }, (_, i) => i);\n }\n\n return Array.from({ length: 12 }, (_, i) => i + 1);\n });\n\n readonly minuteNumbers = computed(() => {\n const step = Math.max(1, 5);\n\n const values: number[] = [];\n\n for (let i = 0; i < 60; i += step) {\n values.push(i);\n }\n\n return values;\n });\n\n readonly hourAngle = computed(() => {\n const { hour } = this.parsedTime();\n\n if (this.format() === '24') {\n /*\n * MUI-like 24 hour clock.\n *\n * 0 -> 0°\n * 6 -> 90°\n * 12 -> 180°\n * 18 -> 270°\n */\n return (hour % 12) * 30;\n }\n\n const h = hour % 12;\n\n return h * 30;\n });\n\n readonly minuteAngle = computed(() => {\n return this.parsedTime().minute * 6;\n });\n\n readonly currentAngle = computed(() => {\n return this.mode() === 'hour' ? this.hourAngle() : this.minuteAngle();\n });\n\n readonly handLength = computed(() => {\n if (this.mode() === 'hour' && this.format() === '24') {\n const hour = this.parsedTime().hour;\n\n if (hour >= 13 && hour <= 23) {\n return 58;\n }\n }\n\n return 86;\n });\n\n readonly hourRadius = computed(() => {\n if (this.mode() !== 'hour') {\n return 94;\n }\n\n if (this.format() !== '24') {\n return 94;\n }\n\n const hour = this.parsedTime().hour;\n\n // 00, 13..23 → inner ring\n if (hour === 0 || hour >= 13) {\n return 58;\n }\n\n // 01..12 → outer ring\n return 94;\n });\n readonly selectedPosition = computed(() => {\n const angle = this.currentAngle();\n\n const radians = ((angle - 90) * Math.PI) / 180;\n\n const radius = this.mode() === 'hour' ? this.hourRadius() : 94;\n\n return {\n x: 120 + Math.cos(radians) * radius,\n y: 120 + Math.sin(radians) * radius,\n };\n });\n readonly handEnd = computed(() => {\n const angle = this.currentAngle();\n\n const radians = ((angle - 90) * Math.PI) / 180;\n\n const radius = this.mode() === 'hour' ? this.hourRadius() : 94;\n\n return {\n x: 120 + Math.cos(radians) * radius,\n y: 120 + Math.sin(radians) * radius,\n };\n });\n\n protected _onChange = (value: string) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n constructor() {}\n\n ngOnInit(): void {}\n\n writeValue(value: string): void {\n if (!value) {\n this.value.set('12:00');\n return;\n }\n\n const normalized = normalizeTime(value);\n\n if (normalized === null) {\n // invalid value\n return;\n }\n\n this.value.set(normalized);\n }\n validate(control: AbstractControl): ValidationErrors | null {\n return null;\n }\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n registerOnValidatorChange?(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.isDisabled = disabled;\n }\n\n startPointer(event: PointerEvent): void {\n if (this.disabled()) {\n return;\n }\n\n event.preventDefault();\n\n this.dragging = true;\n\n const target = event.currentTarget as HTMLElement;\n\n target.setPointerCapture?.(event.pointerId);\n\n this.updateFromPointer(event);\n }\n\n movePointer(event: PointerEvent): void {\n if (!this.dragging || this.disabled()) {\n return;\n }\n\n event.preventDefault();\n\n this.updateFromPointer(event);\n }\n\n endPointer(event: PointerEvent): void {\n if (!this.dragging) {\n return;\n }\n\n this.dragging = false;\n\n const target = event.currentTarget as HTMLElement;\n\n target.releasePointerCapture?.(event.pointerId);\n\n if (this.mode() === 'hour' && this.autoSwitchToMinute()) {\n this.mode.set('minute');\n }\n }\n\n selectHour(hour: number): void {\n if (this.disabled()) {\n return;\n }\n\n let normalizedHour = hour;\n\n if (this.format() === '12') {\n const currentHour = this.parsedTime().hour;\n\n const isPm = currentHour >= 12;\n\n normalizedHour = hour === 12 ? (isPm ? 12 : 0) : isPm ? hour + 12 : hour;\n }\n\n this.setTime(normalizedHour, this.parsedTime().minute);\n\n if (this.autoSwitchToMinute()) {\n this.mode.set('minute');\n }\n }\n\n selectMinute(minute: number): void {\n if (this.disabled()) {\n return;\n }\n\n this.setTime(this.parsedTime().hour, minute);\n }\n\n setMode(mode: NgxTimePickerMode): void {\n if (!this.disabled()) {\n this.mode.set(mode);\n }\n }\n\n private updateFromPointer(event: PointerEvent): void {\n const svg = this.clock()?.nativeElement;\n\n if (!svg) {\n return;\n }\n\n const rect = svg.getBoundingClientRect();\n\n const x = ((event.clientX - rect.left) / rect.width) * 240;\n\n const y = ((event.clientY - rect.top) / rect.height) * 240;\n\n if (this.mode() === 'hour') {\n this.updateHourFromPointer(x, y);\n return;\n }\n\n this.updateMinuteFromPointer(x, y);\n }\n\n private updateHourFromPointer(x: number, y: number): void {\n const dx = x - 120;\n const dy = y - 120;\n\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n let angle = (Math.atan2(dy, dx) * 180) / Math.PI + 90;\n\n if (angle < 0) {\n angle += 360;\n }\n\n let hour = Math.round(angle / 30) % 12;\n\n if (this.format() === '12') {\n hour = hour === 0 ? 12 : hour;\n\n this.setTime(hour, this.parsedTime().minute);\n\n return;\n }\n\n /*\n * 24 hour mode\n *\n * Outer ring:\n * 1 ... 12\n *\n * Inner ring:\n * 13 ... 23, 00\n */\n const INNER_RING_THRESHOLD = 76;\n\n const isInnerRing = distance < INNER_RING_THRESHOLD;\n\n if (isInnerRing) {\n /*\n * Inner ring:\n *\n * 12 position -> 00\n * 1 position -> 13\n * 2 position -> 14\n * ...\n * 11 position -> 23\n */\n hour = hour === 0 ? 0 : hour + 12;\n } else {\n /*\n * Outer ring:\n *\n * 12 position -> 12\n * 1 ... 11 -> 1 ... 11\n */\n hour = hour === 0 ? 12 : hour;\n }\n\n this.setTime(hour, this.parsedTime().minute);\n }\n private updateMinuteFromPointer(x: number, y: number): void {\n const dx = x - 120;\n const dy = y - 120;\n\n let angle = (Math.atan2(dy, dx) * 180) / Math.PI + 90;\n\n if (angle < 0) {\n angle += 360;\n }\n\n let minute = Math.round(angle / 6);\n\n minute %= 60;\n\n const step = Math.max(1, this.minuteStep());\n\n minute = Math.round(minute / step) * step;\n\n if (minute >= 60) {\n minute = 0;\n }\n\n this.setTime(this.parsedTime().hour, minute);\n }\n\n private setTime(hour: number, minute: number): void {\n const h = String(hour).padStart(2, '0');\n const m = String(minute).padStart(2, '0');\n\n this.value.set(`${h}:${m}`);\n }\n\n formatHour(hour: number): string {\n if (this.format() === '24') {\n return String(hour).padStart(2, '0');\n }\n\n return String(hour);\n }\n\n formatMinute(minute: number): string {\n return String(minute).padStart(2, '0');\n }\n\n numberPosition(index: number, total: number, radius = 94): { x: number; y: number } {\n const angle = (index / total) * 360 - 90;\n\n const radians = (angle * Math.PI) / 180;\n\n return {\n x: 120 + Math.cos(radians) * radius,\n y: 120 + Math.sin(radians) * radius,\n };\n }\n\n hourPosition(hour: number, inner = false): { x: number; y: number } {\n const normalized = hour % 12;\n\n const angle = normalized * 30 - 90;\n\n const radians = (angle * Math.PI) / 180;\n\n const radius = inner ? 58 : 94;\n\n return {\n x: 120 + Math.cos(radians) * radius,\n y: 120 + Math.sin(radians) * radius,\n };\n }\n\n minutePosition(minute: number): {\n x: number;\n y: number;\n } {\n const angle = minute * 6 - 90;\n\n const radians = (angle * Math.PI) / 180;\n\n return {\n x: 120 + Math.cos(radians) * 94,\n y: 120 + Math.sin(radians) * 94,\n };\n }\n\n togglePmAm(val: 'AM' | 'PM'): void {\n const [hour, minute] = this.value().split(':').map(Number);\n\n let newHour = hour;\n\n if (val === 'AM') {\n // 12:xx PM → 00:xx\n if (hour >= 12) {\n newHour = hour - 12;\n }\n } else {\n // 00:xx AM → 12:xx PM\n if (hour < 12) {\n newHour = hour + 12;\n }\n }\n\n const value = `${String(newHour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`;\n\n this.value.set(value);\n }\n ok() {\n this.change.emit(this.value());\n this._onChange(this.value());\n }\n\n close() {\n this.cancel.emit();\n }\n}\n","<div class=\"ngx-time-picker\" [class.ngx-time-picker--disabled]=\"disabled()\">\n <!-- Header -->\n <div class=\"ngx-time-picker__header\">\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'hour'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('hour')\">\n {{ formatHour(displayHour()) }}\n </button>\n\n <span class=\"ngx-time-picker__separator\">:</span>\n\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'minute'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('minute')\">\n {{ formatMinute(displayMinute()) }}\n </button>\n\n @if (format() == '12') {\n <div class=\"ngx-time-picker_format\">\n <button [class.active]=\"!isPm()\" (click)=\"togglePmAm('AM')\">\n {{ config.amText }}\n </button>\n <button [class.active]=\"isPm()\" (click)=\"togglePmAm('PM')\">\n {{ config.pmText }}\n </button>\n </div>\n }\n </div>\n\n <!-- Clock -->\n <div class=\"ngx-time-picker__clock-wrapper\">\n <svg\n #clock\n class=\"ngx-time-picker__clock\"\n viewBox=\"0 0 240 240\"\n xmlns=\"http://www.w3.org/2000/svg\"\n (pointerdown)=\"startPointer($event)\"\n (pointermove)=\"movePointer($event)\"\n (pointerup)=\"endPointer($event)\"\n (pointercancel)=\"endPointer($event)\">\n <!-- Background -->\n <circle class=\"clock-background\" cx=\"120\" cy=\"120\" r=\"112\" />\n\n <!-- Selected hand line -->\n <line class=\"clock-hand\" x1=\"120\" y1=\"120\" [attr.x2]=\"handEnd().x\" [attr.y2]=\"handEnd().y\" />\n\n <!-- Selected circle -->\n <circle\n class=\"clock-selected\"\n [attr.cx]=\"selectedPosition().x\"\n [attr.cy]=\"selectedPosition().y\"\n r=\"18\" />\n\n <!-- Center -->\n <circle class=\"clock-center\" cx=\"120\" cy=\"120\" r=\"5\" />\n\n <!-- HOURS -->\n @if (mode() === 'hour') {\n @for (hour of hourNumbers(); track hour) {\n @if (format() === '24' && (hour >= 13 || hour == 0)) {\n <g class=\"clock-number clock-number--inner\" (click)=\"selectHour(hour)\">\n <circle\n [attr.cx]=\"hourPosition(hour - 12, true).x\"\n [attr.cy]=\"hourPosition(hour - 12, true).y\"\n r=\"16\" />\n\n <text\n [attr.x]=\"hourPosition(hour - 12, true).x\"\n [attr.y]=\"hourPosition(hour - 12, true).y\">\n {{ hour == 0 ? '00' : hour }}\n </text>\n </g>\n } @else {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayHour() == hour\"\n (click)=\"selectHour(hour)\">\n <circle [attr.cx]=\"hourPosition(hour).x\" [attr.cy]=\"hourPosition(hour).y\" r=\"18\" />\n\n <text [attr.x]=\"hourPosition(hour).x\" [attr.y]=\"hourPosition(hour).y\">\n {{ hour }}\n </text>\n </g>\n }\n }\n }\n\n <!-- MINUTES -->\n @if (mode() === 'minute') {\n @for (minute of minuteNumbers(); track minute) {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayMinute() == minute\"\n (click)=\"selectMinute(minute)\">\n <circle\n [attr.cx]=\"minutePosition(minute).x\"\n [attr.cy]=\"minutePosition(minute).y\"\n r=\"18\" />\n\n <text [attr.x]=\"minutePosition(minute).x\" [attr.y]=\"minutePosition(minute).y\">\n {{ formatMinute(minute) }}\n </text>\n </g>\n }\n }\n </svg>\n </div>\n <div class=\"ngx-time-picker--footer\">\n <button (click)=\"close()\">\n {{ config.cancelButtonText }}\n </button>\n\n <button (click)=\"ok()\">\n {{ config.confirmButtonText }}\n </button>\n </div>\n</div>\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n input,\n model,\n output,\n Output,\n Renderer2,\n signal,\n ViewContainerRef,\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 { OverlayRef, OverlayService } from 'ngx-kit/shared';\nimport { NgxInputTimePickerComponent } from '../components/time-picker/time-picker';\nimport { NGX_TIME_PICKER_CONFIG } from '../types/config';\n\n@Directive({\n selector: '[ngxInputTimePicker]',\n exportAs: 'ngxInputTimePicker',\n host: {\n class: 'ngx-datepicker-input',\n '[attr.readOnly]': 'true',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxInputTimePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgxInputTimePicker),\n multi: true,\n },\n ],\n})\nexport class NgxInputTimePicker implements ControlValueAccessor, Validator {\n protected readonly config = inject(NGX_TIME_PICKER_CONFIG);\n\n openOnCLick = input<boolean>(true);\n\n readonly change = output<string | null>();\n protected readonly value = signal<string>('');\n\n readonly format = input<'12' | '24'>(this.config.format);\n\n private pickerRef?: OverlayRef<NgxInputTimePickerComponent>;\n\n protected _onChange = (value: string | null | undefined) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n\n private isDisabled = false;\n\n private readonly overlayService = inject(OverlayService);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly renderer = inject(Renderer2);\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n @HostListener('click', ['$event'])\n onClick(ev: Event) {\n if (this.openOnCLick() && !this.isDisabled) {\n ev.stopPropagation();\n ev.preventDefault();\n this.toggle();\n }\n }\n\n @HostListener('input', ['$event'])\n onInput(event: Event) {\n const input = event.target as HTMLInputElement;\n this.value.set(input.value ?? '');\n this._formatValue();\n this._onChange(this.value());\n }\n\n @HostListener('blur')\n onBlur() {\n this._onTouched();\n }\n\n writeValue(value: string): void {\n this.value.set(value);\n this._formatValue();\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n registerOnValidatorChange?(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.isDisabled = disabled;\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\n public toggle() {\n if (this.pickerRef || this.isDisabled) {\n this.destroy();\n return;\n }\n\n this.pickerRef = this.overlayService.open({\n anchor: this.el.nativeElement,\n component: NgxInputTimePickerComponent,\n viewContainerRef: this.viewContainerRef,\n alignment: 'center',\n placement: 'bottom',\n margin: 2,\n configure: (instance, ref) => {\n instance.writeValue(this.value());\n\n instance.change.subscribe((c: string | null) => {\n this.value.set(c ?? '');\n this.emitChange();\n this.destroy();\n });\n\n instance.cancel.subscribe(() => ref.close());\n },\n onClosed: () => {\n this.pickerRef = undefined;\n },\n });\n }\n\n private destroy() {\n this.pickerRef?.close();\n this.pickerRef = undefined;\n }\n private async emitChange() {\n this._onChange(this.value());\n this._formatValue();\n this.change.emit(this.value());\n this._onTouched();\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n return null;\n }\n\n protected _formatValue() {\n this.renderer.setProperty(this.el.nativeElement, 'value', this.value());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAEa,mBAAmB,CAAA;IAC9B,gBAAgB,GAAW,QAAQ;IACnC,iBAAiB,GAAW,IAAI;IAChC,MAAM,GAAW,IAAI;IACrB,MAAM,GAAW,IAAI;IACrB,MAAM,GAAgB,IAAI;IAC1B,UAAU,GAAW,CAAC;IACtB,kBAAkB,GAAY,IAAI;AACnC;AAEM,MAAM,0BAA0B,GAAG,IAAI,mBAAmB,EAAE;AAC5D,MAAM,sBAAsB,GAAG,IAAI,cAAc,CACtD,wBAAwB,EACxB;AACE,IAAA,OAAO,EAAE,MAAM,0BAA0B;AAC1C,CAAA,CACF;;AClBK,SAAU,aAAa,CAAC,KAAa,EAAA;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC;IAEhD,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE/B,IAAA,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,EAAE;AACtD,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACzF;;MCgCa,2BAA2B,CAAA;AACnB,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAEjD,MAAM,GAAG,MAAM,EAAiB;IAChC,MAAM,GAAG,MAAM,EAAQ;AAEb,IAAA,MAAM,GAAG,MAAM,CAAC,sBAAsB,CAAC;IAC1D,UAAU,GAAG,KAAK;AAElB;;;;;AAKG;IACM,KAAK,GAAG,KAAK,CAAS,OAAO;8EAAC;AAEvC;;AAEG;AACM,IAAA,MAAM,GAAG,KAAK,CAAc,IAAI,CAAC,MAAM,CAAC,MAAM;+EAAC;AAExD;;AAEG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;mFAAC;AAEnD;;AAEG;IACM,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;AAEhC;;AAEG;AACM,IAAA,kBAAkB,GAAG,KAAK,CAAU,IAAI,CAAC,MAAM,CAAC,kBAAkB;2FAAC;IAEnE,KAAK,GAAG,SAAS,CAA4B,OAAO;8EAAC;IAErD,IAAI,GAAG,MAAM,CAAoB,MAAM;6EAAC;IAEzC,QAAQ,GAAG,KAAK;AAEf,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAE1B,QAAA,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QAEnD,OAAO;AACL,YAAA,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;AACvC,YAAA,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC;SAC7C;IACH,CAAC;mFAAC;AAEO,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QACnC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;AAElC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;AAC1B,YAAA,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;QACzB;AAEA,QAAA,OAAO,IAAI;IACb,CAAC;oFAAC;AACO,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/C,OAAO,IAAI,IAAI,EAAE;IACnB,CAAC;6EAAC;AACO,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM;IACjC,CAAC;sFAAC;AAEO,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;AAC1B,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAChD;QAEA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;oFAAC;AAEO,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAE3B,MAAM,MAAM,GAAa,EAAE;AAE3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;AACjC,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAChB;AAEA,QAAA,OAAO,MAAM;IACf,CAAC;sFAAC;AAEO,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QACjC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;AAElC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;AAC1B;;;;;;;AAOG;AACH,YAAA,OAAO,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE;QACzB;AAEA,QAAA,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE;QAEnB,OAAO,CAAC,GAAG,EAAE;IACf,CAAC;kFAAC;AAEO,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QACnC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC;IACrC,CAAC;oFAAC;AAEO,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QACpC,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;IACvE,CAAC;qFAAC;AAEO,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI;YAEnC,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE;AAC5B,gBAAA,OAAO,EAAE;YACX;QACF;AAEA,QAAA,OAAO,EAAE;IACX,CAAC;mFAAC;AAEO,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;AAC1B,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;AAC1B,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI;;QAGnC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE;AAC5B,YAAA,OAAO,EAAE;QACX;;AAGA,QAAA,OAAO,EAAE;IACX,CAAC;mFAAC;AACO,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AAEjC,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,GAAG;AAE9C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QAE9D,OAAO;YACL,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM;YACnC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM;SACpC;IACH,CAAC;yFAAC;AACO,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AAEjC,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,GAAG;AAE9C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QAE9D,OAAO;YACL,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM;YACnC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM;SACpC;IACH,CAAC;gFAAC;AAEQ,IAAA,SAAS,GAAG,CAAC,KAAa,KAAI,EAAE,CAAC;AACjC,IAAA,UAAU,GAAG,MAAK,EAAE,CAAC;AACrB,IAAA,kBAAkB,GAAG,MAAK,EAAE,CAAC;AACvC,IAAA,WAAA,GAAA,EAAe;AAEf,IAAA,QAAQ,KAAU;AAElB,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;YACvB;QACF;AAEA,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC;AAEvC,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;;YAEvB;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;IAC5B;AACA,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,OAAO,IAAI;IACb;AACA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AACA,IAAA,yBAAyB,CAAE,EAAc,EAAA;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAC9B;AACA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;IAC5B;AAEA,IAAA,YAAY,CAAC,KAAmB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AAEpB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B;QAEjD,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC;AAE3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,WAAW,CAAC,KAAmB,EAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACrC;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,UAAU,CAAC,KAAmB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AAErB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B;QAEjD,MAAM,CAAC,qBAAqB,GAAG,KAAK,CAAC,SAAS,CAAC;AAE/C,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AACvD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB;IACF;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;QAEA,IAAI,cAAc,GAAG,IAAI;AAEzB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI;AAE1C,YAAA,MAAM,IAAI,GAAG,WAAW,IAAI,EAAE;AAE9B,YAAA,cAAc,GAAG,IAAI,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI;QAC1E;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;AAEtD,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB;IACF;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;IAC9C;AAEA,IAAA,OAAO,CAAC,IAAuB,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACrB;IACF;AAEQ,IAAA,iBAAiB,CAAC,KAAmB,EAAA;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QAEvC,IAAI,CAAC,GAAG,EAAE;YACR;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,EAAE;AAExC,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG;AAE1D,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;AAE1D,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC;YAChC;QACF;AAEA,QAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC;IAEQ,qBAAqB,CAAC,CAAS,EAAE,CAAS,EAAA;AAChD,QAAA,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AAClB,QAAA,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AAElB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAE7C,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE;AAErD,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,KAAK,IAAI,GAAG;QACd;AAEA,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE;AAEtC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;AAC1B,YAAA,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI;AAE7B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;YAE5C;QACF;AAEA;;;;;;;;AAQG;QACH,MAAM,oBAAoB,GAAG,EAAE;AAE/B,QAAA,MAAM,WAAW,GAAG,QAAQ,GAAG,oBAAoB;QAEnD,IAAI,WAAW,EAAE;AACf;;;;;;;;AAQG;AACH,YAAA,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE;QACnC;aAAO;AACL;;;;;AAKG;AACH,YAAA,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI;QAC/B;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;IAC9C;IACQ,uBAAuB,CAAC,CAAS,EAAE,CAAS,EAAA;AAClD,QAAA,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AAClB,QAAA,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;QAElB,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE;AAErD,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,KAAK,IAAI,GAAG;QACd;QAEA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAElC,MAAM,IAAI,EAAE;AAEZ,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QAE3C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;AAEzC,QAAA,IAAI,MAAM,IAAI,EAAE,EAAE;YAChB,MAAM,GAAG,CAAC;QACZ;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;IAC9C;IAEQ,OAAO,CAAC,IAAY,EAAE,MAAc,EAAA;AAC1C,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACvC,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAEzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACtC;AAEA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;QACzB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACxC;AAEA,IAAA,cAAc,CAAC,KAAa,EAAE,KAAa,EAAE,MAAM,GAAG,EAAE,EAAA;QACtD,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,GAAG,GAAG,EAAE;QAExC,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG;QAEvC,OAAO;YACL,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM;YACnC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM;SACpC;IACH;AAEA,IAAA,YAAY,CAAC,IAAY,EAAE,KAAK,GAAG,KAAK,EAAA;AACtC,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE;AAE5B,QAAA,MAAM,KAAK,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE;QAElC,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG;QAEvC,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE;QAE9B,OAAO;YACL,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM;YACnC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM;SACpC;IACH;AAEA,IAAA,cAAc,CAAC,MAAc,EAAA;AAI3B,QAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE;QAE7B,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG;QAEvC,OAAO;YACL,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;YAC/B,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;SAChC;IACH;AAEA,IAAA,UAAU,CAAC,GAAgB,EAAA;QACzB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QAE1D,IAAI,OAAO,GAAG,IAAI;AAElB,QAAA,IAAI,GAAG,KAAK,IAAI,EAAE;;AAEhB,YAAA,IAAI,IAAI,IAAI,EAAE,EAAE;AACd,gBAAA,OAAO,GAAG,IAAI,GAAG,EAAE;YACrB;QACF;aAAO;;AAEL,YAAA,IAAI,IAAI,GAAG,EAAE,EAAE;AACb,gBAAA,OAAO,GAAG,IAAI,GAAG,EAAE;YACrB;QACF;QAEA,MAAM,KAAK,GAAG,CAAA,EAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE;AAEtF,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;IACA,EAAE,GAAA;QACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;uGApeW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAb3B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7CH,y7HA2HA,+9ED1FY,YAAY,EAAA,CAAA,EAAA,CAAA;;2FAcX,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAlBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAGlB,CAAC,YAAY,CAAC,EAAA,SAAA,EACZ;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,y7HAAA,EAAA,MAAA,EAAA,CAAA,w6EAAA,CAAA,EAAA;ytBAuCqD,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MErClD,kBAAkB,CAAA;AAqBT,IAAA,EAAA;AApBD,IAAA,MAAM,GAAG,MAAM,CAAC,sBAAsB,CAAC;IAE1D,WAAW,GAAG,KAAK,CAAU,IAAI;oFAAC;IAEzB,MAAM,GAAG,MAAM,EAAiB;IACtB,KAAK,GAAG,MAAM,CAAS,EAAE;8EAAC;AAEpC,IAAA,MAAM,GAAG,KAAK,CAAc,IAAI,CAAC,MAAM,CAAC,MAAM;+EAAC;AAEhD,IAAA,SAAS;AAEP,IAAA,SAAS,GAAG,CAAC,KAAgC,KAAI,EAAE,CAAC;AACpD,IAAA,UAAU,GAAG,MAAK,EAAE,CAAC;AACrB,IAAA,kBAAkB,GAAG,MAAK,EAAE,CAAC;IAE/B,UAAU,GAAG,KAAK;AAET,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7C,IAAA,WAAA,CAAoB,EAAgC,EAAA;QAAhC,IAAA,CAAA,EAAE,GAAF,EAAE;IAAiC;IAEvD,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,EAAE;IAChB;AAGA,IAAA,OAAO,CAAC,EAAS,EAAA;QACf,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC1C,EAAE,CAAC,eAAe,EAAE;YACpB,EAAE,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,MAAM,EAAE;QACf;IACF;AAGA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9B;IAGA,MAAM,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AACA,IAAA,yBAAyB,CAAE,EAAc,EAAA;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAC9B;AACA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;QAC1B,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC;QACxE;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC;QAClE;IACF;IAEO,MAAM,GAAA;QACX,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;YACrC,IAAI,CAAC,OAAO,EAAE;YACd;QACF;QAEA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;AAC7B,YAAA,SAAS,EAAE,2BAA2B;YACtC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,SAAS,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAI;gBAC3B,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAEjC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAgB,KAAI;oBAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;oBACvB,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,CAAC,CAAC;AAEF,gBAAA,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;YAC9C,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS;YAC5B,CAAC;AACF,SAAA,CAAC;IACJ;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC5B;AACQ,IAAA,MAAM,UAAU,GAAA;QACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,OAAO,IAAI;IACb;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACzE;uGAvHW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAblB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBApB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,sBAAsB;AAC7B,wBAAA,iBAAiB,EAAE,MAAM;AAC1B,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;sBA4BE,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;sBAShC,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;sBAQhC,YAAY;uBAAC,MAAM;;;AC3FtB;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-kit-time-picker.mjs","sources":["../../../projects/libs/time-picker/types/config.ts","../../../projects/libs/time-picker/utils/normalize.ts","../../../projects/libs/time-picker/components/time-picker/time-picker.ts","../../../projects/libs/time-picker/components/time-picker/time-picker.html","../../../projects/libs/time-picker/directives/time-picker.directive.ts","../../../projects/libs/time-picker/providers/provide-time-picker.ts","../../../projects/libs/time-picker/ngx-kit-time-picker.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport class NgxTimePickerConfig {\n cancelButtonText: string = 'Cancel';\n confirmButtonText: string = 'Ok';\n amText: string = 'AM';\n pmText: string = 'PM';\n format: '12' | '24' = '12';\n minuteStep: number = 1;\n autoSwitchToMinute: boolean = true;\n}\n\nexport const DEFAULT_TIME_PICKER_CONFIG = new NgxTimePickerConfig();\nexport const NGX_TIME_PICKER_CONFIG = new InjectionToken<NgxTimePickerConfig>(\n 'ngx-time-picker-config',\n {\n factory: () => DEFAULT_TIME_PICKER_CONFIG,\n },\n);\n","export function normalizeTime(value: string): string | null {\r\n const match = value.match(/^(\\d{1,2}):(\\d{2})$/);\r\n\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n const hour = Number(match[1]);\r\n const minute = Number(match[2]);\r\n\r\n if (hour < 0 || hour > 23 || minute < 0 || minute > 59) {\r\n return null;\r\n }\r\n\r\n return [hour.toString().padStart(2, '0'), minute.toString().padStart(2, '0')].join(':');\r\n}\r\n","import {\n Component,\n computed,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n input,\n model,\n OnInit,\n output,\n Output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BrowserService } from 'ngx-kit/shared';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport type { NgxTimePickerMode } from '../../types/mode';\nimport { NGX_TIME_PICKER_CONFIG } from '../../types/config';\nimport { normalizeTime } from '../../utils/normalize';\n\n@Component({\n selector: 'ngx-time-picker',\n templateUrl: './time-picker.html',\n styleUrls: ['./time-picker.scss'],\n imports: [CommonModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxInputTimePickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgxInputTimePickerComponent),\n multi: true,\n },\n ],\n})\nexport class NgxInputTimePickerComponent implements ControlValueAccessor, Validator, OnInit {\n protected readonly browserService = inject(BrowserService);\n\n readonly change = output<string | null>();\n readonly cancel = output<void>();\n\n protected readonly config = inject(NGX_TIME_PICKER_CONFIG);\n isDisabled = false;\n\n /**\n * Time value.\n *\n * Example:\n * 14:35\n */\n readonly value = model<string>('12:00');\n\n /**\n * 12h or 24h.\n */\n readonly format = input<'12' | '24'>(this.config.format);\n\n /**\n * Minute step.\n */\n readonly minuteStep = input(this.config.minuteStep);\n\n /**\n * Whether the clock is disabled.\n */\n readonly disabled = input(false);\n\n /**\n * Whether to automatically switch from hour to minute.\n */\n readonly autoSwitchToMinute = input<boolean>(this.config.autoSwitchToMinute);\n\n readonly clock = viewChild<ElementRef<SVGSVGElement>>('clock');\n\n readonly mode = signal<NgxTimePickerMode>('hour');\n\n private dragging = false;\n\n readonly parsedTime = computed(() => {\n const value = this.value();\n\n const [hour, minute] = value.split(':').map(Number);\n\n return {\n hour: Number.isFinite(hour) ? hour : 12,\n minute: Number.isFinite(minute) ? minute : 0,\n };\n });\n\n readonly displayHour = computed(() => {\n const { hour } = this.parsedTime();\n\n if (this.format() === '12') {\n const h = hour % 12;\n return h === 0 ? 12 : h;\n }\n\n return hour;\n });\n readonly isPm = computed(() => {\n const hour = Number(this.value().split(':')[0]);\n\n return hour >= 12;\n });\n readonly displayMinute = computed(() => {\n return this.parsedTime().minute;\n });\n\n readonly hourNumbers = computed(() => {\n if (this.format() === '24') {\n return Array.from({ length: 24 }, (_, i) => i);\n }\n\n return Array.from({ length: 12 }, (_, i) => i + 1);\n });\n\n readonly minuteNumbers = computed(() => {\n const step = Math.max(1, 5);\n\n const values: number[] = [];\n\n for (let i = 0; i < 60; i += step) {\n values.push(i);\n }\n\n return values;\n });\n\n readonly hourAngle = computed(() => {\n const { hour } = this.parsedTime();\n\n if (this.format() === '24') {\n /*\n * MUI-like 24 hour clock.\n *\n * 0 -> 0°\n * 6 -> 90°\n * 12 -> 180°\n * 18 -> 270°\n */\n return (hour % 12) * 30;\n }\n\n const h = hour % 12;\n\n return h * 30;\n });\n\n readonly minuteAngle = computed(() => {\n return this.parsedTime().minute * 6;\n });\n\n readonly currentAngle = computed(() => {\n return this.mode() === 'hour' ? this.hourAngle() : this.minuteAngle();\n });\n\n readonly handLength = computed(() => {\n if (this.mode() === 'hour' && this.format() === '24') {\n const hour = this.parsedTime().hour;\n\n if (hour >= 13 && hour <= 23) {\n return 58;\n }\n }\n\n return 86;\n });\n\n readonly hourRadius = computed(() => {\n if (this.mode() !== 'hour') {\n return 94;\n }\n\n if (this.format() !== '24') {\n return 94;\n }\n\n const hour = this.parsedTime().hour;\n\n // 00, 13..23 → inner ring\n if (hour === 0 || hour >= 13) {\n return 58;\n }\n\n // 01..12 → outer ring\n return 94;\n });\n readonly selectedPosition = computed(() => {\n const angle = this.currentAngle();\n\n const radians = ((angle - 90) * Math.PI) / 180;\n\n const radius = this.mode() === 'hour' ? this.hourRadius() : 94;\n\n return {\n x: 120 + Math.cos(radians) * radius,\n y: 120 + Math.sin(radians) * radius,\n };\n });\n readonly handEnd = computed(() => {\n const angle = this.currentAngle();\n\n const radians = ((angle - 90) * Math.PI) / 180;\n\n const radius = this.mode() === 'hour' ? this.hourRadius() : 94;\n\n return {\n x: 120 + Math.cos(radians) * radius,\n y: 120 + Math.sin(radians) * radius,\n };\n });\n\n protected _onChange = (value: string) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n constructor() {}\n\n ngOnInit(): void {}\n\n writeValue(value: string): void {\n if (!value) {\n this.value.set('12:00');\n return;\n }\n\n const normalized = normalizeTime(value);\n\n if (normalized === null) {\n // invalid value\n return;\n }\n\n this.value.set(normalized);\n }\n validate(control: AbstractControl): ValidationErrors | null {\n return null;\n }\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n registerOnValidatorChange?(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.isDisabled = disabled;\n }\n\n startPointer(event: PointerEvent): void {\n if (this.disabled()) {\n return;\n }\n\n event.preventDefault();\n\n this.dragging = true;\n\n const target = event.currentTarget as HTMLElement;\n\n target.setPointerCapture?.(event.pointerId);\n\n this.updateFromPointer(event);\n }\n\n movePointer(event: PointerEvent): void {\n if (!this.dragging || this.disabled()) {\n return;\n }\n\n event.preventDefault();\n\n this.updateFromPointer(event);\n }\n\n endPointer(event: PointerEvent): void {\n if (!this.dragging) {\n return;\n }\n\n this.dragging = false;\n\n const target = event.currentTarget as HTMLElement;\n\n target.releasePointerCapture?.(event.pointerId);\n\n if (this.mode() === 'hour' && this.autoSwitchToMinute()) {\n this.mode.set('minute');\n }\n }\n\n selectHour(hour: number): void {\n if (this.disabled()) {\n return;\n }\n\n let normalizedHour = hour;\n\n if (this.format() === '12') {\n const currentHour = this.parsedTime().hour;\n\n const isPm = currentHour >= 12;\n\n normalizedHour = hour === 12 ? (isPm ? 12 : 0) : isPm ? hour + 12 : hour;\n }\n\n this.setTime(normalizedHour, this.parsedTime().minute);\n\n if (this.autoSwitchToMinute()) {\n this.mode.set('minute');\n }\n }\n\n selectMinute(minute: number): void {\n if (this.disabled()) {\n return;\n }\n\n this.setTime(this.parsedTime().hour, minute);\n }\n\n setMode(mode: NgxTimePickerMode): void {\n if (!this.disabled()) {\n this.mode.set(mode);\n }\n }\n\n private updateFromPointer(event: PointerEvent): void {\n const svg = this.clock()?.nativeElement;\n\n if (!svg) {\n return;\n }\n\n const rect = svg.getBoundingClientRect();\n\n const x = ((event.clientX - rect.left) / rect.width) * 240;\n\n const y = ((event.clientY - rect.top) / rect.height) * 240;\n\n if (this.mode() === 'hour') {\n this.updateHourFromPointer(x, y);\n return;\n }\n\n this.updateMinuteFromPointer(x, y);\n }\n\n private updateHourFromPointer(x: number, y: number): void {\n const dx = x - 120;\n const dy = y - 120;\n\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n let angle = (Math.atan2(dy, dx) * 180) / Math.PI + 90;\n\n if (angle < 0) {\n angle += 360;\n }\n\n let hour = Math.round(angle / 30) % 12;\n\n if (this.format() === '12') {\n hour = hour === 0 ? 12 : hour;\n\n this.setTime(hour, this.parsedTime().minute);\n\n return;\n }\n\n /*\n * 24 hour mode\n *\n * Outer ring:\n * 1 ... 12\n *\n * Inner ring:\n * 13 ... 23, 00\n */\n const INNER_RING_THRESHOLD = 76;\n\n const isInnerRing = distance < INNER_RING_THRESHOLD;\n\n if (isInnerRing) {\n /*\n * Inner ring:\n *\n * 12 position -> 00\n * 1 position -> 13\n * 2 position -> 14\n * ...\n * 11 position -> 23\n */\n hour = hour === 0 ? 0 : hour + 12;\n } else {\n /*\n * Outer ring:\n *\n * 12 position -> 12\n * 1 ... 11 -> 1 ... 11\n */\n hour = hour === 0 ? 12 : hour;\n }\n\n this.setTime(hour, this.parsedTime().minute);\n }\n private updateMinuteFromPointer(x: number, y: number): void {\n const dx = x - 120;\n const dy = y - 120;\n\n let angle = (Math.atan2(dy, dx) * 180) / Math.PI + 90;\n\n if (angle < 0) {\n angle += 360;\n }\n\n let minute = Math.round(angle / 6);\n\n minute %= 60;\n\n const step = Math.max(1, this.minuteStep());\n\n minute = Math.round(minute / step) * step;\n\n if (minute >= 60) {\n minute = 0;\n }\n\n this.setTime(this.parsedTime().hour, minute);\n }\n\n private setTime(hour: number, minute: number): void {\n const h = String(hour).padStart(2, '0');\n const m = String(minute).padStart(2, '0');\n\n this.value.set(`${h}:${m}`);\n }\n\n formatHour(hour: number): string {\n if (this.format() === '24') {\n return String(hour).padStart(2, '0');\n }\n\n return String(hour);\n }\n\n formatMinute(minute: number): string {\n return String(minute).padStart(2, '0');\n }\n\n numberPosition(index: number, total: number, radius = 94): { x: number; y: number } {\n const angle = (index / total) * 360 - 90;\n\n const radians = (angle * Math.PI) / 180;\n\n return {\n x: 120 + Math.cos(radians) * radius,\n y: 120 + Math.sin(radians) * radius,\n };\n }\n\n hourPosition(hour: number, inner = false): { x: number; y: number } {\n const normalized = hour % 12;\n\n const angle = normalized * 30 - 90;\n\n const radians = (angle * Math.PI) / 180;\n\n const radius = inner ? 58 : 94;\n\n return {\n x: 120 + Math.cos(radians) * radius,\n y: 120 + Math.sin(radians) * radius,\n };\n }\n\n minutePosition(minute: number): {\n x: number;\n y: number;\n } {\n const angle = minute * 6 - 90;\n\n const radians = (angle * Math.PI) / 180;\n\n return {\n x: 120 + Math.cos(radians) * 94,\n y: 120 + Math.sin(radians) * 94,\n };\n }\n\n togglePmAm(val: 'AM' | 'PM'): void {\n const [hour, minute] = this.value().split(':').map(Number);\n\n let newHour = hour;\n\n if (val === 'AM') {\n // 12:xx PM → 00:xx\n if (hour >= 12) {\n newHour = hour - 12;\n }\n } else {\n // 00:xx AM → 12:xx PM\n if (hour < 12) {\n newHour = hour + 12;\n }\n }\n\n const value = `${String(newHour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`;\n\n this.value.set(value);\n }\n ok() {\n this.change.emit(this.value());\n this._onChange(this.value());\n }\n\n close() {\n this.cancel.emit();\n }\n}\n","<div class=\"ngx-time-picker\" [class.ngx-time-picker--disabled]=\"disabled()\">\n <!-- Header -->\n <div class=\"ngx-time-picker__header\">\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'hour'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('hour')\">\n {{ formatHour(displayHour()) }}\n </button>\n\n <span class=\"ngx-time-picker__separator\">:</span>\n\n <button\n type=\"button\"\n class=\"ngx-time-picker__value\"\n [class.active]=\"mode() === 'minute'\"\n [disabled]=\"disabled()\"\n (click)=\"setMode('minute')\">\n {{ formatMinute(displayMinute()) }}\n </button>\n\n @if (format() == '12') {\n <div class=\"ngx-time-picker_format\">\n <button [class.active]=\"!isPm()\" (click)=\"togglePmAm('AM')\">\n {{ config.amText }}\n </button>\n <button [class.active]=\"isPm()\" (click)=\"togglePmAm('PM')\">\n {{ config.pmText }}\n </button>\n </div>\n }\n </div>\n\n <!-- Clock -->\n <div class=\"ngx-time-picker__clock-wrapper\">\n <svg\n #clock\n class=\"ngx-time-picker__clock\"\n viewBox=\"0 0 240 240\"\n xmlns=\"http://www.w3.org/2000/svg\"\n (pointerdown)=\"startPointer($event)\"\n (pointermove)=\"movePointer($event)\"\n (pointerup)=\"endPointer($event)\"\n (pointercancel)=\"endPointer($event)\">\n <!-- Background -->\n <circle class=\"clock-background\" cx=\"120\" cy=\"120\" r=\"112\" />\n\n <!-- Selected hand line -->\n <line class=\"clock-hand\" x1=\"120\" y1=\"120\" [attr.x2]=\"handEnd().x\" [attr.y2]=\"handEnd().y\" />\n\n <!-- Selected circle -->\n <circle\n class=\"clock-selected\"\n [attr.cx]=\"selectedPosition().x\"\n [attr.cy]=\"selectedPosition().y\"\n r=\"18\" />\n\n <!-- Center -->\n <circle class=\"clock-center\" cx=\"120\" cy=\"120\" r=\"5\" />\n\n <!-- HOURS -->\n @if (mode() === 'hour') {\n @for (hour of hourNumbers(); track hour) {\n @if (format() === '24' && (hour >= 13 || hour == 0)) {\n <g class=\"clock-number clock-number--inner\" (click)=\"selectHour(hour)\">\n <circle\n [attr.cx]=\"hourPosition(hour - 12, true).x\"\n [attr.cy]=\"hourPosition(hour - 12, true).y\"\n r=\"16\" />\n\n <text\n [attr.x]=\"hourPosition(hour - 12, true).x\"\n [attr.y]=\"hourPosition(hour - 12, true).y\">\n {{ hour == 0 ? '00' : hour }}\n </text>\n </g>\n } @else {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayHour() == hour\"\n (click)=\"selectHour(hour)\">\n <circle [attr.cx]=\"hourPosition(hour).x\" [attr.cy]=\"hourPosition(hour).y\" r=\"18\" />\n\n <text [attr.x]=\"hourPosition(hour).x\" [attr.y]=\"hourPosition(hour).y\">\n {{ hour }}\n </text>\n </g>\n }\n }\n }\n\n <!-- MINUTES -->\n @if (mode() === 'minute') {\n @for (minute of minuteNumbers(); track minute) {\n <g\n class=\"clock-number\"\n [class.selected]=\"displayMinute() == minute\"\n (click)=\"selectMinute(minute)\">\n <circle\n [attr.cx]=\"minutePosition(minute).x\"\n [attr.cy]=\"minutePosition(minute).y\"\n r=\"18\" />\n\n <text [attr.x]=\"minutePosition(minute).x\" [attr.y]=\"minutePosition(minute).y\">\n {{ formatMinute(minute) }}\n </text>\n </g>\n }\n }\n </svg>\n </div>\n <div class=\"ngx-time-picker--footer\">\n <button (click)=\"close()\">\n {{ config.cancelButtonText }}\n </button>\n\n <button (click)=\"ok()\">\n {{ config.confirmButtonText }}\n </button>\n </div>\n</div>\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n input,\n model,\n output,\n Output,\n Renderer2,\n signal,\n ViewContainerRef,\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 { OverlayRef, OverlayService } from 'ngx-kit/shared';\nimport { NgxInputTimePickerComponent } from '../components/time-picker/time-picker';\nimport { NGX_TIME_PICKER_CONFIG } from '../types/config';\nimport { normalizeTime } from '../utils/normalize';\n\n@Directive({\n selector: '[ngxInputTimePicker]',\n exportAs: 'ngxInputTimePicker',\n host: {\n class: 'ngx-datepicker-input',\n '[attr.readOnly]': 'true',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxInputTimePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgxInputTimePicker),\n multi: true,\n },\n ],\n})\nexport class NgxInputTimePicker implements ControlValueAccessor, Validator {\n protected readonly config = inject(NGX_TIME_PICKER_CONFIG);\n\n openOnCLick = input<boolean>(true);\n\n readonly change = output<string | null>();\n protected readonly value = signal<string>('');\n\n readonly format = input<'12' | '24'>(this.config.format);\n\n private pickerRef?: OverlayRef<NgxInputTimePickerComponent>;\n\n protected _onChange = (value: string | null | undefined) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n\n private isDisabled = false;\n\n private readonly overlayService = inject(OverlayService);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly renderer = inject(Renderer2);\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n @HostListener('click', ['$event'])\n onClick(ev: Event) {\n if (this.openOnCLick() && !this.isDisabled) {\n ev.stopPropagation();\n ev.preventDefault();\n this.toggle();\n }\n }\n\n @HostListener('input', ['$event'])\n onInput(event: Event) {\n const input = event.target as HTMLInputElement;\n this.value.set(input.value ?? '');\n this._formatValue();\n this._onChange(this.value());\n }\n\n @HostListener('blur')\n onBlur() {\n this._onTouched();\n }\n\n writeValue(value: string): void {\n this.value.set(value);\n this._formatValue();\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n registerOnValidatorChange?(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.isDisabled = disabled;\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\n public toggle() {\n if (this.pickerRef || this.isDisabled) {\n this.destroy();\n return;\n }\n\n this.pickerRef = this.overlayService.open({\n anchor: this.el.nativeElement,\n component: NgxInputTimePickerComponent,\n viewContainerRef: this.viewContainerRef,\n alignment: 'center',\n placement: 'bottom',\n margin: 2,\n configure: (instance, ref) => {\n instance.writeValue(this.value());\n\n instance.change.subscribe((c: string | null) => {\n this.value.set(c ?? '');\n this.emitChange();\n this.destroy();\n });\n\n instance.cancel.subscribe(() => ref.close());\n },\n onClosed: () => {\n this.pickerRef = undefined;\n },\n });\n }\n\n private destroy() {\n this.pickerRef?.close();\n this.pickerRef = undefined;\n }\n private async emitChange() {\n this._onChange(this.value());\n this._formatValue();\n this.change.emit(this.value());\n this._onTouched();\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n const raw = this.value();\n if (!raw) return null; // empty is handled by Validators.required, not us\n return normalizeTime(raw) === null ? { invalid: true } : null;\n }\n\n protected _formatValue() {\n this.renderer.setProperty(this.el.nativeElement, 'value', this.value());\n }\n}\n","import { Provider } from '@angular/core';\nimport {\n DEFAULT_TIME_PICKER_CONFIG,\n NGX_TIME_PICKER_CONFIG,\n type NgxTimePickerConfig,\n} from '../types/config';\n\nexport function provideTimePicker(config: Partial<NgxTimePickerConfig>): Provider[] {\n const configuration = { ...DEFAULT_TIME_PICKER_CONFIG, ...config };\n return [\n {\n provide: NGX_TIME_PICKER_CONFIG,\n useValue: configuration,\n },\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/gallery/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # ngx-kit/gallery
2
2
 
3
- ویوئرِ حرفه‌ایِ تصویر: یه لیست تصویر می‌گیره، با دکمه‌های ‹ › (مثلِ کاروسل) بین‌شون می‌رید، نوارِ ابزارِ کاملاً قابل‌تنظیم (زوم، چرخش، دانلود، پرینت، تمام‌صفحه)، زوم با اسکرول موس یا پینچِ دوانگشتی، و پن با درگ وقتی زوم‌شده.
3
+ A professional image viewer: takes a list of images, navigates them with ‹ › buttons (like a carousel), has a fully configurable toolbar (zoom, rotate, download, print, fullscreen), zoom via mouse scroll or two-finger pinch, and panning via drag once zoomed in.
4
4
 
5
- ## نصب
5
+ ## Install
6
6
 
7
7
  ```bash
8
8
  npm install ngx-kit
9
9
  ```
10
10
 
11
- ## استفاده — مستقیم توی صفحه
11
+ ## Usage — directly in the page
12
12
 
13
13
  ```html
14
14
  <ngx-image-viewer [images]="images" [toolbar]="{ print: false }" />
@@ -16,12 +16,12 @@ npm install ngx-kit
16
16
 
17
17
  ```ts
18
18
  images: NgxImageViewerItem[] = [
19
- { src: '/img/1.jpg', alt: 'تصویر ۱', caption: 'کوه‌های البرز' },
20
- { src: '/img/2.jpg', alt: 'تصویر ۲' },
19
+ { src: '/img/1.jpg', alt: 'Image 1', caption: 'Alborz mountains' },
20
+ { src: '/img/2.jpg', alt: 'Image 2' },
21
21
  ];
22
22
  ```
23
23
 
24
- ## استفاده — داخلِ یه دیالوگِ تمام‌صفحه
24
+ ## Usage — inside a fullscreen dialog
25
25
 
26
26
  ```ts
27
27
  import { NgxImageViewerService } from 'ngx-kit/gallery';
@@ -33,39 +33,39 @@ openGallery() {
33
33
  }
34
34
  ```
35
35
 
36
- `NgxImageViewerComponent` به هیچ دیالوگی وابسته نیست (فقط یه خروجیِ `closed` داره) — اگه می‌خواید داخلِ دیالوگِ خودتون (مثلاً `ngx-kit/dialog`) بذاریدش، مستقیم از خودِ کامپوننت استفاده کنید؛ سرویس فقط یه میان‌بره.
36
+ `NgxImageViewerComponent` doesn't depend on any dialog (it only has a `closed` output) — if you want to put it inside your own dialog (e.g. `ngx-kit/dialog`), use the component directly; the service is just a convenience shortcut.
37
37
 
38
38
  ## API
39
39
 
40
40
  ### `<ngx-image-viewer>`
41
41
 
42
- | ورودی | نوع | پیش‌فرض | توضیح |
43
- | ---------------------------------- | ----------------------------------- | ----------------- | -------------------------------------------- |
44
- | `images` | `NgxImageViewerItem[]` **(اجباری)** | | `{ src, alt?, caption?, downloadFileName? }` |
45
- | `startIndex` | `number` | `0` | |
46
- | `toolbar` | `NgxImageViewerToolbarConfig` | همه `true` | هر دکمه جدا فعال/غیرفعال می‌شه (پایین‌تر) |
47
- | `minZoom` / `maxZoom` / `zoomStep` | `number` | `1` / `6` / `0.4` | |
42
+ | Input | Type | Default | Description |
43
+ | --- | --- | --- | --- |
44
+ | `images` | `NgxImageViewerItem[]` **(required)** | | `{ src, alt?, caption?, downloadFileName? }` |
45
+ | `startIndex` | `number` | `0` | |
46
+ | `toolbar` | `NgxImageViewerToolbarConfig` | all `true` | Each button can be toggled individually (see below) |
47
+ | `minZoom` / `maxZoom` / `zoomStep` | `number` | `1` / `6` / `0.4` | |
48
48
 
49
- | خروجی | نوع | توضیح |
50
- | ------------- | -------- | ----------------------------------------------------------------------------------------------- |
51
- | `indexChange` | `number` | تغییرِ تصویرِ فعال |
52
- | `closed` | `void` | کاربر دکمه‌ی بستن رو زد یا Esc رو فشرد (خودِ کامپوننت چیزی رو نمی‌بنده؛ تصمیم با مصرف‌کننده‌ست) |
49
+ | Output | Type | Description |
50
+ | --- | --- | --- |
51
+ | `indexChange` | `number` | The active image changed |
52
+ | `closed` | `void` | The user clicked the close button or pressed Esc (the component itself doesn't close anything; that's left to the consumer) |
53
53
 
54
54
  ### `NgxImageViewerToolbarConfig`
55
55
 
56
- `prevNext`, `counter`, `zoomIn`, `zoomOut`, `resetZoom`, `rotateLeft`, `rotateRight`, `download`, `print`, `fullscreen`, `close` — همه `boolean`، پیش‌فرضِ همه `true` به‌جز `close` (`false`).
56
+ `prevNext`, `counter`, `zoomIn`, `zoomOut`, `resetZoom`, `rotateLeft`, `rotateRight`, `download`, `print`, `fullscreen`, `close` — all `boolean`, all default to `true` except `close` (`false`).
57
57
 
58
- ## تعامل‌ها
58
+ ## Interactions
59
59
 
60
- | ژست | نتیجه |
61
- | -------------------------------------- | ----------------------------------------------------- |
62
- | اسکرولِ موس | زوم، نسبت به همون نقطه‌ی زیرِ cursor (نه مرکزِ تصویر) |
63
- | پینچِ دوانگشتی (تاچ) | زوم |
64
- | درگ با موس یا تک‌انگشتی (وقتی زوم‌شده) | پن |
65
- | ← / → | تصویرِ قبلی/بعدی |
66
- | + / - | زوم این/اوت |
67
- | Esc | امیتِ `closed` |
60
+ | Gesture | Result |
61
+ | --- | --- |
62
+ | Mouse scroll | Zoom, relative to the point under the cursor (not the image center) |
63
+ | Two-finger pinch (touch) | Zoom |
64
+ | Drag with mouse or one finger (when zoomed) | Pan |
65
+ | ← / → | Previous/next image |
66
+ | + / - | Zoom in/out |
67
+ | Esc | Emits `closed` |
68
68
 
69
- ## دارک‌مود و RTL
69
+ ## Dark mode and RTL
70
70
 
71
- خودکار پشتیبانی می‌شه.
71
+ Supported automatically.