{"version":3,"file":"favian-simplor.mjs","sources":["../../../projects/simplor/src/lib/abstracts/spl-control.ts","../../../projects/simplor/src/lib/animations/fade-in.ts","../../../projects/simplor/src/lib/abstracts/spl-fade-in-animator.ts","../../../projects/simplor/src/lib/animations/fade-in-slide-in.ts","../../../projects/simplor/src/lib/abstracts/spl-fade-in-slide-up-animator.ts","../../../projects/simplor/src/lib/abstracts/spl-input-like.ts","../../../projects/simplor/src/lib/components/spl-box/spl-box.component.ts","../../../projects/simplor/src/lib/components/spl-box/spl-box.component.html","../../../projects/simplor/src/lib/components/spl-effect/spl-effect-overlay/spl-effect-overlay.component.ts","../../../projects/simplor/src/lib/utils/logger.util.ts","../../../projects/simplor/src/lib/utils/convert.util.ts","../../../projects/simplor/src/lib/components/spl-effect/spl-effect.directive.ts","../../../projects/simplor/src/lib/components/spl-effect/spl-contrast-effect.directive.ts","../../../projects/simplor/src/lib/components/spl-button/spl-button-contrast-effect-base.directive.ts","../../../projects/simplor/src/lib/components/spl-button/spl-button-effect-base.directive.ts","../../../projects/simplor/src/lib/components/spl-button/spl-button.directive.ts","../../../projects/simplor/src/lib/components/spl-button/spl-flat-button.directive.ts","../../../projects/simplor/src/lib/components/spl-button/spl-stroke-button.directive.ts","../../../projects/simplor/src/lib/components/spl-calendar/spl-calendar-date-extra.directive.ts","../../../projects/simplor/src/lib/components/spl-calendar/spl-calendar-date.directive.ts","../../../projects/simplor/src/lib/components/spl-calendar/spl-calendar-provider.ts","../../../projects/simplor/src/lib/utils/error.util.ts","../../../projects/simplor/src/lib/utils/date.util.ts","../../../projects/simplor/src/lib/components/spl-icon/spl-icon-provider.ts","../../../projects/simplor/src/lib/components/spl-icon/spl-icon.component.ts","../../../projects/simplor/src/lib/components/spl-icon/spl-icon.component.html","../../../projects/simplor/src/lib/components/spl-calendar/spl-calendar.component.ts","../../../projects/simplor/src/lib/components/spl-calendar/spl-calendar.component.html","../../../projects/simplor/src/lib/components/spl-checkbox/spl-checkbox.component.ts","../../../projects/simplor/src/lib/components/spl-checkbox/spl-checkbox.component.html","../../../projects/simplor/src/lib/components/spl-control-validator/spl-control-validator.directive.ts","../../../projects/simplor/src/lib/components/spl-date-input/spl-date-input-provider.ts","../../../projects/simplor/src/lib/components/spl-modal-backdrop/spl-modal-backdrop.component.ts","../../../projects/simplor/src/lib/components/spl-modal-wrapper/spl-modal-wrapper.component.ts","../../../projects/simplor/src/lib/components/spl-modal-wrapper/spl-modal-wrapper.component.html","../../../projects/simplor/src/lib/components/spl-overlay-outlet/spl-overlay-outlet.component.ts","../../../projects/simplor/src/lib/components/spl-overlay-outlet/spl-overlay-outlet.component.html","../../../projects/simplor/src/lib/services/spl-overlay.service.ts","../../../projects/simplor/src/lib/services/spl-modal.service.ts","../../../projects/simplor/src/lib/components/spl-modal/spl-modal-actions/spl-modal-actions.component.ts","../../../projects/simplor/src/lib/components/spl-modal/spl-modal-actions/spl-modal-actions.component.html","../../../projects/simplor/src/lib/components/spl-modal/spl-modal-actions/spl-modal-action.directive.ts","../../../projects/simplor/src/lib/components/spl-date-input/spl-date-input-calendar-modal/spl-date-input-calendar-modal.component.ts","../../../projects/simplor/src/lib/components/spl-date-input/spl-date-input-calendar-modal/spl-date-input-calendar-modal.component.html","../../../projects/simplor/src/lib/components/spl-date-input/spl-date-input.component.ts","../../../projects/simplor/src/lib/components/spl-date-input/spl-date-input.component.html","../../../projects/simplor/src/lib/components/spl-drawer-wrapper/spl-drawer-wrapper.component.ts","../../../projects/simplor/src/lib/components/spl-drawer-wrapper/spl-drawer-wrapper.component.html","../../../projects/simplor/src/lib/services/spl-drawer.service.ts","../../../projects/simplor/src/lib/components/spl-drawer-backdrop/spl-drawer-backdrop.component.ts","../../../projects/simplor/src/lib/components/spl-form-field/spl-form-field-item/spl-form-field-item.component.ts","../../../projects/simplor/src/lib/components/spl-form-field/spl-error/spl-error.component.ts","../../../projects/simplor/src/lib/components/spl-form-field/spl-error/spl-error.component.html","../../../projects/simplor/src/lib/components/spl-form-field/spl-form-field.component.ts","../../../projects/simplor/src/lib/components/spl-form-field/spl-form-field.component.html","../../../projects/simplor/src/lib/components/spl-form-field/spl-hint/spl-hint.component.ts","../../../projects/simplor/src/lib/components/spl-form-field/spl-hint/spl-hint.component.html","../../../projects/simplor/src/lib/components/spl-horizontal-slider/spl-horizontal-slider.component.ts","../../../projects/simplor/src/lib/components/spl-horizontal-slider/spl-horizontal-slider.component.html","../../../projects/simplor/src/lib/components/spl-input/spl-input.directive.ts","../../../projects/simplor/src/lib/components/spl-message/spl-message.component.ts","../../../projects/simplor/src/lib/components/spl-message/spl-message.component.html","../../../projects/simplor/src/lib/components/spl-modal/spl-modal-content/spl-modal-content.component.ts","../../../projects/simplor/src/lib/components/spl-modal/spl-modal-content/spl-modal-content.component.html","../../../projects/simplor/src/lib/components/spl-modal/spl-modal-header/spl-modal-header.component.ts","../../../projects/simplor/src/lib/components/spl-modal/spl-modal-header/spl-modal-header.component.html","../../../projects/simplor/src/lib/components/spl-option/spl-option.component.ts","../../../projects/simplor/src/lib/components/spl-option/spl-option.component.html","../../../projects/simplor/src/lib/components/spl-options-overlay/spl-options-overlay.component.ts","../../../projects/simplor/src/lib/components/spl-options-overlay/spl-options-overlay.component.html","../../../projects/simplor/src/lib/components/spl-paginator/spl-paginator-provider.ts","../../../projects/simplor/src/lib/services/spl-position-tracker.service.ts","../../../projects/simplor/src/lib/components/spl-select/spl-select.component.ts","../../../projects/simplor/src/lib/components/spl-select/spl-select.component.html","../../../projects/simplor/src/lib/components/spl-paginator/spl-paginator.component.ts","../../../projects/simplor/src/lib/components/spl-paginator/spl-paginator.component.html","../../../projects/simplor/src/lib/components/spl-progress-bar/spl-progress-bar.component.ts","../../../projects/simplor/src/lib/components/spl-progress-bar/spl-progress-bar.component.html","../../../projects/simplor/src/lib/components/spl-radio-group/spl-radio-button/spl-radio-button.component.ts","../../../projects/simplor/src/lib/components/spl-radio-group/spl-radio-button/spl-radio-button.component.html","../../../projects/simplor/src/lib/components/spl-radio-group/spl-radio-group.component.ts","../../../projects/simplor/src/lib/components/spl-radio-group/spl-radio-group.component.html","../../../projects/simplor/src/lib/components/spl-tab-group/spl-tab/spl-tab-content.directive.ts","../../../projects/simplor/src/lib/components/spl-tab-group/spl-tab/spl-tab-label.directive.ts","../../../projects/simplor/src/lib/components/spl-tab-group/spl-tab/spl-tab.component.ts","../../../projects/simplor/src/lib/components/spl-tab-group/spl-tab-group.component.ts","../../../projects/simplor/src/lib/components/spl-tab-group/spl-tab-group.component.html","../../../projects/simplor/src/lib/components/spl-table/spl-sortable-column-control/spl-sortable-column-control.component.ts","../../../projects/simplor/src/lib/components/spl-table/spl-sortable-column-control/spl-sortable-column-control.component.html","../../../projects/simplor/src/lib/components/spl-table/spl-sortable-column-wrapper/spl-sortable-column-wrapper.component.ts","../../../projects/simplor/src/lib/components/spl-table/spl-sortable-column-wrapper/spl-sortable-column-wrapper.component.html","../../../projects/simplor/src/lib/components/spl-table/spl-sortable-column.directive.ts","../../../projects/simplor/src/lib/components/spl-table/spl-table.directive.ts","../../../projects/simplor/src/lib/components/spl-textarea/spl-textarea.directive.ts","../../../projects/simplor/src/lib/components/spl-time-input/spl-time-input-provider.ts","../../../projects/simplor/src/lib/components/spl-toggle-button-group/spl-toggle-button/spl-toggle-button.component.ts","../../../projects/simplor/src/lib/components/spl-toggle-button-group/spl-toggle-button/spl-toggle-button.component.html","../../../projects/simplor/src/lib/components/spl-toggle-button-group/spl-toggle-button-group.component.ts","../../../projects/simplor/src/lib/components/spl-toggle-button-group/spl-toggle-button-group.component.html","../../../projects/simplor/src/lib/components/spl-time-input/spl-time-input.component.ts","../../../projects/simplor/src/lib/components/spl-time-input/spl-time-input.component.html","../../../projects/simplor/src/lib/services/spl-message.service.ts","../../../projects/simplor/src/lib/utils/validate.util.ts","../../../projects/simplor/src/favian-simplor.ts"],"sourcesContent":["import { Directive, inject } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { Nullable } from '../utils/type.util';\r\n\r\n/**\r\n * This is an abstract class that implements ControlValueAccessor.\r\n * By extending this to Component or Directive, you can bind [ngModel] or [formControl] to the corresponding class.\r\n */\r\n@Directive()\r\nexport abstract class SplControl implements ControlValueAccessor {\r\n  /** This is an NgControl bound to a Component or Directive. */\r\n  public ngControl: Nullable<NgControl>;\r\n\r\n  /** This is the onChange function registered from NgControl. */\r\n  protected _onChange: any;\r\n\r\n  /** This is the onTouched function registered from NgControl. */\r\n  protected _onTouched: any;\r\n\r\n  protected constructor() {\r\n    this.ngControl = inject(NgControl, { optional: true });\r\n\r\n    if (this.ngControl) {\r\n      this.ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * This is a method for writing a value into a Component or Directive.\r\n   * The entered value must be reflected in the Component or Directive through the implementation of this method.\r\n   * @param obj - This is the value you want to write in the Component or Directive.\r\n   */\r\n  abstract writeValue(obj: any): void;\r\n\r\n  /** This is a method to register the onChange function in ControlValueAccessor. */\r\n  registerOnChange(fn: any): void {\r\n    this._onChange = fn;\r\n  }\r\n\r\n  /** This is a method to register the onTouched function in ControlValueAccessor. */\r\n  registerOnTouched(fn: any): void {\r\n    this._onTouched = fn;\r\n  }\r\n\r\n  /**\r\n   * This method will be called when the disabled state of the NgControl changes.\r\n   * Implement this method to set the behavior of a Component or Directive according to a disabled state.\r\n   * @param isDisabled - This is the changed disabled state value.\r\n   */\r\n  abstract setDisabledState(isDisabled: boolean): void;\r\n\r\n  /**\r\n   * This is a method that calls the registered onChange function.\r\n   * This emits the new value to the outside world and changes the Control to the dirty state.\r\n   * @param value - This is the new value to be changed.\r\n   */\r\n  valueChange(value: any): void {\r\n    if (this._onChange) {\r\n      this._onChange(value);\r\n    }\r\n  }\r\n\r\n  /** Change the Control to the touched state by calling the registered onTouched function. */\r\n  markAsTouched(): void {\r\n    if (this._onTouched) {\r\n      this._onTouched();\r\n    }\r\n  }\r\n}\r\n","import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\r\n\r\n/** This is the trigger name of the 'fade-in' animation. */\r\nexport const FADE_IN = 'fade-in';\r\n\r\n/** The void state value of the 'fade-in' animation. */\r\nexport const FADE_IN_VOID = 'void';\r\n\r\n/** The show state value of the 'fade-in' animation. */\r\nexport const FADE_IN_SHOW = 'show';\r\n\r\n/**\r\n * This is a function that creates AnimationTriggerMetadata for 'fade-in' animation.\r\n * The 'fade-in' animation is transparent when in the void state and appears when it is in the show state.\r\n * When the animation state changes from void to show or vice versa, the animation is executed according to the given 'timing' value.\r\n * @param timing - Timing value for the animate() function.\r\n */\r\nexport function fadeIn(timing = '.15s'): AnimationTriggerMetadata {\r\n  return trigger(FADE_IN, [\r\n    state(\r\n      FADE_IN_VOID,\r\n      style({\r\n        opacity: 0,\r\n      }),\r\n    ),\r\n    state(\r\n      FADE_IN_SHOW,\r\n      style({\r\n        opacity: 1,\r\n      }),\r\n    ),\r\n    transition(`${FADE_IN_VOID} <=> ${FADE_IN_SHOW}`, animate(timing)),\r\n  ]);\r\n}\r\n","import { Component, HostBinding } from '@angular/core';\r\nimport { FADE_IN, FADE_IN_SHOW, fadeIn } from '../animations/fade-in';\r\n\r\n/**\r\n * This is an abstract class that binds basic 'fade-in' animation to a Component or Directive.\r\n * When a Component or Directive is rendered or destroyed in a view, the 'fade-in' animation is executed immediately.\r\n */\r\n@Component({\r\n  selector: 'spl-fade-in-animator',\r\n  template: '',\r\n  animations: [fadeIn()],\r\n})\r\nexport abstract class SplFadeInAnimator {\r\n  @HostBinding(`@${FADE_IN}`) fadeInState = FADE_IN_SHOW;\r\n}\r\n","import { animate, AnimationTriggerMetadata, keyframes, style, transition, trigger } from '@angular/animations';\r\n\r\n/** This is the trigger name of the 'fade-in-slide-in' animation. */\r\nexport const FADE_IN_SLIDE_IN = 'fade-in-slide-in';\r\n\r\n/** The void state value of the 'fade-in-slide-in' animation. */\r\nexport const FADE_IN_SLIDE_IN_VOID = 'void';\r\n\r\n/** The left-show state value of the 'fade-in-slide-in' animation. */\r\nexport const FADE_IN_SLIDE_IN_LEFT_SHOW = 'left-show';\r\n\r\n/** The right-show state value of the 'fade-in-slide-in' animation. */\r\nexport const FADE_IN_SLIDE_IN_RIGHT_SHOW = 'right-show';\r\n\r\n/** The top-show state value of the 'fade-in-slide-in' animation. */\r\nexport const FADE_IN_SLIDE_IN_TOP_SHOW = 'top-show';\r\n\r\n/** The bottom-show state value of the 'fade-in-slide-in' animation. */\r\nexport const FADE_IN_SLIDE_IN_BOTTOM_SHOW = 'bottom-show';\r\n\r\n/**\r\n * This is a function that creates AnimationTriggerMetadata for the 'fade-in-slide-in' animation.\r\n * When the 'fade-in-slide-in' animation is in the void state, it moves 8px in a given direction and becomes transparent, and then returns to its original position when it is in the {direction}-show state.\r\n * When the animation state changes from void to {direction}-show or vice versa, the animation is executed according to the given 'timing' value.\r\n * @param slideDistance - This is the px value of the distance to slide. The default value is 8.\r\n * @param timing - Timing value for the animate() function.\r\n */\r\nexport function fadeInSlideIn(slideDistance = 8, timing = '.15s'): AnimationTriggerMetadata {\r\n  return trigger(FADE_IN_SLIDE_IN, [\r\n    transition(\r\n      `${FADE_IN_SLIDE_IN_VOID} => ${FADE_IN_SLIDE_IN_LEFT_SHOW}`,\r\n      animate(\r\n        timing,\r\n        keyframes([\r\n          style({\r\n            opacity: 0,\r\n            translate: `-${slideDistance}px 0`,\r\n          }),\r\n          style({\r\n            opacity: 1,\r\n            translate: '0 0',\r\n          }),\r\n        ]),\r\n      ),\r\n    ),\r\n    transition(\r\n      `${FADE_IN_SLIDE_IN_LEFT_SHOW} => ${FADE_IN_SLIDE_IN_VOID}`,\r\n      animate(\r\n        timing,\r\n        keyframes([\r\n          style({\r\n            opacity: 1,\r\n            translate: '0 0',\r\n          }),\r\n          style({\r\n            opacity: 0,\r\n            translate: `-${slideDistance}px 0`,\r\n          }),\r\n        ]),\r\n      ),\r\n    ),\r\n    transition(\r\n      `${FADE_IN_SLIDE_IN_VOID} => ${FADE_IN_SLIDE_IN_RIGHT_SHOW}`,\r\n      animate(\r\n        timing,\r\n        keyframes([\r\n          style({\r\n            opacity: 0,\r\n            translate: `${slideDistance}px 0`,\r\n          }),\r\n          style({\r\n            opacity: 1,\r\n            translate: '0 0',\r\n          }),\r\n        ]),\r\n      ),\r\n    ),\r\n    transition(\r\n      `${FADE_IN_SLIDE_IN_RIGHT_SHOW} => ${FADE_IN_SLIDE_IN_VOID}`,\r\n      animate(\r\n        timing,\r\n        keyframes([\r\n          style({\r\n            opacity: 1,\r\n            translate: '0 0',\r\n          }),\r\n          style({\r\n            opacity: 0,\r\n            translate: `${slideDistance}px 0`,\r\n          }),\r\n        ]),\r\n      ),\r\n    ),\r\n    transition(\r\n      `${FADE_IN_SLIDE_IN_VOID} => ${FADE_IN_SLIDE_IN_TOP_SHOW}`,\r\n      animate(\r\n        timing,\r\n        keyframes([\r\n          style({\r\n            opacity: 0,\r\n            translate: `0 -${slideDistance}px`,\r\n          }),\r\n          style({\r\n            opacity: 1,\r\n            translate: '0 0',\r\n          }),\r\n        ]),\r\n      ),\r\n    ),\r\n    transition(\r\n      `${FADE_IN_SLIDE_IN_TOP_SHOW} => ${FADE_IN_SLIDE_IN_VOID}`,\r\n      animate(\r\n        timing,\r\n        keyframes([\r\n          style({\r\n            opacity: 1,\r\n            translate: '0 0',\r\n          }),\r\n          style({\r\n            opacity: 0,\r\n            translate: `0 -${slideDistance}px`,\r\n          }),\r\n        ]),\r\n      ),\r\n    ),\r\n    transition(\r\n      `${FADE_IN_SLIDE_IN_VOID} => ${FADE_IN_SLIDE_IN_BOTTOM_SHOW}`,\r\n      animate(\r\n        timing,\r\n        keyframes([\r\n          style({\r\n            opacity: 0,\r\n            translate: `0 ${slideDistance}px`,\r\n          }),\r\n          style({\r\n            opacity: 1,\r\n            translate: '0 0',\r\n          }),\r\n        ]),\r\n      ),\r\n    ),\r\n    transition(\r\n      `${FADE_IN_SLIDE_IN_BOTTOM_SHOW} => ${FADE_IN_SLIDE_IN_VOID}`,\r\n      animate(\r\n        timing,\r\n        keyframes([\r\n          style({\r\n            opacity: 1,\r\n            translate: '0 0',\r\n          }),\r\n          style({\r\n            opacity: 0,\r\n            translate: `0 ${slideDistance}px`,\r\n          }),\r\n        ]),\r\n      ),\r\n    ),\r\n  ]);\r\n}\r\n","import { Component, HostBinding } from '@angular/core';\r\nimport { FADE_IN_SLIDE_IN, FADE_IN_SLIDE_IN_BOTTOM_SHOW, fadeInSlideIn } from '../animations/fade-in-slide-in';\r\n\r\n/**\r\n * This is an abstract class that binds to a Component or Directive to execute the 'fade-in-slide-in' animation with the 'bottom-show' state.\r\n * When a component or directive is rendered or destroyed in a view, the 'fade-in-slide-in' animation is executed immediately.\r\n */\r\n@Component({\r\n  selector: 'spl-fade-in-slide-up-animator',\r\n  template: '',\r\n  animations: [fadeInSlideIn()],\r\n})\r\nexport abstract class SplFadeInSlideUpAnimator {\r\n  @HostBinding(`@${FADE_IN_SLIDE_IN}`) fadeInSlideInState = FADE_IN_SLIDE_IN_BOTTOM_SHOW;\r\n}\r\n","import {\r\n  AfterContentInit,\r\n  AfterViewInit,\r\n  Directive,\r\n  ElementRef,\r\n  HostBinding,\r\n  HostListener,\r\n  inject,\r\n  OnDestroy,\r\n  PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { SplElementAccessor } from '../interfaces/spl-element-accessor';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { Nullable } from '../utils/type.util';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n/**\r\n * This is an abstract Directive that can be applied to elements with a form similar to the <input/> element.\r\n * This binds the '.spl-disabled' class to the host element according to the change of the element's disabled attribute, and defaults the spellcheck attribute to false.\r\n */\r\n@Directive()\r\nexport abstract class SplInputLike<ElementType extends HTMLElement>\r\n  implements SplElementAccessor<ElementType>, AfterContentInit, AfterViewInit, OnDestroy, ControlValueAccessor\r\n{\r\n  /** Bind the '.spl-disabled' class to the element according to the disabled state. */\r\n  @HostBinding('class.spl-disabled') disabled = false;\r\n\r\n  /** Sets the spellcheck attribute to false. */\r\n  @HostBinding('attr.spellcheck') spellcheck = false;\r\n\r\n  /**\r\n   * This is the ElementRef of the host element.\r\n   * Injected when creating a new instance.\r\n   */\r\n  elementRef: ElementRef<ElementType>;\r\n\r\n  /** NgControl bound to the component. */\r\n  ngControl: Nullable<NgControl> = null;\r\n\r\n  /** Registered onChange callback function. */\r\n  onChange: any;\r\n\r\n  /** Registered onTouched callback function. */\r\n  onTouched: any;\r\n\r\n  /**\r\n   * A MutationObserver that will detect the disabled attribute of the element.\r\n   * When a View is initialized, it observes the host element.\r\n   */\r\n  protected _mutationObserver?: MutationObserver;\r\n\r\n  protected _platformId: Object;\r\n\r\n  protected constructor() {\r\n    this._platformId = inject(PLATFORM_ID);\r\n    this.elementRef = inject<ElementRef<ElementType>>(ElementRef);\r\n    this.ngControl = inject(NgControl, { optional: true });\r\n\r\n    if (this.ngControl) {\r\n      this.ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this.disabled = this.elementRef?.nativeElement.hasAttribute('disabled');\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (isPlatformBrowser(this._platformId)) {\r\n      this._mutationObserver = new MutationObserver((records) => {\r\n        records.forEach((record) => {\r\n          this.disabled = (record.target as HTMLElement).hasAttribute('disabled');\r\n        });\r\n      });\r\n    }\r\n\r\n    this._mutationObserver?.observe(this.elementRef.nativeElement, {\r\n      attributes: true,\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._mutationObserver?.disconnect();\r\n  }\r\n\r\n  /** Listen to the input event of the host element and pass the current value to the onChange callback function. */\r\n  @HostListener('input')\r\n  onHostInput(): void {\r\n    if (this.onChange) {\r\n      this.onChange((this.elementRef.nativeElement as any as HTMLInputElement | HTMLTextAreaElement).value);\r\n    }\r\n  }\r\n\r\n  /** Listen to the blur event of the host element and execute the onTouched callback function. */\r\n  @HostListener('blur')\r\n  onHostFocus(): void {\r\n    if (this.onTouched) {\r\n      this.onTouched();\r\n    }\r\n  }\r\n\r\n  /** Register the onChange callback function. */\r\n  registerOnChange(fn: any) {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  /** Register the onTouched callback function. */\r\n  registerOnTouched(fn: any) {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  /**\r\n   * Write the value entered into NgControl into the component.\r\n   * @param obj - Value entered into NgControl.\r\n   */\r\n  writeValue(obj: any) {\r\n    if (this.elementRef) {\r\n      (this.elementRef.nativeElement as any as HTMLInputElement | HTMLTextAreaElement).value = obj;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Applies changes to the disable state to the component.\r\n   * @param isDisabled - Changed disabled state.\r\n   */\r\n  setDisabledState(isDisabled: boolean) {\r\n    if (this.elementRef) {\r\n      (this.elementRef.nativeElement as any as HTMLInputElement | HTMLTextAreaElement).disabled = isDisabled;\r\n    }\r\n  }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/** It is a box container that can contain any content. */\r\n@Component({\r\n  selector: 'spl-box',\r\n  templateUrl: './spl-box.component.html',\r\n  host: {\r\n    class: 'spl-box',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplBoxComponent {}\r\n","<ng-content></ng-content>\r\n","import { Component, HostBinding } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplThemeAttribute } from '../../../interfaces/spl-theme-attribute';\r\nimport { SplTheme } from '../../../utils/type.util';\r\nimport { FADE_IN, FADE_IN_SHOW, fadeIn } from '../../../animations/fade-in';\r\n\r\n@Component({\r\n  selector: 'spl-effect-overlay',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  template: '',\r\n  host: {\r\n    class: 'spl-effect-overlay',\r\n  },\r\n  animations: [fadeIn('.1s')],\r\n})\r\nexport class SplEffectOverlayComponent implements SplThemeAttribute {\r\n  @HostBinding('class.spl-active') active = false;\r\n  @HostBinding('attr.spl-theme') theme: SplTheme = 'none';\r\n  @HostBinding(`@${FADE_IN}`) fadeInState = FADE_IN_SHOW;\r\n}\r\n","/** A key for the log level to set in LocalStorage. */\r\nexport const SPL_LOG_LEVEL_KEY = 'spl-log-level';\r\n\r\n/** An enumeration type containing configurable log level information. */\r\nexport enum SplLogLevel {\r\n  debug,\r\n  log,\r\n  info,\r\n  warn,\r\n  error,\r\n}\r\n\r\n/** Logger that creates formatted log for Simplor. */\r\nexport class SplLogger {\r\n  /** Unique id of logger. */\r\n  readonly id = `${(Math.random() * 100000000).toString(16).substring(0, 5)}`;\r\n\r\n  constructor(private _context: string) {}\r\n\r\n  /**\r\n   * Create a log level log.\r\n   * @param message - Message to display.\r\n   * @param data - Data to display.\r\n   */\r\n  log(message: any, data?: any): void {\r\n    this._createLog('log', this._buildLogMessage('log', message), data);\r\n  }\r\n\r\n  /**\r\n   * Create a info level log.\r\n   * @param message - Message to display.\r\n   * @param data - Data to display.\r\n   */\r\n  info(message: any, data?: any): void {\r\n    this._createLog('info', this._buildLogMessage('info', message), data);\r\n  }\r\n\r\n  /**\r\n   * Create a warn level log.\r\n   * @param message - Message to display.\r\n   * @param data - Data to display.\r\n   */\r\n  warn(message: any, data?: any): void {\r\n    this._createLog('warn', this._buildLogMessage('warn', message), data);\r\n  }\r\n\r\n  /**\r\n   * Create a error level log.\r\n   * @param message - Message to display.\r\n   * @param data - Data to display.\r\n   */\r\n  error(message: any, data?: any): void {\r\n    this._createLog('error', this._buildLogMessage('error', message), data);\r\n  }\r\n\r\n  /**\r\n   * Create a debug level log.\r\n   * @param message - Message to display.\r\n   * @param data - Data to display.\r\n   */\r\n  debug(message: any, data?: any): void {\r\n    this._createLog('debug', this._buildLogMessage('debug', message), data);\r\n  }\r\n\r\n  /**\r\n   * Build formatted log message with given level and message.\r\n   * @param level - Log level.\r\n   * @param message - Message to display.\r\n   */\r\n  private _buildLogMessage(level: string, message: any): string {\r\n    return `${new Date().toLocaleString()} - [${level.toUpperCase()}] [${this._context} - ${this.id}] ${message}`;\r\n  }\r\n\r\n  /**\r\n   * Create log to console.\r\n   * @param level - Log level. It's equal to logging method name of console object.\r\n   * @param message - Message to display.\r\n   * @param data - Data to display.\r\n   */\r\n  private _createLog(level: keyof typeof SplLogLevel, message: string, data: any): void {\r\n    try {\r\n      const loggerLevel = localStorage.getItem(SPL_LOG_LEVEL_KEY) as keyof typeof SplLogLevel | null;\r\n\r\n      if (loggerLevel ? SplLogLevel[loggerLevel] < SplLogLevel[level] : true) {\r\n        if (data !== undefined) {\r\n          console[level](`${message}:`, data);\r\n        } else {\r\n          console[level](message);\r\n        }\r\n      }\r\n    } catch (e) {\r\n      console.warn(`Log output is limited: ${(e as any)?.toString()}`);\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Set the log level to display on the console.\r\n * Only logs with a level equal to or higher than the set level are displayed.\r\n * Since the log level is saved in LocalStorage, it only works when the platform is a browser.\r\n * @param level - A log level to set.\r\n */\r\nexport function setSplLogLevel(level: keyof typeof SplLogLevel): void {\r\n  try {\r\n    localStorage.setItem(SPL_LOG_LEVEL_KEY, level);\r\n  } catch (e) {\r\n    console.warn(`Log level setting is limited: ${(e as any)?.toString()}`);\r\n  }\r\n}\r\n","import { BooleanAttribute, NumberLike } from './type.util';\r\n\r\n/**\r\n * Convert BooleanAttribute type to boolean.\r\n * Empty string is also converted to true.\r\n * @param value - BooleanAttribute value to convert.\r\n */\r\nexport function convertBooleanAttribute(value: BooleanAttribute): boolean {\r\n  const stringified = value.toString().toLowerCase();\r\n\r\n  return stringified === '' || stringified === 'true';\r\n}\r\n\r\n/**\r\n * Convert NumberLike type to number.\r\n * @param value - NumberLike value to convert.\r\n */\r\nexport function convertNumberLike(value: NumberLike): number {\r\n  return typeof value === 'string' ? parseFloat(value) : value;\r\n}\r\n","import {\r\n  AfterContentInit,\r\n  ComponentRef,\r\n  Directive,\r\n  ElementRef,\r\n  HostBinding,\r\n  HostListener,\r\n  inject,\r\n  Input,\r\n  PLATFORM_ID,\r\n  Renderer2,\r\n  ViewContainerRef,\r\n} from '@angular/core';\r\nimport { SplElementAccessor } from '../../interfaces/spl-element-accessor';\r\nimport { SplThemeAttribute } from '../../interfaces/spl-theme-attribute';\r\nimport { SplEffectOverlayComponent } from './spl-effect-overlay/spl-effect-overlay.component';\r\nimport { BooleanAttribute, Nullable, SplTheme } from '../../utils/type.util';\r\nimport { SplLogger } from '../../utils/logger.util';\r\nimport { convertBooleanAttribute } from '../../utils/convert.util';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n/**\r\n * This is a Directive that adds hover and active effects to the host element.\r\n * The effect can also be displayed by keydown, and the effect is displayed in different colors depending on the 'theme'.\r\n */\r\n@Directive({\r\n  selector: '[splEffect]',\r\n  standalone: true,\r\n  host: {\r\n    class: 'spl-effect',\r\n  },\r\n  providers: [SplEffectOverlayComponent],\r\n})\r\nexport class SplEffectDirective implements SplElementAccessor<HTMLElement>, SplThemeAttribute, AfterContentInit {\r\n  /** Sets the theme color of the effect. */\r\n  @Input() theme: SplTheme = 'none';\r\n\r\n  /**\r\n   * This is the position style of the host element that will display the effect.\r\n   * If the position of the host element is not 'static', the current position style value is used,\r\n   * but if it is 'static', the 'relative' value is bound.\r\n   */\r\n  @HostBinding('style.position') position: Nullable<string> = null;\r\n\r\n  /**\r\n   * This is the overflow style of the host element that will display the effect.\r\n   * If the overflow of the host element is not 'visible', the current overflow style value is used,\r\n   * but if it is 'visible', the 'hidden' value is bound.\r\n   */\r\n  @HostBinding('style.overflow') overflow: Nullable<string> = null;\r\n\r\n  /** The ElementRef of the host element. */\r\n  elementRef: ElementRef<HTMLElement>;\r\n\r\n  /** Current running platform id. */\r\n  protected readonly _platformId: Object;\r\n\r\n  /** The logger of SplEffectDirective. */\r\n  private readonly _logger = new SplLogger('SplEffectDirective');\r\n\r\n  /**\r\n   * This is the focused state of the host element.\r\n   * If this is true, no additional effects are created when pointerenter event occurs.\r\n   */\r\n  private _focused = false;\r\n\r\n  /** This is the ComponentRef of SplEffectOverlayComponent added when a focus or pointerenter event occurs. */\r\n  private _focusEffectOverlay?: ComponentRef<SplEffectOverlayComponent>;\r\n\r\n  /** This is the ComponentRef of SplEffectOverlayComponent added when a pointerdown event occurs. */\r\n  private _activeEffectOverlay?: ComponentRef<SplEffectOverlayComponent>;\r\n\r\n  /** ViewContainerRef of the host element for creating SplEffectOverlayComponent. */\r\n  private _viewContainerRef: ViewContainerRef;\r\n\r\n  /** This is an Injected renderer. */\r\n  private _renderer: Renderer2;\r\n\r\n  constructor() {\r\n    this.elementRef = inject(ElementRef);\r\n    this._viewContainerRef = inject(ViewContainerRef);\r\n    this._renderer = inject(Renderer2);\r\n    this._platformId = inject(PLATFORM_ID);\r\n  }\r\n\r\n  /**\r\n   * This is the disabled state of the effect.\r\n   * If this is true, the effect according to the event will not be displayed.\r\n   */\r\n  private _disableEffect = false;\r\n\r\n  /**\r\n   * Returns the disabled state of the effect.\r\n   * Also, if the host element has the 'disabled' attribute, it returns true.\r\n   */\r\n  @Input()\r\n  get disableEffect(): boolean {\r\n    return this._disableEffect || this.elementRef.nativeElement.hasAttribute('disabled');\r\n  }\r\n\r\n  /**\r\n   * Sets the disabled state of the effect.\r\n   * @param value - Disabled state to set.\r\n   */\r\n  set disableEffect(value: BooleanAttribute) {\r\n    this._disableEffect = convertBooleanAttribute(value);\r\n    this._logger.debug('SetDisableEffect', this._disableEffect);\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    if (isPlatformBrowser(this._platformId)) {\r\n      this._setInitialPosition();\r\n      this._setInitialOverflow();\r\n    }\r\n  }\r\n\r\n  /** Listen to the focus event and display the hover effect. */\r\n  @HostListener('focus')\r\n  onFocus(): void {\r\n    this._focused = true;\r\n    this.onPointerEnter();\r\n  }\r\n\r\n  /** Remove hover and active effects by listening to the blur event. */\r\n  @HostListener('blur')\r\n  onBlur(): void {\r\n    this._focused = false;\r\n    this.onPointerLeave();\r\n  }\r\n\r\n  /** Listen to the 'enter' keydown event and display the active effect. */\r\n  @HostListener('keydown.enter')\r\n  onEnterKeyDown(): void {\r\n    this.onPointerDown();\r\n  }\r\n\r\n  /** Remove the active effect by listening to the 'enter' keyup event. */\r\n  @HostListener('keyup.enter')\r\n  onEnterKeyUp(): void {\r\n    this.onPointerUp();\r\n  }\r\n\r\n  /** Listen to the 'space' keydown event and display the active effect. */\r\n  @HostListener('keydown.space')\r\n  onSpaceKeyDown(): void {\r\n    this.onPointerDown();\r\n  }\r\n\r\n  /** Remove the active effect by listening to the 'space' keyup event. */\r\n  @HostListener('keyup.space')\r\n  onSpaceKeyUp(): void {\r\n    this.onPointerUp();\r\n  }\r\n\r\n  /** Listen to the pointerenter event to display the hover effect. */\r\n  @HostListener('pointerenter')\r\n  onPointerEnter(): void {\r\n    if (this._focusEffectOverlay || this.disableEffect) {\r\n      return;\r\n    }\r\n\r\n    this._focusEffectOverlay = this._viewContainerRef.createComponent(SplEffectOverlayComponent);\r\n\r\n    this._focusEffectOverlay.instance.theme = this.theme;\r\n    this._focusEffectOverlay.changeDetectorRef.detectChanges();\r\n\r\n    this._logger.debug('FocusEffectOverlay created');\r\n    this._logger.debug('SplEffect theme', this._focusEffectOverlay.instance.theme);\r\n    this._logger.debug('FocusEffectOverlay theme', this._focusEffectOverlay.instance.theme);\r\n\r\n    this._renderer.appendChild(this.elementRef.nativeElement, this._focusEffectOverlay.location.nativeElement);\r\n  }\r\n\r\n  /** Listen to the pointerdown event to display the active effect. */\r\n  @HostListener('pointerdown')\r\n  onPointerDown(): void {\r\n    if (this._activeEffectOverlay || this.disableEffect) {\r\n      return;\r\n    }\r\n\r\n    this._activeEffectOverlay = this._viewContainerRef.createComponent(SplEffectOverlayComponent);\r\n\r\n    this._activeEffectOverlay.instance.theme = this.theme;\r\n    this._activeEffectOverlay.instance.active = true;\r\n    this._activeEffectOverlay.changeDetectorRef.detectChanges();\r\n\r\n    this._logger.debug('ActiveEffectOverlay created');\r\n    this._logger.debug('SplEffect theme', this._activeEffectOverlay.instance.theme);\r\n    this._logger.debug('ActiveEffectOverlay theme', this._activeEffectOverlay.instance.theme);\r\n\r\n    this._renderer.appendChild(this.elementRef.nativeElement, this._activeEffectOverlay.location.nativeElement);\r\n  }\r\n\r\n  /** Remove the active effect by listening to the pointerup event. */\r\n  @HostListener('pointerup')\r\n  onPointerUp(): void {\r\n    this._activeEffectOverlay?.destroy();\r\n    delete this._activeEffectOverlay;\r\n  }\r\n\r\n  /** Remove hover and active effects by listening to the pointerleave event. */\r\n  @HostListener('pointerleave')\r\n  onPointerLeave(): void {\r\n    if (!this._focused) {\r\n      this._focusEffectOverlay?.destroy();\r\n      delete this._focusEffectOverlay;\r\n    }\r\n\r\n    this._activeEffectOverlay?.destroy();\r\n    delete this._activeEffectOverlay;\r\n  }\r\n\r\n  /**\r\n   * Sets the position style of the host element.\r\n   * If the CSS position value of the host element is an empty string or 'static', 'relative' is used.\r\n   * Otherwise, the current CSS position value is used as is.\r\n   */\r\n  private _setInitialPosition(): void {\r\n    const initialPosition = getComputedStyle(this.elementRef.nativeElement).getPropertyValue('position');\r\n\r\n    if (initialPosition === '' || initialPosition === 'static') {\r\n      this.position = 'relative';\r\n    } else {\r\n      this.position = initialPosition;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets the overflow style of the host element.\r\n   * If the CSS overflow value of the host element is an empty string or 'visible', 'hidden' is used.\r\n   * Otherwise, the current CSS overflow value is used as is.\r\n   */\r\n  private _setInitialOverflow(): void {\r\n    const initialOverflow = getComputedStyle(this.elementRef.nativeElement).getPropertyValue('overflow');\r\n\r\n    if (initialOverflow === '' || initialOverflow === 'visible') {\r\n      this.overflow = 'hidden';\r\n    } else {\r\n      this.overflow = initialOverflow;\r\n    }\r\n  }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { SplEffectDirective } from './spl-effect.directive';\r\nimport { SplEffectOverlayComponent } from './spl-effect-overlay/spl-effect-overlay.component';\r\n\r\n@Directive({\r\n  selector: '[splContrastEffect]',\r\n  standalone: true,\r\n  host: {\r\n    class: 'spl-contrast-effect',\r\n  },\r\n  providers: [SplEffectOverlayComponent],\r\n})\r\nexport class SplContrastEffectDirective extends SplEffectDirective {\r\n  constructor() {\r\n    super();\r\n  }\r\n}\r\n","import { AfterViewInit, Directive, HostBinding, Input, OnDestroy } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { SplContrastEffectDirective } from '../spl-effect/spl-contrast-effect.directive';\r\nimport { SplTheme } from '../../utils/type.util';\r\n\r\n@Directive({\r\n  selector: '[splButtonContrastEffectBase]',\r\n  standalone: true,\r\n  host: {\r\n    class: 'spl-button',\r\n    type: 'button',\r\n  },\r\n})\r\nexport class SplButtonContrastEffectBaseDirective\r\n  extends SplContrastEffectDirective\r\n  implements AfterViewInit, OnDestroy\r\n{\r\n  /** Use one of the 'SplTheme' values and set the theme of the button and effect. */\r\n  @Input() @HostBinding('attr.spl-theme') override theme: SplTheme = 'none';\r\n\r\n  /** Mutation observer to detect disabled attribute */\r\n  protected _mutationObserver?: MutationObserver;\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    if (isPlatformBrowser(this._platformId)) {\r\n      this._mutationObserver = new MutationObserver((records) => {\r\n        records.forEach((record) => {\r\n          const target = record.target as HTMLButtonElement;\r\n\r\n          this.disableEffect = target.disabled;\r\n        });\r\n      });\r\n\r\n      this._mutationObserver.observe(this.elementRef.nativeElement, {\r\n        attributes: true,\r\n      });\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._mutationObserver?.disconnect();\r\n  }\r\n}\r\n","import { AfterViewInit, Directive, HostBinding, Input, OnDestroy } from '@angular/core';\r\nimport { SplEffectDirective } from '../spl-effect/spl-effect.directive';\r\nimport { SplTheme } from '../../utils/type.util';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n@Directive({\r\n  selector: '[splButtonEffectBase]',\r\n  standalone: true,\r\n  host: {\r\n    class: 'spl-button',\r\n    type: 'button',\r\n  },\r\n})\r\nexport class SplButtonEffectBaseDirective extends SplEffectDirective implements AfterViewInit, OnDestroy {\r\n  /** Use one of the 'SplTheme' values and set the theme of the button and effect. */\r\n  @Input() @HostBinding('attr.spl-theme') override theme: SplTheme = 'none';\r\n\r\n  /** Mutation observer to detect disabled attribute */\r\n  protected _mutationObserver?: MutationObserver;\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    if (isPlatformBrowser(this._platformId)) {\r\n      this._mutationObserver = new MutationObserver((records) => {\r\n        records.forEach((record) => {\r\n          const target = record.target as HTMLButtonElement;\r\n\r\n          this.disableEffect = target.disabled;\r\n        });\r\n      });\r\n\r\n      this._mutationObserver.observe(this.elementRef.nativeElement, {\r\n        attributes: true,\r\n      });\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._mutationObserver?.disconnect();\r\n  }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { SplButtonEffectBaseDirective } from './spl-button-effect-base.directive';\r\n\r\n/**\r\n * This is a Directive that creates the most basic form of button.\r\n * It is used with the <button> element, and the type attribute of the element has 'button' as the default value.\r\n * 'SplEffectDirective' is bound, so appropriate effects are applied according to the user's actions, and the theme of buttons and effects can be set through the 'theme' attribute.\r\n */\r\n@Directive({\r\n  selector: 'button[splButton]',\r\n  standalone: true,\r\n})\r\nexport class SplButtonDirective extends SplButtonEffectBaseDirective {}\r\n","import { Directive } from '@angular/core';\r\nimport { SplButtonContrastEffectBaseDirective } from './spl-button-contrast-effect-base.directive';\r\n\r\n/**\r\n * This Directive creates a button filled with the given theme color.\r\n * This extends 'SplButtonDirective'.\r\n */\r\n@Directive({\r\n  selector: 'button[splFlatButton]',\r\n  host: {\r\n    class: 'spl-flat-button',\r\n  },\r\n  standalone: true,\r\n})\r\nexport class SplFlatButtonDirective extends SplButtonContrastEffectBaseDirective {}\r\n","import { Directive } from '@angular/core';\r\nimport { SplButtonEffectBaseDirective } from './spl-button-effect-base.directive';\r\n\r\n/**\r\n * This is a Directive that creates a button with a border.\r\n * This extends 'SplButtonDirective'.\r\n */\r\n@Directive({\r\n  selector: 'button[splStrokeButton]',\r\n  host: {\r\n    class: 'spl-stroke-button',\r\n  },\r\n  standalone: true,\r\n})\r\nexport class SplStrokeButtonDirective extends SplButtonEffectBaseDirective {}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[splCalendarDateExtra]',\r\n  standalone: true,\r\n})\r\nexport class SplCalendarDateExtraDirective {\r\n  constructor(public readonly templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: 'ng-template[splCalendarDate]',\r\n  standalone: true,\r\n})\r\nexport class SplCalendarDateDirective {\r\n  constructor(public readonly templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Provider } from '@angular/core';\r\n\r\n/** InjectionToken for SplCalendarOptions. */\r\nexport const SPL_CALENDAR_PROVIDER = 'SPL_CALENDAR_PROVIDER';\r\n\r\n/**\r\n * This is a function that creates a Provider for SplCalendarOptions.\r\n * @param options - Options for customizing SplCalendarComponent.\r\n */\r\nexport function createSplCalendarProvider(options: SplCalendarOptions = {}): Provider {\r\n  return {\r\n    provide: SPL_CALENDAR_PROVIDER,\r\n    useValue: options,\r\n  };\r\n}\r\n\r\n/**\r\n * Options for customizing SplCalendarComponent.\r\n * Date format conversion uses Angular DatePipe.\r\n */\r\nexport interface SplCalendarOptions {\r\n  /**\r\n   * Specifies the year/month format displayed in the calendar.\r\n   * If undefined, the default value is 'yyyy MMM'.\r\n   */\r\n  yearMonthFormat?: string;\r\n\r\n  /**\r\n   * Specifies the format of the days displayed in the calendar.\r\n   * If undefined, the default value is 'E'.\r\n   */\r\n  dayOfWeekFormat?: string;\r\n\r\n  /**\r\n   * Specifies the timezone to apply the date format to.\r\n   * If undefined, the default value is 'en-US'.\r\n   */\r\n  dateFormatTimezone?: string;\r\n\r\n  /**\r\n   * Specifies the label of the button that moves to today's date.\r\n   * If undefined, the default value is 'Today'.\r\n   */\r\n  todayButtonLabel?: string;\r\n\r\n  /**\r\n   * Specifies the format of each date as it appears on the calendar.\r\n   * If undefined, the default value is 'd'.\r\n   */\r\n  dateFormat?: string;\r\n}\r\n","/** Error object specific for Simplor. */\r\nexport class SplError extends Error {\r\n  constructor(message: string, options?: ErrorOptions) {\r\n    super(`SPL_ERROR: ${message.toString()}`, options);\r\n  }\r\n}\r\n","import { SplError } from './error.util';\r\n\r\n/** 1 millisecond. */\r\nexport const MILLISECOND = 1;\r\n\r\n/** 1 second in milliseconds. */\r\nexport const SECOND = MILLISECOND * 1000;\r\n\r\n/** 1 minute in milliseconds. */\r\nexport const MINUTE = SECOND * 60;\r\n\r\n/** 1 hour in milliseconds. */\r\nexport const HOUR = MINUTE * 60;\r\n\r\n/** 1 day in milliseconds. */\r\nexport const DAY = HOUR * 24;\r\n\r\n/** 1 week in milliseconds. */\r\nexport const WEEK = DAY * 7;\r\n\r\n/** 1 year in milliseconds. */\r\nexport const YEAR = DAY * 365;\r\n\r\n/**\r\n * Returns true when given source date and target date are same.\r\n * It compares only year, month, and date.\r\n * @param source - Source date to compare.\r\n * @param target - Target date to compare.\r\n */\r\nexport function isSameDate(source: Date, target: Date): boolean {\r\n  const truncatedSourceDateInMills = truncateDate(source, 'day');\r\n  const truncatedTargetDateInMills = truncateDate(target, 'day');\r\n\r\n  return truncatedSourceDateInMills === truncatedTargetDateInMills;\r\n}\r\n\r\n/**\r\n * Returns true when date is valid.\r\n * @param date - Date to validate.\r\n */\r\nexport function isValidDate(date: Date): boolean {\r\n  return !isNaN(date.valueOf());\r\n}\r\n\r\n/**\r\n * A type of available truncate target for truncateDate() function.\r\n * 'second' truncates the time to the second.\r\n * 'minute' truncates the time to the minute.\r\n * 'hour' truncates the time to the hour.\r\n * 'day' truncates the time to the day.\r\n * 'week' truncates the time to the week.\r\n * 'year' truncates the time to the year.\r\n */\r\nexport type DateTruncateTarget = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'year';\r\n\r\n/**\r\n * Truncate the given date object to specified target.\r\n * It returns truncated milliseconds.\r\n * @param date - Date object to truncate.\r\n * @param target - Truncate target.\r\n */\r\nexport function truncateDate(date: Date, target: DateTruncateTarget): number {\r\n  let millisecondsToDivide: number;\r\n\r\n  // Since the time value 0 indicates 1970-01-01 09:00:00.0,\r\n  // set hours, minutes, seconds, and milliseconds to 0 when target is day, week, or year.\r\n  switch (target) {\r\n    case 'second': {\r\n      millisecondsToDivide = SECOND;\r\n      break;\r\n    }\r\n\r\n    case 'minute': {\r\n      millisecondsToDivide = MINUTE;\r\n      break;\r\n    }\r\n\r\n    case 'hour': {\r\n      millisecondsToDivide = HOUR;\r\n      break;\r\n    }\r\n\r\n    case 'day': {\r\n      date.setHours(0, 0, 0, 0);\r\n      millisecondsToDivide = DAY;\r\n      break;\r\n    }\r\n\r\n    case 'week': {\r\n      date.setHours(0, 0, 0, 0);\r\n      millisecondsToDivide = WEEK;\r\n      break;\r\n    }\r\n\r\n    case 'year': {\r\n      date.setHours(0, 0, 0, 0);\r\n      millisecondsToDivide = YEAR;\r\n      break;\r\n    }\r\n\r\n    default: {\r\n      throw new SplError(`Invalid target type for truncateDate() function. Current target is ${target}`);\r\n    }\r\n  }\r\n\r\n  return Math.floor(date.valueOf() / millisecondsToDivide);\r\n}\r\n\r\n/** Extended date that contains comparison method for date object. */\r\nexport class ExtendedDate {\r\n  constructor(public originalDate: Date) {}\r\n\r\n  /**\r\n   * Returns true when the date is less than provided comparisonDate.\r\n   * @param comparisonDate - Date to compare with.\r\n   * @param truncateTarget - Truncate target.\r\n   */\r\n  isLessThan(comparisonDate: Date, truncateTarget: DateTruncateTarget): boolean {\r\n    const currentDateValue = truncateDate(this.originalDate, truncateTarget);\r\n    const comparisonDateValue = truncateDate(comparisonDate, truncateTarget);\r\n\r\n    return currentDateValue < comparisonDateValue;\r\n  }\r\n\r\n  /**\r\n   * Returns true when the date is less than or equal to provided comparisonDate.\r\n   * @param comparisonDate - Date to compare with.\r\n   * @param truncateTarget - Truncate target.\r\n   */\r\n  isLessThanOrEqualTo(comparisonDate: Date, truncateTarget: DateTruncateTarget): boolean {\r\n    const currentDateValue = truncateDate(this.originalDate, truncateTarget);\r\n    const comparisonDateValue = truncateDate(comparisonDate, truncateTarget);\r\n\r\n    return currentDateValue <= comparisonDateValue;\r\n  }\r\n\r\n  /**\r\n   * Returns true when the date is more than to provided comparisonDate.\r\n   * @param comparisonDate - Date to compare with.\r\n   * @param truncateTarget - Truncate target.\r\n   */\r\n  isMoreThan(comparisonDate: Date, truncateTarget: DateTruncateTarget): boolean {\r\n    const currentDateValue = truncateDate(this.originalDate, truncateTarget);\r\n    const comparisonDateValue = truncateDate(comparisonDate, truncateTarget);\r\n\r\n    return currentDateValue > comparisonDateValue;\r\n  }\r\n\r\n  /**\r\n   * Returns true when the date is more than or equal to provided comparisonDate.\r\n   * @param comparisonDate - Date to compare with.\r\n   * @param truncateTarget - Truncate target.\r\n   */\r\n  isMoreThanOrEqualTo(comparisonDate: Date, truncateTarget: DateTruncateTarget): boolean {\r\n    const currentDateValue = truncateDate(this.originalDate, truncateTarget);\r\n    const comparisonDateValue = truncateDate(comparisonDate, truncateTarget);\r\n\r\n    return currentDateValue >= comparisonDateValue;\r\n  }\r\n\r\n  /**\r\n   * Returns true when date is equal to provided comparisonDate.\r\n   * @param comparisonDate - Date to compare with.\r\n   * @param truncateTarget - Truncate target.\r\n   */\r\n  isEqualTo(comparisonDate: Date, truncateTarget: DateTruncateTarget): boolean {\r\n    const currentDateValue = truncateDate(this.originalDate, truncateTarget);\r\n    const comparisonDateValue = truncateDate(comparisonDate, truncateTarget);\r\n\r\n    return currentDateValue === comparisonDateValue;\r\n  }\r\n}\r\n","import { Provider } from '@angular/core';\r\nimport { SplIconGrade, SplIconOpticalSize, SplIconType, SplIconWeight } from './spl-icon.component';\r\n\r\n/** InjectionToken for SplIconOptions. */\r\nexport const SPL_ICON_PROVIDER = 'SPL_ICON_PROVIDER';\r\n\r\n/**\r\n * This is a function that creates a Provider for SplIconOptions.\r\n * @param options - Options for customizing SplIconComponent default appearance.\r\n */\r\nexport function createSplIconProvider(options: SplIconOptions = {}): Provider {\r\n  return {\r\n    provide: SPL_ICON_PROVIDER,\r\n    useValue: options,\r\n  };\r\n}\r\n\r\n/** Options for customizing SplIconComponent default appearance. */\r\nexport interface SplIconOptions {\r\n  /** Icon type. Default is 'outlined'. */\r\n  type?: SplIconType;\r\n\r\n  /** Weight. Default is '400'. */\r\n  weight?: SplIconWeight;\r\n\r\n  /** Grade. Default is '0'. */\r\n  grade?: SplIconGrade;\r\n\r\n  /** Optical size. Default is '24'. */\r\n  opticalSize?: SplIconOpticalSize;\r\n\r\n  /** Fill status. Default is false. */\r\n  fill?: boolean;\r\n}\r\n","import { Component, HostBinding, Inject, Input, Optional } from '@angular/core';\r\nimport { BooleanAttribute } from '../../utils/type.util';\r\nimport { convertBooleanAttribute } from '../../utils/convert.util';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SPL_ICON_PROVIDER, SplIconOptions } from './spl-icon-provider';\r\n\r\n/** Type definition available for icon. */\r\nexport type SplIconType = 'outlined' | 'rounded' | 'sharp';\r\n\r\n/** Weight definition available for icon. */\r\nexport type SplIconWeight = '100' | '200' | '300' | '400' | '500' | '600' | '700';\r\n\r\n/** Grade definition available for icon. */\r\nexport type SplIconGrade = '-25' | '0' | '200';\r\n\r\n/** OpticalSize definition available for icon. */\r\nexport type SplIconOpticalSize = '20' | '24' | '40' | '48';\r\n\r\n/**\r\n * This is an icon component that uses Google Material Symbols.\r\n * You can specify type, weight, grade, opticalSize, and fill properties.\r\n */\r\n@Component({\r\n  selector: 'spl-icon',\r\n  templateUrl: './spl-icon.component.html',\r\n  host: {\r\n    class: 'spl-icon',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplIconComponent {\r\n  /**\r\n   * Sets the type of icon.\r\n   * You can specify 'outlined', 'rounded', or 'sharp', and the default is 'outlined'.\r\n   */\r\n  @Input() type: SplIconType;\r\n\r\n  /**\r\n   * Sets the weight of the icon.\r\n   * You can specify values from '100' to '700' in increments of 100, and the default value is '400'.\r\n   */\r\n  @Input() weight: SplIconWeight;\r\n\r\n  /**\r\n   * Sets the grade of the icon.\r\n   * You can specify '-25', '0', and '200', and the default value is '0'.\r\n   */\r\n  @Input() grade: SplIconGrade;\r\n\r\n  /**\r\n   * Sets the optical size of the icon.\r\n   * You can specify '20', '24', '40', and '48', and the default is '24'.\r\n   */\r\n  @Input() opticalSize: SplIconOpticalSize;\r\n\r\n  constructor(@Inject(SPL_ICON_PROVIDER) @Optional() private _options: SplIconOptions) {\r\n    const { type = 'outlined', weight = '400', grade = '0', opticalSize = '24', fill = false } = this._options || {};\r\n\r\n    this.type = type;\r\n    this.weight = weight;\r\n    this.grade = grade;\r\n    this.opticalSize = opticalSize;\r\n    this.fill = fill;\r\n  }\r\n\r\n  /** This is the state of whether the icon is filled. */\r\n  private _fill = false;\r\n\r\n  /** Returns whether the icon is filled. */\r\n  @Input()\r\n  get fill(): boolean {\r\n    return this._fill;\r\n  }\r\n\r\n  /**\r\n   * Sets whether to fill the icon.\r\n   * @param value - Fill state to set.\r\n   */\r\n  set fill(value: BooleanAttribute) {\r\n    this._fill = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /** If the type is 'outlined', it returns true and binds the 'material-symbols-outlined' class. */\r\n  @HostBinding('class.material-symbols-outlined')\r\n  get isOutlined(): boolean {\r\n    return this.type === 'outlined';\r\n  }\r\n\r\n  /** If the type is 'rounded', it returns true and binds the 'material-symbols-rounded' class. */\r\n  @HostBinding('class.material-symbols-rounded')\r\n  get isRounded(): boolean {\r\n    return this.type === 'rounded';\r\n  }\r\n\r\n  /** If the type is 'sharp', it returns true and binds the 'material-symbols-sharp' class. */\r\n  @HostBinding('class.material-symbols-sharp')\r\n  get isSharp(): boolean {\r\n    return this.type === 'sharp';\r\n  }\r\n\r\n  /**\r\n   * Returns the value for font-variation-settings style.\r\n   * The value is determined by fill, weight, grade, and opticalSize.\r\n   */\r\n  @HostBinding('style.font-variation-settings')\r\n  get fontVariationSettings(): string {\r\n    return `'FILL' ${this.fill ? 1 : 0}, 'wght' ${this.weight}, 'GRAD' ${this.grade}, 'opsz' ${this.opticalSize}`;\r\n  }\r\n}\r\n","<ng-content></ng-content>\r\n","import { Component, ContentChild, EventEmitter, Inject, Input, OnInit, Optional, Output } from '@angular/core';\r\nimport { SPL_CALENDAR_PROVIDER, SplCalendarOptions } from './spl-calendar-provider';\r\nimport { Nullable, NumberLike, RangedDate } from '../../utils/type.util';\r\nimport { convertNumberLike } from '../../utils/convert.util';\r\nimport { ExtendedDate, isSameDate } from '../../utils/date.util';\r\nimport { SplLogger } from '../../utils/logger.util';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplButtonDirective } from '../spl-button/spl-button.directive';\r\nimport { SplIconComponent } from '../spl-icon/spl-icon.component';\r\nimport { SplCalendarDateDirective } from './spl-calendar-date.directive';\r\nimport { SplCalendarDateExtraDirective } from './spl-calendar-date-extra.directive';\r\n\r\n/**\r\n * Definition of the 'type' value that can be used in SplCalendarComponent.\r\n * 'single' allows only one date to be selected.\r\n * 'ranged' allows a date range with a start and end to be selected.\r\n * 'multi' allows multiple dates to be selected.\r\n */\r\nexport type SplCalendarType = 'single' | 'ranged' | 'multi';\r\n\r\n/** This is an interface for SplCalendarComponent with 'single' type. */\r\nexport interface SplSingleValueCalendar {\r\n  type: 'single';\r\n  value: Nullable<Date>;\r\n  valueChange: EventEmitter<Nullable<Date>>;\r\n}\r\n\r\n/** This is an interface for SplCalendarComponent with 'ranged' type. */\r\nexport interface SplRangedValueCalendar {\r\n  type: 'ranged';\r\n  value: RangedDate;\r\n  valueChange: EventEmitter<RangedDate>;\r\n}\r\n\r\n/** This is an interface for SplCalendarComponent with 'multi' type. */\r\nexport interface SplMultiValueCalendar {\r\n  type: 'multi';\r\n  value: Date[];\r\n  valueChange: EventEmitter<Date[]>;\r\n}\r\n\r\n/**\r\n * This is a component that creates a calendar and allows the user to select a date based on 'type'.\r\n * Only one month is displayed at a time, and user can move to the previous or next month using the given controller.\r\n *\r\n * By providing SplCalendarOptions using the createSplCalendarProvider() function, you can specify the display format of elements in the current calendar.\r\n * For more information, see SplCalendarOptions.\r\n */\r\n@Component({\r\n  selector: 'spl-calendar',\r\n  templateUrl: './spl-calendar.component.html',\r\n  host: {\r\n    class: 'spl-calendar',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule, SplButtonDirective, SplIconComponent],\r\n})\r\nexport class SplCalendarComponent<Value extends any> implements OnInit {\r\n  /**\r\n   * Specifies the type of value to use in the calendar.\r\n   * 'single' allows only one date to be selected.\r\n   * 'ranged' allows a date range with a start and end to be selected.\r\n   * 'multi' allows multiple dates to be selected.\r\n   *\r\n   * The default is 'single'.\r\n   */\r\n  @Input() type: SplCalendarType = 'single';\r\n\r\n  /** Specifies the minimum date available for selection. */\r\n  @Input() minDate: Nullable<Date> = null;\r\n\r\n  /** Specifies the maximum date available for selection. */\r\n  @Input() maxDate: Nullable<Date> = null;\r\n\r\n  /**\r\n   * Indicates the currently selected value.\r\n   * The value can vary as 'Nullable<Date>', 'RangedDate', or 'Date[]' depending on the 'type' attribute.\r\n   */\r\n  @Input() value!: Value; // To prevent error, use !.\r\n\r\n  /** An emitter that emits changed values. */\r\n  @Output() valueChange = new EventEmitter<Value>();\r\n\r\n  /** This is an emitter that emits 'year' when the year displayed on the calendar changes. */\r\n  @Output() displayYearChange = new EventEmitter<number>();\r\n\r\n  /**\r\n   * This is an emitter that emits 'month' when the month displayed on the calendar changes.\r\n   * The value is the same as the Date.getMonth() value.\r\n   */\r\n  @Output() displayMonthChange = new EventEmitter<number>();\r\n\r\n  /** Content child of SplCalendarDateDirective to replace date display */\r\n  @ContentChild(SplCalendarDateDirective, { descendants: true }) calendarDateDirective?: SplCalendarDateDirective;\r\n\r\n  /** Content child of SplCalendarDateExtraDirective to replace date display */\r\n  @ContentChild(SplCalendarDateExtraDirective, { descendants: true })\r\n  calendarDateExtraDirective?: SplCalendarDateExtraDirective;\r\n\r\n  /**\r\n   * This is the date currently displayed on the calendar.\r\n   * Only year and month are used.\r\n   */\r\n  displayDate = new Date();\r\n\r\n  /**\r\n   * This is the day value displayed on the calendar.\r\n   * They are in order from Sunday to Saturday, and are created when the Component is initialized.\r\n   */\r\n  dayOfWeeks: Date[] = [];\r\n\r\n  /**\r\n   * Each date to be displayed in the currently displayed year and month.\r\n   * A total of 42 dates are included, from the last Sunday of the previous month to the first Saturday of the next month.\r\n   * Generated dynamically when displayDate changes.\r\n   */\r\n  dates: Date[] = [];\r\n\r\n  /** Logger for SplCalendarComponent. */\r\n  private readonly _logger = new SplLogger('SplCalendarComponent');\r\n\r\n  constructor(@Inject(SPL_CALENDAR_PROVIDER) @Optional() private _options: SplCalendarOptions) {}\r\n\r\n  /** The year value currently displayed on the calendar. */\r\n  private _displayYear = this.correctDisplayYear;\r\n\r\n  /** Returns the year value currently displayed on the calendar. */\r\n  get displayYear(): number {\r\n    return this._displayYear;\r\n  }\r\n\r\n  /**\r\n   * Sets the year value to display on the calendar.\r\n   * If the set value is different from the existing value, the calendar is re-rendered.\r\n   * @param value - A 4-digit year value as a number or string of numbers.\r\n   */\r\n  @Input()\r\n  set displayYear(value: NumberLike) {\r\n    const displayYear = convertNumberLike(value);\r\n\r\n    if (displayYear !== this._displayYear) {\r\n      this._displayYear = displayYear;\r\n      this.updateDisplayDate();\r\n      this.createDates();\r\n    }\r\n  }\r\n\r\n  /** The month value currently displayed on the calendar. */\r\n  private _displayMonth = this.correctDisplayMonth;\r\n\r\n  /** Returns the month value currently displayed on the calendar. */\r\n  get displayMonth(): number {\r\n    return this._displayMonth;\r\n  }\r\n\r\n  /**\r\n   * Sets the month value to display on the calendar.\r\n   * If the set value is different from the existing value, the calendar is re-rendered.\r\n   * @param value - The month value as a number or string of numbers. It must be the same as the Date.getMonth() value.\r\n   */\r\n  @Input()\r\n  set displayMonth(value: NumberLike) {\r\n    const displayMonth = convertNumberLike(value);\r\n\r\n    if (displayMonth !== this._displayMonth) {\r\n      this._displayMonth = displayMonth;\r\n      this.updateDisplayDate();\r\n      this.createDates();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns the correctly converted year value.\r\n   * Even if displayYear and displayMonth are provided incorrectly, it returns the year value correctly converted from displayDate.\r\n   *\r\n   * For example, if displayYear is set to 1990 and displayMonth is set to 30, this returns 1992.\r\n   */\r\n  get correctDisplayYear(): number {\r\n    return this.displayDate.getFullYear();\r\n  }\r\n\r\n  /**\r\n   * Returns the correctly converted month value.\r\n   * Even if displayYear and displayMonth are provided incorrectly, it returns the month value correctly converted from displayDate.\r\n   *\r\n   * For example, if displayYear is set to 1990 and displayMonth is set to 30, this returns 6(July).\r\n   */\r\n  get correctDisplayMonth(): number {\r\n    return this.displayDate.getMonth();\r\n  }\r\n\r\n  /**\r\n   * Returns the year/month format to be displayed on the calendar.\r\n   * It uses Angular DatePipe's format option and the default value is 'yyyy MMM'.\r\n   * This returns the value provided by SplCalendarOptions.yearMonthFormat if provided.\r\n   */\r\n  get yearMonthFormat(): string {\r\n    return this._options?.yearMonthFormat || 'yyyy MMM';\r\n  }\r\n\r\n  /**\r\n   * Returns the timezone value to be used when applying date format.\r\n   * It uses Angular DatePipe's timezone option, default value is 'en-US'.\r\n   * This returns the value provided by SplCalendarOptions.dateFormatTimezone if provided.\r\n   */\r\n  get dateFormatTimezone(): string {\r\n    return this._options?.dateFormatTimezone || 'en-US';\r\n  }\r\n\r\n  /**\r\n   * Returns the label of the button that allows you to move to today's date.\r\n   * The default value is 'Today', and if SplCalendarOptions.todayButtonLabel is provided, it returns the provided value.\r\n   */\r\n  get todayButtonLabel(): string {\r\n    return this._options?.todayButtonLabel || 'Today';\r\n  }\r\n\r\n  /**\r\n   * Returns the day display format.\r\n   * It uses format option from Angular DatePipe, default value is 'E'.\r\n   * This returns the value provided by SplCalendarOptions.dayOfWeekFormat if provided.\r\n   */\r\n  get dayOfWeekFormat(): string {\r\n    return this._options?.dayOfWeekFormat || 'E';\r\n  }\r\n\r\n  /**\r\n   * Returns each date display format.\r\n   * It uses Angular DatePipe's format option and the default value is 'd'.\r\n   * This returns the value provided by SplCalendarOptions.dateFormat if provided.\r\n   */\r\n  get dateFormat(): string {\r\n    return this._options?.dateFormat || 'd';\r\n  }\r\n\r\n  ngOnInit() {\r\n    this._initDayOfWeeks();\r\n    this.createDates();\r\n  }\r\n\r\n  /**\r\n   * Update displayDate using the currently set displayYear and displayMonth.\r\n   * After displayDate is updated, displayYear and displayMonth are updated to the corrected values.\r\n   */\r\n  updateDisplayDate(): void {\r\n    this.displayDate = new Date(this.displayYear, this.displayMonth, 1);\r\n\r\n    this._displayYear = this.correctDisplayYear;\r\n    this._displayMonth = this.correctDisplayMonth;\r\n  }\r\n\r\n  /**\r\n   * Go to the previous month.\r\n   * It emits a new displayMonth value using the displayMonthChange emitter.\r\n   */\r\n  toPreviousMonth(): void {\r\n    this.displayMonth = this.displayMonth - 1;\r\n    this.displayMonthChange.emit(this.displayMonth);\r\n  }\r\n\r\n  /**\r\n   * Go to the next month.\r\n   * It emits a new displayMonth value using the displayMonthChange emitter.\r\n   */\r\n  toNextMonth(): void {\r\n    this.displayMonth = this.displayMonth + 1;\r\n    this.displayMonthChange.emit(this.displayMonth);\r\n  }\r\n\r\n  /**\r\n   * Go to the month with today's date.\r\n   * This emits displayYearChange and displayMonthChange emitters.\r\n   */\r\n  toToday(): void {\r\n    const today = new Date();\r\n\r\n    this.displayYear = today.getFullYear();\r\n    this.displayMonth = today.getMonth();\r\n\r\n    this.displayYearChange.emit(this.displayYear);\r\n    this.displayMonthChange.emit(this.displayMonth);\r\n  }\r\n\r\n  /**\r\n   * Create dates to display on the calendar.\r\n   * A total of 42 dates are created from the last Sunday of the previous month to the first Saturday of the next month,\r\n   * and the generated values vary depending on the current displayYear and displayMonth values.\r\n   */\r\n  createDates(): void {\r\n    this.dates = [];\r\n\r\n    const firstDateOfMonth = new Date(this.displayYear, this.displayMonth, 1);\r\n    const firstDayOfMonth = firstDateOfMonth.getDay();\r\n    const startingIndex = 1 - firstDayOfMonth;\r\n\r\n    for (let i = startingIndex; i < startingIndex + 42; i++) {\r\n      this.dates.push(new Date(this.displayYear, this.displayMonth, i));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks whether the given date is outside the currently displayed year and month.\r\n   * @param date - Date value to check.\r\n   */\r\n  isOutOfCalendar(date: Date): boolean {\r\n    const targetYear = date.getFullYear();\r\n    const targetMonth = date.getMonth();\r\n\r\n    return targetYear !== this.displayYear || targetMonth !== this.displayMonth;\r\n  }\r\n\r\n  /**\r\n   * Checks whether the given date is today's date.\r\n   * @param date - Date value to check.\r\n   */\r\n  isToday(date: Date): boolean {\r\n    return isSameDate(date, new Date());\r\n  }\r\n\r\n  /**\r\n   * Checks whether the given date is the selected date.\r\n   * It is checked in different ways depending on the Component's 'type' attribute.\r\n   * @param date - Date value to check.\r\n   */\r\n  isSelectedDate(date: Date): boolean {\r\n    if (!this.value) {\r\n      return false;\r\n    }\r\n\r\n    if (isSingleValueCalendar(this)) {\r\n      return isSameDate(date, this.value);\r\n    } else if (isMultiValueCalendar(this)) {\r\n      return !!this.value.find((value) => new ExtendedDate(date).isEqualTo(value, 'day'));\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * When the Component's 'type' attribute is 'ranged', it checks whether the given date is the start date.\r\n   * If the 'type' attribute is not 'ranged', it always returns false.\r\n   * @param date - Date value to check.\r\n   */\r\n  isStartDate(date: Date): boolean {\r\n    if (isRangedValueCalendar(this) && this.value && this.value[0]) {\r\n      return isSameDate(date, this.value[0]);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * When the Component's 'type' attribute is 'ranged', it checks whether the given date is the end date.\r\n   * If the 'type' attribute is not 'ranged', it always returns false.\r\n   * @param date - Date value to check.\r\n   */\r\n  isEndDate(date: Date): boolean {\r\n    if (isRangedValueCalendar(this) && this.value && this.value[1]) {\r\n      return isSameDate(date, this.value[1]);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * When the Component's 'type' attribute is 'ranged', it checks whether the given date is within the range or not.\r\n   * If the 'type' attribute is not 'ranged', it always returns false.\r\n   * @param date - Date value to check.\r\n   */\r\n  isRangedDate(date: Date): boolean {\r\n    if (isRangedValueCalendar(this) && this.value && this.value[0] && this.value[1]) {\r\n      const extendedDate = new ExtendedDate(date);\r\n\r\n      return (\r\n        extendedDate.isMoreThanOrEqualTo(this.value[0], 'day') && extendedDate.isLessThanOrEqualTo(this.value[1], 'day')\r\n      );\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Checks whether the given date is less than the Component's minDate.\r\n   * If minDate is null, it always returns false.\r\n   * @param date - Date value to check.\r\n   */\r\n  isLessThanMinDate(date: Date): boolean {\r\n    if (this.minDate) {\r\n      const extendedDate = new ExtendedDate(date);\r\n\r\n      return extendedDate.isLessThan(this.minDate, 'day');\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Checks whether the given date is more than the Component's maxDate.\r\n   * If maxDate is null, it always returns false.\r\n   * @param date - Date value to check.\r\n   */\r\n  isMoreThanMaxDate(date: Date): boolean {\r\n    if (this.maxDate) {\r\n      const extendedDate = new ExtendedDate(date);\r\n\r\n      return extendedDate.isMoreThan(this.maxDate, 'day');\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /** TrackBy function that identifies the uniqueness of each date. */\r\n  trackByFn(index: number, date: Date): string {\r\n    return date.toDateString();\r\n  }\r\n\r\n  /**\r\n   * This method handles the event that occurs when the date is clicked.\r\n   * It behaves differently depending on the 'type' attribute and emits the changed value via the valueChange emitter.\r\n   * @param date - Clicked date value.\r\n   */\r\n  onDateClick(date: Date): void {\r\n    const extendedDate = new ExtendedDate(date);\r\n\r\n    if (isSingleValueCalendar(this)) {\r\n      // Update single value.\r\n      this.valueChange.emit(date);\r\n    } else if (isRangedValueCalendar(this)) {\r\n      // Update ranged value.\r\n      let values = this.value as Nullable<RangedDate>;\r\n\r\n      if (!(values instanceof Array)) {\r\n        values = [null, null];\r\n      }\r\n\r\n      // Cases.\r\n      // When [null, null] -> Set to [date, null]\r\n      // When [value, null] -> When date >= value -> set to [value, date]\r\n      // When [value, null] -> When date < value -> set to [date, null]\r\n      // When [value, value] -> set to [date, null]\r\n      if (values[0] === null || (values[0] && values[1]) || extendedDate.isLessThan(values[0], 'day')) {\r\n        values = [date, null];\r\n      } else {\r\n        values = [values[0], date];\r\n      }\r\n\r\n      this.valueChange.emit(values);\r\n    } else if (isMultiValueCalendar(this)) {\r\n      // Update multi value.\r\n      let values = this.value as Nullable<Date[]>;\r\n\r\n      if (!(values instanceof Array)) {\r\n        values = [];\r\n      }\r\n\r\n      this._logger.debug(`Length of previous date values: ${values.length}`);\r\n\r\n      const filteredValues = values.filter((value) => !extendedDate.isEqualTo(value, 'day'));\r\n\r\n      this._logger.debug(`Length of filtered date values: ${filteredValues.length}`);\r\n\r\n      if (values.length === filteredValues.length) {\r\n        // Date isn't duplicated.\r\n        values = [...values, date];\r\n      } else {\r\n        // Date is duplicated.\r\n        values = filteredValues;\r\n      }\r\n\r\n      this.valueChange.emit(values);\r\n    }\r\n  }\r\n\r\n  /** Create the days of the week to appear on the calendar. */\r\n  private _initDayOfWeeks(): void {\r\n    for (let i = 1; i < 8; i++) {\r\n      this.dayOfWeeks.push(new Date(2023, 9, i));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * A function that checks whether the given 'component' has type 'single'.\r\n * In case of 'single' type, 'component' is defined as SplSingleValueCalendar interface.\r\n * @param component - Must be SplCalendarComponent.\r\n */\r\nexport function isSingleValueCalendar(component: any): component is SplSingleValueCalendar {\r\n  return component.type === 'single';\r\n}\r\n\r\n/**\r\n * A function that checks whether the given 'component' has type 'ranged'.\r\n * In case of 'ranged' type, 'component' is defined as SplRangedValueCalendar interface.\r\n * @param component - Must be SplCalendarComponent.\r\n */\r\nexport function isRangedValueCalendar(component: any): component is SplRangedValueCalendar {\r\n  return component.type === 'ranged';\r\n}\r\n\r\n/**\r\n * A function that checks whether the given 'component' has type 'multi'.\r\n * In case of 'multi' type, 'component' is defined as SplMultiValueCalendar interface.\r\n * @param component - Must be SplCalendarComponent.\r\n */\r\nexport function isMultiValueCalendar(component: any): component is SplMultiValueCalendar {\r\n  return component.type === 'multi';\r\n}\r\n","<div class=\"spl-calendar-header\">\r\n  <div class=\"spl-calendar-date\">\r\n    {{displayDate | date: yearMonthFormat: dateFormatTimezone}}\r\n  </div>\r\n\r\n  <div class=\"spl-calendar-buttons\">\r\n    <button\r\n      (click)=\"toPreviousMonth()\"\r\n      class=\"spl-icon-button\"\r\n      splButton>\r\n      <spl-icon weight=\"200\">chevron_left</spl-icon>\r\n    </button>\r\n\r\n    <button\r\n      (click)=\"toToday()\"\r\n      splButton>\r\n      {{todayButtonLabel}}\r\n    </button>\r\n\r\n    <button\r\n      (click)=\"toNextMonth()\"\r\n      class=\"spl-icon-button\"\r\n      splButton>\r\n      <spl-icon weight=\"200\">chevron_right</spl-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"spl-horizontal-line\"></div>\r\n\r\n<div class=\"spl-calendar-day-of-week\">\r\n  <div\r\n    *ngFor=\"let item of dayOfWeeks\"\r\n    class=\"spl-calendar-date\">\r\n    {{item | date: dayOfWeekFormat: dateFormatTimezone}}\r\n  </div>\r\n</div>\r\n\r\n<div class=\"spl-calendar-dates\">\r\n  @for (item of dates; track item.toString()) {\r\n    <ng-container\r\n      [ngTemplateOutlet]=\"dateTemplate\"\r\n      [ngTemplateOutletContext]=\"{\r\n        date: item,\r\n        selected: isSelectedDate(item),\r\n        today: isToday(item),\r\n        ranged: isRangedDate(item),\r\n        startDate: isStartDate(item),\r\n        endDate: isEndDate(item),\r\n        outOfCalendar: isOutOfCalendar(item) || isLessThanMinDate(item) || isMoreThanMaxDate(item),\r\n        disabled: isLessThanMinDate(item) || isMoreThanMaxDate(item),\r\n      }\"></ng-container>\r\n  }\r\n\r\n<!--  <div-->\r\n<!--    *ngFor=\"let item of dates; trackBy: trackByFn\"-->\r\n<!--    [class.spl-out-of-calendar]=\"isOutOfCalendar(item) || isLessThanMinDate(item) || isMoreThanMaxDate(item)\"-->\r\n<!--    [class.spl-selected]=\"isSelectedDate(item)\"-->\r\n<!--    [class.spl-today]=\"isToday(item)\"-->\r\n<!--    [class.spl-ranged]=\"isRangedDate(item)\"-->\r\n<!--    [class.spl-start-date]=\"isStartDate(item)\"-->\r\n<!--    [class.spl-end-date]=\"isEndDate(item)\"-->\r\n<!--    class=\"spl-calendar-date\">-->\r\n<!--    <button-->\r\n<!--      (click)=\"onDateClick(item)\"-->\r\n<!--      [disabled]=\"isLessThanMinDate(item) || isMoreThanMaxDate(item)\"-->\r\n<!--      class=\"spl-icon-button\"-->\r\n<!--      splButton>-->\r\n<!--      {{item | date: dateFormat: dateFormatTimezone}}-->\r\n<!--    </button>-->\r\n<!--  </div>-->\r\n</div>\r\n\r\n<ng-template\r\n  #dateTemplate\r\n  let-date=\"date\"\r\n  let-selected=\"selected\"\r\n  let-today=\"today\"\r\n  let-ranged=\"ranged\"\r\n  let-startDate=\"startDate\"\r\n  let-endDate=\"endDate\"\r\n  let-outOfCalendar=\"outOfCalendar\"\r\n  let-disabled=\"disabled\">\r\n  <div\r\n    [class.spl-out-of-calendar]=\"outOfCalendar\"\r\n    [class.spl-selected]=\"selected\"\r\n    [class.spl-today]=\"today\"\r\n    [class.spl-ranged]=\"ranged\"\r\n    [class.spl-start-date]=\"startDate\"\r\n    [class.spl-end-date]=\"endDate\"\r\n    class=\"spl-calendar-date\">\r\n    <button\r\n      (click)=\"onDateClick(date)\"\r\n      [disabled]=\"disabled\"\r\n      class=\"spl-icon-button\"\r\n      splButton>\r\n      @if (calendarDateDirective) {\r\n        <ng-container\r\n          [ngTemplateOutlet]=\"calendarDateDirective.templateRef\"\r\n          [ngTemplateOutletContext]=\"{\r\n            date,\r\n            selected,\r\n            today,\r\n            ranged,\r\n            startDate,\r\n            endDate,\r\n            outOfCalendar,\r\n            disabled,\r\n          }\"></ng-container>\r\n      } @else {\r\n        {{ date | date: dateFormat: dateFormatTimezone }}\r\n      }\r\n    </button>\r\n\r\n    @if (calendarDateExtraDirective) {\r\n      <ng-container\r\n        [ngTemplateOutlet]=\"calendarDateExtraDirective.templateRef\"\r\n        [ngTemplateOutletContext]=\"{\r\n          date,\r\n          selected,\r\n          today,\r\n          ranged,\r\n          startDate,\r\n          endDate,\r\n          outOfCalendar,\r\n          disabled,\r\n        }\"></ng-container>\r\n    }\r\n  </div>\r\n</ng-template>\r\n","import { Component, HostBinding, HostListener, Input } from '@angular/core';\r\nimport { SplControl } from '../../abstracts/spl-control';\r\nimport { BooleanAttribute } from '../../utils/type.util';\r\nimport { convertBooleanAttribute } from '../../utils/convert.util';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplIconComponent } from '../spl-icon/spl-icon.component';\r\n\r\n/**\r\n * Component that operates similarly to <input type=\"checkbox\"/>.\r\n * When the user clicks, the boolean value changes. This can also be done using the space key.\r\n */\r\n@Component({\r\n  selector: 'spl-checkbox',\r\n  templateUrl: './spl-checkbox.component.html',\r\n  host: {\r\n    class: 'spl-checkbox-button',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule, SplIconComponent],\r\n})\r\nexport class SplCheckboxComponent extends SplControl {\r\n  /**\r\n   * The current value of the Component.\r\n   * Binding class '.spl-active' according to the value.\r\n   */\r\n  @HostBinding('class.spl-active') value = false;\r\n\r\n  /** The focused state of the component. */\r\n  focused = false;\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  /** The current disabled state of the Component. */\r\n  private _disabled = false;\r\n\r\n  /**\r\n   * Returns the current disabled state of the Component.\r\n   * Bind the '.spl-disabled' class according to the value.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.spl-disabled')\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  /**\r\n   * Sets the current disabled state of the Component.\r\n   * @param value - Disabled state to set.\r\n   */\r\n  set disabled(value: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /** Returns tabindex according to disabled status and binds value to attribute. */\r\n  @HostBinding('attr.tabindex')\r\n  get tabindex(): string {\r\n    return this.disabled ? '-1' : '0';\r\n  }\r\n\r\n  /** Listen to the focus event of the host element to update the focused state to true. */\r\n  @HostListener('focus')\r\n  onHostFocus(): void {\r\n    this.focused = true;\r\n  }\r\n\r\n  /** Listen to the focus event of the host element to update the focused state to false. */\r\n  @HostListener('blur')\r\n  onHostBlur(): void {\r\n    this.focused = false;\r\n  }\r\n\r\n  /** Listen to the click event of the host element to switch the value. */\r\n  @HostListener('click')\r\n  onHostClick(): void {\r\n    this.switchValue();\r\n  }\r\n\r\n  /**\r\n   * Listen to the space keydown event of the host element to switch the boolean value.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.space', ['$event'])\r\n  onHostSpace(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    this.switchValue();\r\n  }\r\n\r\n  /** Switches the current value from true to false or vice versa. */\r\n  switchValue(): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    const value = !this.value;\r\n\r\n    this.valueChange(value);\r\n    this.writeValue(value);\r\n  }\r\n\r\n  /**\r\n   * Sets a new value for Component.\r\n   * @param obj - New value to set.\r\n   */\r\n  override writeValue(obj: any): void {\r\n    this.value = !!obj;\r\n  }\r\n\r\n  /**\r\n   * Sets the disabled state on the Component.\r\n   * @param isDisabled - Disabled state to set.\r\n   */\r\n  override setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n}\r\n","<div\r\n  [class.spl-active]=\"value\"\r\n  [class.spl-disabled]=\"disabled\"\r\n  [class.spl-focus]=\"focused\"\r\n  class=\"spl-checkbox spl-input\">\r\n  <spl-icon\r\n    class=\"spl-checkbox-check\"\r\n    weight=\"400\">done</spl-icon>\r\n</div>\r\n\r\n<div class=\"spl-checkbox-label\">\r\n  <ng-content></ng-content>\r\n</div>\r\n","import { Directive, HostBinding, inject } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n/**\r\n * This is a Directive that validates elements to which NgControl is bound.\r\n * Element must have [formControl] or [ngControl] bound, and this Directive is exported as 'controlValidator'.\r\n */\r\n@Directive({\r\n  selector: '[splControlValidator]',\r\n  exportAs: 'controlValidator',\r\n  standalone: true,\r\n})\r\nexport class SplControlValidatorDirective {\r\n  /** The NgControl bound to the element. */\r\n  private _ngControl: NgControl;\r\n\r\n  constructor() {\r\n    this._ngControl = inject(NgControl);\r\n  }\r\n\r\n  /**\r\n   * Returns whether the bound NgControl is invalid.\r\n   * If the NgControl is touched or dirty and the validity is invalid,\r\n   * it returns true and binds the '.spl-invalid' class to the element.\r\n   */\r\n  @HostBinding('class.spl-invalid')\r\n  get invalid(): boolean {\r\n    return !!(this._ngControl.invalid && (this._ngControl.dirty || this._ngControl.touched));\r\n  }\r\n\r\n  /**\r\n   * Returns whether the bound NgControl has the given error.\r\n   * @param error - Error to check.\r\n   */\r\n  hasError(error: string): boolean {\r\n    return this._ngControl.hasError(error);\r\n  }\r\n}\r\n","import { Provider } from '@angular/core';\r\n\r\n/** InjectionToken for SplDateInputOptions. */\r\nexport const SPL_DATE_INPUT_PROVIDER = 'SPL_DATE_INPUT_PROVIDER';\r\n\r\n/**\r\n * This is a function that creates a Provider for SplDateInputOptions.\r\n * @param options - Options for customizing SplDateInputComponent.\r\n */\r\nexport function createSplDateInputProvider(options: SplDateInputOptions = {}): Provider {\r\n  return {\r\n    provide: SPL_DATE_INPUT_PROVIDER,\r\n    useValue: options,\r\n  };\r\n}\r\n\r\n/**\r\n * Options for customizing SplDateInputComponent.\r\n * Date format conversion uses Angular DatePipe.\r\n */\r\nexport interface SplDateInputOptions {\r\n  /**\r\n   * Sets the label of the confirm button of SplDateInputCalendarModalComponent.\r\n   * If undefined, the default value is 'Confirm'.\r\n   */\r\n  modalConfirmLabel?: string;\r\n\r\n  /**\r\n   * Specifies the date format to be inputted into the <input/> element.\r\n   * If undefined, the default value is 'yyyy-MM-dd'.\r\n   */\r\n  dateFormat?: string;\r\n\r\n  /**\r\n   * Specifies the locale of the date format to be inputted into the <input/> element.\r\n   * If undefined, the default value is 'en-US'.\r\n   */\r\n  dateLocale?: string;\r\n}\r\n","import { Component, HostListener, Inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplModalRef } from '../../services/spl-modal.service';\r\nimport { SplLogger } from '../../utils/logger.util';\r\nimport { SplFadeInAnimator } from '../../abstracts/spl-fade-in-animator';\r\n\r\n/**\r\n * This is the backdrop for the Modal Component.\r\n * SplModalRef of the related modal is provided, and the modal is closed when the host element is clicked.\r\n */\r\n@Component({\r\n  selector: 'spl-modal-backdrop',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  template: '',\r\n  host: {\r\n    class: 'spl-modal-backdrop',\r\n  },\r\n})\r\nexport class SplModalBackdropComponent extends SplFadeInAnimator {\r\n  /** Logger for SplModalBackdropComponent. */\r\n  private readonly _logger = new SplLogger('SplModalBackdropComponent');\r\n\r\n  constructor(@Inject(SplModalRef) private _modalRef: SplModalRef) {\r\n    super();\r\n  }\r\n\r\n  /** Close the modal by listening to the click event of the host element. */\r\n  @HostListener('click')\r\n  close(): void {\r\n    this._logger.debug('Backdrop is clicked');\r\n    this._modalRef.close();\r\n  }\r\n}\r\n","import { Component, ElementRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplFadeInSlideUpAnimator } from '../../abstracts/spl-fade-in-slide-up-animator';\r\n\r\n/**\r\n * This is a wrapper for Modal Component.\r\n * All modals are created within the wrapper and have a consistent shape.\r\n */\r\n@Component({\r\n  selector: 'spl-modal-wrapper',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './spl-modal-wrapper.component.html',\r\n  host: {\r\n    class: 'spl-modal-wrapper',\r\n  },\r\n})\r\nexport class SplModalWrapperComponent extends SplFadeInSlideUpAnimator {\r\n  /** ViewContainerRef of the container where the modal component will be rendered. */\r\n  @ViewChild('container', { read: ViewContainerRef }) viewContainerRef!: ViewContainerRef;\r\n\r\n  /** ElementRef for a modal container. */\r\n  @ViewChild('modalContainer', { read: ElementRef }) modalContainerRef!: ElementRef<HTMLElement>;\r\n}\r\n","<div\r\n  #modalContainer\r\n  class=\"spl-modal-container\">\r\n  <ng-container #container></ng-container>\r\n</div>\r\n","import { Component, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * This is an outlet component that can render various types of overlays.\r\n * When SplOverlayService is injected, it is automatically created under the body, and all overlays are created within it.\r\n * There can only be one in the entire app.\r\n */\r\n@Component({\r\n  selector: 'spl-overlay-outlet',\r\n  templateUrl: './spl-overlay-outlet.component.html',\r\n  host: {\r\n    class: 'spl-overlay-outlet',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplOverlayOutletComponent {\r\n  /** The ViewContainerRef that will render the overlay. */\r\n  @ViewChild('container', { read: ViewContainerRef }) viewContainerRef!: ViewContainerRef;\r\n}\r\n","<ng-container #container></ng-container>\r\n","import {\r\n  ApplicationRef,\r\n  ComponentRef,\r\n  EventEmitter,\r\n  inject,\r\n  Injectable,\r\n  Injector,\r\n  PLATFORM_ID,\r\n  Type,\r\n  ViewContainerRef,\r\n} from '@angular/core';\r\nimport { SplOverlayOutletComponent } from '../components/spl-overlay-outlet/spl-overlay-outlet.component';\r\nimport { SplLogger } from '../utils/logger.util';\r\nimport { CanUndefined } from '../utils/type.util';\r\nimport { SplOverlayServiceLike } from '../interfaces/spl-overlay-service-like';\r\nimport { SplOverlayRefLike } from '../interfaces/spl-overlay-ref-like';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { SplOverlayBaseOptions } from '../interfaces/spl-overlay-base-options';\r\nimport { SplOverlayRefCommonOptions } from '../interfaces/spl-overlay-ref-common-options';\r\nimport { SplError } from '../utils/error.util';\r\n\r\n/**\r\n * A service for opening a component as an overlay.\r\n * Because SplOverlayService is injected and used internally, the overlay is created within SplOverlayOutletComponent.\r\n */\r\nexport interface SplOverlayOptions<Data> extends SplOverlayBaseOptions<Data> {\r\n  /** */\r\n  backdrop?: Type<any>;\r\n}\r\n\r\n/** Injection token for data to be injected into the overlay. */\r\nexport const SPL_OVERLAY_DATA = 'SPL_OVERLAY_DATA';\r\n\r\n/**\r\n * A service for opening a component as an overlay.\r\n * It manages basic overlays and all overlay-like components should be rendered inside the registered outlet of this service.\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SplOverlayService implements SplOverlayServiceLike {\r\n  /**\r\n   * Array of all opened SplOverlayRefs.\r\n   * Every SplOverlayRefLike must be managed by adding to this array.\r\n   */\r\n  readonly openedOverlays: SplOverlayRef[] = [];\r\n\r\n  /** Logger for SplOverlayService. */\r\n  private readonly _logger = new SplLogger('SplOverlayService');\r\n\r\n  /** Current running platform id. */\r\n  private readonly _platformId: Object;\r\n\r\n  /** Injected Document object to listen 'escape' keydown event. */\r\n  private readonly _document: Document;\r\n\r\n  /** Injected ApplicationRef to get ViewContainerRef of AppRoot. */\r\n  private readonly _applicationRef: ApplicationRef;\r\n\r\n  /** Injected ViewContainerRef fo AppRoot to render SplOverlayOutletComponent. */\r\n  private _rootViewContainerRef?: ViewContainerRef;\r\n\r\n  /** ComponentRef of rendered SplOverlayOutletComponent. */\r\n  private _overlayOutletComponentRef?: ComponentRef<SplOverlayOutletComponent>;\r\n\r\n  /** Interval timer for waiting for the ready state of AppComponent. */\r\n  private _initializeTimer: any;\r\n\r\n  constructor() {\r\n    this._platformId = inject(PLATFORM_ID);\r\n    this._document = inject(DOCUMENT);\r\n    this._applicationRef = inject(ApplicationRef);\r\n\r\n    if (isPlatformBrowser(this._platformId)) {\r\n      this._initializeOutlet();\r\n\r\n      this._document.addEventListener('keydown', (event: KeyboardEvent) => {\r\n        if (event.key === 'Escape') {\r\n          this.closeLatest();\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  /** Returns ViewContainerRef of AppRoot. */\r\n  get outletViewContainerRef(): CanUndefined<ViewContainerRef> {\r\n    return this._overlayOutletComponentRef?.instance.viewContainerRef;\r\n  }\r\n\r\n  /**\r\n   * Opens the component as an overlay and returns SplOverlayRef.\r\n   * If the component is already open and multi option is false, an already open SplOverlayRef is returned.\r\n   * @param component - A component to be opened as an overlay.\r\n   * @param options - Options to apply when opening the overlay.\r\n   */\r\n  open<Comp, Data = any, Result = any>(\r\n    component: Type<Comp>,\r\n    options: SplOverlayOptions<Data> = {},\r\n  ): SplOverlayRef<Comp, Data, Result> {\r\n    if (!this.outletViewContainerRef) {\r\n      throw new SplError('outletViewContainerRef is not ready');\r\n    }\r\n\r\n    const { multi = false } = options;\r\n\r\n    const existingOverlayRef = this.findOverlayRef(component);\r\n\r\n    if (existingOverlayRef && !multi) {\r\n      return existingOverlayRef as SplOverlayRef<Comp, Data, Result>;\r\n    }\r\n\r\n    const overlayRef = new SplOverlayRef<Comp, Data, Result>({\r\n      ...options,\r\n      component,\r\n      viewContainerRef: this.outletViewContainerRef,\r\n      service: this,\r\n    });\r\n\r\n    this.openedOverlays.push(overlayRef);\r\n\r\n    return overlayRef;\r\n  }\r\n\r\n  /**\r\n   * Closes the given SplOverlayRef.\r\n   * If you provide a result, you can pass the value to the onClose emitter.\r\n   * @param overlayRef - SplOverlayRef to close.\r\n   * @param result - Result to be passed to the onClose emitter.\r\n   */\r\n  close(overlayRef: SplOverlayRefLike<any, any, any, any>, result?: any): void {\r\n    const index = this.openedOverlays.findIndex((overlayRefItem) => overlayRefItem === overlayRef);\r\n\r\n    if (index !== -1) {\r\n      this.openedOverlays.splice(index, 1);\r\n    }\r\n\r\n    overlayRef.onClose.emit(result);\r\n    overlayRef.destroy();\r\n  }\r\n\r\n  /** Close the last opened SplModalRef. */\r\n  closeLatest(): void {\r\n    const lastOpenedOverlay = this.openedOverlays.pop();\r\n\r\n    if (lastOpenedOverlay) {\r\n      this.close(lastOpenedOverlay);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Appends an OverlayRefLike to manage by this service.\r\n   * @param overlayRefLike - Class implements SplOverlayRefLike.\r\n   */\r\n  appendOpenedOverlay(overlayRefLike: SplOverlayRefLike<any, any, any, any>): void {\r\n    this.openedOverlays.push(overlayRefLike as any);\r\n  }\r\n\r\n  /**\r\n   * Find an opened SplOverlayRefLike with given component from the opened overlays.\r\n   * It returns only the first SplOverlayRefLike found.\r\n   * @param component - Component to find an opened overlay.\r\n   */\r\n  findOverlayRef(component: Type<any>): CanUndefined<SplOverlayRefLike<any, any, any, any>> {\r\n    return this.openedOverlays.find((openedOverlayItem) => openedOverlayItem.componentRef.componentType === component);\r\n  }\r\n\r\n  /** After waiting for the AppComponent to be ready, initialize the overlay outlet. */\r\n  private _initializeOutlet(): void {\r\n    clearInterval(this._initializeTimer);\r\n\r\n    this._initializeTimer = setInterval(() => {\r\n      if (this._applicationRef.components[0]) {\r\n        this._rootViewContainerRef = this._applicationRef.components[0].injector.get(ViewContainerRef);\r\n        this._overlayOutletComponentRef = this._rootViewContainerRef.createComponent(SplOverlayOutletComponent);\r\n\r\n        clearInterval(this._initializeTimer);\r\n\r\n        this._logger.debug('OverlayOutlet is initialized');\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\n/**\r\n * Reference class for a component opened as an overlay.\r\n * It renders backdrop, and component to outlet, and provides methods to manage overlay.\r\n */\r\nexport class SplOverlayRef<Comp = any, Data = any, Result = any>\r\n  implements SplOverlayRefLike<SplOverlayService, Comp, any, Result>\r\n{\r\n  /** ComponentRef for open backdrop. */\r\n  readonly backdropRef?: ComponentRef<any>;\r\n\r\n  /** ComponentRef for open component. */\r\n  readonly componentRef: ComponentRef<Comp>;\r\n\r\n  /** SplOverlayService. */\r\n  readonly service: SplOverlayService;\r\n\r\n  /**\r\n   * Emitter to be emitted when the modal is closed.\r\n   * Result value can be passed.\r\n   */\r\n  onClose = new EventEmitter<CanUndefined<Result>>();\r\n\r\n  /** Closed state of modal. */\r\n  closed = false;\r\n\r\n  /** Logger for SplOverlayRef. */\r\n  private readonly _logger = new SplLogger('SplOverlayRef');\r\n\r\n  constructor(options: SplOverlayOptions<Data> & SplOverlayRefCommonOptions<SplOverlayService, Comp>) {\r\n    const {\r\n      component,\r\n      viewContainerRef,\r\n      styles = {},\r\n      classes = [],\r\n      data = {},\r\n      backdrop,\r\n      service,\r\n      providers = [],\r\n    } = options;\r\n\r\n    this.service = service;\r\n\r\n    if (backdrop) {\r\n      this.backdropRef = viewContainerRef.createComponent(backdrop);\r\n\r\n      this.backdropRef.changeDetectorRef.detectChanges();\r\n    }\r\n\r\n    // Create component.\r\n    this.componentRef = viewContainerRef.createComponent(component, {\r\n      injector: Injector.create({\r\n        providers: [\r\n          ...providers,\r\n          {\r\n            provide: SPL_OVERLAY_DATA,\r\n            useValue: data,\r\n          },\r\n          {\r\n            provide: SplOverlayRef,\r\n            useValue: this,\r\n          },\r\n        ],\r\n      }),\r\n    });\r\n\r\n    this.updateStyles(styles);\r\n    this.addClasses('spl-overlay', ...classes);\r\n\r\n    this.componentRef.changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  /** Destroy the ComponentRef of the backdrop and wrapper. */\r\n  destroy(): void {\r\n    this._logger.debug('Destroy overlay component and backdrop');\r\n    this.componentRef.destroy();\r\n    this.backdropRef?.destroy();\r\n  }\r\n\r\n  /**\r\n   * Closes the current component with the result.\r\n   * The result is emitted through the onClose emitter.\r\n   * @param result - Result to be passed to onClose emitter.\r\n   */\r\n  close(result?: Result): void {\r\n    if (!this.closed) {\r\n      this.closed = true;\r\n      this._logger.debug('Close overlayRef');\r\n      this.service.close(this, result);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update the style of the open component.\r\n   * @param styles - This must be a partial object of CSSStyleDeclaration.\r\n   */\r\n  updateStyles(styles: Partial<CSSStyleDeclaration>): void {\r\n    if (!this.closed) {\r\n      for (const stylesKey in styles) {\r\n        this.componentRef.location.nativeElement.style[stylesKey] = styles[stylesKey];\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Adds additional classes to the open component.\r\n   * @param classes - Classes to add.\r\n   */\r\n  addClasses(...classes: string[]): void {\r\n    if (!this.closed) {\r\n      this.componentRef.location.nativeElement.classList.add(...classes);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Removes classes from the open component.\r\n   * @param classes - Classes to remove.\r\n   */\r\n  removeClasses(...classes: string[]): void {\r\n    if (!this.closed) {\r\n      this.componentRef.location.nativeElement.classList.remove(...classes);\r\n    }\r\n  }\r\n}\r\n","import { ComponentRef, EventEmitter, Injectable, Injector, Type } from '@angular/core';\r\nimport { SplLogger } from '../utils/logger.util';\r\nimport { CanUndefined } from '../utils/type.util';\r\nimport { SplModalBackdropComponent } from '../components/spl-modal-backdrop/spl-modal-backdrop.component';\r\nimport { SplModalWrapperComponent } from '../components/spl-modal-wrapper/spl-modal-wrapper.component';\r\nimport { SplOverlayService } from './spl-overlay.service';\r\nimport { SplOverlayRefLike } from '../interfaces/spl-overlay-ref-like';\r\nimport { SplOverlayServiceLike } from '../interfaces/spl-overlay-service-like';\r\nimport { SplOverlayBaseOptions } from '../interfaces/spl-overlay-base-options';\r\nimport { SplOverlayRefCommonOptions } from '../interfaces/spl-overlay-ref-common-options';\r\nimport { SplError } from '../utils/error.util';\r\n\r\n/** Injection token for data to be injected into the modal. */\r\nexport const SPL_MODAL_DATA = 'SPL_MODAL_DATA';\r\n\r\n/**\r\n * A service for opening a component as a modal.\r\n * Because SplOverlayService is injected and used internally, the modal is created within SplOverlayOutletComponent.\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SplModalService implements SplOverlayServiceLike {\r\n  constructor(private _overlayService: SplOverlayService) {}\r\n\r\n  /**\r\n   * Opens the component as a modal overlay and returns SplModalRef.\r\n   * If the component is already open and multi option is false, an already open SplModalRef is returned.\r\n   * @param component - A component to be opened as a modal.\r\n   * @param options - Options to apply when opening the modal.\r\n   */\r\n  open<Comp, Data = any, Result = any>(\r\n    component: Type<Comp>,\r\n    options: SplOverlayBaseOptions<Data> = {},\r\n  ): SplModalRef<Comp, Data, Result> {\r\n    if (!this._overlayService.outletViewContainerRef) {\r\n      throw new SplError('outletViewContainerRef is not ready');\r\n    }\r\n\r\n    const { multi = false } = options;\r\n\r\n    const existingModalRef = this._overlayService.findOverlayRef(component);\r\n\r\n    if (existingModalRef && !multi) {\r\n      return existingModalRef as SplModalRef<Comp, Data, Result>;\r\n    }\r\n\r\n    const modalRef = new SplModalRef<Comp, Data, Result>({\r\n      ...options,\r\n      component,\r\n      viewContainerRef: this._overlayService.outletViewContainerRef,\r\n      service: this,\r\n    });\r\n\r\n    this._overlayService.appendOpenedOverlay(modalRef);\r\n\r\n    return modalRef;\r\n  }\r\n\r\n  /**\r\n   * Closes the given SplModalRef.\r\n   * If you provide a result, you can pass the value to the onClose emitter.\r\n   * @param modalRef - SplModalRef to close.\r\n   * @param result - Result to be passed to the onClose emitter.\r\n   */\r\n  close(modalRef: SplModalRef, result?: any): void {\r\n    this._overlayService.close(modalRef, result);\r\n  }\r\n\r\n  /** Close the last opened SplModalRef. */\r\n  closeLatest(): void {\r\n    const { openedOverlays } = this._overlayService;\r\n\r\n    let latestModalRef: CanUndefined<SplModalRef> = undefined;\r\n\r\n    for (let i = openedOverlays.length - 1; i > -1; i--) {\r\n      const overlayRef = openedOverlays[i] as SplOverlayRefLike<any, any, any, any>;\r\n\r\n      if (overlayRef instanceof SplModalRef) {\r\n        latestModalRef = overlayRef;\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (latestModalRef) {\r\n      this._overlayService.close(latestModalRef);\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Reference class for a component opened as a modal.\r\n * It renders backdrop, wrapper, and component to outlet, and provides methods to manage modal.\r\n */\r\nexport class SplModalRef<Comp = any, Data = any, Result = any>\r\n  implements SplOverlayRefLike<SplModalService, Comp, SplModalBackdropComponent, Result>\r\n{\r\n  /** ComponentRef for open component. */\r\n  readonly componentRef: ComponentRef<Comp>;\r\n\r\n  /** ComponentRef for modal backdrop. */\r\n  readonly backdropRef: ComponentRef<SplModalBackdropComponent>;\r\n\r\n  /** ComponentRef for modal wrapper. */\r\n  readonly wrapperRef: ComponentRef<SplModalWrapperComponent>;\r\n\r\n  /** SplModalService. */\r\n  readonly service: SplModalService;\r\n\r\n  /**\r\n   * Emitter to be emitted when the modal is closed.\r\n   * Result value can be passed.\r\n   */\r\n  onClose = new EventEmitter<CanUndefined<Result>>();\r\n\r\n  /** Closed state of modal. */\r\n  closed = false;\r\n\r\n  /** Logger for SplModalRef. */\r\n  private readonly _logger = new SplLogger('SplModalRef');\r\n\r\n  constructor(options: SplOverlayBaseOptions<Data> & SplOverlayRefCommonOptions<SplModalService, Comp>) {\r\n    const { component, viewContainerRef, styles = {}, classes = [], data = {}, service, providers = [] } = options;\r\n\r\n    this.service = service;\r\n    this.backdropRef = viewContainerRef.createComponent(SplModalBackdropComponent, {\r\n      injector: Injector.create({\r\n        providers: [\r\n          ...providers,\r\n          {\r\n            provide: SplModalRef,\r\n            useValue: this,\r\n          },\r\n        ],\r\n      }),\r\n    });\r\n\r\n    this.backdropRef.changeDetectorRef.detectChanges();\r\n\r\n    this.wrapperRef = viewContainerRef.createComponent(SplModalWrapperComponent);\r\n\r\n    this.wrapperRef.changeDetectorRef.detectChanges();\r\n\r\n    this.componentRef = this.wrapperRef.instance.viewContainerRef.createComponent(component, {\r\n      injector: Injector.create({\r\n        providers: [\r\n          ...providers,\r\n          {\r\n            provide: SPL_MODAL_DATA,\r\n            useValue: data,\r\n          },\r\n          {\r\n            provide: SplModalRef,\r\n            useValue: this,\r\n          },\r\n        ],\r\n      }),\r\n    });\r\n\r\n    this.updateStyles(styles);\r\n    this.addClasses('spl-modal', ...classes);\r\n\r\n    this.componentRef.changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  /** Destroy the ComponentRef of the backdrop and wrapper. */\r\n  destroy(): void {\r\n    this._logger.debug('Destroy modal component and backdrop');\r\n\r\n    // The component is rendered inside the wrapper, and since the wrapper has animation,\r\n    // the ComponentRef of the wrapper, not the component, is destroyed.\r\n    this.wrapperRef.destroy();\r\n    this.backdropRef.destroy();\r\n  }\r\n\r\n  /**\r\n   * Closes the current component with the result.\r\n   * The result is emitted through the onClose emitter.\r\n   * @param result - Result to be passed to onClose emitter.\r\n   */\r\n  close(result?: Result): void {\r\n    if (!this.closed) {\r\n      this.closed = true;\r\n      this._logger.debug('Close modalRef');\r\n      this.service.close(this, result);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update the style of the wrapper.\r\n   * @param styles - This must be a partial object of CSSStyleDeclaration.\r\n   */\r\n  updateStyles(styles: Partial<CSSStyleDeclaration>): void {\r\n    if (!this.closed) {\r\n      for (const stylesKey in styles) {\r\n        this.wrapperRef.instance.modalContainerRef.nativeElement.style[stylesKey] = styles[stylesKey]!;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Adds additional classes to the wrapper.\r\n   * @param classes - Classes to add.\r\n   */\r\n  addClasses(...classes: string[]): void {\r\n    if (!this.closed) {\r\n      this.wrapperRef.instance.modalContainerRef.nativeElement.classList.add(...classes);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Removes classes from the wrapper.\r\n   * @param classes - Classes to remove.\r\n   */\r\n  removeClasses(...classes: string[]): void {\r\n    if (!this.closed) {\r\n      this.wrapperRef.instance.modalContainerRef.nativeElement.classList.remove(...classes);\r\n    }\r\n  }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * This is a component for modal actions.\r\n * The element to which SplModalActionDirective is bound can be displayed.\r\n * SplModalActionDirective is displayed stacked in column direction.\r\n */\r\n@Component({\r\n  selector: 'spl-modal-actions',\r\n  templateUrl: './spl-modal-actions.component.html',\r\n  host: {\r\n    class: 'spl-modal-actions',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplModalActionsComponent {}\r\n","<ng-content select=\"[splModalAction]\"></ng-content>\r\n","import { Directive } from '@angular/core';\r\n\r\n/**\r\n * This is a Directive that can display bound elements as action items of SplModalActionsComponent.\r\n * Each SplModalActionDirective is displayed stacked in column direction inside the SplModalActionsComponent.\r\n */\r\n@Directive({\r\n  selector: '[splModalAction]',\r\n  host: {\r\n    class: 'spl-modal-action',\r\n  },\r\n  standalone: true,\r\n})\r\nexport class SplModalActionDirective {}\r\n","import { Component, Inject, OnInit, Optional } from '@angular/core';\r\nimport { SPL_DATE_INPUT_PROVIDER, SplDateInputOptions } from '../spl-date-input-provider';\r\nimport { Nullable } from '../../../utils/type.util';\r\nimport { SPL_MODAL_DATA, SplModalRef } from '../../../services/spl-modal.service';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplCalendarComponent } from '../../spl-calendar/spl-calendar.component';\r\nimport { SplModalActionsComponent } from '../../spl-modal/spl-modal-actions/spl-modal-actions.component';\r\nimport { SplStrokeButtonDirective } from '../../spl-button/spl-stroke-button.directive';\r\nimport { SplModalActionDirective } from '../../spl-modal/spl-modal-actions/spl-modal-action.directive';\r\n\r\n/**\r\n * This is the definition of data provided to SplDateInputCalendarModalComponent.\r\n * Data is provided using the SPL_MODAL_DATA injection token.\r\n */\r\nexport interface SplDateInputCalendarData {\r\n  /** The current value of SplDateInputComponent. */\r\n  selectedDate: Nullable<Date>;\r\n\r\n  /**\r\n   * This is the minDate of SplDateInputComponent.\r\n   * Specifies the minimum selectable date in SplCalendarComponent.\r\n   */\r\n  minDate: Nullable<Date>;\r\n\r\n  /**\r\n   * This is the maxDate of SplDateInputComponent.\r\n   * Specifies the maximum selectable date in SplCalendarComponent.\r\n   */\r\n  maxDate: Nullable<Date>;\r\n}\r\n\r\n/** This is a modal that allows the user to select the date to input into SplDateInputComponent. */\r\n@Component({\r\n  selector: 'spl-date-input-calendar-modal',\r\n  templateUrl: './spl-date-input-calendar-modal.component.html',\r\n  host: {\r\n    class: 'spl-date-input-calendar-modal',\r\n  },\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    SplCalendarComponent,\r\n    SplModalActionsComponent,\r\n    SplStrokeButtonDirective,\r\n    SplModalActionDirective,\r\n  ],\r\n})\r\nexport class SplDateInputCalendarModalComponent implements OnInit {\r\n  /** The currently selected date in SplCalendarComponent. */\r\n  selectedDate: Nullable<Date> = null;\r\n\r\n  /** Today's date to get the initial displayYear and displayMonth. */\r\n  private _today = new Date();\r\n\r\n  constructor(\r\n    @Inject(SPL_DATE_INPUT_PROVIDER) @Optional() private _options: SplDateInputOptions,\r\n    @Inject(SPL_MODAL_DATA) private _data: SplDateInputCalendarData,\r\n    @Inject(SplModalRef) private _modalRef: SplModalRef<SplDateInputCalendarData, Nullable<Date>>,\r\n  ) {}\r\n\r\n  /**\r\n   * Returns a minDate passed from SplDateInputComponent.\r\n   * Specifies the minimum selectable date.\r\n   */\r\n  get minDate(): Nullable<Date> {\r\n    return this._data.minDate;\r\n  }\r\n\r\n  /**\r\n   * Returns a maxDate passed from SplDateInputComponent.\r\n   * Specifies the maximum selectable date.\r\n   */\r\n  get maxDate(): Nullable<Date> {\r\n    return this._data.maxDate;\r\n  }\r\n\r\n  /**\r\n   * Returns the label of the Confirm button.\r\n   * If SplDateInputOptions.modalConfirmLabel is provided, that will be returned.\r\n   * The default value is 'Confirm'.\r\n   */\r\n  get modalConfirmLabel(): string {\r\n    return this._options?.modalConfirmLabel || 'Confirm';\r\n  }\r\n\r\n  /**\r\n   * Returns displayYear for SplCalendarComponent.\r\n   * If there is a selectedDate, the displayYear of the selectedDate is returned; otherwise, the year of today's date is returned.\r\n   */\r\n  get displayYear(): number {\r\n    return this.selectedDate ? this.selectedDate.getFullYear() : this._today.getFullYear();\r\n  }\r\n\r\n  /**\r\n   * Returns displayMonth for SplCalendarComponent.\r\n   * If there is a selectedDate, the displayMonth of the selectedDate is returned; otherwise, the month of today's date is returned.\r\n   */\r\n  get displayMonth(): number {\r\n    return this.selectedDate ? this.selectedDate.getMonth() : this._today.getMonth();\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.selectedDate = this._data.selectedDate;\r\n  }\r\n\r\n  /**\r\n   * Close the modal with the given date value.\r\n   * @param date - Date to return as result.\r\n   */\r\n  close(date?: Nullable<Date>): void {\r\n    this._modalRef.close(date);\r\n  }\r\n}\r\n","<spl-calendar\r\n  [(value)]=\"selectedDate\"\r\n  [minDate]=\"minDate\"\r\n  [maxDate]=\"maxDate\"\r\n  [displayYear]=\"displayYear\"\r\n  [displayMonth]=\"displayMonth\"></spl-calendar>\r\n\r\n<spl-modal-actions>\r\n  <button\r\n    (click)=\"close(selectedDate)\"\r\n    splStrokeButton\r\n    splModalAction>\r\n    {{modalConfirmLabel}}\r\n  </button>\r\n</spl-modal-actions>\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostBinding,\r\n  HostListener,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  Optional,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SplModalService } from '../../services/spl-modal.service';\r\nimport { SplDateInputCalendarModalComponent } from './spl-date-input-calendar-modal/spl-date-input-calendar-modal.component';\r\nimport { SplControl } from '../../abstracts/spl-control';\r\nimport { BooleanAttribute, Nullable } from '../../utils/type.util';\r\nimport { convertBooleanAttribute } from '../../utils/convert.util';\r\nimport { Subscription } from 'rxjs';\r\nimport { isValidDate } from '../../utils/date.util';\r\nimport { SPL_DATE_INPUT_PROVIDER, SplDateInputOptions } from './spl-date-input-provider';\r\nimport { CommonModule, formatDate } from '@angular/common';\r\nimport { SplFocusable } from '../../interfaces/spl-focusable';\r\nimport { SplButtonDirective } from '../spl-button/spl-button.directive';\r\nimport { SplIconComponent } from '../spl-icon/spl-icon.component';\r\nimport { SplLogger } from '../../utils/logger.util';\r\nimport { SPL_CALENDAR_PROVIDER, SplCalendarOptions } from '../spl-calendar/spl-calendar-provider';\r\n\r\n/**\r\n * This is a component that allows you to input a date.\r\n * Users can input the date directly into the <input/> element or select the date using SplCalendarComponent.\r\n *\r\n * You can also customize the date display format by providing SplDateInputOptions.\r\n * For more information, see SplDateInputOptions.\r\n */\r\n@Component({\r\n  selector: 'spl-date-input',\r\n  templateUrl: './spl-date-input.component.html',\r\n  host: {\r\n    class: 'spl-input spl-date-input',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule, SplButtonDirective, SplIconComponent],\r\n})\r\nexport class SplDateInputComponent extends SplControl implements AfterViewInit, OnDestroy, SplFocusable {\r\n  /** Sets the placeholder to display in the <input/> element. */\r\n  @Input() placeholder = '';\r\n\r\n  /**\r\n   * Sets the minimum selectable date in SplCalendarComponent.\r\n   * Since this does not validate the Control, if you need to validate the Control,\r\n   * you can use the minDate() validator function.\r\n   */\r\n  @Input() minDate: Nullable<Date> = null;\r\n\r\n  /**\r\n   * Sets the maximum selectable date in SplCalendarComponent.\r\n   * Since this does not validate the Control, if you need to validate the Control,\r\n   * you can use the maxDate() validator function.\r\n   */\r\n  @Input() maxDate: Nullable<Date> = null;\r\n\r\n  /**\r\n   * This is a focus emitter that will be emitted when the <input/> element of the Component is focused.\r\n   * This overwrites the host element's focus event.\r\n   */\r\n  @Output('focus') inputFocused = new EventEmitter<FocusEvent>();\r\n\r\n  /**\r\n   * This is a blur emitter that will be emitted when the <input/> element of the Component is blurred.\r\n   * This overwrites the host element's blur event.\r\n   */\r\n  @Output('blur') inputBlurred = new EventEmitter<FocusEvent>();\r\n\r\n  /** ElementRef selector for the <input/> element. */\r\n  @ViewChild('input', { read: ElementRef }) inputElementRef!: ElementRef<HTMLInputElement>;\r\n\r\n  /**\r\n   * This is the focused state of the Component.\r\n   * Binds the '.spl-focus' class according to the value.\r\n   */\r\n  @HostBinding('class.spl-focus') focused = false;\r\n\r\n  /**\r\n   * The open state of SplCalendarComponent.\r\n   * Binds the '.spl-opened' class according to the value.\r\n   */\r\n  @HostBinding('class.spl-opened') modalOpened = false;\r\n\r\n  /** The current Date value of the Component. */\r\n  value: Nullable<Date> = null;\r\n\r\n  /** A subscription to subscribe to the onClose emitter of SplCalendarComponent. */\r\n  private _modalCloseSubscription?: Subscription;\r\n\r\n  /** Logger for SplDateInputComponent. */\r\n  private readonly _logger = new SplLogger('SplDateInputComponent');\r\n\r\n  constructor(\r\n    @Inject(SPL_DATE_INPUT_PROVIDER) @Optional() private _dateOptions: SplDateInputOptions,\r\n    @Inject(SPL_CALENDAR_PROVIDER) @Optional() private _calendarOptions: SplCalendarOptions,\r\n    private _modalService: SplModalService,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  /** The current disabled state of the Component. */\r\n  private _disabled = false;\r\n\r\n  /**\r\n   * Returns the current disabled state of the Component.\r\n   * Bind the '.spl-disabled' class according to the value.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.spl-disabled')\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  /**\r\n   * Sets the current disabled state of the Component.\r\n   * @param value - Disabled state to set.\r\n   */\r\n  set disabled(value: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /**\r\n   * Returns the date format to be displayed in the <input/> element.\r\n   * If SplDateInputOptions.dateFormat is provided, that will be returned.\r\n   * The default value is 'yyyy-MM-dd'.\r\n   */\r\n  get dateFormat(): string {\r\n    return this._dateOptions?.dateFormat || 'yyyy-MM-dd';\r\n  }\r\n\r\n  /**\r\n   * Returns locale in date format.\r\n   * If SplDateInputOptions.dateLocale is provided, that will be returned.\r\n   * The default value is 'en-US'.\r\n   */\r\n  get dateLocale(): string {\r\n    return this._dateOptions?.dateLocale || 'en-US';\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.writeValue(this.value);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._modalCloseSubscription?.unsubscribe();\r\n  }\r\n\r\n  /** To focus on the component, listen to the click event of the host element. */\r\n  @HostListener('click')\r\n  onHostClick(): void {\r\n    this.focus();\r\n  }\r\n\r\n  /**\r\n   * Sets the value to Component.\r\n   * Once the correct date value is set, the converted date using dateFormat and dateLocale is set into the <input/> element.\r\n   * @param obj - New value to set.\r\n   */\r\n  override writeValue(obj: Nullable<Date>): void {\r\n    this.value = obj;\r\n\r\n    if (this.value && this.inputElementRef) {\r\n      this.inputElementRef.nativeElement.value = formatDate(this.value, this.dateFormat, this.dateLocale);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets the disabled state on the Component.\r\n   * @param isDisabled - Disabled state to set.\r\n   */\r\n  override setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  /** Focus to the <input/> element. */\r\n  focus(): void {\r\n    this.inputElementRef.nativeElement.focus();\r\n  }\r\n\r\n  /** Blur from the <input/> element. */\r\n  blur(): void {\r\n    this.inputElementRef.nativeElement.blur();\r\n  }\r\n\r\n  /**\r\n   * After converting the value inputted into the <input/> element to Date,\r\n   * emits and sets the converted value using the valueChange() and writeValue() methods.\r\n   * If the inputted value is converted to an Invalid Date, a null value is emitted and set.\r\n   */\r\n  updateValueFromInput(): void {\r\n    const { value } = this.inputElementRef.nativeElement;\r\n    const date = new Date(value);\r\n\r\n    this._logger.debug('Inputted value', value);\r\n    this._logger.debug('Date for value', date);\r\n\r\n    if (isValidDate(date)) {\r\n      this.valueChange(date);\r\n      this.writeValue(date);\r\n    } else {\r\n      this.valueChange(null);\r\n      this.writeValue(null);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Capture the blur event of the <input/> element and emit an inputBlurred emitter with a FocusEvent.\r\n   * @param event - FocusEvent.\r\n   */\r\n  onElementBlur(event: FocusEvent): void {\r\n    this.focused = false;\r\n    this.inputBlurred.emit(event);\r\n  }\r\n\r\n  /**\r\n   * Capture the focus event of the <input/> element and emit an inputFocused emitter with a FocusEvent.\r\n   * @param event - FocusEvent.\r\n   */\r\n  onElementFocus(event: FocusEvent): void {\r\n    this.focused = true;\r\n    this.inputFocused.emit(event);\r\n  }\r\n\r\n  /**\r\n   * Open SplDateInputCalendarModalComponent.\r\n   * The component's current value, minDate, and maxDate are passed to the modal,\r\n   * and the changed value is emitted and set when the modal is closed.\r\n   */\r\n  openDatePickerCalendarModal(): void {\r\n    const subscription = new Subscription();\r\n\r\n    this.blur();\r\n    this._modalCloseSubscription?.unsubscribe();\r\n\r\n    subscription.add(\r\n      this._modalService\r\n        .open(SplDateInputCalendarModalComponent, {\r\n          data: {\r\n            selectedDate: this.value,\r\n            minDate: this.minDate,\r\n            maxDate: this.maxDate,\r\n          },\r\n          providers: [\r\n            {\r\n              provide: SPL_DATE_INPUT_PROVIDER,\r\n              useValue: this._dateOptions,\r\n            },\r\n            {\r\n              provide: SPL_CALENDAR_PROVIDER,\r\n              useValue: this._calendarOptions,\r\n            },\r\n          ],\r\n        })\r\n        .onClose.subscribe((result) => {\r\n          if (result) {\r\n            this.valueChange(result);\r\n            this.writeValue(result);\r\n          }\r\n\r\n          this.modalOpened = false;\r\n        }),\r\n    );\r\n\r\n    this.modalOpened = true;\r\n  }\r\n}\r\n","<input\r\n  #input\r\n  (focus)=\"onElementFocus($event)\"\r\n  (blur)=\"onElementBlur($event); updateValueFromInput()\"\r\n  [placeholder]=\"placeholder\"\r\n  [disabled]=\"disabled\"\r\n  class=\"spl-date-input-input\"\r\n  type=\"text\"/>\r\n\r\n<button\r\n  (click)=\"$event.stopPropagation(); openDatePickerCalendarModal()\"\r\n  [disabled]=\"disabled\"\r\n  class=\"spl-date-input-button spl-icon-button\"\r\n  splButton>\r\n  <spl-icon weight=\"200\">calendar_month</spl-icon>\r\n</button>\r\n","import { Component, ElementRef, HostBinding, Inject, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n  FADE_IN_SLIDE_IN,\r\n  FADE_IN_SLIDE_IN_BOTTOM_SHOW,\r\n  FADE_IN_SLIDE_IN_LEFT_SHOW,\r\n  FADE_IN_SLIDE_IN_RIGHT_SHOW,\r\n  FADE_IN_SLIDE_IN_TOP_SHOW,\r\n  FADE_IN_SLIDE_IN_VOID,\r\n  fadeInSlideIn,\r\n} from '../../animations/fade-in-slide-in';\r\nimport { SPL_DRAWER_STARTING_DIRECTION, SplDrawerStartingDirection } from '../../services/spl-drawer.service';\r\n\r\n/**\r\n * This is a wrapper for Drawer Component.\r\n * All drawers are created within the wrapper and have a consistent shape.\r\n * The wrapper can display animations that open in different directions depending on the provided SplDrawerStartingSide.\r\n */\r\n@Component({\r\n  selector: 'spl-drawer-wrapper',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './spl-drawer-wrapper.component.html',\r\n  host: {\r\n    class: 'spl-drawer-wrapper',\r\n  },\r\n  animations: [fadeInSlideIn(32)],\r\n})\r\nexport class SplDrawerWrapperComponent implements OnInit {\r\n  /** ViewContainerRef of the container where the drawer component will be rendered. */\r\n  @ViewChild('container', { read: ViewContainerRef }) viewContainerRef!: ViewContainerRef;\r\n\r\n  /** ElementRef for a drawer container. */\r\n  @ViewChild('drawerContainer', { read: ElementRef }) drawerContainer!: ElementRef<HTMLElement>;\r\n\r\n  /**\r\n   * This is the 'fade-in-slide-in' animation state.\r\n   * The default value is FADE_IN_SLIDE_IN_VOID, and has different values depending on the provided SplDrawerStartingSide.\r\n   */\r\n  @HostBinding(`@${FADE_IN_SLIDE_IN}`) fadeInSlideInState = FADE_IN_SLIDE_IN_VOID;\r\n\r\n  /** Bind the provided SplDrawerStartingSide value to the 'spl-drawer-starting-side' attribute. */\r\n  @HostBinding('attr.spl-drawer-starting-side') startingSide = this._startingSide;\r\n\r\n  constructor(@Inject(SPL_DRAWER_STARTING_DIRECTION) private _startingSide: SplDrawerStartingDirection) {}\r\n\r\n  ngOnInit() {\r\n    switch (this._startingSide) {\r\n      case 'left': {\r\n        this.fadeInSlideInState = FADE_IN_SLIDE_IN_LEFT_SHOW;\r\n        break;\r\n      }\r\n\r\n      case 'right': {\r\n        this.fadeInSlideInState = FADE_IN_SLIDE_IN_RIGHT_SHOW;\r\n        break;\r\n      }\r\n\r\n      case 'top': {\r\n        this.fadeInSlideInState = FADE_IN_SLIDE_IN_TOP_SHOW;\r\n        break;\r\n      }\r\n\r\n      case 'bottom': {\r\n        this.fadeInSlideInState = FADE_IN_SLIDE_IN_BOTTOM_SHOW;\r\n        break;\r\n      }\r\n    }\r\n  }\r\n}\r\n","<div\r\n  #drawerContainer\r\n  class=\"spl-drawer-container\">\r\n  <ng-container #container></ng-container>\r\n</div>\r\n","import { ComponentRef, EventEmitter, Injectable, Injector, Type } from '@angular/core';\r\nimport { SplOverlayServiceLike } from '../interfaces/spl-overlay-service-like';\r\nimport { SplOverlayService } from './spl-overlay.service';\r\nimport { SplOverlayRefLike } from '../interfaces/spl-overlay-ref-like';\r\nimport { CanUndefined } from '../utils/type.util';\r\nimport { SplDrawerBackdropComponent } from '../components/spl-drawer-backdrop/spl-drawer-backdrop.component';\r\nimport { SplDrawerWrapperComponent } from '../components/spl-drawer-wrapper/spl-drawer-wrapper.component';\r\nimport { SplLogger } from '../utils/logger.util';\r\nimport { SplOverlayBaseOptions } from '../interfaces/spl-overlay-base-options';\r\nimport { SplOverlayRefCommonOptions } from '../interfaces/spl-overlay-ref-common-options';\r\nimport { SplError } from '../utils/error.util';\r\n\r\n/**\r\n * A type that defines the starting direction of the drawer.\r\n * If 'top', it appears from top to bottom and disappears from bottom to top.\r\n * If 'bottom', it appears from bottom to top and disappears from top to bottom.\r\n * If 'left', it appears from left to right and disappears from right to left.\r\n * If 'right', it appears from right to left and disappears from left to right.\r\n */\r\nexport type SplDrawerStartingDirection = 'top' | 'bottom' | 'left' | 'right';\r\n\r\n/** Interface for options that can be set when opening the drawer. */\r\nexport interface SplDrawerOptions<Data> extends SplOverlayBaseOptions<Data> {\r\n  /** Specifies the starting direction of the drawer. */\r\n  startingDirection: SplDrawerStartingDirection;\r\n}\r\n\r\n/** Injection token for data to be injected into the drawer. */\r\nexport const SPL_DRAWER_DATA = 'SPL_DRAWER_DATA';\r\n\r\n/** Injection token for startingDirection to be injected into Drawer. */\r\nexport const SPL_DRAWER_STARTING_DIRECTION = 'SPL_DRAWER_STARTING_DIRECTION';\r\n\r\n/**\r\n * A service for opening a component as a drawer.\r\n * Because SplOverlayService is injected and used internally, the drawer is created within SplOverlayOutletComponent.\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SplDrawerService implements SplOverlayServiceLike {\r\n  constructor(private _overlayService: SplOverlayService) {}\r\n\r\n  /**\r\n   * Opens the component as a drawer overlay and returns SplDrawerRef.\r\n   * If the component is already open and multi option is false, an already open SplDrawerRef is returned.\r\n   * @param component - A component to be opened as a drawer.\r\n   * @param options - Options to apply when opening the drawer.\r\n   */\r\n  open<Comp, Data = any, Result = any>(\r\n    component: Type<Comp>,\r\n    options: SplDrawerOptions<Data>,\r\n  ): SplDrawerRef<Comp, Data, Result> {\r\n    if (!this._overlayService.outletViewContainerRef) {\r\n      throw new SplError('outletViewContainerRef is not ready');\r\n    }\r\n\r\n    const { multi = false } = options;\r\n\r\n    const existingDrawerRef = this._overlayService.findOverlayRef(component);\r\n\r\n    if (existingDrawerRef && !multi) {\r\n      return existingDrawerRef as SplDrawerRef<Comp, Data, Result>;\r\n    }\r\n\r\n    const drawerRef = new SplDrawerRef<Comp, Data, Result>({\r\n      ...options,\r\n      component,\r\n      viewContainerRef: this._overlayService.outletViewContainerRef,\r\n      service: this,\r\n    });\r\n\r\n    this._overlayService.appendOpenedOverlay(drawerRef);\r\n\r\n    return drawerRef;\r\n  }\r\n\r\n  /**\r\n   * Closes the given SplDrawerRef.\r\n   * If you provide a result, you can pass the value to the onClose emitter.\r\n   * @param drawerRef - SplDrawerRef to close.\r\n   * @param result - Result to be passed to the onClose emitter.\r\n   */\r\n  close(drawerRef: SplDrawerRef, result?: any) {\r\n    this._overlayService.close(drawerRef, result);\r\n  }\r\n\r\n  /** Close the last opened SplDrawerRef. */\r\n  closeLatest() {\r\n    const { openedOverlays } = this._overlayService;\r\n\r\n    let latestDrawerRef: CanUndefined<SplDrawerRef> = undefined;\r\n\r\n    for (let i = openedOverlays.length - 1; i > -1; i--) {\r\n      const overlayRef = openedOverlays[i] as SplOverlayRefLike<any, any, any, any>;\r\n\r\n      if (overlayRef instanceof SplDrawerRef) {\r\n        latestDrawerRef = overlayRef;\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (latestDrawerRef) {\r\n      this._overlayService.close(latestDrawerRef);\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Reference class for a component opened as a drawer.\r\n * It renders backdrop, wrapper, and component to outlet, and provides methods to manage drawer.\r\n */\r\nexport class SplDrawerRef<Comp = any, Data = any, Result = any>\r\n  implements SplOverlayRefLike<SplDrawerService, Comp, SplDrawerBackdropComponent, Result>\r\n{\r\n  /** ComponentRef for open component. */\r\n  readonly componentRef: ComponentRef<Comp>;\r\n\r\n  /** ComponentRef for drawer backdrop. */\r\n  readonly backdropRef: ComponentRef<SplDrawerBackdropComponent>;\r\n\r\n  /** ComponentRef for drawer wrapper. */\r\n  readonly wrapperRef: ComponentRef<SplDrawerWrapperComponent>;\r\n\r\n  /** SplDrawerService. */\r\n  readonly service: SplDrawerService;\r\n\r\n  /**\r\n   * Emitter to be emitted when the drawer is closed.\r\n   * Result value can be passed.\r\n   */\r\n  onClose = new EventEmitter<CanUndefined<Result>>();\r\n\r\n  /** Closed state of drawer. */\r\n  closed = false;\r\n\r\n  /** Logger for SplDrawerRef. */\r\n  private readonly _logger = new SplLogger('SplDrawerRef');\r\n\r\n  constructor(options: SplDrawerOptions<Data> & SplOverlayRefCommonOptions<SplDrawerService, Comp>) {\r\n    const {\r\n      component,\r\n      viewContainerRef,\r\n      styles = {},\r\n      classes = [],\r\n      data = {},\r\n      service,\r\n      startingDirection,\r\n      providers = [],\r\n    } = options;\r\n\r\n    this.service = service;\r\n    this.backdropRef = viewContainerRef.createComponent(SplDrawerBackdropComponent, {\r\n      injector: Injector.create({\r\n        providers: [\r\n          ...providers,\r\n          {\r\n            provide: SplDrawerRef,\r\n            useValue: this,\r\n          },\r\n        ],\r\n      }),\r\n    });\r\n\r\n    this.backdropRef.changeDetectorRef.detectChanges();\r\n\r\n    this.wrapperRef = viewContainerRef.createComponent(SplDrawerWrapperComponent, {\r\n      injector: Injector.create({\r\n        providers: [\r\n          ...providers,\r\n          {\r\n            provide: SPL_DRAWER_STARTING_DIRECTION,\r\n            useValue: startingDirection,\r\n          },\r\n        ],\r\n      }),\r\n    });\r\n\r\n    this.wrapperRef.changeDetectorRef.detectChanges();\r\n\r\n    this.componentRef = this.wrapperRef.instance.viewContainerRef.createComponent(component, {\r\n      injector: Injector.create({\r\n        providers: [\r\n          ...providers,\r\n          {\r\n            provide: SPL_DRAWER_DATA,\r\n            useValue: data,\r\n          },\r\n          {\r\n            provide: SplDrawerRef,\r\n            useValue: this,\r\n          },\r\n        ],\r\n      }),\r\n    });\r\n\r\n    this.updateStyles(styles);\r\n    this.addClasses('spl-drawer', ...classes);\r\n\r\n    this.componentRef.changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  /** Destroy the ComponentRef of the backdrop and wrapper. */\r\n  destroy(): void {\r\n    this._logger.debug('Destroy drawer component and backdrop');\r\n\r\n    // The component is rendered inside the wrapper, and since the wrapper has animation,\r\n    // the ComponentRef of the wrapper, not the component, is destroyed.\r\n    this.wrapperRef.destroy();\r\n    this.backdropRef.destroy();\r\n  }\r\n\r\n  /**\r\n   * Closes the current component with the result.\r\n   * The result is emitted through the onClose emitter.\r\n   * @param result - Result to be passed to onClose emitter.\r\n   */\r\n  close(result?: Result): void {\r\n    if (!this.closed) {\r\n      this.closed = true;\r\n      this._logger.debug('Close drawerRef');\r\n      this.service.close(this, result);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update the style of the wrapper.\r\n   * @param styles - This must be a partial object of CSSStyleDeclaration.\r\n   */\r\n  updateStyles(styles: Partial<CSSStyleDeclaration>): void {\r\n    if (!this.closed) {\r\n      for (const stylesKey in styles) {\r\n        this.wrapperRef.instance.drawerContainer.nativeElement.style[stylesKey] = styles[stylesKey]!;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Adds additional classes to the wrapper.\r\n   * @param classes - Classes to add.\r\n   */\r\n  addClasses(...classes: string[]): void {\r\n    if (!this.closed) {\r\n      this.wrapperRef.instance.drawerContainer.nativeElement.classList.add(...classes);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Removes classes from the wrapper.\r\n   * @param classes - Classes to remove.\r\n   */\r\n  removeClasses(...classes: string[]): void {\r\n    if (!this.closed) {\r\n      this.wrapperRef.location.nativeElement.classList.remove(...classes);\r\n    }\r\n  }\r\n}\r\n","import { Component, HostListener, Inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplFadeInAnimator } from '../../abstracts/spl-fade-in-animator';\r\nimport { SplDrawerRef } from '../../services/spl-drawer.service';\r\nimport { SplLogger } from '../../utils/logger.util';\r\n\r\n/**\r\n * This is the backdrop for the Drawer Component.\r\n * SplDrawerRef of the related drawer is provided, and the drawer is closed when the host element is clicked.\r\n */\r\n@Component({\r\n  selector: 'spl-drawer-backdrop',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  template: '',\r\n  host: {\r\n    class: 'spl-drawer-backdrop',\r\n  },\r\n})\r\nexport class SplDrawerBackdropComponent extends SplFadeInAnimator {\r\n  /** Logger for SplDrawerBackdropComponent. */\r\n  private readonly _logger = new SplLogger('SplDrawerBackdropComponent');\r\n\r\n  constructor(@Inject(SplDrawerRef) private _drawerRef: SplDrawerRef) {\r\n    super();\r\n  }\r\n\r\n  /** Close the drawer by listening to the click event of the host element. */\r\n  @HostListener('click')\r\n  close(): void {\r\n    this._logger.debug('Backdrop is clicked');\r\n    this._drawerRef.close();\r\n  }\r\n}\r\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n/** Directive to make hints and errors to be selected by a single ContentChildren from SplFormFieldComponent */\n@Directive({\n  selector: 'spl-form-field-item',\n  standalone: true,\n  host: {\n    class: 'spl-form-field-item',\n  },\n})\nexport class SplFormFieldItemComponent {\n  /** ElementRef to move rendering position from SplFormFieldComponent */\n  public readonly elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n}\n","import { Component } from '@angular/core';\nimport { SplFormFieldItemComponent } from '../spl-form-field-item/spl-form-field-item.component';\n\n/** This is a Component for displaying error text that can be used in SplFormFieldComponent. */\n@Component({\n  selector: 'spl-error',\n  templateUrl: './spl-error.component.html',\n  host: {\n    class: 'spl-error',\n  },\n  standalone: true,\n  imports: [],\n  hostDirectives: [SplFormFieldItemComponent],\n})\nexport class SplErrorComponent {}\n","<ng-content></ng-content>\r\n","import {\n  AfterContentInit,\n  AfterViewInit,\n  Component,\n  ContentChildren,\n  DestroyRef,\n  ElementRef,\n  QueryList,\n  Renderer2,\n  ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SplFormFieldItemComponent } from './spl-form-field-item/spl-form-field-item.component';\n\n/** This is a Component that creates a form field consisting of label, control, error, and hint. */\n@Component({\n  selector: 'spl-form-field',\n  templateUrl: './spl-form-field.component.html',\n  host: {\n    class: 'spl-form-field',\n  },\n  standalone: true,\n  imports: [CommonModule],\n})\nexport class SplFormFieldComponent implements AfterContentInit, AfterViewInit {\n  @ViewChild('formFieldItems', { read: ElementRef }) formFieldItems!: ElementRef<HTMLElement>;\n\n  @ContentChildren(SplFormFieldItemComponent, { descendants: true })\n  formFieldItemQueryList!: QueryList<SplFormFieldItemComponent>;\n\n  constructor(\n    private readonly _renderer: Renderer2,\n    private readonly _destroyRef: DestroyRef,\n  ) {}\n\n  ngAfterContentInit() {\n    this.formFieldItemQueryList.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n      this.moveFormFieldItems();\n    });\n  }\n\n  ngAfterViewInit() {\n    this.moveFormFieldItems();\n  }\n\n  moveFormFieldItems(): void {\n    if (this.formFieldItems) {\n      const formFieldItemsElement = this.formFieldItems.nativeElement;\n      const children = formFieldItemsElement.children;\n\n      for (let i = 0; i < children.length; i++) {\n        this._renderer.removeChild(formFieldItemsElement, children.item(i));\n      }\n\n      this.formFieldItemQueryList.forEach((item) => {\n        this._renderer.appendChild(formFieldItemsElement, item.elementRef.nativeElement);\n      });\n    }\n  }\n}\n","<ng-content select=\"label\"></ng-content>\r\n\r\n<div class=\"spl-form-field-content\">\r\n  <ng-content></ng-content>\r\n</div>\r\n\r\n<div\r\n  #formFieldItems\r\n  class=\"spl-form-field-items\">\r\n  <ng-content select=\".spl-error, .spl-hint\"></ng-content>\r\n</div>\r\n","import { Component } from '@angular/core';\nimport { SplFormFieldItemComponent } from '../spl-form-field-item/spl-form-field-item.component';\n\n/** This is a Component for displaying hint text that can be used in SplFormFieldComponent. */\n@Component({\n  selector: 'spl-hint',\n  templateUrl: './spl-hint.component.html',\n  host: {\n    class: 'spl-hint',\n  },\n  standalone: true,\n  imports: [],\n  hostDirectives: [SplFormFieldItemComponent],\n})\nexport class SplHintComponent {}\n","<ng-content></ng-content>\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  Inject,\r\n  OnDestroy,\r\n  Output,\r\n  PLATFORM_ID,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport { SplButtonDirective } from '../spl-button/spl-button.directive';\r\nimport { SplIconComponent } from '../spl-icon/spl-icon.component';\r\n\r\n/**\r\n * This is a component that creates a horizontally slide-able area.\r\n * If touch is possible, HTML's default overflow scrollbar is used. If touch is not possible, it provides a control that can slide left and right.\r\n * When the slide control is clicked, it moves in the corresponding direction by half the width of the area that can be slid.\r\n */\r\n@Component({\r\n  selector: 'spl-horizontal-slider',\r\n  templateUrl: './spl-horizontal-slider.component.html',\r\n  host: {\r\n    class: 'spl-horizontal-slider',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule, SplButtonDirective, SplIconComponent],\r\n})\r\nexport class SplHorizontalSliderComponent implements AfterViewInit, OnDestroy {\r\n  /**\r\n   * This is an emitter that emits the scroll event of the slide-able area.\r\n   * This overwrites the default scroll event on the host element.\r\n   */\r\n  @Output('scroll') scrolled = new EventEmitter<Event>();\r\n\r\n  /**\r\n   * This is an emitter that emits the scrollend event of the slide-able area.\r\n   * This overwrites the default scrollend event on the host element.\r\n   */\r\n  @Output('scrollend') scrollEnded = new EventEmitter<Event>();\r\n\r\n  /** This is an ElementRef of a slide-able area. */\r\n  @ViewChild('scrollContainer', { read: ElementRef }) scrollContainerRef!: ElementRef<HTMLElement>;\r\n\r\n  /** This is the state of whether to display the button that can slide to the left. */\r\n  showLeftButton = false;\r\n\r\n  /** This is the state of whether to display the button that can slide to the right. */\r\n  showRightButton = false;\r\n\r\n  /** Timeout timer for throttling of scroll events. */\r\n  private _scrollDetectTimer: any;\r\n\r\n  /**\r\n   * MutationObserver to detect content changes in slide-able area.\r\n   * When a change in content is detected, the scroll area is calculated to determine\r\n   * whether the left and right controls are displayed.\r\n   */\r\n  private _scrollContainerObserver?: MutationObserver;\r\n\r\n  constructor(@Inject(PLATFORM_ID) private _platformId: Object) {}\r\n\r\n  ngAfterViewInit() {\r\n    this._detectScrollPosition();\r\n\r\n    if (isPlatformBrowser(this._platformId)) {\r\n      this._scrollContainerObserver = new MutationObserver(() => {\r\n        this._detectScrollPosition();\r\n      });\r\n    }\r\n\r\n    this._scrollContainerObserver?.observe(this.scrollContainerRef.nativeElement, {\r\n      childList: true,\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._scrollContainerObserver?.disconnect();\r\n    clearTimeout(this._scrollDetectTimer);\r\n  }\r\n\r\n  /** Listen to the window's resize event and recalculate the scroll area. */\r\n  @HostListener('window:resize')\r\n  onWindowResize(): void {\r\n    this._detectScrollPosition();\r\n  }\r\n\r\n  /**\r\n   * It listens for the scroll event of the slide-able area, emits it to the outside, and then recalculates the scroll area.\r\n   * @param event - Event from scroll event.\r\n   */\r\n  onScroll(event: Event): void {\r\n    this.scrolled.emit(event);\r\n    this._detectScrollPosition();\r\n  }\r\n\r\n  /**\r\n   * It listens for the scrollend event of the slide-able area, emits it to the outside, and then recalculates the scroll area.\r\n   * @param event - Event from scrollend event.\r\n   */\r\n  onScrollEnd(event: Event): void {\r\n    this.scrollEnded.emit(event);\r\n    this._detectScrollPosition();\r\n  }\r\n\r\n  /** Move the scroll to half of the total width of the slide-able area to the left. */\r\n  toScrollLeft(): void {\r\n    if (this.scrollContainerRef) {\r\n      const scrollContainer = this.scrollContainerRef.nativeElement;\r\n\r\n      scrollContainer.scrollTo({\r\n        left: scrollContainer.scrollLeft - scrollContainer.offsetWidth / 2,\r\n        behavior: 'smooth',\r\n      });\r\n    }\r\n  }\r\n\r\n  /** Move the scroll to half of the total width of the slide-able area to the right. */\r\n  toScrollRight(): void {\r\n    if (this.scrollContainerRef) {\r\n      const scrollContainer = this.scrollContainerRef.nativeElement;\r\n\r\n      scrollContainer.scrollTo({\r\n        left: scrollContainer.scrollLeft + scrollContainer.offsetWidth / 2,\r\n        behavior: 'smooth',\r\n      });\r\n    }\r\n  }\r\n\r\n  /** Detects scroll changes and updates the visibility of the control buttons. */\r\n  private _detectScrollPosition(): void {\r\n    if (!this.scrollContainerRef || this._scrollDetectTimer) {\r\n      return;\r\n    }\r\n\r\n    this._scrollDetectTimer = setTimeout(() => {\r\n      const { scrollLeft, scrollWidth, offsetWidth } = this.scrollContainerRef.nativeElement;\r\n\r\n      this.showLeftButton = scrollLeft !== 0;\r\n      this.showRightButton = scrollLeft + offsetWidth < scrollWidth;\r\n\r\n      clearTimeout(this._scrollDetectTimer);\r\n      delete this._scrollDetectTimer;\r\n    });\r\n  }\r\n}\r\n","<button\r\n  (click)=\"toScrollLeft()\"\r\n  *ngIf=\"showLeftButton\"\r\n  class=\"spl-icon-button spl-horizontal-slider-button spl-left\"\r\n  splButton>\r\n  <spl-icon>chevron_left</spl-icon>\r\n</button>\r\n\r\n<div\r\n  #scrollContainer\r\n  (scroll)=\"onScroll($event)\"\r\n  (scrollend)=\"onScrollEnd($event)\"\r\n  class=\"spl-horizontal-slider-wrapper\">\r\n  <ng-content></ng-content>\r\n</div>\r\n\r\n<button\r\n  (click)=\"toScrollRight()\"\r\n  *ngIf=\"showRightButton\"\r\n  class=\"spl-icon-button spl-horizontal-slider-button spl-right\"\r\n  splButton>\r\n  <spl-icon>chevron_right</spl-icon>\r\n</button>\r\n","import { AfterViewInit, Directive } from '@angular/core';\r\nimport { SplInputLike } from '../../abstracts/spl-input-like';\r\n\r\n/**\r\n * This is a Directive that implements Simplor style and features to the <input/> element.\r\n * By default, the spellcheck attribute is false.\r\n */\r\n@Directive({\r\n  selector: 'input[splInput]',\r\n  host: {\r\n    class: 'spl-input',\r\n  },\r\n  standalone: true,\r\n})\r\nexport class SplInputDirective extends SplInputLike<HTMLInputElement> implements AfterViewInit {\r\n  constructor() {\r\n    super();\r\n  }\r\n}\r\n","import { AfterViewInit, Component, ElementRef, HostListener, Inject } from '@angular/core';\r\nimport { SPL_OVERLAY_DATA, SplOverlayRef } from '../../services/spl-overlay.service';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplElementAccessor } from '../../interfaces/spl-element-accessor';\r\nimport { SplEffectDirective } from '../spl-effect/spl-effect.directive';\r\nimport { SplFadeInSlideUpAnimator } from '../../abstracts/spl-fade-in-slide-up-animator';\r\n\r\n/**\r\n * An overlay component to display a short message.\r\n * Messages can be displayed through SplMessageService, and only one message can be displayed at a time.\r\n */\r\n@Component({\r\n  selector: 'spl-message',\r\n  templateUrl: './spl-message.component.html',\r\n  host: {\r\n    class: 'spl-message',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  hostDirectives: [SplEffectDirective],\r\n})\r\nexport class SplMessageComponent\r\n  extends SplFadeInSlideUpAnimator\r\n  implements AfterViewInit, SplElementAccessor<HTMLElement>\r\n{\r\n  constructor(\r\n    @Inject(SplOverlayRef) private _overlayRef: SplOverlayRef,\r\n    @Inject(SPL_OVERLAY_DATA) private _message: string,\r\n    public elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.elementRef.nativeElement.innerText = this._message;\r\n  }\r\n\r\n  /** Listen to the click event of the host element and close the message overlay. */\r\n  @HostListener('click')\r\n  onHostClick(): void {\r\n    this._overlayRef.close();\r\n  }\r\n}\r\n","","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * This is a component for modal content.\r\n * Contains the content to be included in the modal body.\r\n */\r\n@Component({\r\n  selector: 'spl-modal-content',\r\n  templateUrl: './spl-modal-content.component.html',\r\n  host: {\r\n    class: 'spl-modal-content',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplModalContentComponent {}\r\n","<ng-content></ng-content>\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * This is a component for modal header.\r\n * Displays content as title.\r\n */\r\n@Component({\r\n  selector: 'spl-modal-header',\r\n  templateUrl: './spl-modal-header.component.html',\r\n  host: {\r\n    class: 'spl-modal-header',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplModalHeaderComponent {}\r\n","<div class=\"spl-modal-title\">\r\n  <ng-content></ng-content>\r\n</div>\r\n","import { Component, ElementRef, EventEmitter, HostBinding, HostListener, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplElementAccessor } from '../../interfaces/spl-element-accessor';\r\n\r\n/**\r\n * Component for option of SplSelectComponent.\r\n * You can input value and label, and by default, content is used as value and label.\r\n */\r\n@Component({\r\n  selector: 'spl-option',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './spl-option.component.html',\r\n  host: {\r\n    class: 'spl-option',\r\n  },\r\n})\r\nexport class SplOptionComponent implements SplElementAccessor<HTMLElement> {\r\n  /**\r\n   * State indicating that the host element is selected.\r\n   * Binds the ‘.spl-active’ class according to the value.\r\n   */\r\n  @HostBinding('class.spl-active') active = false;\r\n\r\n  /**\r\n   * State indicating that the host element is hovered or focused.\r\n   * Binds the '.spl-highlight' class according to the value.\r\n   */\r\n  @HostBinding('class.spl-highlight') highlight = false;\r\n\r\n  /**\r\n   * An emitter that will emit a value when the host element is clicked.\r\n   * Because there is no @Output() decorator, it cannot be accessed from the Component template\r\n   * and is used internally in SplSelectComponent.\r\n   */\r\n  onClick = new EventEmitter<any>();\r\n\r\n  /**\r\n   * Emitter to be emitted when the host element is hovered.\r\n   * Because there is no @Output() decorator, it cannot be accessed from the Component template\r\n   * and is used internally in SplSelectComponent.\r\n   */\r\n  onHover = new EventEmitter<void>();\r\n\r\n  constructor(public elementRef: ElementRef<HTMLElement>) {}\r\n\r\n  /** The value set through the value setter. */\r\n  private _value: any;\r\n\r\n  /** Returns the value set through the setter or the textContent of the host element. */\r\n  get value(): any {\r\n    return this._value === undefined ? this.elementRef.nativeElement.textContent : this._value;\r\n  }\r\n\r\n  /**\r\n   * Sets the value to be emitted when the option is selected.\r\n   * @param value - Value to set.\r\n   */\r\n  @Input()\r\n  set value(value: any) {\r\n    this._value = value;\r\n  }\r\n\r\n  /** The label set through the label setter. */\r\n  private _label = '';\r\n\r\n  /** Returns the label set through the setter or the textContent of the host element. */\r\n  get label(): string {\r\n    return this._label || this.elementRef.nativeElement.textContent!;\r\n  }\r\n\r\n  /**\r\n   * Sets the label to be displayed in SplSelectComponent when the option is selected.\r\n   * @param value - Label to set.\r\n   */\r\n  @Input()\r\n  set label(value: string) {\r\n    this._label = value;\r\n  }\r\n\r\n  /** Listen to the click event of the host element and emit value through the onClick emitter. */\r\n  @HostListener('click')\r\n  onHostClick(): void {\r\n    this.onClick.emit(this.value);\r\n  }\r\n\r\n  /** Listens for the mouseenter event of the host element and emits an onHover emitter. */\r\n  @HostListener('mouseenter')\r\n  onHostMouseEnter(): void {\r\n    this.onHover.emit();\r\n  }\r\n}\r\n","<ng-content></ng-content>\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  HostListener,\r\n  Inject,\r\n  OnDestroy,\r\n  QueryList,\r\n  TemplateRef,\r\n  ViewChild,\r\n  ViewContainerRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SPL_OVERLAY_DATA, SplOverlayRef } from '../../services/spl-overlay.service';\r\nimport { SplElementAccessor } from '../../interfaces/spl-element-accessor';\r\nimport { SplOptionComponent } from '../spl-option/spl-option.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { SplLogger } from '../../utils/logger.util';\r\nimport { SplFadeInSlideUpAnimator } from '../../abstracts/spl-fade-in-slide-up-animator';\r\n\r\n/** Overlay data that can be provided for SplOptionsOverlayComponent. */\r\nexport interface SplOptionsOverlayData {\r\n  /**\r\n   * TemplateRef containing options.\r\n   * The contents of TemplateRef are rendered inside SplOptionsOverlayComponent.\r\n   */\r\n  optionsTemplate: TemplateRef<any>;\r\n\r\n  /** QueryList for SplOptionComponent. */\r\n  optionsQueryList: QueryList<SplOptionComponent>;\r\n\r\n  /** The value selected before opening SplOptionsOverlayComponent. */\r\n  value: any;\r\n}\r\n\r\n/** This is an overlay Component to display options in SplSelectComponent. */\r\n@Component({\r\n  selector: 'spl-options-overlay',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './spl-options-overlay.component.html',\r\n  host: {\r\n    class: 'spl-options-overlay',\r\n    // To give focus to the host element when a component is attached to a view.\r\n    tabindex: '0',\r\n  },\r\n})\r\nexport class SplOptionsOverlayComponent\r\n  extends SplFadeInSlideUpAnimator\r\n  implements AfterViewInit, SplElementAccessor<HTMLElement>, OnDestroy\r\n{\r\n  /**\r\n   * The maximum height of the host element.\r\n   * The overlay is displayed below SplSelectComponent by default, but appears above it if space for the maximum height is not available.\r\n   * If it is not possible to secure the maximum space height even from above, it will be displayed below.\r\n   */\r\n  static maxHeight = 250;\r\n\r\n  /** This is a ViewContainerRef to render a TemplateRef containing SplOptionComponent as content. */\r\n  @ViewChild('container', { read: ViewContainerRef }) viewContainerRef!: ViewContainerRef;\r\n\r\n  /** Logger for SplOptionsOverlayComponent. */\r\n  private readonly _logger = new SplLogger('SplOptionsOverlayComponent');\r\n\r\n  /** Indicates the index of the currently focused option. */\r\n  private _highlightIndex = 0;\r\n\r\n  /** Subscription to subscribe to SplOptionComponent's onHover emitter. */\r\n  private _optionsHoverSubscription?: Subscription;\r\n\r\n  constructor(\r\n    @Inject(SPL_OVERLAY_DATA) private _data: SplOptionsOverlayData,\r\n    @Inject(SplOverlayRef) private _overlayRef: SplOverlayRef<SplOptionsOverlayComponent>,\r\n    public elementRef: ElementRef<HTMLElement>,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.viewContainerRef.createEmbeddedView(this._data.optionsTemplate);\r\n    this.elementRef.nativeElement.focus({\r\n      preventScroll: true,\r\n    });\r\n\r\n    this._subscribeOptionsHover();\r\n\r\n    // To prevent NG0100.\r\n    setTimeout(() => {\r\n      this._setActiveOption();\r\n      this._setHighlightedOption();\r\n      this._scrollToHighlightedOption();\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._optionsHoverSubscription?.unsubscribe();\r\n  }\r\n\r\n  /** Close the overlay by listening to the blur event of the host element. */\r\n  @HostListener('blur')\r\n  onHostBlur(): void {\r\n    this.close();\r\n  }\r\n\r\n  /**\r\n   * Listen to the 'enter' keydown event of the host element and select the option of the currently highlighted index.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.enter', ['$event'])\r\n  onHostEnter(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    const option = this._data.optionsQueryList.get(this._highlightIndex);\r\n\r\n    if (option) {\r\n      this.close(option.value);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Listen to the 'arrowup' keydown event of the host element and select the previous option of the currently highlighted index.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.arrowup', ['$event'])\r\n  onHostArrowUp(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    this._highlightIndex = Math.max(0, this._highlightIndex - 1);\r\n    this._setHighlightedOption();\r\n    this._scrollToHighlightedOption();\r\n  }\r\n\r\n  /**\r\n   * Listen to the 'arrowdown' keydown event of the host element and select the next option of the currently highlighted index.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.arrowdown', ['$event'])\r\n  onHostArrowDown(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    this._highlightIndex = Math.min(this._data.optionsQueryList.length - 1, this._highlightIndex + 1);\r\n    this._setHighlightedOption();\r\n    this._scrollToHighlightedOption();\r\n  }\r\n\r\n  /**\r\n   * Close the overlay with result.\r\n   * @param result - Result data.\r\n   */\r\n  close(result?: any): void {\r\n    this._overlayRef.close(result);\r\n  }\r\n\r\n  /** The index of the initially selected option is retrieved through the value of the injected overlay data. */\r\n  private _setActiveOption(): void {\r\n    const { value, optionsQueryList } = this._data;\r\n\r\n    optionsQueryList.forEach((optionItem, index) => {\r\n      optionItem.active = optionItem.value === value;\r\n\r\n      if (optionItem.active) {\r\n        this._highlightIndex = index;\r\n      }\r\n    });\r\n  }\r\n\r\n  /** Changes the highlight state of the option according to the current highlighted index. */\r\n  private _setHighlightedOption(): void {\r\n    const { optionsQueryList } = this._data;\r\n\r\n    optionsQueryList.forEach((optionItem, index) => {\r\n      optionItem.highlight = index === this._highlightIndex;\r\n    });\r\n  }\r\n\r\n  /** Move the scroll of the overlay so that the option whose highlight state is true is in the center. */\r\n  private _scrollToHighlightedOption(): void {\r\n    const option = this._data.optionsQueryList.get(this._highlightIndex);\r\n\r\n    if (option) {\r\n      const { scrollTop: previousScrollTop = 0 } = this.elementRef.nativeElement;\r\n\r\n      const optionDomRect = option.elementRef.nativeElement.getBoundingClientRect();\r\n      const containerDomRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n\r\n      const topDiffer = containerDomRect.top - optionDomRect.top;\r\n\r\n      this._logger.debug('Previous scrollTop', previousScrollTop);\r\n      this._logger.debug('Top differ', topDiffer);\r\n      this._logger.debug('New scrollTop', previousScrollTop + topDiffer);\r\n\r\n      this.elementRef.nativeElement.scrollTop = previousScrollTop - topDiffer - containerDomRect.height / 2;\r\n    }\r\n  }\r\n\r\n  /** Subscribes to SplOptionComponent's onHover emitter to update the highlighted index. */\r\n  private _subscribeOptionsHover(): void {\r\n    const subscription = new Subscription();\r\n\r\n    this._optionsHoverSubscription?.unsubscribe();\r\n\r\n    subscription.add(\r\n      ...this._data.optionsQueryList.map((optionItem, index) => {\r\n        return optionItem.onHover.subscribe(() => {\r\n          this._highlightIndex = index;\r\n          this._setHighlightedOption();\r\n        });\r\n      }),\r\n    );\r\n\r\n    this._optionsHoverSubscription = subscription;\r\n  }\r\n}\r\n","<ng-container #container></ng-container>\r\n","import { Provider } from '@angular/core';\r\n\r\n/** InjectionToken for SplPaginatorOptions. */\r\nexport const SPL_PAGINATOR_PROVIDER = 'SPL_PAGINATOR_PROVIDER';\r\n\r\n/**\r\n * This is the type of function for creating the current page label.\r\n * @param page - This is the current page.\r\n * @param size - This is the size currently set in the paginator.\r\n * @param total - This is the total record size.\r\n */\r\nexport type SplPaginatorCurrentRangeLabelFn = (page: number, size: number, total: number) => string;\r\n\r\n/**\r\n * This is a function that creates a Provider for SplPaginatorOptions.\r\n * @param options - Options for customizing SplPaginatorComponent.\r\n */\r\nexport function createSplPaginatorProvider(options: SplPaginatorOptions = {}): Provider {\r\n  return {\r\n    provide: SPL_PAGINATOR_PROVIDER,\r\n    useValue: options,\r\n  };\r\n}\r\n\r\n/** Options for customizing SplPaginatorComponent. */\r\nexport interface SplPaginatorOptions {\r\n  /**\r\n   * Function for creating the current page label.\r\n   * If undefined, a function that creates a label displayed as `${startRecordNumber} - ${endRecordNumber}` is used.\r\n   */\r\n  createCurrentRangeLabel?: SplPaginatorCurrentRangeLabelFn;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SplLogger } from '../utils/logger.util';\r\n\r\n/**\r\n * A type of definition of callback function to call when position has changed.\r\n * @param rect - DOMRect of observed element which position is changed.\r\n */\r\nexport type SplPositionTrackerFn = (rect: DOMRect) => void;\r\n\r\n/**\r\n * A service detects position of elements.\r\n * Uses requestAnimationFrame internally and detects position of component in real-time.\r\n * When change has detected, call set SplPositionTrackerFn.\r\n * To use the only global requestAnimationFrame, it is provided in root scope.\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SplPositionTrackerService {\r\n  /** Logger for SplPositionTrackerService. */\r\n  private readonly _logger = new SplLogger('SplPositionTrackerService');\r\n\r\n  /**\r\n   * Map of elements tracked by this service.\r\n   * Key is each element object.\r\n   */\r\n  private _trackedElements = new Map<HTMLElement, SplPositionTrackerFn>();\r\n\r\n  /**\r\n   * Map of DOMRect for each tracked element.\r\n   * It's updated on every requestAnimationFrame.\r\n   */\r\n  private _trackedPositions = new Map<HTMLElement, DOMRect>();\r\n\r\n  /** State of whether requestAnimationFrame is running. */\r\n  private _animating = false;\r\n\r\n  /** Frame value for requestAnimationFrame. */\r\n  private _frame: any;\r\n\r\n  /**\r\n   * Observe a new element.\r\n   * It starts requestAnimationFrame when not running animation.\r\n   * @param element - Element to observe.\r\n   * @param onChange - Callback function to be called when change has detected.\r\n   */\r\n  observe(element: HTMLElement, onChange: SplPositionTrackerFn): void {\r\n    this._logger.debug('Observe element position', element.tagName);\r\n\r\n    this._trackedElements.set(element, onChange);\r\n    this._trackedPositions.set(element, element.getBoundingClientRect());\r\n\r\n    if (!this._animating) {\r\n      this._animating = true;\r\n      this._animate();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Unobserve given element.\r\n   * When there are no observing element in tracked elements, it stops animation.\r\n   * @param element - Element to unobserve.\r\n   */\r\n  unobserve(element: HTMLElement): void {\r\n    this._logger.debug('Unobserve element position', element.tagName);\r\n\r\n    this._trackedElements.delete(element);\r\n    this._trackedPositions.delete(element);\r\n\r\n    if (this._trackedElements.size === 0) {\r\n      this._animating = false;\r\n      cancelAnimationFrame(this._frame);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Detect changes of tracked elements.\r\n   * If current DOMRect of each element is difference with previous tracked DOMRect, SplPositionTrackerFn will be called.\r\n   */\r\n  private _detectChanges(): void {\r\n    this._trackedPositions.forEach((previousDomRect, element) => {\r\n      const currentDomRect = element.getBoundingClientRect();\r\n\r\n      if (JSON.stringify(currentDomRect.toJSON()) !== JSON.stringify(previousDomRect.toJSON())) {\r\n        this._logger.debug('Position has changed', element.tagName);\r\n\r\n        const onChange = this._trackedElements.get(element);\r\n\r\n        if (onChange) {\r\n          onChange(currentDomRect);\r\n        }\r\n\r\n        this._trackedPositions.set(element, currentDomRect);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Starts requestAnimationFrame and detects changes.\r\n   * It does nothing when animating is false.\r\n   */\r\n  private _animate(): void {\r\n    if (this._animating) {\r\n      this._detectChanges();\r\n      this._frame = requestAnimationFrame(() => this._animate());\r\n    }\r\n  }\r\n}\r\n","import {\r\n  AfterContentInit,\r\n  AfterViewInit,\r\n  Component,\r\n  ContentChildren,\r\n  DestroyRef,\r\n  ElementRef,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  OnDestroy,\r\n  QueryList,\r\n  TemplateRef,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SplOptionComponent } from '../spl-option/spl-option.component';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { Subscription } from 'rxjs';\r\nimport { SplControl } from '../../abstracts/spl-control';\r\nimport { BooleanAttribute, CanUndefined, Nullable } from '../../utils/type.util';\r\nimport { SplOverlayRef, SplOverlayService } from '../../services/spl-overlay.service';\r\nimport { SplElementAccessor } from '../../interfaces/spl-element-accessor';\r\nimport {\r\n  SplOptionsOverlayComponent,\r\n  SplOptionsOverlayData,\r\n} from '../spl-options-overlay/spl-options-overlay.component';\r\nimport { SplPositionTrackerService } from '../../services/spl-position-tracker.service';\r\nimport { SplLogger } from '../../utils/logger.util';\r\nimport { convertBooleanAttribute } from '../../utils/convert.util';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplIconComponent } from '../spl-icon/spl-icon.component';\r\n\r\n/**\r\n * Component that replaces the <select> element.\r\n * Allows user to select one of the options.\r\n */\r\n@Component({\r\n  selector: 'spl-select',\r\n  templateUrl: './spl-select.component.html',\r\n  host: {\r\n    class: 'spl-input spl-select',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule, SplIconComponent],\r\n})\r\nexport class SplSelectComponent<Value>\r\n  extends SplControl\r\n  implements AfterContentInit, AfterViewInit, OnDestroy, SplElementAccessor<HTMLElement>\r\n{\r\n  /** Sets a placeholder to display when there is no value. */\r\n  @Input() placeholder = 'Select';\r\n\r\n  /** This is a TemplateRef containing the SplOptionComponent used as content. */\r\n  @ViewChild('optionsTemplate', { read: TemplateRef }) optionsTemplate!: TemplateRef<any>;\r\n\r\n  /** QueryList of SplOptionComponent used as content. */\r\n  @ContentChildren(SplOptionComponent, { descendants: true }) optionQueryList!: QueryList<SplOptionComponent>;\r\n\r\n  /**\r\n   * State whether the options overlay is open.\r\n   * Binds the ‘.spl-opened’ class according to the value.\r\n   */\r\n  @HostBinding('class.spl-opened') overlayOpened = false;\r\n\r\n  /** This is the value of the currently selected option. */\r\n  value: Nullable<Value> = null;\r\n\r\n  /** This is the label of the currently selected option. */\r\n  label = '';\r\n\r\n  /** Logger for SplSelectComponent. */\r\n  private readonly _logger = new SplLogger('SplSelectComponent');\r\n\r\n  /** Timeout timer to prevent NG0100 error when updating the label according to the selected option. */\r\n  private _renderTimer: any;\r\n\r\n  /** SplOverlayRef of the open options overlay. */\r\n  private _optionsOverlayRef?: SplOverlayRef<SplOptionsOverlayComponent, Value>;\r\n\r\n  /** A subscription to subscribe to the onClick emitter of options. */\r\n  private _optionClickSubscription?: Subscription;\r\n\r\n  /** A subscription to subscribe to the onClose emitter of SplOverlayRef of options overlay. */\r\n  private _optionsOverlayCloseSubscription?: Subscription;\r\n\r\n  constructor(\r\n    public elementRef: ElementRef<HTMLElement>,\r\n    private _destroyRef: DestroyRef,\r\n    private _overlayService: SplOverlayService,\r\n    private _positionTrackerService: SplPositionTrackerService,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  /** The current disabled state of the Component. */\r\n  private _disabled = false;\r\n\r\n  /**\r\n   * Returns the current disabled state of the Component.\r\n   * Bind the '.spl-disabled' class according to the value.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.spl-disabled')\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  /**\r\n   * Sets the current disabled state of the Component.\r\n   * @param value - Disabled state to set.\r\n   */\r\n  set disabled(value: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /** Returns tabindex according to disabled status and binds value to attribute. */\r\n  @HostBinding('attr.tabindex')\r\n  get tabindex(): string {\r\n    return this.disabled ? '-1' : '0';\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._subscribeOptionQueryListChanges();\r\n    this._subscribeOptionClick();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._updateLabel();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._unobserveHostPosition();\r\n    this._optionClickSubscription?.unsubscribe();\r\n    this._optionsOverlayCloseSubscription?.unsubscribe();\r\n\r\n    clearTimeout(this._renderTimer);\r\n  }\r\n\r\n  /**\r\n   * Sets value in Component.\r\n   * The label is also updated according to the set value.\r\n   * @param obj - Value to set.\r\n   */\r\n  override writeValue(obj: any): void {\r\n    this.value = obj;\r\n    this._updateLabel();\r\n  }\r\n\r\n  /**\r\n   * Sets the disabled state on the Component.\r\n   * @param isDisabled - Disabled state to set.\r\n   */\r\n  override setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  /** Listen to the click event of the host element and open the options overlay. */\r\n  @HostListener('click')\r\n  openOptionsByClick(): void {\r\n    this.openOptions();\r\n  }\r\n\r\n  /** Listen to the 'enter' keydown event of the host element and open the options overlay. */\r\n  @HostListener('keydown.enter')\r\n  openOptionsByEnter(): void {\r\n    this.openOptions();\r\n  }\r\n\r\n  /**\r\n   * Listen to the 'arrowup' keydown event of the host element and select the previous option of the currently selected option.\r\n   * If no option is currently selected, the first option is selected.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.arrowup', ['$event'])\r\n  onHostArrowUp(event: KeyboardEvent): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    const activeIndex = this._getCurrentActiveIndex();\r\n    const previousOption = this._getOptionByIndex(Math.max(0, activeIndex - 1));\r\n\r\n    if (previousOption) {\r\n      this.valueChange(previousOption.value);\r\n      this.writeValue(previousOption.value);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Listen to the 'arrowdown' keydown event of the host element and select the next option of the currently selected option.\r\n   * If no option is currently selected, the first option is selected.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.arrowdown', ['$event'])\r\n  onHostArrowDown(event: KeyboardEvent): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    const activeIndex = this._getCurrentActiveIndex();\r\n    const nextOption = this._getOptionByIndex(Math.min(this.optionQueryList.length - 1, activeIndex + 1));\r\n\r\n    if (nextOption) {\r\n      this.valueChange(nextOption.value);\r\n      this.writeValue(nextOption.value);\r\n    }\r\n  }\r\n\r\n  /** Focus on the host element. */\r\n  focus(): void {\r\n    this.elementRef.nativeElement.focus();\r\n  }\r\n\r\n  /**\r\n   * Open the options overlay.\r\n   * If there is an existing open overlay or is disabled, it is ignored.\r\n   */\r\n  openOptions(): void {\r\n    if (this.disabled || this.overlayOpened) {\r\n      return;\r\n    }\r\n\r\n    this._optionsOverlayRef = this._overlayService.open<SplOptionsOverlayComponent, SplOptionsOverlayData, Value>(\r\n      SplOptionsOverlayComponent,\r\n      {\r\n        data: {\r\n          optionsTemplate: this.optionsTemplate,\r\n          optionsQueryList: this.optionQueryList,\r\n          value: this.value,\r\n        },\r\n        styles: this._getOptionsStyles(),\r\n      },\r\n    );\r\n\r\n    this.overlayOpened = true;\r\n    this._observeHostPosition();\r\n    this._subscribeOptionsOverlayClose(this._optionsOverlayRef);\r\n  }\r\n\r\n  /**\r\n   * Subscribes to changes in the QueryList of options.\r\n   * When options change, the component resubscribes to the onClick emitter and updates the label again.\r\n   */\r\n  private _subscribeOptionQueryListChanges(): void {\r\n    this.optionQueryList.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\r\n      this._subscribeOptionClick();\r\n      this._updateLabel();\r\n    });\r\n  }\r\n\r\n  /** To close the opened SplOverlayRef with value, it subscribes to onClick emitter of options. */\r\n  private _subscribeOptionClick(): void {\r\n    const subscription = new Subscription();\r\n\r\n    this._optionClickSubscription?.unsubscribe();\r\n\r\n    subscription.add(\r\n      ...this.optionQueryList.map((option) => {\r\n        return option.onClick.subscribe((value) => {\r\n          this._logger.debug('Click emitted from option', value);\r\n          this._optionsOverlayRef?.close(value);\r\n        });\r\n      }),\r\n    );\r\n\r\n    this._optionClickSubscription = subscription;\r\n  }\r\n\r\n  /** Update the label according to the current value. */\r\n  private _updateLabel(): void {\r\n    clearTimeout(this._renderTimer);\r\n\r\n    this._renderTimer = setTimeout(() => {\r\n      const option = this.optionQueryList?.find((option) => {\r\n        return option.value === this.value;\r\n      });\r\n\r\n      if (option) {\r\n        this.label = option.label;\r\n      } else {\r\n        this.label = '';\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Subscribes to the onClose emitter of an opened SplOverlayRef to set the returned result to the Component when SplOverlayRef is closed.\r\n   * @param optionsOverlayRef - Opened SplOverlayRef for options.\r\n   */\r\n  private _subscribeOptionsOverlayClose(optionsOverlayRef: SplOverlayRef<SplOptionsOverlayComponent, Value>): void {\r\n    const subscription = new Subscription();\r\n\r\n    this._optionsOverlayCloseSubscription?.unsubscribe();\r\n\r\n    subscription.add(\r\n      optionsOverlayRef.onClose.subscribe((result) => {\r\n        if (result) {\r\n          this.valueChange(result);\r\n          this.writeValue(result);\r\n          this.focus();\r\n        }\r\n\r\n        this._unobserveHostPosition();\r\n\r\n        // Delete OverlayRef and overlayOpened status after 100ms timeout to prevent re-opening options\r\n        // when clicking select component to close opened options.\r\n        setTimeout(() => {\r\n          this.overlayOpened = false;\r\n          delete this._optionsOverlayRef;\r\n        }, 100);\r\n      }),\r\n    );\r\n\r\n    this._optionsOverlayCloseSubscription = subscription;\r\n  }\r\n\r\n  /**\r\n   * Calculate the styles to apply to SplOverlayRef to open and return.\r\n   * This calculates whether the overlay should be placed above or below the component based on the top and bottom margins.\r\n   */\r\n  private _getOptionsStyles(): Partial<CSSStyleDeclaration> {\r\n    const { maxHeight } = SplOptionsOverlayComponent;\r\n    const domRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n    const styles: Partial<CSSStyleDeclaration> = {\r\n      width: domRect.width + 'px',\r\n      left: domRect.left + 'px',\r\n    };\r\n\r\n    const bottomAvailable = domRect.bottom + maxHeight < window.innerHeight;\r\n    const topAvailable = domRect.top - maxHeight > 0;\r\n\r\n    if (!bottomAvailable && topAvailable) {\r\n      styles.bottom = window.innerHeight - domRect.top + 'px';\r\n    } else {\r\n      styles.top = domRect.bottom + 'px';\r\n    }\r\n\r\n    return styles;\r\n  }\r\n\r\n  /** Updates the position of the open SplOverlayRef by observing the position of the host element. */\r\n  private _observeHostPosition(): void {\r\n    this._positionTrackerService.observe(this.elementRef.nativeElement, (domRect) => {\r\n      this._optionsOverlayRef?.updateStyles(this._getOptionsStyles());\r\n\r\n      const hideOnTop = domRect.bottom < 0;\r\n      const hideUnderBottom = domRect.top > window.innerHeight;\r\n\r\n      if (hideOnTop || hideUnderBottom) {\r\n        this._optionsOverlayRef?.close();\r\n      }\r\n    });\r\n  }\r\n\r\n  /** Unobserve the position of the host element. */\r\n  private _unobserveHostPosition(): void {\r\n    this._positionTrackerService.unobserve(this.elementRef.nativeElement);\r\n  }\r\n\r\n  /** Returns the index of the currently selected option. */\r\n  private _getCurrentActiveIndex(): number {\r\n    let activeIndex = -1;\r\n\r\n    // To stop from the active option, use find() method instead of forEach().\r\n    this.optionQueryList.find((optionItem, index) => {\r\n      if (optionItem.value === this.value) {\r\n        activeIndex = index;\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    });\r\n\r\n    return activeIndex;\r\n  }\r\n\r\n  /**\r\n   * Returns the SplOptionComponent of the given index.\r\n   * @param index - Index to get SplOptionComponent.\r\n   */\r\n  private _getOptionByIndex(index: number): CanUndefined<SplOptionComponent> {\r\n    return this.optionQueryList.get(index);\r\n  }\r\n}\r\n","<div *ngIf=\"value && label; else noLabel\" class=\"spl-select-value\">\r\n  {{label}}\r\n</div>\r\n\r\n<ng-template #noLabel>\r\n  <div class=\"spl-placeholder\">\r\n    {{placeholder}}\r\n  </div>\r\n</ng-template>\r\n\r\n<spl-icon class=\"spl-select-arrow-icon\">arrow_drop_down</spl-icon>\r\n\r\n<ng-template #optionsTemplate>\r\n  <ng-content></ng-content>\r\n</ng-template>\r\n","import { Component, EventEmitter, Inject, Input, OnChanges, Optional, Output } from '@angular/core';\r\nimport { SPL_PAGINATOR_PROVIDER, SplPaginatorCurrentRangeLabelFn, SplPaginatorOptions } from './spl-paginator-provider';\r\nimport { CommonModule, DecimalPipe } from '@angular/common';\r\nimport { BooleanAttribute } from '../../utils/type.util';\r\nimport { convertBooleanAttribute } from '../../utils/convert.util';\r\nimport { SplSelectComponent } from '../spl-select/spl-select.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SplOptionComponent } from '../spl-option/spl-option.component';\r\nimport { SplButtonDirective } from '../spl-button/spl-button.directive';\r\nimport { SplIconComponent } from '../spl-icon/spl-icon.component';\r\n\r\n/**\r\n * It is a paginator similar to the Material Design System.\r\n * You can customize the text representing the current page range by providing SplPaginatorOptions.\r\n */\r\n@Component({\r\n  selector: 'spl-paginator',\r\n  templateUrl: './spl-paginator.component.html',\r\n  host: {\r\n    class: 'spl-paginator',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule, SplSelectComponent, FormsModule, SplOptionComponent, SplButtonDirective, SplIconComponent],\r\n})\r\nexport class SplPaginatorComponent implements OnChanges {\r\n  /** Sets the total record size. */\r\n  @Input({ required: true }) total = 0;\r\n\r\n  /**\r\n   * Sets options for the size selector to an array of numbers.\r\n   * If the array is empty, the size selector is not displayed.\r\n   */\r\n  @Input() sizeOptions: number[] = [];\r\n\r\n  /**\r\n   * Sets the current page.\r\n   * The default is 1 and the minimum is 1.\r\n   */\r\n  @Input({ required: true }) page = 1;\r\n\r\n  /** The emitter that will emit the changed page. */\r\n  @Output() pageChange = new EventEmitter<number>();\r\n\r\n  /**\r\n   * Sets the record size to display per page.\r\n   * The default value is 10.\r\n   */\r\n  @Input() size = 10;\r\n\r\n  /** An emitter that will emit the changed size through the size selector. */\r\n  @Output() sizeChange = new EventEmitter<number>();\r\n\r\n  /**\r\n   * A label to display the current page range.\r\n   * By default, it displays as `${startRecordNumber} - ${endRecordNumber}`,\r\n   * but you can change the format by providing SplPaginatorOptions.createCurrentRangeLabel .\r\n   */\r\n  currentRangeLabel = '';\r\n\r\n  constructor(@Inject(SPL_PAGINATOR_PROVIDER) @Optional() private _options: SplPaginatorOptions) {}\r\n\r\n  /** This is the display state of the buttons to go to the first and last pages. */\r\n  private _showEndButtons = false;\r\n\r\n  /** Returns the display state of the buttons to go to the first and last pages. */\r\n  @Input()\r\n  get showEndButtons(): boolean {\r\n    return this._showEndButtons;\r\n  }\r\n\r\n  /**\r\n   * Sets the display state of the buttons to go to the first and last pages.\r\n   * @param value - Display state to set.\r\n   */\r\n  set showEndButtons(value: BooleanAttribute) {\r\n    this._showEndButtons = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /** Returns the last page number. */\r\n  get lastPage(): number {\r\n    return Math.ceil(this.total / this.size);\r\n  }\r\n\r\n  /** Returns true if the current page is the first page. */\r\n  get isFirstPage(): boolean {\r\n    return this.page === 1;\r\n  }\r\n\r\n  /** Returns true if the current page is the last page. */\r\n  get isLastPage(): boolean {\r\n    return this.page * this.size >= this.total;\r\n  }\r\n\r\n  /** Returns the state of whether to display the size selector. */\r\n  get showSizeSelector(): boolean {\r\n    return this.sizeOptions.length > 0;\r\n  }\r\n\r\n  /**\r\n   * Returns a function that creates a label to display the current page range.\r\n   * If SplPaginatorOptions.createCurrentRangeLabel is provided, that will be returned.\r\n   */\r\n  get createCurrentRangeLabel(): SplPaginatorCurrentRangeLabelFn {\r\n    return (\r\n      this._options?.createCurrentRangeLabel ||\r\n      ((page, size, total) => {\r\n        const decimalPipe = new DecimalPipe('en-US');\r\n        const digitsInfo = '0.0-0';\r\n\r\n        return `${decimalPipe.transform((page - 1) * size + 1, digitsInfo)} - ${decimalPipe.transform(\r\n          Math.min(total, page * size),\r\n          digitsInfo,\r\n        )} / ${decimalPipe.transform(total, digitsInfo)}`;\r\n      })\r\n    );\r\n  }\r\n\r\n  ngOnChanges() {\r\n    this.currentRangeLabel = this.createCurrentRangeLabel(this.page, this.size, this.total);\r\n  }\r\n\r\n  /** If there is a previous page, go to the previous page. */\r\n  toPreviousPage(): void {\r\n    if (!this.isFirstPage) {\r\n      this.pageChange.emit(this.page - 1);\r\n    }\r\n  }\r\n\r\n  /** If there is a next page, go to the next page. */\r\n  toNextPage(): void {\r\n    if (!this.isLastPage) {\r\n      this.pageChange.emit(this.page + 1);\r\n    }\r\n  }\r\n\r\n  /** Go to the first page. */\r\n  toFirstPage(): void {\r\n    this.pageChange.emit(1);\r\n  }\r\n\r\n  /** Go to the last page. */\r\n  toLastPage(): void {\r\n    this.pageChange.emit(this.lastPage);\r\n  }\r\n}\r\n","<spl-select\r\n  (ngModelChange)=\"sizeChange.emit($event)\"\r\n  [ngModel]=\"size\"\r\n  *ngIf=\"showSizeSelector\">\r\n  <spl-option\r\n    *ngFor=\"let item of sizeOptions\"\r\n    [value]=\"item\">\r\n    {{item}}\r\n  </spl-option>\r\n</spl-select>\r\n\r\n<div class=\"spl-paginator-wrapper\">\r\n  <div class=\"spl-paginator-label\">\r\n    {{currentRangeLabel}}\r\n  </div>\r\n\r\n  <div class=\"spl-paginator-buttons\">\r\n    <button\r\n      (click)=\"toFirstPage()\"\r\n      *ngIf=\"showEndButtons\"\r\n      [disabled]=\"isFirstPage\"\r\n      class=\"spl-icon-button\"\r\n      splButton>\r\n      <spl-icon weight=\"200\">keyboard_double_arrow_left</spl-icon>\r\n    </button>\r\n\r\n    <button\r\n      (click)=\"toPreviousPage()\"\r\n      [disabled]=\"isFirstPage\"\r\n      class=\"spl-icon-button\"\r\n      splButton>\r\n      <spl-icon weight=\"200\">chevron_left</spl-icon>\r\n    </button>\r\n\r\n    <button\r\n      (click)=\"toNextPage()\"\r\n      [disabled]=\"isLastPage\"\r\n      class=\"spl-icon-button\"\r\n      splButton>\r\n      <spl-icon weight=\"200\">chevron_right</spl-icon>\r\n    </button>\r\n\r\n    <button\r\n      (click)=\"toLastPage()\"\r\n      *ngIf=\"showEndButtons\"\r\n      [disabled]=\"isLastPage\"\r\n      class=\"spl-icon-button\"\r\n      splButton>\r\n      <spl-icon weight=\"200\">keyboard_double_arrow_right</spl-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n","import { Component, HostBinding, Input, OnDestroy } from '@angular/core';\r\nimport { SplThemeAttribute } from '../../interfaces/spl-theme-attribute';\r\nimport { NumberLike, SplTheme } from '../../utils/type.util';\r\nimport { convertNumberLike } from '../../utils/convert.util';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * This is a component that displays the current progress status in the form of a horizontal bar.\r\n * You can set the color according to the theme by using the theme attribute.\r\n */\r\n@Component({\r\n  selector: 'spl-progress-bar',\r\n  templateUrl: './spl-progress-bar.component.html',\r\n  host: {\r\n    class: 'spl-progress-bar',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplProgressBarComponent implements SplThemeAttribute, OnDestroy {\r\n  /** Sets the theme color of the progress bar. */\r\n  @Input() @HostBinding('attr.spl-theme') theme: SplTheme = 'none';\r\n\r\n  /**\r\n   * Indicates the percentage of current progress.\r\n   * It has a value between 0 and 100.\r\n   */\r\n  percentage = 0;\r\n\r\n  /** This is a Timeout timer to prevent NG0100 that may occur when calculating percentage. */\r\n  private _calculateTimer: any;\r\n\r\n  ngOnDestroy() {\r\n    clearTimeout(this._calculateTimer);\r\n  }\r\n\r\n  /** A value indicating the current progress. */\r\n  private _value = 0;\r\n\r\n  /** Returns a value indicating the current progress. */\r\n  get value(): number {\r\n    return this._value;\r\n  }\r\n\r\n  /**\r\n   * Sets a value indicating the current progress.\r\n   * A percentage is calculated each time a value is set.\r\n   * @param value - Value to set.\r\n   */\r\n  @Input()\r\n  set value(value: NumberLike) {\r\n    value = convertNumberLike(value);\r\n\r\n    if (value !== this.value) {\r\n      this._value = value;\r\n      this.calculatePercentage();\r\n    }\r\n  }\r\n\r\n  /** A value indicating the total progress. */\r\n  private _total = 0;\r\n\r\n  /** Returns a value indicating the total progress. */\r\n  get total(): number {\r\n    return this._total;\r\n  }\r\n\r\n  /**\r\n   * Sets a value indicating the total progress.\r\n   * A percentage is calculated each time a value is set.\r\n   * @param value - Value to set.\r\n   */\r\n  @Input()\r\n  set total(value: NumberLike) {\r\n    const total = convertNumberLike(value);\r\n\r\n    if (total !== this._total) {\r\n      this._total = total;\r\n      this.calculatePercentage();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Calculate percentage using the currently set total and value.\r\n   * setTimeout() is used internally to prevent NG0100 error.\r\n   */\r\n  calculatePercentage(): void {\r\n    clearTimeout(this._calculateTimer);\r\n\r\n    // To prevent NG0100 error.\r\n    this._calculateTimer = setTimeout(() => {\r\n      this.percentage = this.total > 0 ? (this.value / this.total) * 100 : 0;\r\n    });\r\n  }\r\n}\r\n","<div\r\n  [style.width]=\"percentage + '%'\"\r\n  class=\"spl-progress-bar-thumb\"></div>\r\n","import { Component, EventEmitter, HostListener, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'spl-radio-button',\r\n  templateUrl: './spl-radio-button.component.html',\r\n  host: {\r\n    class: 'spl-radio-button',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplRadioButtonComponent {\r\n  @Input({ required: true }) value: any;\r\n\r\n  onClick = new EventEmitter<any>();\r\n\r\n  active = false;\r\n\r\n  @HostListener('click')\r\n  onHostClick(): void {\r\n    this.onClick.emit(this.value);\r\n  }\r\n}\r\n","<div\r\n  [class.spl-active]=\"active\"\r\n  class=\"spl-radio spl-input\">\r\n  <div class=\"spl-radio-indicator\"></div>\r\n</div>\r\n\r\n<div class=\"spl-radio-label\">\r\n  <ng-content></ng-content>\r\n</div>\r\n","import {\r\n  AfterContentInit,\r\n  Component,\r\n  ContentChildren,\r\n  DestroyRef,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  OnDestroy,\r\n  QueryList,\r\n} from '@angular/core';\r\nimport { SplRadioButtonComponent } from './spl-radio-button/spl-radio-button.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { SplControl } from '../../abstracts/spl-control';\r\nimport { BooleanAttribute, CanUndefined } from '../../utils/type.util';\r\nimport { convertBooleanAttribute } from '../../utils/convert.util';\r\nimport { SplLogger } from '../../utils/logger.util';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * This is the type for the radio buttons placement direction within the radio group.\r\n * 'column' places radio buttons vertically.\r\n * 'row' places radio buttons horizontally.\r\n */\r\nexport type SplRadioGroupDirection = 'column' | 'row';\r\n\r\n/**\r\n * This is a container component for displaying radio buttons.\r\n * This includes a keyboard event for the radio button.\r\n */\r\n@Component({\r\n  selector: 'spl-radio-group',\r\n  templateUrl: './spl-radio-group.component.html',\r\n  host: {\r\n    class: 'spl-radio-group',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplRadioGroupComponent extends SplControl implements AfterContentInit, OnDestroy {\r\n  /**\r\n   * Sets the direction of radio buttons.\r\n   * This binds the value to the spl-radio-group-direction attribute.\r\n   */\r\n  @Input() @HostBinding('attr.spl-radio-group-direction') direction: SplRadioGroupDirection = 'row';\r\n\r\n  /** This is a QueryList of radio buttons used as content. */\r\n  @ContentChildren(SplRadioButtonComponent, { descendants: true })\r\n  radioButtonQueryList!: QueryList<SplRadioButtonComponent>;\r\n\r\n  /** This is the value of the currently selected radio button. */\r\n  value: any;\r\n\r\n  /** Logger for SplRadioGroupComponent. */\r\n  private readonly _logger = new SplLogger('SplRadioGroupComponent');\r\n\r\n  /** A subscription to subscribe to the onClick emitter of radio buttons. */\r\n  private _radioButtonClickSubscription?: Subscription;\r\n\r\n  /** Timeout timer to prevent NG0100 error when updating the selected option. */\r\n  private _renderTimer: any;\r\n\r\n  constructor(private _destroyRef: DestroyRef) {\r\n    super();\r\n  }\r\n\r\n  /** The current disabled state of the Component. */\r\n  private _disabled = false;\r\n\r\n  /**\r\n   * Returns the current disabled state of the Component.\r\n   * Bind the '.spl-disabled' class according to the value.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.spl-disabled')\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  /**\r\n   * Sets the current disabled state of the Component.\r\n   * @param value - Disabled state to set.\r\n   */\r\n  set disabled(value: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /** Returns tabindex according to disabled status and binds value to attribute. */\r\n  @HostBinding('attr.tabindex')\r\n  get tabindex(): string {\r\n    return this.disabled ? '-1' : '0';\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._subscribeRadioButtonChanges();\r\n    this._subscribeRadioButtonClick();\r\n    this._updateSelectedRadioButton();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._radioButtonClickSubscription?.unsubscribe();\r\n    clearTimeout(this._renderTimer);\r\n  }\r\n\r\n  /**\r\n   * Sets the value in the component.\r\n   * This changes the selected radio button.\r\n   * @param obj - Value to set.\r\n   */\r\n  override writeValue(obj: any): void {\r\n    this.value = obj;\r\n    this._updateSelectedRadioButton();\r\n  }\r\n\r\n  /**\r\n   * Sets the disabled state on the Component.\r\n   * @param isDisabled - Disabled state to set.\r\n   */\r\n  override setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  /**\r\n   * Select the previous radio button by listening to the arrowup keydown event.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.arrowup', ['$event'])\r\n  onHostArrowUp(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    this._toPrevious();\r\n  }\r\n\r\n  /**\r\n   * Select the previous radio button by listening to the arrowleft keydown event.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.arrowleft', ['$event'])\r\n  onHostArrowLeft(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    this._toPrevious();\r\n  }\r\n\r\n  /**\r\n   * Select the next radio button by listening to the arrowdown keydown event.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.arrowdown', ['$event'])\r\n  onHostArrowDown(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    this._toNext();\r\n  }\r\n\r\n  /**\r\n   * Select the next radio button by listening to the arrowright keydown event.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.arrowright', ['$event'])\r\n  onHostArrowRight(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    this._toNext();\r\n  }\r\n\r\n  /**\r\n   * Select the previous radio button.\r\n   * This calls the valueChange() and writeValue() methods.\r\n   */\r\n  private _toPrevious(): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    const activeIndex = this._getCurrentActiveIndex();\r\n    const radioButton = this._getRadioButtonByIndex(Math.max(0, activeIndex - 1));\r\n\r\n    if (radioButton) {\r\n      this.valueChange(radioButton.value);\r\n      this.writeValue(radioButton.value);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Select the next radio button.\r\n   * This calls the valueChange() and writeValue() methods.\r\n   */\r\n  private _toNext(): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    const activeIndex = this._getCurrentActiveIndex();\r\n    const radioButton = this._getRadioButtonByIndex(Math.min(this.radioButtonQueryList.length - 1, activeIndex + 1));\r\n\r\n    if (radioButton) {\r\n      this.valueChange(radioButton.value);\r\n      this.writeValue(radioButton.value);\r\n    }\r\n  }\r\n\r\n  /** Returns the index of the currently selected radio button. */\r\n  private _getCurrentActiveIndex(): number {\r\n    let activeIndex = -1;\r\n\r\n    // To stop from the active option, use find() method instead of forEach().\r\n    this.radioButtonQueryList.find((optionItem, index) => {\r\n      if (optionItem.value === this.value) {\r\n        activeIndex = index;\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    });\r\n\r\n    return activeIndex;\r\n  }\r\n\r\n  /**\r\n   * Returns SplRadioButtonComponent at the given index.\r\n   * @param index - Index to get SplRadioButtonComponent.\r\n   */\r\n  private _getRadioButtonByIndex(index: number): CanUndefined<SplRadioButtonComponent> {\r\n    return this.radioButtonQueryList.get(index);\r\n  }\r\n\r\n  /** Updates the selected radio button according to the current value. */\r\n  private _updateSelectedRadioButton(): void {\r\n    clearTimeout(this._renderTimer);\r\n\r\n    this._renderTimer = setTimeout(() => {\r\n      this.radioButtonQueryList?.forEach((radioButtonItem) => {\r\n        radioButtonItem.active = radioButtonItem.value === this.value;\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Subscribes to changes in the QueryList of radio buttons.\r\n   * When the radio buttons change, the Component resubscribes to the onClick emitter and updates the selected radio button again.\r\n   */\r\n  private _subscribeRadioButtonChanges(): void {\r\n    this.radioButtonQueryList.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\r\n      this._subscribeRadioButtonClick();\r\n      this._updateSelectedRadioButton();\r\n    });\r\n  }\r\n\r\n  /** Subscribes to the onClick emitter of radio buttons. */\r\n  private _subscribeRadioButtonClick(): void {\r\n    const subscription = new Subscription();\r\n\r\n    this._radioButtonClickSubscription?.unsubscribe();\r\n\r\n    subscription.add(\r\n      ...this.radioButtonQueryList.map((radioButtonItem) => {\r\n        return radioButtonItem.onClick.subscribe((value) => {\r\n          if (this.disabled) {\r\n            return;\r\n          }\r\n\r\n          this._logger.debug('Radio clicked', value);\r\n\r\n          this.valueChange(value);\r\n          this.writeValue(value);\r\n        });\r\n      }),\r\n    );\r\n\r\n    this._radioButtonClickSubscription = subscription;\r\n  }\r\n}\r\n","<ng-content></ng-content>\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: 'ng-template[splTabContent]',\r\n  host: {\r\n    class: 'spl-tab-content',\r\n  },\r\n  standalone: true,\r\n})\r\nexport class SplTabContentDirective {\r\n  constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: 'ng-template[splTabLabel]',\r\n  host: {\r\n    class: 'spl-tab-content',\r\n  },\r\n  standalone: true,\r\n})\r\nexport class SplTabLabelDirective {\r\n  constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","import { AfterContentInit, Component, ContentChild } from '@angular/core';\r\nimport { SplTabContentDirective } from './spl-tab-content.directive';\r\nimport { SplTabLabelDirective } from './spl-tab-label.directive';\r\nimport { SplError } from '../../../utils/error.util';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'spl-tab',\r\n  template: '',\r\n  host: {\r\n    class: 'spl-tab',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplTabComponent implements AfterContentInit {\r\n  @ContentChild(SplTabLabelDirective, { descendants: true }) tabLabel!: SplTabLabelDirective;\r\n  @ContentChild(SplTabContentDirective, { descendants: true }) tabContent!: SplTabContentDirective;\r\n\r\n  ngAfterContentInit() {\r\n    if (!this.tabLabel) {\r\n      throw new SplError('<ng-template splTabLabel> is required for <spl-tab>');\r\n    }\r\n\r\n    if (!this.tabContent) {\r\n      throw new SplError('<ng-template splTabContent> is required for <spl-tab>');\r\n    }\r\n  }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ContentChildren,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n  PLATFORM_ID,\r\n  QueryList,\r\n  ViewChild,\r\n  ViewChildren,\r\n} from '@angular/core';\r\nimport { SplTabComponent } from './spl-tab/spl-tab.component';\r\nimport { BooleanAttribute, NumberLike } from '../../utils/type.util';\r\nimport { convertBooleanAttribute, convertNumberLike } from '../../utils/convert.util';\r\nimport { SplLogger } from '../../utils/logger.util';\r\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport { SplHorizontalSliderComponent } from '../spl-horizontal-slider/spl-horizontal-slider.component';\r\nimport { SplEffectDirective } from '../spl-effect/spl-effect.directive';\r\n\r\n/**\r\n * This is a type that defines the alignment of the tab header.\r\n * 'fill' fills each tab header to fit the entire width.\r\n * 'start' aligns each tab header to the left.\r\n * 'end' aligns each tab header to the right.\r\n * 'center' aligns each tab header to the center.\r\n */\r\nexport type SplTabHeaderAlign = 'fill' | 'start' | 'end' | 'center';\r\n\r\n/**\r\n * This is a container component for displaying tab header and tab content.\r\n * Because the header is in SplHorizontalSliderComponent, the horizontal slider operates when the number of tabs increases.\r\n */\r\n@Component({\r\n  selector: 'spl-tab-group',\r\n  templateUrl: './spl-tab-group.component.html',\r\n  host: {\r\n    class: 'spl-tab-group',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule, SplHorizontalSliderComponent, SplEffectDirective],\r\n})\r\nexport class SplTabGroupComponent implements OnInit, AfterViewInit, OnDestroy {\r\n  /**\r\n   * Sets the alignment of the tab header.\r\n   * The default is 'fill'.\r\n   */\r\n  @Input() headerAlign: SplTabHeaderAlign = 'fill';\r\n\r\n  /**\r\n   * This is an emitter that emits the index of the currently activated tab.\r\n   * Emitted whenever the scroll of the body element ends.\r\n   */\r\n  @Output() activeIndexChange = new EventEmitter<number>();\r\n\r\n  /** ElementRef for the body area element of the tab group. */\r\n  @ViewChild('tabBody', { read: ElementRef }) tabBodyRef!: ElementRef<HTMLElement>;\r\n\r\n  /** ElementRef for the wrapper element wrapping each tab item in the body area. */\r\n  @ViewChildren('tabWrapper', { read: ElementRef }) tabWrapperQueryList!: QueryList<ElementRef<HTMLElement>>;\r\n\r\n  /** QueryList for SplTabComponent used as content. */\r\n  @ContentChildren(SplTabComponent, { descendants: true }) splTabQueryList!: QueryList<SplTabComponent>;\r\n\r\n  /** Logger for SplTabGroupComponent. */\r\n  private readonly _logger = new SplLogger('SplTabGroupComponent');\r\n\r\n  /**\r\n   * IntersectionObserver to detect intersection of each tab wrapper element.\r\n   * Whenever a tab wrapper element is intersecting, activeIndex is changed to the index of the corresponding element.\r\n   */\r\n  private _intersectionObserver?: IntersectionObserver;\r\n\r\n  /**\r\n   * When the intersection of TabBody changes due to IntersectionObserver, intersectedIndex is updated.\r\n   * At this time, if the value of preventUpdatingIndexByScrolling is true, the highlight of the tab header changes only according to the value of activeIndex.\r\n   * If the value of preventUpdatingIndexByScrolling is false, the highlight of the tab header changes according to the value of intersectedIndex.\r\n   */\r\n  private _preventUpdatingIndexByScrolling = false;\r\n\r\n  /** Index of the currently active tab detected according to IntersectionObserver. */\r\n  private _intersectedIndex = 0;\r\n\r\n  constructor(@Inject(PLATFORM_ID) private _platformId: Object) {}\r\n\r\n  /** Index of the currently active tab. */\r\n  private _activeIndex = 0;\r\n\r\n  /** Returns the index of the currently active tab. */\r\n  get activeIndex(): number {\r\n    return this._activeIndex;\r\n  }\r\n\r\n  /**\r\n   * Sets the active tab index.\r\n   * When setting an index, if the view has been initialized, scroll to the tab item at that index.\r\n   * If not, update the activeIndex and then scroll to the active index in ngAfterViewInit().\r\n   * @param value - Index to set.\r\n   */\r\n  @Input()\r\n  set activeIndex(value: NumberLike) {\r\n    const activeIndex = convertNumberLike(value);\r\n\r\n    this._logger.debug('ActiveIndex is updated', activeIndex);\r\n\r\n    this._activeIndex = activeIndex;\r\n    this.scrollToContentByIndex(activeIndex);\r\n  }\r\n\r\n  /** Value for whether to execute tab changes immediately. */\r\n  private _instant = false;\r\n\r\n  /** Returns whether to execute tab change immediately. */\r\n  @Input()\r\n  get instant(): boolean {\r\n    return this._instant;\r\n  }\r\n\r\n  /**\r\n   * Set whether to execute tab changes immediately.\r\n   * @param value - Value for whether to execute tab changes immediately.\r\n   */\r\n  set instant(value: BooleanAttribute) {\r\n    this._instant = convertBooleanAttribute(value);\r\n  }\r\n\r\n  get highlightedIndex(): number {\r\n    return this._preventUpdatingIndexByScrolling ? this.activeIndex : this._intersectedIndex;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this._intersectedIndex = this.activeIndex;\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this._logger.debug('ActiveIndex after initialized', this.activeIndex);\r\n\r\n    if (isPlatformBrowser(this._platformId)) {\r\n      this._intersectionObserver = new IntersectionObserver(\r\n        (entries) => {\r\n          entries.forEach((entry) => {\r\n            if (entry.isIntersecting) {\r\n              this._intersectedIndex = this.getActiveIndexByTarget(entry.target);\r\n              this._logger.debug('Intersected index', this._intersectedIndex);\r\n            }\r\n          });\r\n        },\r\n        {\r\n          threshold: 0.5,\r\n        },\r\n      );\r\n\r\n      this.tabWrapperQueryList.forEach((tabWrapperRef) => {\r\n        this._intersectionObserver?.observe(tabWrapperRef.nativeElement);\r\n      });\r\n\r\n      this.scrollToContentByIndex(this.activeIndex, true);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._intersectionObserver?.disconnect();\r\n  }\r\n\r\n  /**\r\n   * Scrolls to the tab item of the given index.\r\n   * @param index - Index of the tab item.\r\n   * @param instant - If true, moves to the tab item immediately without smooth scrolling.\r\n   *  The default value uses the value of the instant getter.\r\n   */\r\n  scrollToContentByIndex(index: number, instant = this.instant): void {\r\n    const { tabBodyRef } = this;\r\n\r\n    this._logger.debug('Scroll to content by index', index);\r\n\r\n    const activeContentRef = this.tabWrapperQueryList?.get(index);\r\n\r\n    if (activeContentRef && tabBodyRef) {\r\n      this._logger.debug('Scroll to content by index with instant', instant);\r\n\r\n      // To keep the highlight even if the intersectedIndex is updated while the scroll animation is running.\r\n      this._preventUpdatingIndexByScrolling = !instant;\r\n\r\n      const tabBody = tabBodyRef.nativeElement;\r\n      const activeContent = activeContentRef.nativeElement;\r\n      const activeContentDomRect = activeContent.getBoundingClientRect();\r\n      const tabBodyDomRect = tabBody.getBoundingClientRect();\r\n\r\n      this.tabBodyRef.nativeElement.scrollTo({\r\n        left: activeContentDomRect.left - tabBodyDomRect.left + tabBody.scrollLeft,\r\n        behavior: instant ? 'instant' : 'smooth',\r\n      });\r\n\r\n      // When instant is true, the scrollend event is not triggered,\r\n      // so the onScrollEnd() method should be called immediately.\r\n      if (instant) {\r\n        this.onScrollEnd();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * When the tab button is clicked, activeIndex is updated.\r\n   * @param index - Index of the clicked tab button.\r\n   */\r\n  onTabButtonClick(index: number): void {\r\n    this._logger.debug('Tab button is clicked', index);\r\n    this.activeIndex = index;\r\n  }\r\n\r\n  /**\r\n   * Finds the index of the activated tab item using the given target element and updates activeIndex.\r\n   * @param target - The target element should be one of the tab wrapper elements.\r\n   */\r\n  getActiveIndexByTarget(target: Element): number {\r\n    let activeIndex = -1;\r\n\r\n    if (this.tabBodyRef && this.tabWrapperQueryList) {\r\n      this.tabWrapperQueryList.find((tabWrapperRef, index) => {\r\n        if (tabWrapperRef.nativeElement === target) {\r\n          activeIndex = index;\r\n          return true;\r\n        }\r\n\r\n        return false;\r\n      });\r\n    }\r\n\r\n    return activeIndex;\r\n  }\r\n\r\n  /** Listen for the scrollend event in the tab body area and emit an activeIndexChange emitter. */\r\n  onScrollEnd(): void {\r\n    this._logger.debug('Intersected index after scroll ended', this._intersectedIndex);\r\n    this._logger.debug('Active index after scroll ended', this._activeIndex);\r\n\r\n    this._preventUpdatingIndexByScrolling = false;\r\n    this._activeIndex = this._intersectedIndex;\r\n    this.activeIndexChange.emit(this.activeIndex);\r\n  }\r\n}\r\n","<spl-horizontal-slider\r\n  [attr.spl-tab-header-align]=\"headerAlign\"\r\n  class=\"spl-tab-header\">\r\n  <button\r\n    (click)=\"onTabButtonClick(tabButtonIndex)\"\r\n    *ngFor=\"let item of splTabQueryList; let tabButtonIndex = index\"\r\n    [class.spl-active]=\"tabButtonIndex === highlightedIndex\"\r\n    class=\"spl-tab-button\"\r\n    theme=\"primary\"\r\n    type=\"button\"\r\n    splEffect>\r\n    <ng-container [ngTemplateOutlet]=\"item.tabLabel.templateRef\"></ng-container>\r\n    <span class=\"spl-tab-indicator\"></span>\r\n  </button>\r\n</spl-horizontal-slider>\r\n\r\n<div\r\n  #tabBody\r\n  (scrollend)=\"onScrollEnd()\"\r\n  class=\"spl-tab-body\">\r\n  <div\r\n    #tabWrapper\r\n    *ngFor=\"let item of splTabQueryList\"\r\n    class=\"spl-tab-wrapper\">\r\n    <ng-container [ngTemplateOutlet]=\"item.tabContent.templateRef\"></ng-container>\r\n  </div>\r\n</div>\r\n","import { Component, HostBinding } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplIconComponent } from '../../spl-icon/spl-icon.component';\r\n\r\n/**\r\n * This is a type that defines the sort direction available in SplSortableColumnControlComponent.\r\n * 'desc' sorts in descending direction.\r\n * 'asc' sorts in ascending direction.\r\n * 'none' does not sort.\r\n */\r\nexport type SplSortableColumnDirection = 'desc' | 'asc' | 'none';\r\n\r\n/** A component that displays icons according to the given sort direction. */\r\n@Component({\r\n  selector: 'spl-sortable-column-control',\r\n  templateUrl: './spl-sortable-column-control.component.html',\r\n  host: {\r\n    class: 'spl-sortable-column-control',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule, SplIconComponent],\r\n})\r\nexport class SplSortableColumnControlComponent {\r\n  /**\r\n   * Current sort direction for the column.\r\n   * The set value is bound to the 'spl-direction' attribute.\r\n   */\r\n  @HostBinding('attr.spl-direction') direction: SplSortableColumnDirection = 'none';\r\n\r\n  /** Returns the name of the sort icon according to the direction. */\r\n  get sortIcon(): string {\r\n    switch (this.direction) {\r\n      case 'asc': {\r\n        return 'arrow_drop_up';\r\n      }\r\n\r\n      case 'desc': {\r\n        return 'arrow_drop_down';\r\n      }\r\n\r\n      default: {\r\n        return 'check_indeterminate_small';\r\n      }\r\n    }\r\n  }\r\n}\r\n","<spl-icon weight=\"200\">{{sortIcon}}</spl-icon>\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * This is a Component that contains the existing content and SplSortableColumnControlComponent\r\n * when the SplSortableColumnDirective is applied to the <th> element.\r\n */\r\n@Component({\r\n  selector: 'spl-sortable-column-wrapper',\r\n  templateUrl: './spl-sortable-column-wrapper.component.html',\r\n  host: {\r\n    class: 'spl-sortable-column-wrapper',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplSortableColumnWrapperComponent {}\r\n","","import {\r\n  AfterViewInit,\r\n  ComponentRef,\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  Input,\r\n  Renderer2,\r\n  ViewContainerRef,\r\n} from '@angular/core';\r\nimport { SplSortableColumnControlComponent } from './spl-sortable-column-control/spl-sortable-column-control.component';\r\nimport { SplElementAccessor } from '../../interfaces/spl-element-accessor';\r\nimport { SplEffectDirective } from '../spl-effect/spl-effect.directive';\r\nimport { SplSortableColumnWrapperComponent } from './spl-sortable-column-wrapper/spl-sortable-column-wrapper.component';\r\nimport { BooleanAttribute, Nullable } from '../../utils/type.util';\r\nimport { convertBooleanAttribute } from '../../utils/convert.util';\r\n\r\n/**\r\n * Directive that displays an icon according to the sort direction in <th> and allows SplTableDirective\r\n * to emit a sortChange emitter when the host element is clicked.\r\n */\r\n@Directive({\r\n  selector: 'th[splSortableColumn]',\r\n  host: {\r\n    class: 'spl-sortable-column',\r\n  },\r\n  hostDirectives: [SplEffectDirective],\r\n  standalone: true,\r\n})\r\nexport class SplSortableColumnDirective implements AfterViewInit, SplElementAccessor<HTMLTableCellElement> {\r\n  /**\r\n   * Name to be used for SplTableSortChangeEvent.\r\n   * It must be a unique value in table.\r\n   */\r\n  @Input({ required: true }) name!: string;\r\n\r\n  /**\r\n   * The emitter to which SplTableDirective will subscribe internally.\r\n   * Emitted when the host element is clicked.\r\n   */\r\n  onClick = new EventEmitter<void>();\r\n\r\n  /**\r\n   * This is the ComponentRef of the wrapper component to display the icon according to the sort direction along with the content.\r\n   * It is created after the view is initialized, and the content of the <th> element is moved into the wrapper component.\r\n   */\r\n  wrapperComponentRef: Nullable<ComponentRef<SplSortableColumnWrapperComponent>> = null;\r\n\r\n  /**\r\n   * This is a component that displays icons according to sort direction.\r\n   * After the view is initialized, it is created in SplSortableColumnWrapperComponent.\r\n   */\r\n  controlComponentRef: Nullable<ComponentRef<SplSortableColumnControlComponent>> = null;\r\n\r\n  constructor(\r\n    public elementRef: ElementRef<HTMLTableCellElement>,\r\n    private _viewContainerRef: ViewContainerRef,\r\n    private _renderer: Renderer2,\r\n  ) {}\r\n\r\n  /** Whether to allow the value 'none' when changing the sort direction. */\r\n  private _allowNoneDirection = false;\r\n\r\n  /** Returns whether to allow the value 'none' when changing the sort direction. */\r\n  @Input()\r\n  get allowNoneDirection(): boolean {\r\n    return this._allowNoneDirection;\r\n  }\r\n\r\n  /**\r\n   * Sets whether to allow the value 'none' when changing the sort direction.\r\n   * @param value - Whether to allow the value 'none' when changing the sort direction.\r\n   */\r\n  set allowNoneDirection(value: BooleanAttribute) {\r\n    this._allowNoneDirection = convertBooleanAttribute(value);\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    const childNodes = this.elementRef.nativeElement.childNodes;\r\n\r\n    const wrapperComponentRef = this._viewContainerRef.createComponent(SplSortableColumnWrapperComponent);\r\n    const controlComponentRef = this._viewContainerRef.createComponent(SplSortableColumnControlComponent);\r\n\r\n    // Move every content to wrapperComponentRef.\r\n    for (let i = 0; i < childNodes.length; i++) {\r\n      const child = childNodes.item(i);\r\n\r\n      this._renderer.appendChild(wrapperComponentRef.location.nativeElement, child);\r\n    }\r\n\r\n    this._renderer.appendChild(wrapperComponentRef.location.nativeElement, controlComponentRef.location.nativeElement);\r\n    this._renderer.appendChild(this.elementRef.nativeElement, wrapperComponentRef.location.nativeElement);\r\n\r\n    wrapperComponentRef.changeDetectorRef.detectChanges();\r\n    controlComponentRef.changeDetectorRef.detectChanges();\r\n\r\n    this.wrapperComponentRef = wrapperComponentRef;\r\n    this.controlComponentRef = controlComponentRef;\r\n  }\r\n\r\n  /** Listen to the click event of the host element and emit an onClick emitter. */\r\n  @HostListener('click')\r\n  onHostClick(): void {\r\n    this.onClick.emit();\r\n  }\r\n}\r\n","import {\r\n  AfterContentInit,\r\n  AfterViewInit,\r\n  ContentChildren,\r\n  DestroyRef,\r\n  Directive,\r\n  EventEmitter,\r\n  Input,\r\n  OnDestroy,\r\n  Output,\r\n  QueryList,\r\n} from '@angular/core';\r\nimport { SplSortableColumnDirection } from './spl-sortable-column-control/spl-sortable-column-control.component';\r\nimport { SplSortableColumnDirective } from './spl-sortable-column.directive';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { Subscription } from 'rxjs';\r\nimport { CanUndefined } from '../../utils/type.util';\r\n\r\n/**\r\n * SplTableDirective sort event.\r\n * This is used when setting sort or receiving a sortChange emitter.\r\n */\r\nexport interface SplTableSortChangeEvent {\r\n  /** The name of the column. */\r\n  name: string;\r\n\r\n  /**\r\n   * Current sort direction for the column.\r\n   * You can use one of 'desc', 'asc', or 'none'.\r\n   */\r\n  direction: SplSortableColumnDirection;\r\n}\r\n\r\n/**\r\n * This is a Directive that applies Simplor’s design to the <table> element.\r\n * If you use SplSortableColumnDirective with the <th> element, you can receive an event according to the change in the column's sort direction.\r\n */\r\n@Directive({\r\n  selector: 'table[splTable]',\r\n  host: {\r\n    class: 'spl-table',\r\n  },\r\n  standalone: true,\r\n})\r\nexport class SplTableDirective implements AfterContentInit, AfterViewInit, OnDestroy {\r\n  /** An emitter that will emit a SplTableSortChangeEvent when the SplSortableColumnDirective is clicked and the sort changes. */\r\n  @Output() sortChange = new EventEmitter<SplTableSortChangeEvent>();\r\n\r\n  /** QueryList of SplSortableColumnDirective. */\r\n  @ContentChildren(SplSortableColumnDirective, { descendants: true })\r\n  sortableColumnQueryList!: QueryList<SplSortableColumnDirective>;\r\n\r\n  /** A subscription to subscribe to the onClick emitter of SplSortableColumnDirective. */\r\n  private _sortableColumnClickSubscription?: Subscription;\r\n\r\n  constructor(private _destroyRef: DestroyRef) {}\r\n\r\n  /** The sort currently applied to the table. */\r\n  private _sort?: SplTableSortChangeEvent;\r\n\r\n  /** Returns the sort currently applied to the table. */\r\n  get sort(): CanUndefined<SplTableSortChangeEvent> {\r\n    return this._sort;\r\n  }\r\n\r\n  /**\r\n   * Sets the sort to apply to the table.\r\n   * The direction of SplSortableColumnDirective also changes depending on sort.\r\n   * @param value - SplTableSortChangeEvent to set.\r\n   */\r\n  @Input()\r\n  set sort(value: SplTableSortChangeEvent) {\r\n    this._sort = value;\r\n    this.updateSortColumn(value);\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this._subscribeSortableColumnChanges();\r\n    this._subscribeSortableColumnClick();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    if (this.sort) {\r\n      this.updateSortColumn(this.sort);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._sortableColumnClickSubscription?.unsubscribe();\r\n  }\r\n\r\n  /**\r\n   * Changes the direction of SplSortableColumnDirective according to SplTableSortChangeEvent.\r\n   * All columns other than SplTableSortChangeEvent.name are changed to none.\r\n   * @param event - SplTableSortChangeEvent that will change the direction of SplSortableColumnDirective.\r\n   */\r\n  updateSortColumn(event: SplTableSortChangeEvent): void {\r\n    const { name, direction } = event;\r\n\r\n    this.sortableColumnQueryList?.forEach((sortableColumn) => {\r\n      if (sortableColumn.controlComponentRef) {\r\n        if (sortableColumn.name === name) {\r\n          sortableColumn.controlComponentRef.instance.direction = direction;\r\n        } else {\r\n          sortableColumn.controlComponentRef.instance.direction = 'none';\r\n        }\r\n\r\n        sortableColumn.controlComponentRef.changeDetectorRef.detectChanges();\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Subscribes to changes in QueryList of SplSortableColumnDirective.\r\n   * Whenever the QueryList changes, resubscribe to the SplSortableColumnDirective 's onClick emitter.\r\n   */\r\n  private _subscribeSortableColumnChanges(): void {\r\n    this.sortableColumnQueryList.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\r\n      this._subscribeSortableColumnClick();\r\n    });\r\n  }\r\n\r\n  /** Subscribes to the onClick emitter to emit a SplTableSortChangeEvent that changes due to the click event of the SplSortableColumnDirective. */\r\n  private _subscribeSortableColumnClick(): void {\r\n    const subscription = new Subscription();\r\n\r\n    subscription.add(\r\n      ...this.sortableColumnQueryList.map((sortableColumn) => {\r\n        return sortableColumn.onClick.subscribe(() => {\r\n          const name = sortableColumn.name;\r\n          const currentDirection = sortableColumn.controlComponentRef?.instance.direction || 'none';\r\n          let targetDirection: SplSortableColumnDirection;\r\n\r\n          if (currentDirection === 'asc') {\r\n            targetDirection = 'desc';\r\n          } else if (currentDirection === 'desc' && sortableColumn.allowNoneDirection) {\r\n            targetDirection = 'none';\r\n          } else {\r\n            targetDirection = 'asc';\r\n          }\r\n\r\n          const event: SplTableSortChangeEvent = {\r\n            name,\r\n            direction: targetDirection,\r\n          };\r\n\r\n          this.sortChange.emit(event);\r\n        });\r\n      }),\r\n    );\r\n\r\n    this._sortableColumnClickSubscription?.unsubscribe();\r\n    this._sortableColumnClickSubscription = subscription;\r\n  }\r\n}\r\n","import { AfterViewInit, Directive } from '@angular/core';\r\nimport { SplInputLike } from '../../abstracts/spl-input-like';\r\n\r\n/**\r\n * This is a Directive to apply Simplor’s style to the <textarea> element.\r\n * The default value for spellcheck attribute is false.\r\n */\r\n@Directive({\r\n  selector: 'textarea[splTextarea]',\r\n  host: {\r\n    class: 'spl-input spl-textarea',\r\n  },\r\n  standalone: true,\r\n})\r\nexport class SplTextareaDirective extends SplInputLike<HTMLTextAreaElement> implements AfterViewInit {\r\n  constructor() {\r\n    super();\r\n  }\r\n}\r\n","import { Provider } from '@angular/core';\r\n\r\n/** InjectionToken for SplTimeInputOptions. */\r\nexport const SPL_TIME_INPUT_PROVIDER = 'SPL_TIME_INPUT_PROVIDER';\r\n\r\n/**\r\n * This is a function that creates a Provider for SplTimeInputOptions.\r\n * @param options - Options for customizing SplTimeInputComponent.\r\n */\r\nexport function createSplTimeInputProvider(options: SplTimeInputOptions = {}): Provider {\r\n  return {\r\n    provide: SPL_TIME_INPUT_PROVIDER,\r\n    useValue: options,\r\n  };\r\n}\r\n\r\n/** Options for customizing SplTimeInputComponent. */\r\nexport interface SplTimeInputOptions {\r\n  /**\r\n   * Sets the label of the am button.\r\n   * If undefined, the default value is 'AM'.\r\n   */\r\n  amLabel?: string;\r\n\r\n  /**\r\n   * Sets the label of the pm button.\r\n   * If undefined, the default value is 'PM'.\r\n   */\r\n  pmLabel?: string;\r\n}\r\n","import { AfterViewInit, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input } from '@angular/core';\r\nimport { SplEffectDirective } from '../../spl-effect/spl-effect.directive';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BooleanAttribute } from '../../../utils/type.util';\r\nimport { convertBooleanAttribute } from '../../../utils/convert.util';\r\nimport { SplElementAccessor } from '../../../interfaces/spl-element-accessor';\r\n\r\n/**\r\n * A toggle button available for SplToggleButtonGroupComponent.\r\n * It has a unique value and only 1 can be selected within the group.\r\n */\r\n@Component({\r\n  selector: 'spl-toggle-button',\r\n  templateUrl: './spl-toggle-button.component.html',\r\n  host: {\r\n    class: 'spl-toggle-button',\r\n  },\r\n  hostDirectives: [\r\n    {\r\n      directive: SplEffectDirective,\r\n      inputs: ['theme', 'disableEffect'],\r\n    },\r\n  ],\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplToggleButtonComponent implements SplElementAccessor<HTMLElement>, AfterViewInit {\r\n  /** Sets the value of button. */\r\n  @Input({ required: true }) value!: any;\r\n\r\n  /**\r\n   * The active state of the button.\r\n   * Binds the '.spl-active' class according to the value.\r\n   */\r\n  @HostBinding('class.spl-active') active = false;\r\n\r\n  /**\r\n   * The onClick emitter used internally by SplToggleButtonGroupComponent.\r\n   * Emitted when the host element is clicked.\r\n   */\r\n  onClick = new EventEmitter<void>();\r\n\r\n  constructor(public elementRef: ElementRef<HTMLElement>) {}\r\n\r\n  /** The current disabled state of the Component. */\r\n  private _disabled = false;\r\n\r\n  /**\r\n   * Returns the current disabled state of the Component.\r\n   * Bind the '.spl-disabled' class according to the value.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.spl-disabled')\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  /**\r\n   * Sets the current disabled state of the Component.\r\n   * @param value - Disabled state to set.\r\n   */\r\n  set disabled(value: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(value);\r\n    this._bindDisabledAttribute();\r\n  }\r\n\r\n  /** Returns tabindex according to disabled status and binds value to attribute. */\r\n  @HostBinding('attr.tabindex')\r\n  get tabindex(): string {\r\n    return this.disabled ? '-1' : '0';\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this._bindDisabledAttribute();\r\n  }\r\n\r\n  /** Listens for the click event of the host element and emits an onClick emitter. */\r\n  @HostListener('click')\r\n  onHostClick(): void {\r\n    if (!this.disabled) {\r\n      this.onClick.emit();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Listens for the 'enter' keydown event of the host element and emits an onClick emitter.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.enter', ['$event'])\r\n  onEnterKeyDown(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    this.onHostClick();\r\n  }\r\n\r\n  /**\r\n   * Listens for the 'space' keydown event of the host element and emits an onClick emitter.\r\n   * To prevent side effects, event is not propagated and the default is prevented.\r\n   * @param event - KeyboardEvent.\r\n   */\r\n  @HostListener('keydown.space', ['$event'])\r\n  onSpaceKeyDown(event: KeyboardEvent): void {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n\r\n    this.onHostClick();\r\n  }\r\n\r\n  /**\r\n   * A function that binds the disabled attribute to the host element according to the current disabled state.\r\n   * Used to disable SplEffectDirective.\r\n   */\r\n  private _bindDisabledAttribute(): void {\r\n    if (this.disabled) {\r\n      this.elementRef?.nativeElement.setAttribute('disabled', '');\r\n    } else {\r\n      this.elementRef?.nativeElement.removeAttribute('disabled');\r\n    }\r\n  }\r\n}\r\n","<ng-content></ng-content>\r\n","import {\r\n  AfterContentInit,\r\n  Component,\r\n  ContentChildren,\r\n  DestroyRef,\r\n  HostBinding,\r\n  Input,\r\n  OnDestroy,\r\n  QueryList,\r\n} from '@angular/core';\r\nimport { SplToggleButtonComponent } from './spl-toggle-button/spl-toggle-button.component';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { Subscription } from 'rxjs';\r\nimport { SplControl } from '../../abstracts/spl-control';\r\nimport { BooleanAttribute } from '../../utils/type.util';\r\nimport { convertBooleanAttribute } from '../../utils/convert.util';\r\nimport { SplLogger } from '../../utils/logger.util';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * A type that defines the direction of SplToggleButtonComponent.\r\n * 'horizontal' places the buttons horizontally.\r\n * 'vertical' places the buttons vertically.\r\n */\r\nexport type SplToggleButtonDirection = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * This is a Component that allows you to select one of several buttons.\r\n * Buttons can be placed vertically or horizontally depending on the direction.\r\n */\r\n@Component({\r\n  selector: 'spl-toggle-button-group',\r\n  templateUrl: './spl-toggle-button-group.component.html',\r\n  host: {\r\n    class: 'spl-toggle-button-group',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class SplToggleButtonGroupComponent extends SplControl implements AfterContentInit, OnDestroy {\r\n  /**\r\n   * Sets the placement direction of buttons.\r\n   * The set value is bound to the 'spl-direction' attribute.\r\n   */\r\n  @Input() @HostBinding('attr.spl-direction') direction: SplToggleButtonDirection = 'horizontal';\r\n\r\n  /** QueryList of SplToggleButtonComponent used as content. */\r\n  @ContentChildren(SplToggleButtonComponent, { descendants: true })\r\n  buttonQueryList!: QueryList<SplToggleButtonComponent>;\r\n\r\n  /** Value of the currently selected button. */\r\n  value: any;\r\n\r\n  /** Logger for SplToggleButtonGroupComponent. */\r\n  private readonly _logger = new SplLogger('SplToggleButtonGroupComponent');\r\n\r\n  /** A subscription to subscribe to the SplToggleButtonComponent's onClick emitter. */\r\n  private _buttonClickSubscription?: Subscription;\r\n\r\n  /** Timeout timer to prevent NG0100 error. */\r\n  private _renderTimer: any;\r\n\r\n  /** State whether the disabled state has been updated. */\r\n  private _disabledStateHasUpdated = false;\r\n\r\n  constructor(private _destroyRef: DestroyRef) {\r\n    super();\r\n  }\r\n\r\n  /** The current disabled state of the Component. */\r\n  private _disabled = false;\r\n\r\n  /**\r\n   * Returns the current disabled state of the Component.\r\n   * Bind the '.spl-disabled' class according to the value.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.spl-disabled')\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  /**\r\n   * Sets the current disabled state of the Component.\r\n   * @param value - Disabled state to set.\r\n   */\r\n  set disabled(value: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(value);\r\n    this._disabledStateHasUpdated = true;\r\n    this._updateButtonsDisabledStates();\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._subscribeButtonQueryListChanges();\r\n    this._subscribeButtonClick();\r\n\r\n    // To prevent NG0100 error.\r\n    this._renderTimer = setTimeout(() => {\r\n      this._updateActiveState();\r\n\r\n      if (this._disabledStateHasUpdated) {\r\n        this._updateButtonsDisabledStates();\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    clearTimeout(this._renderTimer);\r\n  }\r\n\r\n  /**\r\n   * Sets the value in Component.\r\n   * The active button changes depending on the set value.\r\n   * @param obj - Value to set.\r\n   */\r\n  override writeValue(obj: any): void {\r\n    this.value = obj;\r\n    this._updateActiveState();\r\n  }\r\n\r\n  /**\r\n   * Sets the disabled state on the Component.\r\n   * @param isDisabled - Disabled state to set.\r\n   */\r\n  override setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  /**\r\n   * Subscribe to changes in SplToggleButtonComponent's QueryList.\r\n   * Every time the QueryList changes, resubscribes to the onClick emitter and updates the active button.\r\n   */\r\n  private _subscribeButtonQueryListChanges(): void {\r\n    this.buttonQueryList.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\r\n      this._subscribeButtonClick();\r\n      this._updateActiveState();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Subscribe to the onClick emitter of SplToggleButtonComponent.\r\n   * When the onClick emitter is emitted, the value of that button is applied to the control.\r\n   */\r\n  private _subscribeButtonClick(): void {\r\n    const subscription = new Subscription();\r\n\r\n    subscription.add(\r\n      ...this.buttonQueryList.map((button) => {\r\n        return button.onClick.subscribe(() => {\r\n          this._logger.debug(`Toggle button is clicked with value: ${button.value}`);\r\n\r\n          this.valueChange(button.value);\r\n          this.writeValue(button.value);\r\n        });\r\n      }),\r\n    );\r\n\r\n    this._buttonClickSubscription?.unsubscribe();\r\n    this._buttonClickSubscription = subscription;\r\n  }\r\n\r\n  /** Updates the active button according to the current value of the component. */\r\n  private _updateActiveState(): void {\r\n    this.buttonQueryList?.forEach((button) => {\r\n      button.active = button.value === this.value;\r\n    });\r\n  }\r\n\r\n  /** Updates the disabled state of buttons. */\r\n  private _updateButtonsDisabledStates(): void {\r\n    this.buttonQueryList?.forEach((button) => {\r\n      button.disabled = this.disabled;\r\n    });\r\n  }\r\n}\r\n","<ng-content select=\"spl-toggle-button\"></ng-content>\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostBinding,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  Optional,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SplControl } from '../../abstracts/spl-control';\r\nimport { SPL_TIME_INPUT_PROVIDER, SplTimeInputOptions } from './spl-time-input-provider';\r\nimport { SplFocusable } from '../../interfaces/spl-focusable';\r\nimport { BooleanAttribute, NumberLike } from '../../utils/type.util';\r\nimport { convertBooleanAttribute } from '../../utils/convert.util';\r\nimport { SplLogger } from '../../utils/logger.util';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SplInputDirective } from '../spl-input/spl-input.directive';\r\nimport { SplToggleButtonGroupComponent } from '../spl-toggle-button-group/spl-toggle-button-group.component';\r\nimport { SplToggleButtonComponent } from '../spl-toggle-button-group/spl-toggle-button/spl-toggle-button.component';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/** Regular expression for a valid time value. */\r\nconst VALID_TIME_REGEXP = /^\\d{1,2}:\\d{1,2}$/;\r\n\r\n/** An object for the time in H:m format decomposed into beforeNoon, hours, and minutes. */\r\nexport interface ParsedTimeString {\r\n  /** True if the time is before noon. */\r\n  beforeNoon: boolean;\r\n\r\n  /** Hours string changed to h format. */\r\n  hours: string;\r\n\r\n  /** Minutes string changed to m format. */\r\n  minutes: string;\r\n}\r\n\r\n/**\r\n * This is a component that allows user to input time.\r\n * The value uses H:m and is converted internally to am or pm.\r\n * You can change the labels of am and pm buttons by providing SplTimeInputOptions.\r\n */\r\n@Component({\r\n  selector: 'spl-time-input',\r\n  templateUrl: './spl-time-input.component.html',\r\n  host: {\r\n    class: 'spl-time-input',\r\n  },\r\n  standalone: true,\r\n  imports: [CommonModule, SplInputDirective, SplToggleButtonGroupComponent, SplToggleButtonComponent, FormsModule],\r\n})\r\nexport class SplTimeInputComponent extends SplControl implements SplFocusable, OnDestroy {\r\n  /**\r\n   * This is the emitter that will be emitted when a focus event occurs in a focusable element within SplTimeInputComponent.\r\n   * Overwrites the focus event of the host element.\r\n   */\r\n  @Output('focus') inputFocused = new EventEmitter<FocusEvent>();\r\n\r\n  /**\r\n   * This is the emitter that will be emitted when a blur event occurs in a focusable element within SplTimeInputComponent.\r\n   * Overwrites the blur event of the host element.\r\n   */\r\n  @Output('blur') inputBlurred = new EventEmitter<FocusEvent>();\r\n\r\n  /** ElementRef of the <input/> element that inputs hours. */\r\n  @ViewChild('hoursInput', { read: ElementRef }) hoursInputRef!: ElementRef<HTMLInputElement>;\r\n\r\n  /** ElementRef of the <input/> element that inputs minutes. */\r\n  @ViewChild('minutesInput', { read: ElementRef }) minutesInputRef!: ElementRef<HTMLInputElement>;\r\n\r\n  /**\r\n   * The focused state of the component.\r\n   * The value is set to true when one of the hours input, minutes input, am and pm buttons is focused.\r\n   * Binds the '.spl-focus' class according to the value.\r\n   */\r\n  @HostBinding('class.spl-focus') focused = false;\r\n\r\n  /** Hours with a value between 0 and 12. */\r\n  hours = '';\r\n\r\n  /** Minutes with a value between 0 and 59. */\r\n  minutes = '';\r\n\r\n  /** This is the state before noon. */\r\n  beforeNoon = true;\r\n\r\n  /** Logger for SplTimeInputComponent. */\r\n  private readonly _logger = new SplLogger('SplTimeInputComponent');\r\n\r\n  /** A timer for setTimeout() that will delay the emission of the inputBlurred emitter when the blur event occurs. */\r\n  private _blurTimer: any;\r\n\r\n  constructor(@Inject(SPL_TIME_INPUT_PROVIDER) @Optional() private _options?: SplTimeInputOptions) {\r\n    super();\r\n  }\r\n\r\n  /** The current disabled state of the Component. */\r\n  private _disabled = false;\r\n\r\n  /**\r\n   * Returns the current disabled state of the Component.\r\n   * Bind the '.spl-disabled' class according to the value.\r\n   */\r\n  @Input()\r\n  @HostBinding('class.spl-disabled')\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  /**\r\n   * Sets the current disabled state of the Component.\r\n   * @param value - Disabled state to set.\r\n   */\r\n  set disabled(value: BooleanAttribute) {\r\n    this._disabled = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /**\r\n   * Returns the label of the am button.\r\n   * If SplTimeInputOptions.amLabel is provided, that will be returned.\r\n   */\r\n  get amLabel(): string {\r\n    return this._options?.amLabel || 'AM';\r\n  }\r\n\r\n  /**\r\n   * State whether to use 24hours format.\r\n   * When this value is true, the beforeNoon value is ignored.\r\n   */\r\n  private _use24Horus = false;\r\n\r\n  /** Returns the state of whether to use the 24hours format. */\r\n  @Input()\r\n  get use24Horus(): boolean {\r\n    return this._use24Horus;\r\n  }\r\n\r\n  /**\r\n   * Set the state on whether to use the 24hours format.\r\n   * @param value - State whether to use 24hours format.\r\n   */\r\n  set use24Horus(value: BooleanAttribute) {\r\n    this._use24Horus = convertBooleanAttribute(value);\r\n  }\r\n\r\n  /**\r\n   * Returns the label of the pm button.\r\n   * If SplTimeInputOptions.pmLabel is provided, that will be returned.\r\n   */\r\n  get pmLabel(): string {\r\n    return this._options?.pmLabel || 'PM';\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    clearTimeout(this._blurTimer);\r\n  }\r\n\r\n  /**\r\n   * Sets the value in Component.\r\n   * The value must be provided in 'H:m' format, which is internally converted to a 12-hour clock divided into AM/PM.\r\n   * @param obj - Value to set.\r\n   */\r\n  override writeValue(obj: any): void {\r\n    // if (obj && VALID_TIME_REGEXP.exec(obj)) {\r\n    //   this._logger.debug(`Write value to time input`, obj);\r\n    //\r\n    //   const value = this._parseTimeString(obj);\r\n    //\r\n    //   this._updateWithParsedTimeString(value);\r\n    // }\r\n    obj = obj || '';\r\n\r\n    const [hours, minutes] = obj.split(':');\r\n\r\n    this.applyChanges(hours, minutes);\r\n  }\r\n\r\n  /**\r\n   * Sets the disabled state on the Component.\r\n   * @param isDisabled - Disabled state to set.\r\n   */\r\n  override setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  /**\r\n   * When a focusable element is focused, it changes the focused state and emits an inputFocused emitter.\r\n   * If the focused element is <input/>, select all content to conveniently change the value.\r\n   * @param event - FocusEvent.\r\n   */\r\n  onElementFocus(event: FocusEvent): void {\r\n    if (event.target instanceof HTMLInputElement) {\r\n      event.target.select();\r\n    }\r\n\r\n    this.focused = true;\r\n    this.inputFocused.emit(event);\r\n  }\r\n\r\n  /**\r\n   * When a focusable element is blurred, changes the focused state,\r\n   * and if the focused state is false even after timeout, the inputBlurred emitter is emitted.\r\n   * @param event - FocusEvent.\r\n   */\r\n  onElementBlur(event: FocusEvent): void {\r\n    this.focused = false;\r\n\r\n    clearTimeout(this._blurTimer);\r\n\r\n    // SplTimeInputComponent has 4 focusable elements: hours input, minutes input, and buttons for am and pm.\r\n    // When a blur event occurs in an element, a focus event may occur in another element,\r\n    // so use setTimeout() to delay the check of the focused state.\r\n    this._blurTimer = setTimeout(() => {\r\n      if (!this.focused) {\r\n        this.inputBlurred.emit(event);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * If the value of hours input changes, limit the value to between 1 and 12,\r\n   * and applies the changed time value to the control.\r\n   * @param event - An event that occurred in the change event of hours input.\r\n   */\r\n  onHoursChange(event: Event): void {\r\n    const input = event.target as HTMLInputElement;\r\n\r\n    this.applyChanges(input.value, this.minutes, true);\r\n  }\r\n\r\n  /**\r\n   * If the value of minutes input changes, limit the value to between 0 and 59,\r\n   * and applies the changed time value to the control.\r\n   * @param event - An event that occurred in the change event of minutes input.\r\n   */\r\n  onMinutesChange(event: Event): void {\r\n    const input = event.target as HTMLInputElement;\r\n\r\n    this.applyChanges(this.hours, input.value, true);\r\n  }\r\n\r\n  /**\r\n   * Sets the changed beforeNoon value and applies the changed time value to the control.\r\n   * @param value - Changed beforeNoon value.\r\n   */\r\n  onBeforeNoonChange(value: boolean): void {\r\n    this.beforeNoon = value;\r\n\r\n    this.applyChanges(this.hours, this.minutes, true);\r\n  }\r\n\r\n  /**\r\n   * Create a time in 'H:m' format by combining the currently entered hours and minutes, and the beforeNoon value and apply it to the control.\r\n   * If there is no hours or minutes value, null value is applied.\r\n   * @param hours - Changed hours value in H format.\r\n   * @param minutes - Changed minutes value in m format\r\n   * @param emitValueChanges - If true, emits a change.\r\n   */\r\n  applyChanges(hours: NumberLike, minutes: NumberLike, emitValueChanges = false): void {\r\n    hours = String(hours).replace(/\\D/gim, '');\r\n    minutes = String(minutes).replace(/\\D/gim, '');\r\n\r\n    if (hours && minutes) {\r\n      const value = this._parseTimeString(`${hours}:${minutes}`);\r\n      const timeString = this._buildTimeString(value);\r\n\r\n      this._updateWithParsedTimeString(value);\r\n\r\n      if (emitValueChanges) {\r\n        this.valueChange(timeString);\r\n      }\r\n    } else {\r\n      const value = this._parseTimeString(`${hours || '0'}:${minutes || '0'}`);\r\n\r\n      // To keep the previous beforeNoon value.\r\n      value.beforeNoon = this.beforeNoon;\r\n\r\n      // To keep the previous empty string.\r\n      value.hours = hours ? value.hours : '';\r\n      value.minutes = minutes ? value.minutes : '';\r\n\r\n      this._updateWithParsedTimeString(value);\r\n\r\n      if (emitValueChanges) {\r\n        this.valueChange(null);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Parses the time in 'H:m' format and sets hours, minutes, and beforeNoon.\r\n   * @param time - Time string in 'H:m' format.\r\n   */\r\n  private _parseTimeString(time: string): ParsedTimeString {\r\n    this._logger.debug('Parsing timeString', time);\r\n    this._logger.debug('Current beforeNoon before parsing timeString', this.beforeNoon);\r\n\r\n    let [hours, minutes] = time.split(':');\r\n\r\n    hours = hours || '0';\r\n    minutes = minutes || '0';\r\n\r\n    this._logger.debug('Raw hours', hours);\r\n    this._logger.debug('Raw minutes', minutes);\r\n\r\n    let hoursInteger = parseInt(hours);\r\n\r\n    const result: ParsedTimeString = {\r\n      beforeNoon: this.beforeNoon,\r\n      hours: '0',\r\n      minutes: '0',\r\n    };\r\n\r\n    hoursInteger = Math.min(hoursInteger, 23);\r\n\r\n    this._logger.debug('Integer hours', hoursInteger);\r\n\r\n    if (this.use24Horus) {\r\n      result.hours = hoursInteger.toString();\r\n    } else if (hoursInteger > 12) {\r\n      result.beforeNoon = false;\r\n      result.hours = hoursInteger > 12 ? (hoursInteger % 12).toString() : hoursInteger.toString();\r\n    } else if (hoursInteger === 12) {\r\n      result.beforeNoon = false;\r\n      result.hours = hoursInteger.toString();\r\n    } else if (this.beforeNoon) {\r\n      result.hours = Math.max(0, hoursInteger).toString();\r\n    } else {\r\n      if (hoursInteger < 1) {\r\n        result.beforeNoon = true;\r\n        result.hours = '0';\r\n      } else {\r\n        result.hours = Math.min(12, hoursInteger).toString();\r\n      }\r\n    }\r\n\r\n    result.minutes = Math.min(Math.max(parseInt(minutes), 0), 59).toString();\r\n\r\n    this._logger.debug('Parsed result', result);\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Updates component values using ParsedTimeString.\r\n   * @param value - ParsedTimeString to update component values.\r\n   */\r\n  private _updateWithParsedTimeString(value: ParsedTimeString): void {\r\n    const { beforeNoon, hours, minutes } = value;\r\n\r\n    this.beforeNoon = beforeNoon;\r\n    this.hours = hours;\r\n    this.minutes = minutes;\r\n\r\n    this._updateHoursInput();\r\n    this._updateMinutesInput();\r\n  }\r\n\r\n  /** Sets the hours field value to the value of hours input. */\r\n  private _updateHoursInput(): void {\r\n    if (this.hoursInputRef) {\r\n      this.hoursInputRef.nativeElement.value = this.hours;\r\n    }\r\n  }\r\n\r\n  /** Sets the minutes field value to the value of minutes input. */\r\n  private _updateMinutesInput(): void {\r\n    if (this.minutesInputRef) {\r\n      this.minutesInputRef.nativeElement.value = this.minutes;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Builds a time string in H:m format using ParsedTimeString.\r\n   * @param value - ParsedTimeString to build the time string.\r\n   */\r\n  private _buildTimeString(value: ParsedTimeString): string {\r\n    const { hours, minutes, beforeNoon } = value;\r\n\r\n    if (this.use24Horus || beforeNoon) {\r\n      return `${hours}:${minutes}`;\r\n    } else {\r\n      let hoursInteger = parseInt(hours);\r\n\r\n      if (hoursInteger > 12) {\r\n        hoursInteger = hoursInteger % 12;\r\n      } else if (hoursInteger !== 12) {\r\n        hoursInteger = hoursInteger + 12;\r\n      }\r\n\r\n      return `${hoursInteger}:${minutes}`;\r\n    }\r\n  }\r\n}\r\n","<div class=\"spl-time-input-wrapper\">\r\n  <input\r\n    #hoursInput\r\n    (input)=\"onHoursChange($event)\"\r\n    (focus)=\"onElementFocus($event)\"\r\n    (blur)=\"onElementBlur($event)\"\r\n    [ngModel]=\"hours\"\r\n    [disabled]=\"disabled\"\r\n    splInput/>\r\n\r\n  <div class=\"spl-time-input-separator\">:</div>\r\n\r\n  <input\r\n    #minutesInput\r\n    (input)=\"onMinutesChange($event)\"\r\n    (focus)=\"onElementFocus($event)\"\r\n    (blur)=\"onElementBlur($event)\"\r\n    [ngModel]=\"minutes\"\r\n    [disabled]=\"disabled\"\r\n    splInput/>\r\n</div>\r\n\r\n<spl-toggle-button-group\r\n  (ngModelChange)=\"onBeforeNoonChange($event)\"\r\n  *ngIf=\"!use24Horus\"\r\n  [ngModel]=\"beforeNoon\"\r\n  [disabled]=\"disabled\"\r\n  direction=\"vertical\">\r\n  <spl-toggle-button\r\n    (focus)=\"onElementFocus($event)\"\r\n    (blur)=\"onElementBlur($event)\"\r\n    [value]=\"true\">\r\n    {{amLabel}}\r\n  </spl-toggle-button>\r\n\r\n  <spl-toggle-button\r\n    (focus)=\"onElementFocus($event)\"\r\n    (blur)=\"onElementBlur($event)\"\r\n    [value]=\"false\">\r\n    {{pmLabel}}\r\n  </spl-toggle-button>\r\n</spl-toggle-button-group>\r\n","import { Injectable } from '@angular/core';\r\nimport { SplOverlayRef, SplOverlayService } from './spl-overlay.service';\r\nimport { SplMessageComponent } from '../components/spl-message/spl-message.component';\r\n\r\n/** Service to manage SplMessageComponent. */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SplMessageService {\r\n  /** SplOverlayRef for opened message. */\r\n  private _openedMessage?: SplOverlayRef<SplMessageComponent>;\r\n\r\n  constructor(private _overlayService: SplOverlayService) {}\r\n\r\n  /**\r\n   * Open the message.\r\n   * Only 1 message can be opened at a time, and when a new message is opened, the previous message is closed.\r\n   * @param message - Message to display in SplMessageComponent.\r\n   */\r\n  open(message: string): void {\r\n    this.close(); // Only single message can be displayable.\r\n\r\n    this._openedMessage = this._overlayService.open(SplMessageComponent, {\r\n      data: message,\r\n    });\r\n  }\r\n\r\n  /** Closes messages that are already open. */\r\n  close(): void {\r\n    if (this._openedMessage) {\r\n      this._overlayService.close(this._openedMessage);\r\n      delete this._openedMessage;\r\n    }\r\n  }\r\n}\r\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\nimport { Nullable } from './type.util';\r\nimport { ExtendedDate } from './date.util';\r\n\r\n/**\r\n * Returns ValidatorFn that validates correct start date.\r\n * ValidatorFn binds 'startDate' error when date value is more than value of provided endDateControl.\r\n * @param endDateControl - AbstractControl of endDate.\r\n */\r\nexport function startDate(endDateControl: AbstractControl): ValidatorFn {\r\n  return (startDateControl: AbstractControl): Nullable<ValidationErrors> => {\r\n    const startDate = startDateControl.value;\r\n    const endDate = endDateControl.value;\r\n\r\n    if (startDate instanceof Date && endDate instanceof Date) {\r\n      const extendedStartDate = new ExtendedDate(startDate);\r\n\r\n      if (extendedStartDate.isMoreThan(endDate, 'day')) {\r\n        return {\r\n          startDate: true,\r\n        };\r\n      }\r\n    }\r\n\r\n    return null;\r\n  };\r\n}\r\n\r\n/**\r\n * Returns ValidatorFn that validates correct end date.\r\n * ValidatorFn binds 'endDate' error when date value is less than value of given startDateControl.\r\n * @param startDateControl - AbstractControl of startDate.\r\n */\r\nexport function endDate(startDateControl: AbstractControl): ValidatorFn {\r\n  return (endDateControl: AbstractControl): Nullable<ValidationErrors> => {\r\n    const startDate = startDateControl.value;\r\n    const endDate = endDateControl.value;\r\n\r\n    if (startDate instanceof Date && endDate instanceof Date) {\r\n      const extendedEndDate = new ExtendedDate(endDate);\r\n\r\n      if (extendedEndDate.isLessThan(startDate, 'day')) {\r\n        return {\r\n          endDate: true,\r\n        };\r\n      }\r\n    }\r\n\r\n    return null;\r\n  };\r\n}\r\n\r\n/**\r\n * Returns ValidatorFn that validates whether value of control is more than or equal to given minDate.\r\n * ValidatorFn binds 'minDate' error when value is invalid.\r\n * @param minDate - Minimum available date.\r\n */\r\nexport function minDate(minDate: Date): ValidatorFn {\r\n  return (control: AbstractControl): Nullable<ValidationErrors> => {\r\n    const value = control.value;\r\n\r\n    if (value && value instanceof Date) {\r\n      if (new ExtendedDate(value).isLessThan(minDate, 'day')) {\r\n        return {\r\n          minDate: true,\r\n        };\r\n      }\r\n    }\r\n\r\n    return null;\r\n  };\r\n}\r\n\r\n/**\r\n * Returns ValidatorFn that validates whether value of control is more than or equal to given maxDate.\r\n * ValidatorFn binds 'maxDate' error when value is invalid.\r\n * @param maxDate - Maximum available date.\r\n */\r\nexport function maxDate(maxDate: Date): ValidatorFn {\r\n  return (control: AbstractControl): Nullable<ValidationErrors> => {\r\n    const value = control.value;\r\n\r\n    if (value && value instanceof Date) {\r\n      if (new ExtendedDate(maxDate).isLessThan(value, 'day')) {\r\n        return {\r\n          maxDate: true,\r\n        };\r\n      }\r\n    }\r\n\r\n    return null;\r\n  };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SplOverlayService","i1.SplModalService","i1.SplEffectDirective","i2.SplPositionTrackerService","i3"],"mappings":"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"}