nexheal-lib 0.0.17 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1058,32 +1058,22 @@ class CalendarControl {
1058
1058
  return true;
1059
1059
  }
1060
1060
  incrementHour() {
1061
- let nextHour = (this.selectedHour + 1) % 24;
1062
- let found = false;
1063
- for (let i = 0; i < 24; i++) {
1064
- if (this.isTimeValid(nextHour, this.selectedMinute)) {
1065
- found = true;
1066
- break;
1067
- }
1068
- nextHour = (nextHour + 1) % 24;
1061
+ let nextHour = this.selectedHour + 1;
1062
+ if (nextHour >= 24) {
1063
+ nextHour = 0;
1069
1064
  }
1070
- if (found) {
1065
+ if (this.isTimeValid(nextHour, this.selectedMinute)) {
1071
1066
  this.selectedHour = nextHour;
1072
1067
  if (this.showTime || this.timeOnly)
1073
1068
  this.patchDateWithTime();
1074
1069
  }
1075
1070
  }
1076
1071
  decrementHour() {
1077
- let nextHour = (this.selectedHour + 23) % 24;
1078
- let found = false;
1079
- for (let i = 0; i < 24; i++) {
1080
- if (this.isTimeValid(nextHour, this.selectedMinute)) {
1081
- found = true;
1082
- break;
1083
- }
1084
- nextHour = (nextHour + 23) % 24;
1072
+ let nextHour = this.selectedHour - 1;
1073
+ if (nextHour < 0) {
1074
+ nextHour = 23;
1085
1075
  }
1086
- if (found) {
1076
+ if (this.isTimeValid(nextHour, this.selectedMinute)) {
1087
1077
  this.selectedHour = nextHour;
1088
1078
  if (this.showTime || this.timeOnly)
1089
1079
  this.patchDateWithTime();
@@ -1096,18 +1086,13 @@ class CalendarControl {
1096
1086
  nextMin = 0;
1097
1087
  nextHour = (nextHour + 1) % 24;
1098
1088
  }
1099
- if (!this.isTimeValid(nextHour, nextMin)) {
1100
- if (this._minDate) {
1101
- const min = new Date(this._minDate);
1102
- nextHour = min.getHours();
1103
- nextMin = min.getMinutes();
1089
+ if (this.isTimeValid(nextHour, nextMin)) {
1090
+ this.selectedHour = nextHour;
1091
+ this.selectedMinute = nextMin;
1092
+ if (this.showTime || this.timeOnly) {
1093
+ this.patchDateWithTime();
1104
1094
  }
1105
1095
  }
1106
- this.selectedHour = nextHour;
1107
- this.selectedMinute = nextMin;
1108
- if (this.showTime || this.timeOnly) {
1109
- this.patchDateWithTime();
1110
- }
1111
1096
  }
1112
1097
  decrementMinute() {
1113
1098
  let nextMin = this.selectedMinute - 1;
@@ -1116,18 +1101,13 @@ class CalendarControl {
1116
1101
  nextMin = 59;
1117
1102
  nextHour = (nextHour + 23) % 24;
1118
1103
  }
1119
- if (!this.isTimeValid(nextHour, nextMin)) {
1120
- if (this._maxDate) {
1121
- const max = new Date(this._maxDate);
1122
- nextHour = max.getHours();
1123
- nextMin = max.getMinutes();
1104
+ if (this.isTimeValid(nextHour, nextMin)) {
1105
+ this.selectedHour = nextHour;
1106
+ this.selectedMinute = nextMin;
1107
+ if (this.showTime || this.timeOnly) {
1108
+ this.patchDateWithTime();
1124
1109
  }
1125
1110
  }
1126
- this.selectedHour = nextHour;
1127
- this.selectedMinute = nextMin;
1128
- if (this.showTime || this.timeOnly) {
1129
- this.patchDateWithTime();
1130
- }
1131
1111
  }
1132
1112
  // popper
1133
1113
  initializePopper() {
@@ -1249,7 +1229,14 @@ class CalendarControl {
1249
1229
  this.selectionCleared.emit();
1250
1230
  event.stopPropagation();
1251
1231
  this.selectedDate = null;
1252
- if (this._defaultDate) {
1232
+ if (this._minDate) {
1233
+ const parsed = new Date(this._minDate);
1234
+ if (!isNaN(parsed.getTime())) {
1235
+ this.selectedHour = parsed.getHours();
1236
+ this.selectedMinute = parsed.getMinutes();
1237
+ }
1238
+ }
1239
+ else if (this._defaultDate) {
1253
1240
  const parsed = new Date(this._defaultDate);
1254
1241
  if (!isNaN(parsed.getTime())) {
1255
1242
  this.selectedHour = parsed.getHours();
@@ -1 +1 @@
1
- {"version":3,"file":"nexheal-lib.mjs","sources":["../../../projects/nexheal-lib/src/lib/controls/autocomplete-control/autocomplete-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/autocomplete-control/autocomplete-control.component.html","../../../projects/nexheal-lib/src/lib/controls/calendar-control/calendar-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/calendar-control/calendar-control.component.html","../../../projects/nexheal-lib/src/lib/controls/checkbox-control/checkbox-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/checkbox-control/checkbox-control.component.html","../../../projects/nexheal-lib/src/lib/controls/input-control/input-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/input-control/input-control.component.html","../../../projects/nexheal-lib/src/directives/clickoutside.directive.ts","../../../projects/nexheal-lib/src/lib/controls/multiselect-control/multiselect-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/multiselect-control/multiselect-control.component.html","../../../projects/nexheal-lib/src/lib/controls/select-control/select-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/select-control/select-control.component.html","../../../projects/nexheal-lib/src/lib/controls/switch-control/switch-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/switch-control/switch-control.component.html","../../../projects/nexheal-lib/src/lib/controls/text-editor/text-editor.component.ts","../../../projects/nexheal-lib/src/lib/controls/text-editor/text-editor.component.html","../../../projects/nexheal-lib/src/lib/controls/textarea-control/textarea-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/textarea-control/textarea-control.component.html","../../../projects/nexheal-lib/src/public-api.ts","../../../projects/nexheal-lib/src/nexheal-lib.ts"],"sourcesContent":["import { CommonModule } from \"@angular/common\";\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ElementRef,\r\n AfterViewInit,\r\n} from \"@angular/core\";\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n ReactiveFormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NG_VALIDATORS,\r\n} from \"@angular/forms\";\r\nimport { debounceTime, distinctUntilChanged, Subscription } from \"rxjs\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\n\r\n@Component({\r\n selector: \"autocomplete-control\",\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: \"./autocomplete-control.component.html\",\r\n styleUrls: [\"./autocomplete-control.component.scss\"],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: AutocompleteControl,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class AutocompleteControl\r\n implements ControlValueAccessor, OnInit, OnDestroy, AfterViewInit {\r\n\r\n private subscription: Subscription = new Subscription();\r\n\r\n @Input() title!: string;\r\n @Input() required: boolean = false;\r\n @Input() placeholder: string = \"\";\r\n @Input() customClass: string = '';\r\n @Input() clearVal: boolean = true;\r\n @Input() field: string = \"\";\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = \"\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() isAddNewItem: boolean = false;\r\n @Input() optionDisplayProperty: string = \"displayname\";\r\n @Output() optionSelected = new EventEmitter<any>();\r\n @Output() search = new EventEmitter<string>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() addNewItemClicked: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() optionPatched = new EventEmitter<any>();\r\n\r\n @Input() loadAllOnOpen: boolean = false;\r\n @Input() readonly: boolean = false;\r\n private _disabled: boolean = false;\r\n private _options: any[] = [];\r\n @Input() set options(value: any[]) {\r\n this._options = value || [];\r\n this.processValueBuffer();\r\n\r\n if (this.hasFocus && this.isDropdownOpen) {\r\n const val = this.inputControl.value || \"\";\r\n if (val === \"\" && this.loadAllOnOpen) {\r\n this.filteredSuggestions = [...this._options];\r\n } else if (val !== \"\") {\r\n const filterValue = val.toString().toLowerCase();\r\n this.filteredSuggestions = this._options.filter((suggestion) =>\r\n suggestion[this.optionDisplayProperty]?.toLowerCase().includes(filterValue)\r\n );\r\n }\r\n this.highlightedIndex = this.filteredSuggestions.length > 0 ? 0 : null;\r\n setTimeout(() => {\r\n if (this.popperInstance) this.popperInstance.update();\r\n }, 0);\r\n }\r\n }\r\n get options(): any[] {\r\n return this._options;\r\n }\r\n @Input() get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable();\r\n } else {\r\n this.inputControl.enable();\r\n }\r\n }\r\n }\r\n private valueBuffer: any = null;\r\n private popperInstance!: PopperInstance;\r\n private preventDropdownReopen: boolean = false;\r\n private preventClearOnBlur: boolean = false;\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n @ViewChild(\"inputElement\") inputElement!: ElementRef;\r\n @ViewChild(\"dropdownElement\") dropdownElement!: ElementRef;\r\n\r\n inputControl = new FormControl(\"\");\r\n isDropdownOpen: boolean = false;\r\n hasFocus: boolean = false;\r\n selectedItems: any;\r\n filteredSuggestions: any[] = [];\r\n highlightedIndex: number | null = null;\r\n\r\n constructor() {\r\n this.inputControl.valueChanges\r\n .pipe(debounceTime(10), distinctUntilChanged())\r\n .subscribe((value) => {\r\n if (this.preventDropdownReopen) {\r\n this.preventDropdownReopen = false;\r\n return;\r\n }\r\n if (value && value.trim().length > 0) {\r\n const filterValue = value;\r\n this.filterSuggestions(filterValue);\r\n this.search.emit(filterValue);\r\n } else {\r\n if (this.loadAllOnOpen && this.hasFocus) {\r\n this.filterSuggestions(\"\");\r\n this.search.emit(\"\");\r\n } else {\r\n this.isDropdownOpen = false;\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.inputControl.markAsPristine();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.createPopperInstance();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.preventDropdownReopen = true;\r\n if (value == null) {\r\n // Clear everything if we get null\r\n this.valueBuffer = null;\r\n this.selectedItems = null;\r\n this.preventDropdownReopen = true;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n } else {\r\n // Otherwise, treat as normal\r\n this.valueBuffer = value;\r\n this.processValueBuffer();\r\n }\r\n }\r\n private processValueBuffer() {\r\n if (this.valueBuffer == null) {\r\n this.selectedItems = null;\r\n this.preventDropdownReopen = true;\r\n // this.inputControl.setValue(\"\", { emitEvent: false });\r\n return;\r\n }\r\n if (this._options && this._options.length > 0) {\r\n const matchedSuggestion = this._options.find(\r\n (s) => s.id === this.valueBuffer\r\n );\r\n if (matchedSuggestion) {\r\n this.preventDropdownReopen = true;\r\n this.inputControl.setValue(\r\n matchedSuggestion[this.optionDisplayProperty],\r\n { emitEvent: false }\r\n );\r\n this.selectedItems = matchedSuggestion;\r\n this.onChange(matchedSuggestion.id);\r\n this.optionPatched.emit(matchedSuggestion);\r\n this.valueBuffer = null;\r\n return;\r\n }\r\n }\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.selectedItems = null;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.inputControl.disable();\r\n } else {\r\n this.inputControl.enable();\r\n }\r\n }\r\n\r\n filterSuggestions(value: string) {\r\n if (this.readonly || this.preventDropdownReopen || !this.hasFocus) {\r\n this.preventDropdownReopen = false;\r\n return;\r\n }\r\n if (value === \"\") {\r\n if (this.loadAllOnOpen) {\r\n this.filteredSuggestions = [...this.options];\r\n this.highlightedIndex = this.filteredSuggestions.length > 0 ? 0 : null;\r\n this.isDropdownOpen = true;\r\n setTimeout(() => {\r\n this.createPopperInstance();\r\n }, 0);\r\n } else {\r\n this.filteredSuggestions = [];\r\n this.isDropdownOpen = false;\r\n }\r\n return;\r\n }\r\n const filterValue = value.toString().toLowerCase();\r\n this.filteredSuggestions = this.options.filter((suggestion) =>\r\n suggestion[this.optionDisplayProperty]\r\n ?.toLowerCase()\r\n .includes(filterValue)\r\n );\r\n this.highlightedIndex = this.filteredSuggestions.length > 0 ? 0 : null;\r\n this.isDropdownOpen = true;\r\n setTimeout(() => {\r\n this.createPopperInstance();\r\n }, 0);\r\n }\r\n selectSuggestion(suggestion: any) {\r\n this.preventDropdownReopen = true;\r\n this.inputControl.setValue(suggestion[this.optionDisplayProperty], {\r\n emitEvent: false,\r\n });\r\n this.onChange(suggestion.id);\r\n this.inputControl.markAsTouched();\r\n this.inputControl.updateValueAndValidity(); // Trigger validation update\r\n this.isDropdownOpen = false;\r\n if (this.selectedItems?.id !== suggestion.id) {\r\n this.selectedItems = suggestion;\r\n this.optionSelected.emit(suggestion);\r\n }\r\n }\r\n\r\n // events\r\n onFocus() {\r\n this.hasFocus = true;\r\n if (this.readonly) return;\r\n if (this.loadAllOnOpen) {\r\n const val = this.inputControl.value || \"\";\r\n this.filterSuggestions(val);\r\n this.search.emit(val);\r\n }\r\n }\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n // Delay onBlur handling so that mousedown and click can occur first.\r\n setTimeout(() => {\r\n this.hasFocus = false;\r\n this.isDropdownOpen = false;\r\n\r\n // If an option click is in progress, do not clear the input.\r\n if (!this.preventClearOnBlur) {\r\n // Optionally: check if the current value is valid against options.\r\n // If not found, clear the input.\r\n const currentValue = this.inputControl.value;\r\n const found = this._options.find(\r\n (opt) =>\r\n String(opt[this.optionDisplayProperty]).toLowerCase() ===\r\n String(currentValue).toLowerCase()\r\n );\r\n if (!found) {\r\n this.inputControl.setValue(\"\");\r\n this.selectedItems = null;\r\n this.onChange(null);\r\n }\r\n }\r\n\r\n // Reset the flag after handling blur.\r\n this.preventClearOnBlur = false;\r\n }, 300);\r\n }\r\n onKeyDown(event: KeyboardEvent) {\r\n if (!this.isDropdownOpen) {\r\n return;\r\n }\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this.highlightedIndex =\r\n this.highlightedIndex === null ||\r\n this.highlightedIndex === this.filteredSuggestions.length - 1\r\n ? 0\r\n : this.highlightedIndex + 1;\r\n event.preventDefault();\r\n this.scrollHighlightedItemIntoView();\r\n break;\r\n case \"ArrowUp\":\r\n this.highlightedIndex =\r\n this.highlightedIndex === null || this.highlightedIndex === 0\r\n ? this.filteredSuggestions.length - 1\r\n : this.highlightedIndex - 1;\r\n event.preventDefault();\r\n this.scrollHighlightedItemIntoView();\r\n break;\r\n case \"Enter\":\r\n if (\r\n this.highlightedIndex !== null &&\r\n this.filteredSuggestions.length > 0\r\n ) {\r\n this.selectSuggestion(\r\n this.filteredSuggestions[this.highlightedIndex]\r\n );\r\n } else {\r\n this.isDropdownOpen = false;\r\n }\r\n event.preventDefault();\r\n break;\r\n case \"Escape\":\r\n this.isDropdownOpen = false;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n onOptionMouseDown(): void {\r\n this.preventClearOnBlur = true;\r\n }\r\n onMouseOver(index: number) {\r\n this.highlightedIndex = index;\r\n }\r\n\r\n // actions\r\n onAddNewItemClick(): void {\r\n this.addNewItemClicked.emit();\r\n }\r\n\r\n // popper\r\n private createPopperInstance() {\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n }\r\n if (this.inputElement && this.dropdownElement) {\r\n this.popperInstance = createPopper(\r\n this.inputElement.nativeElement,\r\n this.dropdownElement.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, 1],\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top-start\", \"bottom-start\"],\r\n },\r\n },\r\n ],\r\n }\r\n );\r\n }\r\n }\r\n private scrollHighlightedItemIntoView() {\r\n if (this.highlightedIndex !== null) {\r\n const highlightedItem =\r\n this.dropdownElement.nativeElement.querySelectorAll(\".list-item\")[\r\n this.highlightedIndex\r\n ];\r\n if (highlightedItem) {\r\n highlightedItem.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }\r\n }\r\n\r\n // clear\r\n resetInput() {\r\n this.inputControl.setValue(\"\");\r\n this.selectionCleared.emit();\r\n this.selectedItems = null;\r\n this.valueBuffer = null;\r\n }\r\n removeItem(item: any) {\r\n this.selectedItems = this.selectedItems.filter((i: any) => i !== item);\r\n this.onChange(this.selectedItems);\r\n this.optionSelected.emit(this.selectedItems);\r\n }\r\n}\r\n","<div class=\"form-group auto-complete\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n <input #inputElement type=\"text\" class=\"form-control\" [placeholder]=\"placeholder\" [formControl]=\"inputControl\"\r\n (blur)=\"onBlur()\" (keydown)=\"onKeyDown($event)\" (focus)=\"onFocus()\" [ngClass]=\"{'is-invalid': error}\"\r\n [attr.autocomplete]=\"autocomplete || null\" [readonly]=\"readonly\" />\r\n\r\n <span class=\"focus-border\"></span>\r\n\r\n @if (!inputLoader && inputControl.value && clearVal && hasFocus) {\r\n <label class=\"clear\" (click)=\"resetInput()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n @if (isDropdownOpen) {\r\n <div #dropdownElement class=\"option-list\">\r\n @if (filteredSuggestions.length === 0) {\r\n <div class=\"no-results\">\r\n <div>No results found</div>\r\n @if (isAddNewItem) {\r\n <div (click)=\"onAddNewItemClick()\" class=\"btn-new\">\r\n Add New Item\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n @for (suggestion of filteredSuggestions; track suggestion[optionDisplayProperty]; let i = $index) {\r\n <div class=\"list-item\" [ngClass]=\"{\r\n 'active': suggestion === selectedItems,\r\n 'highlighted': highlightedIndex === i\r\n }\" (mousedown)=\"onOptionMouseDown()\" (click)=\"selectSuggestion(suggestion)\" (mouseover)=\"onMouseOver(i)\">\r\n @if (suggestion.countryCode) {\r\n <img src=\"https://flagcdn.com/w80/{{ suggestion.countryCode }}.png\" width=\"20\"\r\n alt=\"{{ suggestion.countryCode }} flag\" loading=\"lazy\" />\r\n }\r\n {{ suggestion[optionDisplayProperty] }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import { CommonModule, DatePipe } from \"@angular/common\";\r\nimport { Component, OnInit, forwardRef, Input, HostListener, ViewChild, ElementRef, EventEmitter, Output, OnDestroy } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\ntype ViewMode = \"day\" | \"month\" | \"yearRange\";\r\n\r\n@Component({\r\n selector: \"calendar-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n templateUrl: \"./calendar-control.component.html\",\r\n styleUrl: \"./calendar-control.component.scss\",\r\n providers: [\r\n DatePipe,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CalendarControl),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CalendarControl implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n @Input() title!: string;\r\n @Input() required: boolean = false;\r\n @Input() customClass: string | object = \"\";\r\n @Input() clearVal: boolean = true;\r\n @Input() deFocus: boolean = true;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() hourFormat: string = \"24\";\r\n @Input() selectionMode: string = \"single\";\r\n @Input() timeOnly = false;\r\n @Input() dateFormat: string = \"dd/MM/yyyy\";\r\n @Input() placeholder: string = \"dd-mm-yyyy\";\r\n @Input() viewMode: \"date\" | \"month\" | \"year\" = \"date\";\r\n private _disabled = false;\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n @Input() readonly = false;\r\n @Input() submitted = false;\r\n @Input() inputPlaceholder: boolean = false;\r\n @Input(\"close-val\") closeVal: boolean = false;\r\n @Input() showTime = false;\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() dateSelected = new EventEmitter<Date | null>();\r\n\r\n private _defaultDate?: string;\r\n @Input() get defaultDate(): string | undefined {\r\n return this._defaultDate;\r\n }\r\n set defaultDate(value: string | undefined) {\r\n this._defaultDate = value;\r\n if (value && !this.selectedDate) {\r\n const parsed = new Date(value);\r\n if (!isNaN(parsed.getTime())) {\r\n this.displayMonth = parsed.getMonth();\r\n this.displayYear = parsed.getFullYear();\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n }\r\n }\r\n }\r\n\r\n private _minDate?: string;\r\n private _maxDate?: string;\r\n @Input() get minDate(): string | undefined {\r\n return this._minDate;\r\n }\r\n set minDate(value: string | undefined) {\r\n this._minDate = value;\r\n }\r\n @Input() get maxDate(): string | undefined {\r\n return this._maxDate;\r\n }\r\n set maxDate(value: string | undefined) {\r\n this._maxDate = value;\r\n }\r\n get meridian(): 'AM' | 'PM' {\r\n if (this.hourFormat !== '12') return 'AM';\r\n return this.selectedHour >= 12 ? 'PM' : 'AM';\r\n }\r\n private static _currentlyOpen?: CalendarControl;\r\n private onChangeFn: (val: string | null) => void = () => { };\r\n private onTouchedFn: () => void = () => { };\r\n private popperInstance: PopperInstance | null = null;\r\n\r\n @ViewChild(\"root\", { static: true }) rootElement!: ElementRef;\r\n @ViewChild(\"inputEl\", { static: true }) inputEl!: ElementRef<HTMLElement>;\r\n @ViewChild(\"datePicker\", { static: false }) datePickerEl!: ElementRef<HTMLElement>;\r\n\r\n isOpen: boolean = false;\r\n focus: boolean = false;\r\n displayMonth: number;\r\n displayYear: number;\r\n selectedDate: Date | null = null;\r\n today = new Date();\r\n todayYear = this.today.getFullYear();\r\n todayMonth = this.today.getMonth();\r\n todayDate = this.today.getDate();\r\n selectedHour = this.today.getHours();\r\n selectedMinute = this.today.getMinutes();\r\n dayClassMap: {\r\n [day: number]: { disabled: boolean; selected: boolean; today: boolean };\r\n } = {};\r\n\r\n inputVal: string | null = null; // Replace with the appropriate type and default value\r\n yearRangeSize = 15; // The year range view shows a chunk of years, for example 15 years at a time.\r\n currentView: ViewMode = \"day\";\r\n inputControl: FormControl = new FormControl({ value: \"\", disabled: false });\r\n\r\n constructor(\r\n public datePipe: DatePipe\r\n ) {\r\n const today = new Date();\r\n this.displayMonth = today.getMonth();\r\n this.displayYear = today.getFullYear();\r\n }\r\n\r\n ngOnInit(): void {\r\n const now = new Date();\r\n this.displayYear = now.getFullYear();\r\n this.displayMonth = now.getMonth();\r\n }\r\n\r\n ngAfterViewChecked() {\r\n if (this.isOpen) {\r\n this.initializePopper();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.isOpen) {\r\n this.initializePopper();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyPopper();\r\n }\r\n\r\n writeValue(value: any): void {\r\n // 1) Clear out if no value\r\n if (!value) {\r\n this.selectedDate = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n return;\r\n }\r\n if (this.timeOnly) {\r\n let hours: number, mins: number;\r\n\r\n if (typeof value === \"string\") {\r\n // “HH:mm” or “hh:mm AM/PM”\r\n const m24 = value.match(/^(\\d{1,2}):(\\d{2})$/);\r\n const m12 = value.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n if (m24) {\r\n hours = +m24[1];\r\n mins = +m24[2];\r\n } else if (m12) {\r\n let h = +m12[1];\r\n if (/PM/i.test(m12[3]) && h < 12) h += 12;\r\n if (/AM/i.test(m12[3]) && h === 12) h = 0;\r\n hours = h;\r\n mins = +m12[2];\r\n } else {\r\n // fallback parse\r\n const dt = new Date(value);\r\n hours = dt.getHours();\r\n mins = dt.getMinutes();\r\n }\r\n } else if (value instanceof Date) {\r\n hours = value.getHours();\r\n mins = value.getMinutes();\r\n } else {\r\n // maybe a timestamp or something else\r\n const dt = new Date(value);\r\n hours = dt.getHours();\r\n mins = dt.getMinutes();\r\n }\r\n\r\n // 3) Apply\r\n this.selectedHour = hours;\r\n this.selectedMinute = mins;\r\n // 4) Write back into the formControl & notify forms\r\n const out = this.formatOutputTimeOnly();\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n\r\n return;\r\n }\r\n // 2) Parse the incoming string (dd/MM/yyyy or dd/MM/yyyy HH:mm)\r\n const parsed = this.parseDate(value);\r\n this.selectedDate = parsed;\r\n if (this.showTime) {\r\n const raw = value as string;\r\n\r\n // split into date vs time\r\n let datePart = raw,\r\n timePart: string | null = null;\r\n const parts = raw.match(/^(.+?)\\s+(.+)$/);\r\n if (parts) {\r\n datePart = parts[1];\r\n timePart = parts[2];\r\n }\r\n\r\n // parse the date\r\n const parsedDate = this.parseDate(datePart);\r\n if (!parsedDate) {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n\r\n // parse the time portion (reuse your timeOnly logic)\r\n if (timePart) {\r\n let h: number, m: number;\r\n const m24 = timePart.match(/^(\\d{1,2}):(\\d{2})$/);\r\n const m12 = timePart.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n\r\n if (m24) {\r\n h = +m24[1];\r\n m = +m24[2];\r\n } else if (m12) {\r\n h = +m12[1];\r\n m = +m12[2];\r\n if (/PM/i.test(m12[3]) && h < 12) h += 12;\r\n if (/AM/i.test(m12[3]) && h === 12) h = 0;\r\n } else {\r\n const dt = new Date(`1970-01-01T${timePart}`);\r\n h = dt.getHours();\r\n m = dt.getMinutes();\r\n }\r\n\r\n parsedDate.setHours(h, m);\r\n this.selectedHour = h;\r\n this.selectedMinute = m;\r\n\r\n }\r\n\r\n // update calendar view & control value\r\n this.selectedDate = parsedDate;\r\n this.displayMonth = parsedDate.getMonth();\r\n this.displayYear = parsedDate.getFullYear();\r\n const out = this.formatOutput(parsedDate);\r\n\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n return;\r\n }\r\n if (parsed) {\r\n // 3) Always update the calendar view\r\n this.displayMonth = parsed.getMonth();\r\n this.displayYear = parsed.getFullYear();\r\n\r\n // 4) ONLY if showTime is on, pull hours/minutes\r\n if (this.showTime) {\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n\r\n }\r\n\r\n // 5) Finally, set the input text via your formatter\r\n this.inputControl.setValue(this.formatOutput(parsed), {\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => void): void {\r\n this.onChangeFn = fn;\r\n }\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouchedFn = fn;\r\n }\r\n setData(config: any) {\r\n if (config.hasOwnProperty(\"placeholder\")) {\r\n this.placeholder = config.placeholder;\r\n }\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.onTouchedFn();\r\n const raw = this.inputControl.value as string;\r\n if (this.showTime && !this.timeOnly) {\r\n // split off the date vs. time\r\n const match = raw.match(/^(.+?)\\s+(.+)$/);\r\n const datePart = match ? match[1] : raw;\r\n const timePart = match ? match[2] : \"\";\r\n // parse the date\r\n const pd = this.parseDate(datePart);\r\n if (!pd) return this.clearDate(new Event(\"manual\"));\r\n // parse the time portion (reuse your timeOnly logic)\r\n let h: number, m: number;\r\n const m24 = timePart.match(/^(\\d{1,2}):(\\d{2})$/);\r\n const m12 = timePart.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n if (m24) {\r\n h = +m24[1];\r\n m = +m24[2];\r\n } else if (m12) {\r\n h = +m12[1];\r\n m = +m12[2];\r\n if (/PM/i.test(m12[3]) && h < 12) h += 12;\r\n if (/AM/i.test(m12[3]) && h === 12) h = 0;\r\n } else {\r\n const tmp = new Date(`1970-01-01T${timePart}`);\r\n h = tmp.getHours();\r\n m = tmp.getMinutes();\r\n }\r\n // apply\r\n pd.setHours(h, m);\r\n this.selectedDate = pd;\r\n this.selectedHour = h;\r\n this.selectedMinute = m;\r\n\r\n // update calendar view\r\n this.displayMonth = pd.getMonth();\r\n this.displayYear = pd.getFullYear();\r\n // write back into the input & notify\r\n const out = this.formatOutput(pd);\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.dateSelected.emit(pd);\r\n this.blurEvent.emit();\r\n return;\r\n }\r\n if (this.timeOnly) {\r\n // try 24-hour HH:mm\r\n let m = raw.match(/^(\\d{1,2}):(\\d{2})$/);\r\n // or 12-hour h:mm AM/PM\r\n const mAmPm = !m && raw.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n\r\n if (m) {\r\n // 24h\r\n const h = +m[1],\r\n min = +m[2];\r\n if (h < 24 && min < 60 && this.isTimeValid(h, min)) {\r\n this.selectedHour = h;\r\n this.selectedMinute = min;\r\n\r\n } else {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n } else if (mAmPm) {\r\n // 12h\r\n let h = +mAmPm[1],\r\n min = +mAmPm[2];\r\n const ap = mAmPm[3].toUpperCase();\r\n if (h >= 1 && h <= 12 && min < 60) {\r\n if (ap === \"PM\" && h < 12) h += 12;\r\n if (ap === \"AM\" && h === 12) h = 0;\r\n if (this.isTimeValid(h, min)) {\r\n this.selectedHour = h;\r\n this.selectedMinute = min;\r\n } else {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n\r\n } else {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n } else {\r\n // not a valid time string\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n const out = this.formatOutputTimeOnly();\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.dateSelected.emit(this.selectedDate);\r\n this.blurEvent.emit();\r\n return;\r\n }\r\n if (this.showTime) {\r\n this.blurEvent.emit();\r\n return;\r\n }\r\n const parsed = this.parseDate(raw);\r\n\r\n if (!parsed) {\r\n this.clearDate(new Event(\"manual\"));\r\n } else {\r\n this.selectedDate = parsed;\r\n this.displayMonth = parsed.getMonth();\r\n this.displayYear = parsed.getFullYear();\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n\r\n const formatted = this.formatOutput(parsed);\r\n this.inputControl.setValue(formatted, { emitEvent: false });\r\n this.onChangeFn(formatted);\r\n }\r\n this.blurEvent.emit();\r\n }\r\n onFocus() {\r\n this.focus = true;\r\n }\r\n setDisabledState(isDisabled: boolean) {\r\n this.disabled = isDisabled;\r\n }\r\n onInputKeydown(event: KeyboardEvent) {\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n this.toggleCalendar();\r\n break;\r\n case \"Escape\":\r\n this.isOpen = false;\r\n break;\r\n case \" \":\r\n case \"Spacebar\":\r\n event.preventDefault();\r\n this.toggleCalendar();\r\n break;\r\n case \"Tab\":\r\n this.isOpen = false;\r\n break;\r\n }\r\n }\r\n\r\n // day\r\n selectDay(day: number | null) {\r\n if (!day) return;\r\n const picked = this.showTime\r\n ? this.buildDateWithTime(day)\r\n : new Date(this.displayYear, this.displayMonth, day);\r\n\r\n if (this.isDateDisabled(picked)) return;\r\n\r\n this.selectedDate = picked;\r\n\r\n const out = this.formatOutput(picked);\r\n\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(picked);\r\n\r\n this.isOpen = false;\r\n }\r\n get daysInMonth(): (number | null)[] {\r\n const firstDay = new Date(this.displayYear, this.displayMonth, 1).getDay();\r\n const totalDays = new Date(\r\n this.displayYear,\r\n this.displayMonth + 1,\r\n 0\r\n ).getDate();\r\n const offset = firstDay;\r\n\r\n const daysArray: (number | null)[] = Array(offset).fill(null);\r\n this.dayClassMap = {}; // Reset\r\n\r\n for (let i = 1; i <= totalDays; i++) {\r\n const date = new Date(this.displayYear, this.displayMonth, i);\r\n\r\n this.dayClassMap[i] = {\r\n disabled: this.isDateDisabled(date),\r\n selected:\r\n this.selectedDate?.getFullYear() === this.displayYear &&\r\n this.selectedDate?.getMonth() === this.displayMonth &&\r\n this.selectedDate?.getDate() === i,\r\n today:\r\n this.todayYear === this.displayYear &&\r\n this.todayMonth === this.displayMonth &&\r\n this.todayDate === i,\r\n };\r\n\r\n daysArray.push(i);\r\n }\r\n\r\n return daysArray;\r\n }\r\n parseDate(val: any): Date | null {\r\n if (typeof val === \"string\") {\r\n if (this.viewMode === \"month\") {\r\n const mIndex = this.months.findIndex(m => m.toLowerCase() === val.trim().toLowerCase());\r\n if (mIndex !== -1) {\r\n return new Date(this.todayYear, mIndex, 1);\r\n }\r\n }\r\n if (this.viewMode === \"date\" && val.length <= 2 && !isNaN(+val)) {\r\n return new Date(this.todayYear, this.todayMonth, +val);\r\n }\r\n const m = val.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\r\n if (m) {\r\n const d = +m[1],\r\n mo = +m[2] - 1,\r\n y = +m[3];\r\n return new Date(y, mo, d);\r\n }\r\n }\r\n // fallback\r\n const date = new Date(val);\r\n if (!isNaN(date.getTime())) return date;\r\n \r\n // final fallback for weird year parsing\r\n if (this.viewMode === \"year\" && !isNaN(+val)) {\r\n return new Date(+val, 0, 1);\r\n }\r\n \r\n return null;\r\n }\r\n formatOutput(date: Date): string {\r\n const datePart = this.datePipe.transform(date, this.dateFormat)!;\r\n if (this.showTime) {\r\n const timeFormat = this.hourFormat === \"12\" ? \"hh:mm a\" : \"HH:mm\";\r\n const timePart = this.datePipe.transform(date, timeFormat)!;\r\n return `${datePart} ${timePart}`;\r\n }\r\n return datePart;\r\n }\r\n isSelectedDay(day: number | null): boolean {\r\n if (!this.selectedDate || !day) return false;\r\n return (\r\n this.selectedDate.getFullYear() === this.displayYear &&\r\n this.selectedDate.getMonth() === this.displayMonth &&\r\n this.selectedDate.getDate() === day\r\n );\r\n }\r\n isDateDisabled(d: Date): boolean {\r\n if (this._minDate && d < new Date(this._minDate)) return true;\r\n if (this._maxDate && d > new Date(this._maxDate)) return true;\r\n return false;\r\n }\r\n isDayDisabled(day: number | null): boolean {\r\n return (\r\n day !== null &&\r\n this.isDateDisabled(new Date(this.displayYear, this.displayMonth, day))\r\n );\r\n }\r\n\r\n // month\r\n goToMonthView() {\r\n this.currentView = \"month\";\r\n }\r\n months = [\r\n \"Jan\",\r\n \"Feb\",\r\n \"Mar\",\r\n \"Apr\",\r\n \"May\",\r\n \"Jun\",\r\n \"Jul\",\r\n \"Aug\",\r\n \"Sep\",\r\n \"Oct\",\r\n \"Nov\",\r\n \"Dec\",\r\n ];\r\n selectMonth(index: number) {\r\n this.displayMonth = index;\r\n if (this.viewMode === \"month\") {\r\n const picked = new Date(this.displayYear, this.displayMonth, 1);\r\n if (this.isDateDisabled(picked)) return;\r\n this.selectedDate = picked;\r\n const out = this.formatOutput(picked);\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(picked);\r\n this.isOpen = false;\r\n } else {\r\n this.currentView = \"day\";\r\n }\r\n }\r\n get displayMonthName(): string {\r\n return this.months[this.displayMonth];\r\n }\r\n prevMonth() {\r\n if (this.displayMonth === 0) {\r\n this.displayMonth = 11;\r\n this.displayYear--;\r\n } else {\r\n this.displayMonth--;\r\n }\r\n }\r\n nextMonth() {\r\n if (this.displayMonth === 11) {\r\n this.displayMonth = 0;\r\n this.displayYear++;\r\n } else {\r\n this.displayMonth++;\r\n }\r\n }\r\n\r\n // year\r\n goToYearRangeView() {\r\n this.currentView = \"yearRange\";\r\n }\r\n get yearRange(): number[] {\r\n const startYear = this.getStartYearForRange();\r\n const years: number[] = [];\r\n for (let i = 0; i < this.yearRangeSize; i++) {\r\n years.push(startYear + i);\r\n }\r\n return years;\r\n }\r\n getStartYearForRange(): number {\r\n const remainder = this.displayYear % this.yearRangeSize;\r\n return this.displayYear - remainder;\r\n }\r\n selectYear(year: number) {\r\n this.displayYear = year;\r\n if (this.viewMode === \"year\") {\r\n const picked = new Date(this.displayYear, 0, 1);\r\n if (this.isDateDisabled(picked)) return;\r\n this.selectedDate = picked;\r\n const out = this.formatOutput(picked);\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(picked);\r\n this.isOpen = false;\r\n } else {\r\n this.currentView = \"month\";\r\n }\r\n }\r\n prevYearRange() {\r\n this.displayYear -= this.yearRangeSize;\r\n }\r\n nextYearRange() {\r\n this.displayYear += this.yearRangeSize;\r\n }\r\n\r\n // time picker\r\n private formatOutputTimeOnly(): string {\r\n // you could choose 12h vs 24h based on hourFormat\r\n return this.datePipe.transform(\r\n new Date(0, 0, 0, this.selectedHour, this.selectedMinute),\r\n this.hourFormat === \"12\" ? \"hh:mm a\" : \"HH:mm\"\r\n )!;\r\n }\r\n private patchDateWithTime() {\r\n if (!this.selectedDate) {\r\n const now = new Date();\r\n this.selectedDate = new Date(\r\n now.getFullYear(),\r\n now.getMonth(),\r\n now.getDate(),\r\n this.selectedHour,\r\n this.selectedMinute\r\n );\r\n } else {\r\n this.selectedDate.setHours(this.selectedHour, this.selectedMinute);\r\n }\r\n\r\n const output = this.timeOnly\r\n ? this.formatOutputTimeOnly()\r\n : this.formatOutput(this.selectedDate);\r\n\r\n this.inputControl.setValue(output, { emitEvent: false });\r\n this.onChangeFn(output);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(this.selectedDate);\r\n }\r\n setMeridian(value: \"AM\" | \"PM\") {\r\n if (this.meridian === value) return;\r\n let nextHour = this.selectedHour;\r\n if (value === \"AM\" && this.selectedHour >= 12) {\r\n nextHour -= 12;\r\n } else if (value === \"PM\" && this.selectedHour < 12) {\r\n nextHour += 12;\r\n }\r\n \r\n if (this.isTimeValid(nextHour, this.selectedMinute)) {\r\n this.selectedHour = nextHour;\r\n this.patchDateWithTime();\r\n }\r\n }\r\n private buildDateWithTime(day: number): Date {\r\n return new Date(\r\n this.displayYear,\r\n this.displayMonth,\r\n day,\r\n this.selectedHour,\r\n this.selectedMinute\r\n );\r\n }\r\n isTimeValid(hour: number, minute: number): boolean {\r\n const testDate = new Date(this.selectedDate || new Date());\r\n testDate.setHours(hour, minute, 0, 0);\r\n \r\n if (this._minDate) {\r\n const min = new Date(this._minDate);\r\n if (this.timeOnly || this.showTime) {\r\n min.setFullYear(testDate.getFullYear(), testDate.getMonth(), testDate.getDate());\r\n }\r\n if (testDate < min) return false;\r\n }\r\n if (this._maxDate) {\r\n const max = new Date(this._maxDate);\r\n if (this.timeOnly || this.showTime) {\r\n max.setFullYear(testDate.getFullYear(), testDate.getMonth(), testDate.getDate());\r\n }\r\n if (testDate > max) return false;\r\n }\r\n return true;\r\n }\r\n\r\n incrementHour() {\r\n let nextHour = (this.selectedHour + 1) % 24;\r\n let found = false;\r\n for (let i = 0; i < 24; i++) {\r\n if (this.isTimeValid(nextHour, this.selectedMinute)) {\r\n found = true;\r\n break;\r\n }\r\n nextHour = (nextHour + 1) % 24;\r\n }\r\n if (found) {\r\n this.selectedHour = nextHour;\r\n if (this.showTime || this.timeOnly) this.patchDateWithTime();\r\n }\r\n }\r\n decrementHour() {\r\n let nextHour = (this.selectedHour + 23) % 24;\r\n let found = false;\r\n for (let i = 0; i < 24; i++) {\r\n if (this.isTimeValid(nextHour, this.selectedMinute)) {\r\n found = true;\r\n break;\r\n }\r\n nextHour = (nextHour + 23) % 24;\r\n }\r\n if (found) {\r\n this.selectedHour = nextHour;\r\n if (this.showTime || this.timeOnly) this.patchDateWithTime();\r\n }\r\n }\r\n incrementMinute() {\r\n let nextMin = this.selectedMinute + 1;\r\n let nextHour = this.selectedHour;\r\n if (nextMin >= 60) {\r\n nextMin = 0;\r\n nextHour = (nextHour + 1) % 24;\r\n }\r\n if (!this.isTimeValid(nextHour, nextMin)) {\r\n if (this._minDate) {\r\n const min = new Date(this._minDate);\r\n nextHour = min.getHours();\r\n nextMin = min.getMinutes();\r\n }\r\n }\r\n this.selectedHour = nextHour;\r\n this.selectedMinute = nextMin;\r\n if (this.showTime || this.timeOnly) {\r\n this.patchDateWithTime();\r\n }\r\n }\r\n decrementMinute() {\r\n let nextMin = this.selectedMinute - 1;\r\n let nextHour = this.selectedHour;\r\n if (nextMin < 0) {\r\n nextMin = 59;\r\n nextHour = (nextHour + 23) % 24;\r\n }\r\n if (!this.isTimeValid(nextHour, nextMin)) {\r\n if (this._maxDate) {\r\n const max = new Date(this._maxDate);\r\n nextHour = max.getHours();\r\n nextMin = max.getMinutes();\r\n }\r\n }\r\n this.selectedHour = nextHour;\r\n this.selectedMinute = nextMin;\r\n if (this.showTime || this.timeOnly) {\r\n this.patchDateWithTime();\r\n }\r\n }\r\n\r\n // popper\r\n initializePopper() {\r\n if (\r\n !this.popperInstance &&\r\n this.inputEl?.nativeElement &&\r\n this.datePickerEl?.nativeElement\r\n ) {\r\n this.popperInstance = createPopper(\r\n this.inputEl.nativeElement,\r\n this.datePickerEl.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n { name: \"offset\", options: { offset: [0, 1] } },\r\n { name: \"preventOverflow\", options: { boundary: \"viewport\" } },\r\n { name: \"flip\", options: { fallbackPlacements: [\"top-start\"] } },\r\n ],\r\n }\r\n );\r\n this.popperInstance.update();\r\n }\r\n }\r\n destroyPopper() {\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n this.popperInstance = null;\r\n }\r\n }\r\n\r\n // toggle, open, close and clear \r\n toggleCalendar(): void {\r\n if (this.disabled || this.readonly) return;\r\n\r\n // if another calendar is open, close it\r\n if (\r\n !this.isOpen &&\r\n CalendarControl._currentlyOpen &&\r\n CalendarControl._currentlyOpen !== this\r\n ) {\r\n CalendarControl._currentlyOpen.closeCalendar();\r\n }\r\n\r\n // flip open/close\r\n this.isOpen = !this.isOpen;\r\n\r\n if (this.isOpen) {\r\n // mark this one as current\r\n CalendarControl._currentlyOpen = this;\r\n\r\n if (this.viewMode === \"month\") {\r\n this.currentView = \"month\";\r\n } else if (this.viewMode === \"year\") {\r\n this.currentView = \"yearRange\";\r\n } else {\r\n this.currentView = \"day\";\r\n }\r\n if (this.selectedDate) {\r\n this.displayMonth = this.selectedDate.getMonth();\r\n this.displayYear = this.selectedDate.getFullYear();\r\n } else if (this._defaultDate) {\r\n const parsed = new Date(this._defaultDate);\r\n if (!isNaN(parsed.getTime())) {\r\n this.displayMonth = parsed.getMonth();\r\n this.displayYear = parsed.getFullYear();\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n }\r\n } else {\r\n const now = new Date();\r\n this.displayMonth = now.getMonth();\r\n this.displayYear = now.getFullYear();\r\n }\r\n\r\n if (!this.inputControl.value && (this.timeOnly || this.showTime)) {\r\n if (this._minDate) {\r\n const min = new Date(this._minDate);\r\n this.selectedHour = min.getHours();\r\n this.selectedMinute = min.getMinutes();\r\n } else if (!this.isTimeValid(this.selectedHour, this.selectedMinute)) {\r\n if (this._maxDate) {\r\n const max = new Date(this._maxDate);\r\n this.selectedHour = max.getHours();\r\n this.selectedMinute = max.getMinutes();\r\n }\r\n }\r\n }\r\n\r\n // destroy any old popper\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n this.popperInstance = null;\r\n }\r\n if (this.inputEl && this.datePickerEl) {\r\n this.popperInstance = createPopper(\r\n this.inputEl.nativeElement,\r\n this.datePickerEl.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n { name: \"offset\", options: { offset: [0, 1] } },\r\n { name: \"preventOverflow\", options: { boundary: \"viewport\" } },\r\n { name: \"flip\", options: { fallbackPlacements: [\"top-start\"] } },\r\n ],\r\n }\r\n );\r\n this.popperInstance.update();\r\n }\r\n } else {\r\n this.destroyPopper();\r\n }\r\n }\r\n openCalendar() {\r\n if (this.disabled || this.readonly || this.isOpen) return;\r\n this.toggleCalendar();\r\n }\r\n @HostListener(\"document:click\", [\"$event\"])\r\n clickOutside(event: Event) {\r\n if (!this.rootElement.nativeElement.contains(event.target) && this.isOpen) {\r\n this.isOpen = false;\r\n }\r\n }\r\n public closeCalendar() {\r\n this.destroyPopper();\r\n this.isOpen = false;\r\n if (CalendarControl._currentlyOpen === this) {\r\n CalendarControl._currentlyOpen = undefined;\r\n }\r\n }\r\n clearDate(event: Event) {\r\n this.selectionCleared.emit();\r\n event.stopPropagation();\r\n this.selectedDate = null;\r\n if (this._defaultDate) {\r\n const parsed = new Date(this._defaultDate);\r\n if (!isNaN(parsed.getTime())) {\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n }\r\n } else {\r\n this.selectedHour = this.today.getHours();\r\n this.selectedMinute = this.today.getMinutes();\r\n }\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n\r\n this.onChangeFn(null);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(null);\r\n }\r\n}\r\n","<div class=\"form-group calendar\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\" [class.disabled]=\"disabled\">\r\n <label class=\"inp-label\" [ngClass]=\"{'required' : required}\" *ngIf=\"title\">{{ title }}</label>\r\n <div class=\"form-group calendar\" #root (click)=\"openCalendar()\" >\r\n <input type=\"text\" #inputEl [placeholder]=\"(inputPlaceholder && placeholder) ? placeholder : ''\"\r\n [formControl]=\"inputControl\" class=\"form-control\" [ngClass]=\"{ 'is-invalid': error }\" (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\" [readonly]=\"readonly\" (click)=\"openCalendar(); $event.stopPropagation()\" (keydown)=\"onInputKeydown($event)\" />\r\n\r\n <span class=\"focus-border\" *ngIf=\"deFocus\"></span>\r\n <span class=\"calendar-icon\">\r\n <i class=\"he\" [ngClass]=\"!timeOnly ? 'he-calendar-blank' : 'he-clock'\"></i>\r\n </span>\r\n <label class=\"clear\" *ngIf=\"!inputLoader && (selectedDate && !disabled && !readonly) && clearVal\" (click)=\"clearDate($event)\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n <label *ngIf=\"inputLoader\" class=\"loader input-loader\"></label>\r\n <div *ngIf=\"error\" class=\"val-msg\">{{ errorMessage }}</div>\r\n\r\n <div class=\"datepicker-group\" #datePicker *ngIf=\"isOpen\" (click)=\"$event.stopPropagation()\">\r\n \r\n <!-- time picker -->\r\n <ng-container *ngIf=\"timeOnly\">\r\n <div class=\"time-picker\">\r\n <div class=\"time-select\">\r\n <button (click)=\"incrementHour()\"><i class=\"he he-chevron-up\"></i></button>\r\n <ng-container *ngIf=\"hourFormat === '12'; else show24\">\r\n <div class=\"time-value\">\r\n {{ ((selectedHour % 12) || 12) | number:'2.0' }}\r\n </div>\r\n </ng-container>\r\n <ng-template #show24>\r\n <div class=\"time-value\">\r\n {{ selectedHour | number:'2.0' }}\r\n </div>\r\n </ng-template>\r\n\r\n <button (click)=\"decrementHour()\"><i class=\"he he-chevron-down\"></i></button>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <div class=\"time-select\">\r\n <button (click)=\"incrementMinute()\"><i class=\"he he-chevron-up\"></i></button>\r\n <div class=\"time-value\">{{ selectedMinute | number:'2.0' }}</div>\r\n <button (click)=\"decrementMinute()\"><i class=\"he he-chevron-down\"></i></button>\r\n </div>\r\n <div class=\"ampm-toggle\" *ngIf=\"hourFormat === '12'\">\r\n <button type=\"button\" [class.active]=\"meridian === 'AM'\" (click)=\"setMeridian('AM')\">AM</button>\r\n <button type=\"button\" [class.active]=\"meridian === 'PM'\" (click)=\"setMeridian('PM')\">PM</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- day view -->\r\n <ng-container *ngIf=\"!timeOnly && currentView === 'day'\">\r\n <div class=\"header\">\r\n <button class=\"calendar-arrow\" (click)=\"prevMonth()\"><i class=\"he he-chevron-left\"></i></button>\r\n <div class=\"title\" (click)=\"goToMonthView()\">\r\n <div>{{ displayMonthName }}</div>\r\n <div>{{ displayYear }}</div>\r\n </div>\r\n <button class=\"calendar-arrow\" (click)=\"nextMonth()\"><i class=\"he he-chevron-right\"></i></button>\r\n </div>\r\n <div class=\"week-header\">\r\n <div>Sun</div>\r\n <div>Mon</div>\r\n <div>Tue</div>\r\n <div>Wed</div>\r\n <div>Thu</div>\r\n <div>Fri</div>\r\n <div>Sat</div>\r\n </div>\r\n <div class=\"days-grid\">\r\n <div class=\"day-cell\" *ngFor=\"let day of daysInMonth\" (click)=\"selectDay(day)\"\r\n [class.disabled]=\"day !== null && dayClassMap[day].disabled\"\r\n [class.selected]=\"day !== null && dayClassMap[day].selected\" [class.today]=\"\r\n day !== null &&\r\n displayYear === todayYear &&\r\n displayMonth === todayMonth &&\r\n day === todayDate\r\n \">\r\n {{day ? day : ''}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showTime\">\r\n <div class=\"time-picker\">\r\n <div class=\"time-select\">\r\n <button type=\"button\" (click)=\"incrementHour()\">\r\n <i class=\"he he-chevron-up\"></i>\r\n </button>\r\n <ng-container *ngIf=\"hourFormat === '12'; else show24\">\r\n <div class=\"time-value\">\r\n {{\r\n selectedHour % 12 === 0\r\n ? 12\r\n : selectedHour % 12\r\n | number:'2.0' }}\r\n </div>\r\n </ng-container>\r\n <ng-template #show24>\r\n <div class=\"time-value\">{{ selectedHour | number:'2.0' }}</div>\r\n </ng-template>\r\n <button type=\"button\" (click)=\"decrementHour()\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </button>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <div class=\"time-select\">\r\n <button type=\"button\" (click)=\"incrementMinute()\">\r\n <i class=\"he he-chevron-up\"></i>\r\n </button>\r\n <div class=\"time-value\">\r\n {{ selectedMinute < 10 ? '0' +selectedMinute : selectedMinute }} </div>\r\n <button type=\"button\" (click)=\"decrementMinute()\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </button>\r\n </div>\r\n <div class=\"ampm-toggle\" *ngIf=\"hourFormat === '12'\">\r\n <button type=\"button\" [class.active]=\"meridian === 'AM'\" (click)=\"setMeridian('AM')\">AM</button>\r\n <button type=\"button\" [class.active]=\"meridian === 'PM'\" (click)=\"setMeridian('PM')\">PM</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- month view -->\r\n <ng-container *ngIf=\"!timeOnly && currentView === 'month'\">\r\n <div class=\"header\" *ngIf=\"viewMode !== 'month'\">\r\n <button class=\"calendar-arrow\" (click)=\"displayYear = displayYear - 1\"><i\r\n class=\"he he-chevron-left\"></i></button>\r\n <div class=\"title\" (click)=\"goToYearRangeView()\">{{ displayYear }}</div>\r\n <button class=\"calendar-arrow\" (click)=\"displayYear = displayYear + 1\"><i\r\n class=\"he he-chevron-right\"></i></button>\r\n </div>\r\n <div class=\"month-grid\">\r\n <div class=\"month-cell\" *ngFor=\"let m of months; index as i\" (click)=\"selectMonth(i)\">{{ m }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- year range view -->\r\n <ng-container *ngIf=\"!timeOnly && currentView === 'yearRange'\">\r\n <div class=\"header\">\r\n <button class=\"calendar-arrow\" (click)=\"prevYearRange()\"><i class=\"he he-chevron-left\"></i></button>\r\n <div class=\"title\">{{ yearRange[0] }} ~ {{ yearRange[yearRangeSize-1] }}</div>\r\n <button class=\"calendar-arrow\" (click)=\"nextYearRange()\"><i class=\"he he-chevron-right\"></i></button>\r\n </div>\r\n <div class=\"year-grid\">\r\n <div class=\"year-cell\" *ngFor=\"let y of yearRange\" (click)=\"selectYear(y)\">{{ y }}</div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, forwardRef, Renderer2, ElementRef, ViewChild } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl, FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'checkbox-control',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './checkbox-control.component.html'\r\n})\r\nexport class CheckboxControl implements ControlValueAccessor {\r\n\r\n @Input() title!: string;\r\n @Input() customClass: string = '';\r\n @Input() type: 'boolean' | 'number' | 'string' = 'boolean';\r\n @Input() readonly: boolean = false;\r\n @Input() set disabled(value: boolean) { this._disabled = value; this.setDisabledState(value); }\r\n @Output() checkboxChange = new EventEmitter<boolean>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n @ViewChild('checkboxContainer') checkboxContainer!: ElementRef;\r\n\r\n private _disabled = false;\r\n checkboxControl = new FormControl({ value: false, disabled: this._disabled });\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _elementRef: ElementRef\r\n ) {\r\n this.checkboxControl.valueChanges.subscribe(value => {\r\n if (this.readonly) return;\r\n const converted = this.convertType(value);\r\n this.onChange(converted);\r\n this.onTouched();\r\n this.checkboxChange.emit(converted);\r\n });\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value !== undefined && value !== null) {\r\n this.checkboxControl.setValue(this.convertType(value), { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n convertType(value: any): any {\r\n switch (this.type) {\r\n case 'number':\r\n return Number(value == 2 ? 0 : value == 0 ? 2 : value);\r\n case 'string':\r\n return String(value);\r\n default:\r\n return !!value;\r\n }\r\n }\r\n\r\n // events\r\n onFocus(event: FocusEvent) {\r\n const targetElement = event.target as Element;\r\n if (targetElement.matches(':focus-visible')) {\r\n this.checkboxContainer.nativeElement.classList.add('focused');\r\n }\r\n }\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.checkboxContainer.nativeElement.classList.remove('focused');\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\r\n if (isDisabled) {\r\n this.checkboxControl.disable();\r\n } else {\r\n this.checkboxControl.enable();\r\n }\r\n }\r\n\r\n}\r\n","<label class=\"checkbox-container\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\" #checkboxContainer>\r\n <input type=\"checkbox\" [formControl]=\"checkboxControl\" (focus)=\"onFocus($event)\" (blur)=\"onBlur()\" [attr.readonly]=\"readonly ? true : null\" />\r\n <span class=\"checkmark\"></span>{{ title }}\r\n</label>","import { CommonModule } from \"@angular/common\";\r\nimport { Component, Input, Output, EventEmitter, forwardRef, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl, FormsModule } from \"@angular/forms\";\r\nimport { Subscription } from \"rxjs\";\r\n\r\n@Component({\r\n selector: \"input-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: \"./input-control.component.html\",\r\n styleUrls: [\"./input-control.component.scss\"],\r\n})\r\nexport class InputControl implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n @Input() type: | \"text\" | \"password\" | \"decimal\" | \"number\" | \"email\" | \"search\" = \"text\";\r\n @Input() title!: string;\r\n @Input() placeholder: string = \"\";\r\n @Input() customClass: string = '';\r\n @Input() clearVal: boolean = true;\r\n @Input() required: boolean = false;\r\n @Input() deFocus: boolean = true;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = '';\r\n @Input() readonly: boolean = false;\r\n @Input() search: boolean = false;\r\n @Input() price: boolean = false;\r\n @Input() maxlength!: number;\r\n @Input() ngModel!: string;\r\n @Input() advSearch: boolean = false;\r\n @Input() inputLoader: boolean = false;\r\n @Input() useReactiveForms: boolean = true;\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() inputChange = new EventEmitter<string>();\r\n @Output() ngModelChange: EventEmitter<string> = new EventEmitter<string>();\r\n @Output() searchClicked: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() advSearchClicked: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n private _disabled = false;\r\n @Input() set disabled(isDisabled: boolean) {\r\n this._disabled = isDisabled;\r\n this.setDisabledState(isDisabled);\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n private valueChangesSubscription!: Subscription;\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n isFocused: boolean = false;\r\n showPassword: boolean = false;\r\n inputControl = new FormControl(\"\");\r\n\r\n ngOnInit() {\r\n if (this.useReactiveForms) {\r\n this.valueChangesSubscription = this.inputControl.valueChanges.subscribe(\r\n (value) => {\r\n this.onChange(value);\r\n this.inputChange.emit(value ?? \"\");\r\n }\r\n );\r\n }\r\n }\r\n \r\n ngOnDestroy(): void {\r\n if (this.valueChangesSubscription) {\r\n this.valueChangesSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n // input type\r\n getInputType() {\r\n return this.type === \"password\" && this.showPassword ? \"text\" : this.type;\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.useReactiveForms) {\r\n if (value !== undefined) {\r\n this.inputControl.setValue(value, {\r\n emitEvent: false,\r\n });\r\n if (value != '') {\r\n this.onChange(value);\r\n }\r\n }\r\n if (this.inputControl.disabled !== this.disabled) {\r\n this.setDisabledState(this.disabled);\r\n }\r\n } else {\r\n this.ngModel = value;\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.blurEvent.emit();\r\n setTimeout(() => {\r\n this.isFocused = false;\r\n this.onTouched();\r\n if (!this.useReactiveForms) {\r\n this.ngModelChange.emit(this.ngModel);\r\n }\r\n }, 200);\r\n }\r\n onFocus() {\r\n this.isFocused = true;\r\n }\r\n onKeyPress(event: KeyboardEvent) {\r\n let allowedKeys: string[] = [];\r\n\r\n switch (this.type) {\r\n case \"number\":\r\n allowedKeys = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\r\n break;\r\n case \"decimal\":\r\n allowedKeys = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n if (this.search && event.key == \"Enter\") {\r\n this.onSearchClick();\r\n }\r\n if (\r\n (this.type == \"number\" || this.type == \"decimal\") &&\r\n !allowedKeys.includes(event.key)\r\n ) {\r\n event.preventDefault();\r\n return;\r\n }\r\n if (this.maxlength != null && (this.type == \"number\" || this.type == \"decimal\")) {\r\n const currentValue: string = this.inputControl.value ?? \"\";\r\n if (currentValue.length >= this.maxlength) {\r\n event.preventDefault();\r\n return;\r\n }\r\n }\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this._disabled = isDisabled;\r\n if (this._disabled && this.useReactiveForms) {\r\n this.inputControl.disable({\r\n emitEvent: false,\r\n });\r\n } else if (this.useReactiveForms) {\r\n this.inputControl.enable({\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n\r\n // actions\r\n passwordVisible() {\r\n this.showPassword = !this.showPassword;\r\n }\r\n onSearchClick(): void {\r\n this.searchClicked.emit();\r\n }\r\n onAdvSearchClick(): void {\r\n this.advSearchClicked.emit();\r\n }\r\n\r\n // clear\r\n showClearButton() {\r\n return (\r\n this.isFocused &&\r\n this.clearVal &&\r\n this.inputControl.value &&\r\n this.type !== \"password\"\r\n );\r\n }\r\n resetInput() {\r\n this.selectionCleared.emit();\r\n if (this.useReactiveForms) {\r\n this.inputControl.setValue(\"\");\r\n this.inputControl.markAsPristine({ onlySelf: true });\r\n\r\n } else {\r\n this.ngModel = \"\";\r\n this.ngModelChange.emit(this.ngModel);\r\n }\r\n }\r\n}\r\n","<div class=\"form-group input\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n @if (useReactiveForms) {\r\n <input [type]=\"getInputType()\" class=\"form-control\" [placeholder]=\"placeholder\" [formControl]=\"inputControl\"\r\n [ngClass]=\"{ 'is-invalid': error }\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [readonly]=\"readonly\"\r\n (keypress)=\"onKeyPress($event)\" [attr.autocomplete]=\"autocomplete || null\" />\r\n } @else {\r\n <input [type]=\"getInputType()\" class=\"form-control\" [placeholder]=\"placeholder\" [(ngModel)]=\"ngModel\"\r\n [ngClass]=\"{ 'is-invalid': error }\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [readonly]=\"readonly\"\r\n (keypress)=\"onKeyPress($event)\" />\r\n }\r\n @if(deFocus){\r\n <span class=\"focus-border\"></span>\r\n }\r\n @if (!inputLoader && showClearButton()) {\r\n <label class=\"clear\" (click)=\"resetInput()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n\r\n @if (price) {\r\n <label class=\"ls-price\">\r\n <i class=\"he he-rupee\"></i>\r\n </label>\r\n }\r\n\r\n @if (type === 'search') {\r\n <label class=\"ls-search\">\r\n <i class=\"he he-search\"></i>\r\n </label>\r\n }\r\n\r\n @if (advSearch) {\r\n <label class=\"rs-search\" (click)=\"onAdvSearchClick()\">\r\n <i class=\"he he-search-adv\"></i>\r\n </label>\r\n }\r\n\r\n @if (search) {\r\n <label class=\"rs-search\" (click)=\"onSearchClick()\">\r\n <i class=\"he he-search\"></i>\r\n </label>\r\n }\r\n\r\n @if (type === 'password' && !disabled) {\r\n <label class=\"toggle-eye\" (click)=\"passwordVisible()\">\r\n <i class=\"he\" [ngClass]=\"showPassword ? 'he-eye-off' : 'he-eye'\"></i>\r\n </label>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Output,\r\n inject,\r\n DestroyRef,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { fromEvent } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[clickOutside]',\r\n standalone: true,\r\n})\r\nexport class ClickOutsideDirective {\r\n @Output() clickOutside = new EventEmitter<MouseEvent>();\r\n\r\n private host = inject(ElementRef);\r\n private document = inject(DOCUMENT);\r\n private destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n fromEvent<MouseEvent>(this.document, 'click')\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((event: MouseEvent) => {\r\n const clickedInside = this.host.nativeElement.contains(event.target);\r\n if (!clickedInside) {\r\n this.clickOutside.emit(event);\r\n }\r\n });\r\n }\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport {\r\n Component, Input, Output, EventEmitter, forwardRef, OnInit, OnDestroy, ViewChild,\r\n ElementRef, HostListener, SimpleChanges, ChangeDetectorRef\r\n} from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, FormControl, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { debounceTime, distinctUntilChanged, Subject, Subscription } from \"rxjs\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\nimport { ClickOutsideDirective } from \"../../../directives/clickoutside.directive\";\r\n\r\n@Component({\r\n selector: \"multiselect-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ClickOutsideDirective\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => MultiselectControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: \"./multiselect-control.component.html\",\r\n styleUrls: [\"./multiselect-control.component.scss\"],\r\n})\r\nexport class MultiselectControl\r\n implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n private subscription: Subscription = new Subscription();\r\n\r\n @Input() title!: string;\r\n @Input() selectedItems: any[] = [];\r\n @Input() required: boolean = false;\r\n @Input() placeholder!: string;\r\n @Input() customClass: string = '';\r\n @Input() clearVal: boolean = true;\r\n @Input() deFocus: boolean = true;\r\n @Input() optionValueProperty: string = \"id\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = \"\";\r\n @Input() showSearch: boolean = false;\r\n @Input() optionDisplayProperty: string = \"displayname\";\r\n @Output() optionsSelected = new EventEmitter<any[]>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n inputControl: FormControl = new FormControl({ value: \"\", disabled: false });\r\n private _options: any[] = [];\r\n @Input()\r\n public set options(arr: any[]) {\r\n this._options = Array.isArray(arr) ? arr : [];\r\n this.filteredOptions = [...this._options];\r\n\r\n // If we previously received an array of primitive IDs, attempt to map them now that options have arrived\r\n if (this._isPrimitivePatch && this._pendingPrimitiveValues.length > 0) {\r\n this._mapPrimitivesToObjects();\r\n }\r\n\r\n this._recomputeSelectAllState();\r\n }\r\n public get options(): any[] {\r\n return this._options;\r\n }\r\n private _disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n private _isPrimitivePatch: boolean = false;\r\n private _pendingPrimitiveValues: any[] = [];\r\n private onChange: (value: any) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n @ViewChild(\"dropdown\", { static: false }) dropdown!: ElementRef;\r\n @ViewChild(\"input\", { static: false }) input!: ElementRef;\r\n\r\n filteredOptions: any[] = [];\r\n isDropdownOpen: boolean = false;\r\n selectAllChecked: boolean = false;\r\n keySearch: string = \"\";\r\n onSearch = new Subject<string>();\r\n selectedItemList: string = \"\";\r\n highlightedIndex: number | null = null;\r\n\r\n private dropdownInitialized = false;\r\n private popperInstance!: PopperInstance;\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n // Subscribe to search‐term changes, debounce, then filter\r\n this.subscription = this.onSearch\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((searchText) => {\r\n this._applyFilter(searchText);\r\n this._recomputeSelectAllState();\r\n });\r\n\r\n // Initialize filteredOptions to match all options\r\n this.filteredOptions = [...this.options];\r\n }\r\n\r\n ngAfterViewChecked() {\r\n if (this.isDropdownOpen && !this.dropdownInitialized) {\r\n this._createPopperInstance();\r\n this.dropdownInitialized = true;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes[\"options\"]) {\r\n // When the parent replaces “options,” we reapply any filtering and “select all” logic\r\n this.filteredOptions = [...this.options];\r\n this._recomputeSelectAllState();\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n // If parent gave us something that is not an array, clear selection\r\n if (!Array.isArray(value)) {\r\n this._isPrimitivePatch = false;\r\n this._pendingPrimitiveValues = [];\r\n this.selectedItems = [];\r\n this.selectedItemList = \"\";\r\n this.selectAllChecked = false;\r\n return;\r\n }\r\n\r\n // CASE A: array of primitive IDs, e.g. [12,17]\r\n if (\r\n value.length > 0 &&\r\n (typeof value[0] === \"string\" || typeof value[0] === \"number\")\r\n ) {\r\n this._isPrimitivePatch = true;\r\n this._pendingPrimitiveValues = [...value];\r\n this._mapPrimitivesToObjects();\r\n this._recomputeSelectAllState();\r\n return;\r\n }\r\n\r\n // CASE B: array of full objects (with `id` or whatever `optionValueProperty` is)\r\n if (\r\n value.length > 0 &&\r\n typeof value[0] === \"object\" &&\r\n value[0][this.optionValueProperty] != null\r\n ) {\r\n // Convert to an array of IDs, then treat exactly like CASE A\r\n const idArray = (value as any[]).map(\r\n (obj) => obj[this.optionValueProperty]\r\n );\r\n this._isPrimitivePatch = true;\r\n this._pendingPrimitiveValues = idArray;\r\n this._mapPrimitivesToObjects();\r\n this._recomputeSelectAllState();\r\n return;\r\n }\r\n\r\n // CASE C: maybe parent passed the exact same object references that already exist in `options`\r\n // In that case, we can just use them directly.\r\n this._isPrimitivePatch = false;\r\n this._pendingPrimitiveValues = [];\r\n this.selectedItems = [...value];\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n this.onChange(this.selectedItems);\r\n this._recomputeSelectAllState();\r\n }\r\n\r\n private _mapPrimitivesToObjects() {\r\n if (\r\n !this._isPrimitivePatch ||\r\n this._pendingPrimitiveValues.length === 0 ||\r\n this._options.length === 0\r\n ) {\r\n return;\r\n }\r\n\r\n // Find matching option‐objects whose ID property is in the pending list\r\n const matched = this._options.filter((opt) =>\r\n this._pendingPrimitiveValues.includes(opt[this.optionValueProperty])\r\n );\r\n\r\n this.selectedItems = matched;\r\n this.selectedItemList = matched\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n // Notify “onChange” with the full‐object selection\r\n this.onChange(this.selectedItems);\r\n\r\n this._isPrimitivePatch = false;\r\n this._pendingPrimitiveValues = [];\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n isSelected(option: any): boolean {\r\n return (\r\n Array.isArray(this.selectedItems) && this.selectedItems.includes(option)\r\n );\r\n }\r\n onBlur(event: FocusEvent) {\r\n this.blurEvent.emit();\r\n // const target = event.relatedTarget as HTMLElement;\r\n // if (\r\n // target &&\r\n // (target.closest(\".option-list\") || target.closest(\".list-filter\"))\r\n // ) {\r\n // return;\r\n // }\r\n this.onTouched();\r\n // setTimeout(() => {\r\n // this.isDropdownOpen = false;\r\n // }, 100);\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (isDisabled) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n // search box\r\n handleInput(event: Event) {\r\n const txt = (event.target as HTMLInputElement).value;\r\n this.onSearch.next(txt);\r\n }\r\n private _applyFilter(value: string) {\r\n const lower = value.toLowerCase();\r\n this.filteredOptions = this._options\r\n .filter((opt) =>\r\n opt[this.optionDisplayProperty]?.toLowerCase().includes(lower)\r\n )\r\n .sort((a, b) => {\r\n const aIndex = a[this.optionDisplayProperty]\r\n .toLowerCase()\r\n .indexOf(lower);\r\n const bIndex = b[this.optionDisplayProperty]\r\n .toLowerCase()\r\n .indexOf(lower);\r\n return aIndex - bIndex;\r\n });\r\n\r\n // If an item was previously selected but is no longer in filteredOptions, remove it temporarily\r\n this.selectedItems = this.selectedItems.filter((item) =>\r\n this.filteredOptions.includes(item)\r\n );\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n this.onChange(this.selectedItems);\r\n this.optionsSelected.emit(this.selectedItems);\r\n if (this.filteredOptions.length > 0) {\r\n this.highlightedIndex = this._options.indexOf(this.filteredOptions[0]);\r\n } else {\r\n this.highlightedIndex = null;\r\n }\r\n\r\n this._recomputeSelectAllState();\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n // checkbox events\r\n private _recomputeSelectAllState() {\r\n if (!this.filteredOptions || this.filteredOptions.length === 0) {\r\n this.selectAllChecked = false;\r\n return;\r\n }\r\n this.selectAllChecked = this.filteredOptions.every((opt) =>\r\n this.selectedItems.includes(opt)\r\n );\r\n }\r\n onSelectAllChange(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n this.selectAllChecked = input.checked;\r\n this._toggleSelectAll();\r\n }\r\n private _toggleSelectAll() {\r\n if (this.selectAllChecked) {\r\n // Add all currently filtered options to selection\r\n this.selectedItems = Array.from(\r\n new Set([...this.selectedItems, ...this.filteredOptions])\r\n );\r\n } else {\r\n // Remove all filtered options from selection\r\n this.selectedItems = this.selectedItems.filter(\r\n (item) => !this.filteredOptions.includes(item)\r\n );\r\n }\r\n\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n this.onChange(this.selectedItems);\r\n this.optionsSelected.emit(this.selectedItems);\r\n }\r\n removeSelectedOption(option: any) {\r\n this.selectedItems = this.selectedItems.filter((item) => item !== option);\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n this.onChange(this.selectedItems);\r\n this.onTouched();\r\n this.optionsSelected.emit(this.selectedItems);\r\n }\r\n toggleCheckbox(option: any) {\r\n if (this.isSelected(option)) {\r\n this.selectedItems = this.selectedItems.filter((item) => item !== option);\r\n } else {\r\n this.selectedItems = [...this.selectedItems, option];\r\n }\r\n\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n // Update “select all” checkbox\r\n this._recomputeSelectAllState();\r\n\r\n // Notify form that selection changed\r\n this.onChange(this.selectedItems);\r\n this.onTouched();\r\n this.optionsSelected.emit(this.selectedItems);\r\n }\r\n\r\n // Keyboard navigation inside the dropdown\r\n onKeyDown(event: KeyboardEvent) {\r\n if (this.isDropdownOpen) {\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this._highlightNext();\r\n event.preventDefault();\r\n break;\r\n case \"ArrowUp\":\r\n this._highlightPrevious();\r\n event.preventDefault();\r\n break;\r\n case \"Enter\":\r\n if (\r\n this.highlightedIndex !== null &&\r\n this.highlightedIndex < this.filteredOptions.length\r\n ) {\r\n this.toggleCheckbox(this.filteredOptions[this.highlightedIndex]);\r\n }\r\n event.preventDefault();\r\n break;\r\n case \"Escape\":\r\n this.isDropdownOpen = false;\r\n break;\r\n case \"Tab\":\r\n this.isDropdownOpen = false;\r\n break;\r\n }\r\n } else if (event.key === \" \") {\r\n this.toggleDropdown();\r\n event.preventDefault();\r\n }\r\n }\r\n @HostListener(\"window:keydown\", [\"$event\"])\r\n handleWindowKeydown(event: KeyboardEvent) {\r\n if (event.key === \"Tab\") {\r\n this.isDropdownOpen = false;\r\n }\r\n }\r\n private _highlightNext() {\r\n if (\r\n this.highlightedIndex === null ||\r\n this.highlightedIndex === this.filteredOptions.length - 1\r\n ) {\r\n this.highlightedIndex = 0;\r\n } else {\r\n this.highlightedIndex!++;\r\n }\r\n this._scrollToHighlighted();\r\n }\r\n private _highlightPrevious() {\r\n if (this.highlightedIndex === null || this.highlightedIndex === 0) {\r\n this.highlightedIndex = this.filteredOptions.length - 1;\r\n } else {\r\n this.highlightedIndex!--;\r\n }\r\n this._scrollToHighlighted();\r\n }\r\n private _scrollToHighlighted() {\r\n setTimeout(() => {\r\n const container = document.querySelector(\".option-list\");\r\n if (!container) return;\r\n const highlighted = container.querySelector(\".highlighted\");\r\n if (highlighted) {\r\n (highlighted as HTMLElement).scrollIntoView({ block: \"nearest\" });\r\n }\r\n }, 0);\r\n }\r\n\r\n // popper\r\n private _createPopperInstance() {\r\n if (!this.dropdown || !this.input) return;\r\n this.popperInstance = createPopper(\r\n this.input.nativeElement,\r\n this.dropdown.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, 1],\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top-start\", \"bottom-start\"],\r\n },\r\n },\r\n ],\r\n }\r\n );\r\n }\r\n\r\n // toggle, reset, close and clear\r\n toggleDropdown() {\r\n if (this.inputControl.disabled || this.readonly) return;\r\n this.isDropdownOpen = !this.isDropdownOpen;\r\n this.dropdownInitialized = false;\r\n if (this.isDropdownOpen) {\r\n this.filteredOptions = [...this.options];\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n selectListOutsideClick() {\r\n this.isDropdownOpen = false;\r\n }\r\n resetSelection() {\r\n this.selectedItems = [];\r\n this.selectedItemList = \"\";\r\n this.onChange([]);\r\n this.onTouched();\r\n this.isDropdownOpen = false;\r\n this.selectAllChecked = false;\r\n this.selectionCleared.emit();\r\n }\r\n onCloseDropdown(): void {\r\n this.isDropdownOpen = false;\r\n this._recomputeSelectAllState();\r\n }\r\n}\r\n","<div class=\"form-group multi-select\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\" (clickOutside)=\"selectListOutsideClick()\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n <input #input type=\"text\" class=\"form-control\" placeholder=\"{{ placeholder }}\" [formControl]=\"inputControl\"\r\n [ngClass]=\"{'is-invalid': error}\" (blur)=\"onBlur($event)\" (click)=\"toggleDropdown()\" readonly\r\n [value]=\"selectedItemList\" (keydown)=\"onKeyDown($event)\" [attr.autocomplete]=\"autocomplete || null\" />\r\n\r\n @if (deFocus) {\r\n <span class=\"focus-border\"></span>\r\n }\r\n\r\n @if (!inputLoader && isDropdownOpen && clearVal && selectedItems.length > 0) {\r\n <label class=\"clear\" (click)=\"resetSelection()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n\r\n @if (!inputLoader) {\r\n <label class=\"arrow\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </label> }\r\n\r\n @if (isDropdownOpen) {\r\n <div #dropdown class=\"option-list\">\r\n @if (showSearch && options.length > 3) {\r\n <div class=\"list-filter\">\r\n <div>\r\n <label class=\"checkbox-container select-all\">\r\n <input type=\"checkbox\" [checked]=\"selectAllChecked\" (change)=\"onSelectAllChange($event)\" tabindex=\"-1\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n <div class=\"form-group\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search...\" (input)=\"handleInput($event) \"\r\n (keydown)=\"onKeyDown($event)\" />\r\n </div>\r\n <div class=\"ms-close\">\r\n <button type=\"button\" class=\"icon-button\">\r\n <a (click)=\"onCloseDropdown()\"><i class=\"he he-close\"></i></a>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"list-wrap\">\r\n @for (option of filteredOptions; track option[optionDisplayProperty]; let i = $index) {\r\n <div class=\"list-item\" (change)=\"toggleCheckbox(option)\" [ngClass]=\"{ 'highlighted': i === highlightedIndex }\">\r\n <label class=\"checkbox-container multi-select\">\r\n <input type=\"checkbox\" [checked]=\"isSelected(option)\" tabindex=\"-1\" />\r\n <span class=\"checkmark\"></span>\r\n {{ option[optionDisplayProperty] }}\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (filteredOptions.length === 0) {\r\n <div class=\"no-results\">No results found</div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import { CommonModule } from \"@angular/common\";\r\nimport { Component, Input, Output, EventEmitter, forwardRef, OnInit, OnDestroy, ElementRef, ViewChild, SimpleChanges } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl } from \"@angular/forms\";\r\nimport { debounceTime, distinctUntilChanged, Subject, Subscription } from \"rxjs\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\nimport { ClickOutsideDirective } from \"../../../directives/clickoutside.directive\";\r\n\r\n@Component({\r\n selector: \"select-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ClickOutsideDirective\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: \"./select-control.component.html\",\r\n styleUrls: [\"./select-control.component.scss\"],\r\n})\r\nexport class SelectControl implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n private subscription: Subscription = new Subscription();\r\n\r\n @Input() optionDisplayProperty: string = \"displayname\";\r\n @Input() required: boolean = false;\r\n @Input() placeholder!: string;\r\n @Input() customClass: string = '';\r\n @Input() clearVal: boolean = true;\r\n @Input() deFocus: boolean = true;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = \"\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() isAddNewItem: boolean = false;\r\n @Output() optionSelected = new EventEmitter<any>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() addNewItemClicked: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() optionPatched = new EventEmitter<any>();\r\n\r\n @Input() title!: string;\r\n private _options: any[] = [];\r\n @Input()\r\n set options(opts: any[]) {\r\n this._options = opts;\r\n this.filteredOptions = [...this._options];\r\n this.highlightSelectedItem();\r\n this.processValueBuffer();\r\n }\r\n get options(): any[] {\r\n return this._options;\r\n }\r\n @Input() readonly: boolean = false;\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n @ViewChild(\"dropdown\", { static: false }) dropdown!: ElementRef;\r\n @ViewChild(\"input\", { static: false }) input!: ElementRef;\r\n\r\n filteredOptions: any[] = [];\r\n keySearch: string = \"\";\r\n selectedItem: any = null;\r\n onSearch = new Subject<string>();\r\n inputControl: FormControl = new FormControl({ value: \"\", disabled: false });\r\n isDropdownOpen = false;\r\n highlightedIndex: number | null = null;\r\n\r\n private onChange: (value: any) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n private valueBuffer: any = null;\r\n private _disabled: boolean = false;\r\n private dropdownInitialized = false;\r\n\r\n private popperInstance!: PopperInstance;\r\n\r\n ngOnInit() {\r\n this.subscription = this.onSearch\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((searchText) => {\r\n this.focusOption(searchText);\r\n this.keySearch = \"\";\r\n });\r\n\r\n this.filteredOptions = this._options;\r\n\r\n // Sync the input control value with the selected item\r\n this.inputControl.valueChanges.subscribe((value) => {\r\n this.onChange(value);\r\n });\r\n }\r\n\r\n ngAfterViewChecked() {\r\n if (this.isDropdownOpen && !this.dropdownInitialized) {\r\n this.createPopperInstance();\r\n this.dropdownInitialized = true;\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes[\"options\"]) {\r\n this.filteredOptions = [...this._options];\r\n this.highlightSelectedItem();\r\n }\r\n if (changes[\"disabled\"]) {\r\n this.disabled = changes[\"disabled\"].currentValue;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.inputControl.disabled !== this.disabled) {\r\n this.setDisabledState(this.disabled);\r\n }\r\n this.valueBuffer = value;\r\n this.processValueBuffer();\r\n }\r\n\r\n processValueBuffer(): void {\r\n if (\r\n this.valueBuffer !== null &&\r\n this._options &&\r\n this._options.length > 0\r\n ) {\r\n // Try to match selected item by ID\r\n const matchedItem = this._options.find(\r\n (option) => option.id === this.valueBuffer\r\n );\r\n\r\n if (matchedItem) {\r\n this.selectedItem = matchedItem;\r\n const displayValue = matchedItem[this.optionDisplayProperty];\r\n this.inputControl.setValue(displayValue, { emitEvent: false });\r\n this.filteredOptions = [...this._options];\r\n this.onTouched();\r\n this.inputControl.markAsDirty();\r\n this.optionPatched.emit(this.selectedItem);\r\n } else {\r\n // If not found, don't clear the field automatically\r\n // You may choose to keep it or clear it. Here we clear it.\r\n this.selectedItem = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.highlightedIndex = null;\r\n }\r\n } else if (this.valueBuffer === null) {\r\n this.selectedItem = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n setTimeout(() => {\r\n this.isDropdownOpen = false;\r\n }, 300);\r\n }\r\n onKeyDown(event: KeyboardEvent) {\r\n const isAlphabetOrNumberKey = /^[a-zA-Z0-9]$/.test(event.key);\r\n if (this.isDropdownOpen) {\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this.highlightNext();\r\n event.preventDefault();\r\n break;\r\n case \"ArrowUp\":\r\n this.highlightPrevious();\r\n event.preventDefault();\r\n break;\r\n case \"Enter\":\r\n if (this.highlightedIndex !== null) {\r\n this.selectOption(this.filteredOptions[this.highlightedIndex]);\r\n }\r\n event.preventDefault();\r\n break;\r\n case \"Escape\":\r\n this.isDropdownOpen = false;\r\n break;\r\n default:\r\n if (isAlphabetOrNumberKey) {\r\n this.keySearch += event.key.toString();\r\n if (this.keySearch !== \"\") {\r\n this.onSearch.next(this.keySearch);\r\n }\r\n }\r\n break;\r\n }\r\n } else if (event.key === \" \") {\r\n this.toggleDropdown();\r\n event.preventDefault();\r\n }\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (this.disabled) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n selectOption(option: any) {\r\n if (this.selectedItem !== option) {\r\n this.selectedItem = option;\r\n this.isDropdownOpen = false;\r\n const displayValue = this.selectedItem[this.optionDisplayProperty];\r\n this.inputControl.setValue(displayValue, { emitEvent: false });\r\n this.onChange(this.selectedItem.id);\r\n this.onTouched();\r\n this.inputControl.markAsDirty();\r\n this.optionSelected.emit(this.selectedItem);\r\n }\r\n }\r\n\r\n // highlight\r\n highlightSelectedItem() {\r\n const selectedIndex = this.filteredOptions.findIndex(\r\n (option) => option === this.selectedItem\r\n );\r\n if (selectedIndex !== -1) {\r\n this.highlightedIndex = selectedIndex;\r\n this.scrollToHighlighted();\r\n } else {\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n highlightNext() {\r\n if (\r\n this.highlightedIndex === null ||\r\n this.highlightedIndex === this.filteredOptions.length - 1\r\n ) {\r\n this.highlightedIndex = 0;\r\n } else {\r\n this.highlightedIndex++;\r\n }\r\n this.scrollToHighlighted();\r\n }\r\n highlightPrevious() {\r\n if (this.highlightedIndex === null || this.highlightedIndex === 0) {\r\n this.highlightedIndex = this.filteredOptions.length - 1;\r\n } else {\r\n this.highlightedIndex--;\r\n }\r\n this.scrollToHighlighted();\r\n }\r\n focusOption(value: string) {\r\n const filterValue = value.toLowerCase();\r\n let foundIndex = this._options.findIndex(\r\n (option) =>\r\n option[this.optionDisplayProperty]?.toLowerCase() === filterValue\r\n );\r\n if (foundIndex === -1) {\r\n foundIndex = this._options.findIndex((option) =>\r\n option[this.optionDisplayProperty]\r\n ?.toLowerCase()\r\n .startsWith(filterValue)\r\n );\r\n }\r\n if (foundIndex === -1) {\r\n foundIndex = this._options.findIndex((option) =>\r\n option[this.optionDisplayProperty]?.toLowerCase().includes(filterValue)\r\n );\r\n }\r\n\r\n if (foundIndex !== -1) {\r\n this.highlightedIndex = foundIndex;\r\n this.scrollToHighlighted();\r\n } else {\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n scrollToHighlighted() {\r\n setTimeout(() => {\r\n const container = document.querySelector(\".option-list\");\r\n if (container) {\r\n const highlighted = container.querySelector(\".highlighted\");\r\n if (highlighted) {\r\n highlighted.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }\r\n }, 0);\r\n }\r\n\r\n // actions\r\n onAddNewItemClick(): void {\r\n this.addNewItemClicked.emit();\r\n }\r\n\r\n // popper\r\n createPopperInstance() {\r\n if (this.dropdown) {\r\n this.popperInstance = createPopper(\r\n this.input.nativeElement,\r\n this.dropdown.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, 1],\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top-start\", \"bottom-start\"],\r\n },\r\n },\r\n ],\r\n }\r\n );\r\n }\r\n }\r\n\r\n // toggle, open, hide, reset and clear\r\n toggleDropdown() {\r\n if (!this.inputControl.disabled && !this.readonly) {\r\n this.isDropdownOpen = !this.isDropdownOpen;\r\n this.dropdownInitialized = false;\r\n if (this.isDropdownOpen && this.selectedItem) {\r\n this.highlightSelectedItem();\r\n }\r\n }\r\n }\r\n openDropdown(event: KeyboardEvent) {\r\n if (event.ctrlKey && event.key === \"Enter\") {\r\n this.toggleDropdown();\r\n }\r\n }\r\n selectListOutsideClick(e: Event) {\r\n this.isDropdownOpen = false;\r\n }\r\n hideDropdown() {\r\n setTimeout(() => {\r\n this.isDropdownOpen = false;\r\n }, 200);\r\n }\r\n resetSelection() {\r\n this.selectionCleared.emit();\r\n this.selectedItem = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.onChange(null);\r\n this.onTouched();\r\n this.valueBuffer = null;\r\n this.isDropdownOpen = false;\r\n }\r\n}\r\n","<div class=\"form-group select\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\" (clickOutside)=\"selectListOutsideClick($event)\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"placeholder ? placeholder : ''\"\r\n [formControl]=\"inputControl\" [ngClass]=\"{ 'is-invalid': error }\" (blur)=\"onBlur()\" (click)=\"toggleDropdown()\"\r\n (keydown)=\"onKeyDown($event)\" readonly [attr.autocomplete]=\"autocomplete || null\" />\r\n\r\n @if (deFocus) {\r\n <span class=\"focus-border\"></span>\r\n }\r\n\r\n @if (!inputLoader && isDropdownOpen && selectedItem && clearVal) {\r\n <label class=\"clear\" (click)=\"resetSelection()\">\r\n <i class=\"he he-close\"></i>\r\n </label> }\r\n @if (!inputLoader) {\r\n <label class=\"arrow\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </label>\r\n }\r\n\r\n @if (isDropdownOpen) {\r\n <div #dropdown class=\"option-list\">\r\n <div class=\"no-results\" *ngIf=\"filteredOptions.length === 0\">\r\n <div>No results found</div>\r\n <div *ngIf=\"isAddNewItem\" (click)=\"onAddNewItemClick()\" class=\"btn-new\">Add New Item</div>\r\n </div>\r\n\r\n @for (option of filteredOptions; track option[optionDisplayProperty]; let idx = $index) {\r\n <div class=\"list-item\" [ngClass]=\"{\r\n 'active': option === selectedItem,\r\n 'highlighted': idx === highlightedIndex\r\n }\" (click)=\"selectOption(option)\">\r\n @if (option.countryCode) {\r\n <img src=\"https://flagcdn.com/w80/{{ option.countryCode }}.png\" width=\"20\" alt=\"{{ option.countryCode }} flag\" loading=\"lazy\" />\r\n }\r\n {{ option[optionDisplayProperty] }}\r\n </div>\r\n }\r\n\r\n </div>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import { Component, Input, Output, EventEmitter, forwardRef, Renderer2, ElementRef, ViewChild } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'switch-control',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SwitchControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './switch-control.component.html',\r\n styleUrls: ['./switch-control.component.scss']\r\n})\r\nexport class SwitchControl implements ControlValueAccessor {\r\n\r\n @Input() title!: string;\r\n @Input() customClass: string = '';\r\n @Input() readonly: boolean = false;\r\n @Input() set disabled(value: boolean) {\r\n this._disabled = value;\r\n this.setDisabledState(value);\r\n }\r\n @Input()\r\n set checked(value: boolean) {\r\n this._checked = value;\r\n this.switchControl.setValue(value, { emitEvent: false }); // set without emitting\r\n }\r\n @Output() switchChange = new EventEmitter<boolean>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n @ViewChild('switchContainer') switchContainer!: ElementRef;\r\n\r\n get checked(): boolean {\r\n return this._checked;\r\n }\r\n\r\n private _checked: boolean = false;\r\n private _disabled = false;\r\n switchControl = new FormControl<boolean>({ value: false, disabled: this._disabled });\r\n\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _elementRef: ElementRef\r\n ) {\r\n this.switchControl.valueChanges.subscribe(value => {\r\n if (this.readonly) return;\r\n this.onChange(value ?? false);\r\n this.onTouched();\r\n this.switchChange.emit(value ?? false);\r\n });\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value !== undefined) {\r\n this.switchControl.setValue(value, { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onFocus() {\r\n this.switchContainer.nativeElement.classList.add('focused');\r\n }\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n this.switchContainer.nativeElement.classList.remove('focused');\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\r\n if (isDisabled) {\r\n this.switchControl.disable();\r\n } else {\r\n this.switchControl.enable();\r\n }\r\n }\r\n\r\n}\r\n","<label class=\"switch-container\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\" #switchContainer>\r\n <input type=\"checkbox\" [formControl]=\"switchControl\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\r\n <span class=\"switch-slider\"></span>\r\n</label>","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n ElementRef,\n ViewChild,\n AfterViewInit,\n HostListener,\n forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Lightweight rich-text editor built on a `contenteditable` element and the\n * browser's `document.execCommand` rich-editing API (the de-facto standard for\n * simple in-browser editors).\n *\n * Implemented as a `ControlValueAccessor`, so it works with `[(ngModel)]`,\n * `formControlName` and `[formControl]`. The emitted value is the editor's\n * inner HTML string.\n */\n@Component({\n selector: 'app-text-editor',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './text-editor.component.html',\n styleUrl: './text-editor.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextEditor),\n multi: true,\n },\n ],\n})\nexport class TextEditor implements ControlValueAccessor, AfterViewInit {\n\n @Input() header = true;\n @Input() media = true;\n @Input() link = true;\n @Input() placeholder = 'Type here...';\n @Input() readonly = false;\n\n /** Disabled state, set by Reactive Forms through `setDisabledState`. */\n disabled = false;\n\n @ViewChild('editor') editorRef!: ElementRef<HTMLDivElement>;\n\n private onChange: (value: string) => void = () => { };\n private onTouch: () => void = () => { };\n\n /** HTML received via `writeValue` before the view (and `editorRef`) is ready. */\n private pendingValue = '';\n private viewInitialized = false;\n\n /** Last selection range observed inside the editor (restored before commands). */\n private savedRange: Range | null = null;\n\n ngAfterViewInit(): void {\n this.viewInitialized = true;\n this.editorRef.nativeElement.innerHTML = this.pendingValue;\n }\n\n // ---- ControlValueAccessor ----\n writeValue(value: string): void {\n this.pendingValue = value ?? '';\n if (this.viewInitialized && this.editorRef) {\n this.editorRef.nativeElement.innerHTML = this.pendingValue;\n }\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // ---- Editor events (wired from the template) ----\n onInput(): void {\n this.onChange(this.editorRef.nativeElement.innerHTML);\n }\n onTouched(): void {\n this.onTouch();\n }\n\n /** Remember the caret/selection whenever it sits inside the editor. */\n @HostListener('document:selectionchange')\n saveSelection(): void {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0 || !this.editorRef) return;\n const range = selection.getRangeAt(0);\n if (this.editorRef.nativeElement.contains(range.commonAncestorContainer)) {\n this.savedRange = range.cloneRange();\n }\n }\n\n // ---- Inline formatting ----\n applyInlineStyle(style: 'bold' | 'italic' | 'underline'): void {\n this.exec(style);\n }\n\n // ---- Block formatting (headings / paragraph) ----\n applyBlockFormat(block: 'h1' | 'h2' | 'p'): void {\n this.exec('formatBlock', `<${block}>`);\n }\n\n // ---- Lists ----\n applyList(listType: 'ul' | 'ol'): void {\n this.exec(listType === 'ul' ? 'insertUnorderedList' : 'insertOrderedList');\n }\n\n // ---- Indentation ----\n indent(): void {\n this.exec('indent');\n }\n outdent(): void {\n this.exec('outdent');\n }\n\n // ---- Alignment ----\n setAlignment(alignment: 'left' | 'center' | 'right' | 'justify'): void {\n const command = {\n left: 'justifyLeft',\n center: 'justifyCenter',\n right: 'justifyRight',\n justify: 'justifyFull',\n }[alignment];\n this.exec(command);\n }\n\n // ---- Color / highlight ----\n applyColor(event: Event): void {\n this.exec('foreColor', (event.target as HTMLInputElement).value, true);\n }\n applyHighlight(event: Event): void {\n this.exec('hiliteColor', (event.target as HTMLInputElement).value, true);\n }\n\n // ---- Links / images ----\n createLink(): void {\n const url = prompt('Enter URL', 'https://');\n if (!url) return;\n this.exec('createLink', url);\n }\n insertImage(): void {\n const url = prompt('Enter image URL:');\n if (!url) return;\n this.exec('insertImage', url);\n }\n\n // ---- Undo / redo / clear ----\n undo(): void {\n this.exec('undo');\n }\n redo(): void {\n this.exec('redo');\n }\n clearFormatting(): void {\n this.exec('removeFormat');\n }\n\n /**\n * Focus the editor, restore the last selection, run a rich-text command and\n * propagate the resulting HTML. No-op while readonly/disabled.\n */\n private exec(command: string, value?: string, useCss = false): void {\n if (this.disabled || this.readonly) return;\n this.editorRef.nativeElement.focus();\n this.restoreSelection();\n // `useCss` keeps colors as inline styles; semantic tags (<b>, <i>…) otherwise.\n document.execCommand('styleWithCSS', false, String(useCss));\n document.execCommand(command, false, value);\n this.onInput();\n }\n\n private restoreSelection(): void {\n if (!this.savedRange) return;\n const selection = window.getSelection();\n if (!selection) return;\n selection.removeAllRanges();\n selection.addRange(this.savedRange);\n }\n}\n","<div class=\"text-editor\" [ngClass]=\"{'readonly': readonly || disabled}\">\n <div class=\"toolbar\" *ngIf=\"!readonly && !disabled\">\n <div class=\"toolbar-items\">\n <button type=\"button\" (click)=\"applyInlineStyle('bold')\" tooltip=\"Bold\">\n <i class=\"he he-bold\"></i>\n </button>\n <button type=\"button\" (click)=\"applyInlineStyle('italic')\" tooltip=\"italic\">\n <i class=\"he he-italics\"></i>\n </button>\n <button type=\"button\" (click)=\"applyInlineStyle('underline')\" tooltip=\"Underline\">\n <i class=\"he he-underline\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\" *ngIf=\"header\">\n <button type=\"button\" (click)=\"applyBlockFormat('h1')\" tooltip=\"Header 1\">\n <i class=\"he he-heading-1\"></i>\n </button>\n <button type=\"button\" (click)=\"applyBlockFormat('h2')\" tooltip=\"Header 2\">\n <i class=\"he he-heading-2\"></i>\n </button>\n </div>\n <div class=\"toolbar-items more-gap\">\n <div class=\"input-wrap\" tooltip=\"Text Color\">\n <i class=\"he he-text-drop\"></i>\n <input type=\"color\" (change)=\"applyColor($event)\" />\n </div>\n <div class=\"input-wrap\" tooltip=\"Background Color\">\n <i class=\"he he-background-drop\"></i>\n <input type=\"color\" (change)=\"applyHighlight($event)\" />\n </div>\n </div>\n <div class=\"toolbar-items\">\n <button type=\"button\" (click)=\"setAlignment('left')\" tooltip=\"Justify Left\">\n <i class=\"he he-left-align\"></i>\n </button>\n <button type=\"button\" (click)=\"setAlignment('center')\" tooltip=\"Justify Center\">\n <i class=\"he he-center-align\"></i>\n </button>\n <button type=\"button\" (click)=\"setAlignment('right')\" tooltip=\"Justify Right\">\n <i class=\"he he-right-align\"></i>\n </button>\n <button type=\"button\" (click)=\"setAlignment('justify')\" tooltip=\"Justify Full\">\n <i class=\"he he-justify\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\">\n <button type=\"button\" (click)=\"indent()\" tooltip=\"Indent\">\n <i class=\"he he-text-indent-left\"></i>\n </button>\n <button type=\"button\" (click)=\"outdent()\" tooltip=\"Outdent\">\n <i class=\"he he-text-indent-right\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\" *ngIf=\"media\">\n <button type=\"button\" (click)=\"applyList('ul')\" tooltip=\"Unordered list\">\n <i class=\"he he-unordered-list\"></i>\n </button>\n <button type=\"button\" (click)=\"applyList('ol')\" tooltip=\"Ordered list\">\n <i class=\"he he-ordered-list\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\" *ngIf=\"link\">\n <button type=\"button\" (click)=\"createLink()\" tooltip=\"Link\">\n <i class=\"he he-link\"></i>\n </button>\n <button type=\"button\" (click)=\"insertImage()\" tooltip=\"Image\">\n <i class=\"he he-image\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\">\n <button type=\"button\" (click)=\"undo()\" tooltip=\"Undo\">\n <i class=\"he he-undo\"></i>\n </button>\n <button type=\"button\" (click)=\"redo()\" tooltip=\"Redo\">\n <i class=\"he he-redo\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\">\n <button type=\"button\" (click)=\"clearFormatting()\" tooltip=\"Clear Formatting\">\n <i class=\"he he-text-clear-format\"></i>\n </button>\n </div>\n </div>\n\n <div #editor class=\"editor-content\" [attr.contenteditable]=\"(readonly || disabled) ? 'false' : 'true'\" (input)=\"onInput()\" (blur)=\"onTouched()\"\n [attr.data-placeholder]=\"placeholder\">\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'textarea-control',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TextareaControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './textarea-control.component.html',\r\n styleUrl: './textarea-control.component.scss'\r\n})\r\nexport class TextareaControl {\r\n @Input() title!: string;\r\n @Input() placeholder: string = '';\r\n @Input() customClass: string = '';\r\n @Input() clearVal: boolean = true;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() error: boolean = false; // New input for error state\r\n @Input() errorMessage: string = ''; // New input for error message\r\n @Output() textareaChange = new EventEmitter<string>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n textareaControl = new FormControl('');\r\n\r\n constructor() {\r\n this.textareaControl.valueChanges.subscribe(value => {\r\n if (this.readonly) return;\r\n this.onChange(value);\r\n this.onTouched();\r\n this.textareaChange.emit(value ?? '');\r\n });\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value !== undefined) {\r\n this.textareaControl.setValue(value, { emitEvent: false });\r\n }\r\n if (this.textareaControl.disabled !== this.disabled) {\r\n this.setDisabledState(this.disabled);\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.textareaControl.disable({ emitEvent: false });\r\n } else {\r\n this.textareaControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n // clear\r\n resetTextarea() {\r\n this.textareaControl.setValue('');\r\n this.selectionCleared.emit();\r\n }\r\n\r\n}\r\n","<div class=\"form-group textarea\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{'required' : required}\">{{ title }}</label>\r\n }\r\n <textarea class=\"form-control\" [placeholder]=\"placeholder\" [formControl]=\"textareaControl\"\r\n [ngClass]=\"{ 'is-invalid': error }\" [readonly]=\"readonly\" (blur)=\"onBlur()\"></textarea>\r\n\r\n <span class=\"focus-border\"></span>\r\n\r\n @if (textareaControl.value && clearVal && !readonly) {\r\n <label class=\"clear\" (click)=\"resetTextarea()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","/*\r\n * Public API Surface of heal-lib\r\n */\r\n\r\nexport { AutocompleteControl } from './lib/controls/autocomplete-control/autocomplete-control.component';\r\nexport { CalendarControl } from './lib/controls/calendar-control/calendar-control.component';\r\nexport { CheckboxControl } from './lib/controls/checkbox-control/checkbox-control.component';\r\nexport { InputControl } from './lib/controls/input-control/input-control.component';\r\nexport { MultiselectControl } from './lib/controls/multiselect-control/multiselect-control.component';\r\nexport { SelectControl } from './lib/controls/select-control/select-control.component';\r\nexport { SwitchControl } from './lib/controls/switch-control/switch-control.component';\r\nexport { TextEditor } from './lib/controls/text-editor/text-editor.component';\r\nexport { TextareaControl } from './lib/controls/textarea-control/textarea-control.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nexheal-lib.mjs","sources":["../../../projects/nexheal-lib/src/lib/controls/autocomplete-control/autocomplete-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/autocomplete-control/autocomplete-control.component.html","../../../projects/nexheal-lib/src/lib/controls/calendar-control/calendar-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/calendar-control/calendar-control.component.html","../../../projects/nexheal-lib/src/lib/controls/checkbox-control/checkbox-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/checkbox-control/checkbox-control.component.html","../../../projects/nexheal-lib/src/lib/controls/input-control/input-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/input-control/input-control.component.html","../../../projects/nexheal-lib/src/directives/clickoutside.directive.ts","../../../projects/nexheal-lib/src/lib/controls/multiselect-control/multiselect-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/multiselect-control/multiselect-control.component.html","../../../projects/nexheal-lib/src/lib/controls/select-control/select-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/select-control/select-control.component.html","../../../projects/nexheal-lib/src/lib/controls/switch-control/switch-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/switch-control/switch-control.component.html","../../../projects/nexheal-lib/src/lib/controls/text-editor/text-editor.component.ts","../../../projects/nexheal-lib/src/lib/controls/text-editor/text-editor.component.html","../../../projects/nexheal-lib/src/lib/controls/textarea-control/textarea-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/textarea-control/textarea-control.component.html","../../../projects/nexheal-lib/src/public-api.ts","../../../projects/nexheal-lib/src/nexheal-lib.ts"],"sourcesContent":["import { CommonModule } from \"@angular/common\";\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ElementRef,\r\n AfterViewInit,\r\n} from \"@angular/core\";\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n ReactiveFormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NG_VALIDATORS,\r\n} from \"@angular/forms\";\r\nimport { debounceTime, distinctUntilChanged, Subscription } from \"rxjs\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\n\r\n@Component({\r\n selector: \"autocomplete-control\",\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: \"./autocomplete-control.component.html\",\r\n styleUrls: [\"./autocomplete-control.component.scss\"],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: AutocompleteControl,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class AutocompleteControl\r\n implements ControlValueAccessor, OnInit, OnDestroy, AfterViewInit {\r\n\r\n private subscription: Subscription = new Subscription();\r\n\r\n @Input() title!: string;\r\n @Input() required: boolean = false;\r\n @Input() placeholder: string = \"\";\r\n @Input() customClass: string = '';\r\n @Input() clearVal: boolean = true;\r\n @Input() field: string = \"\";\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = \"\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() isAddNewItem: boolean = false;\r\n @Input() optionDisplayProperty: string = \"displayname\";\r\n @Output() optionSelected = new EventEmitter<any>();\r\n @Output() search = new EventEmitter<string>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() addNewItemClicked: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() optionPatched = new EventEmitter<any>();\r\n\r\n @Input() loadAllOnOpen: boolean = false;\r\n @Input() readonly: boolean = false;\r\n private _disabled: boolean = false;\r\n private _options: any[] = [];\r\n @Input() set options(value: any[]) {\r\n this._options = value || [];\r\n this.processValueBuffer();\r\n\r\n if (this.hasFocus && this.isDropdownOpen) {\r\n const val = this.inputControl.value || \"\";\r\n if (val === \"\" && this.loadAllOnOpen) {\r\n this.filteredSuggestions = [...this._options];\r\n } else if (val !== \"\") {\r\n const filterValue = val.toString().toLowerCase();\r\n this.filteredSuggestions = this._options.filter((suggestion) =>\r\n suggestion[this.optionDisplayProperty]?.toLowerCase().includes(filterValue)\r\n );\r\n }\r\n this.highlightedIndex = this.filteredSuggestions.length > 0 ? 0 : null;\r\n setTimeout(() => {\r\n if (this.popperInstance) this.popperInstance.update();\r\n }, 0);\r\n }\r\n }\r\n get options(): any[] {\r\n return this._options;\r\n }\r\n @Input() get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable();\r\n } else {\r\n this.inputControl.enable();\r\n }\r\n }\r\n }\r\n private valueBuffer: any = null;\r\n private popperInstance!: PopperInstance;\r\n private preventDropdownReopen: boolean = false;\r\n private preventClearOnBlur: boolean = false;\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n @ViewChild(\"inputElement\") inputElement!: ElementRef;\r\n @ViewChild(\"dropdownElement\") dropdownElement!: ElementRef;\r\n\r\n inputControl = new FormControl(\"\");\r\n isDropdownOpen: boolean = false;\r\n hasFocus: boolean = false;\r\n selectedItems: any;\r\n filteredSuggestions: any[] = [];\r\n highlightedIndex: number | null = null;\r\n\r\n constructor() {\r\n this.inputControl.valueChanges\r\n .pipe(debounceTime(10), distinctUntilChanged())\r\n .subscribe((value) => {\r\n if (this.preventDropdownReopen) {\r\n this.preventDropdownReopen = false;\r\n return;\r\n }\r\n if (value && value.trim().length > 0) {\r\n const filterValue = value;\r\n this.filterSuggestions(filterValue);\r\n this.search.emit(filterValue);\r\n } else {\r\n if (this.loadAllOnOpen && this.hasFocus) {\r\n this.filterSuggestions(\"\");\r\n this.search.emit(\"\");\r\n } else {\r\n this.isDropdownOpen = false;\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.inputControl.markAsPristine();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.createPopperInstance();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.preventDropdownReopen = true;\r\n if (value == null) {\r\n // Clear everything if we get null\r\n this.valueBuffer = null;\r\n this.selectedItems = null;\r\n this.preventDropdownReopen = true;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n } else {\r\n // Otherwise, treat as normal\r\n this.valueBuffer = value;\r\n this.processValueBuffer();\r\n }\r\n }\r\n private processValueBuffer() {\r\n if (this.valueBuffer == null) {\r\n this.selectedItems = null;\r\n this.preventDropdownReopen = true;\r\n // this.inputControl.setValue(\"\", { emitEvent: false });\r\n return;\r\n }\r\n if (this._options && this._options.length > 0) {\r\n const matchedSuggestion = this._options.find(\r\n (s) => s.id === this.valueBuffer\r\n );\r\n if (matchedSuggestion) {\r\n this.preventDropdownReopen = true;\r\n this.inputControl.setValue(\r\n matchedSuggestion[this.optionDisplayProperty],\r\n { emitEvent: false }\r\n );\r\n this.selectedItems = matchedSuggestion;\r\n this.onChange(matchedSuggestion.id);\r\n this.optionPatched.emit(matchedSuggestion);\r\n this.valueBuffer = null;\r\n return;\r\n }\r\n }\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.selectedItems = null;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.inputControl.disable();\r\n } else {\r\n this.inputControl.enable();\r\n }\r\n }\r\n\r\n filterSuggestions(value: string) {\r\n if (this.readonly || this.preventDropdownReopen || !this.hasFocus) {\r\n this.preventDropdownReopen = false;\r\n return;\r\n }\r\n if (value === \"\") {\r\n if (this.loadAllOnOpen) {\r\n this.filteredSuggestions = [...this.options];\r\n this.highlightedIndex = this.filteredSuggestions.length > 0 ? 0 : null;\r\n this.isDropdownOpen = true;\r\n setTimeout(() => {\r\n this.createPopperInstance();\r\n }, 0);\r\n } else {\r\n this.filteredSuggestions = [];\r\n this.isDropdownOpen = false;\r\n }\r\n return;\r\n }\r\n const filterValue = value.toString().toLowerCase();\r\n this.filteredSuggestions = this.options.filter((suggestion) =>\r\n suggestion[this.optionDisplayProperty]\r\n ?.toLowerCase()\r\n .includes(filterValue)\r\n );\r\n this.highlightedIndex = this.filteredSuggestions.length > 0 ? 0 : null;\r\n this.isDropdownOpen = true;\r\n setTimeout(() => {\r\n this.createPopperInstance();\r\n }, 0);\r\n }\r\n selectSuggestion(suggestion: any) {\r\n this.preventDropdownReopen = true;\r\n this.inputControl.setValue(suggestion[this.optionDisplayProperty], {\r\n emitEvent: false,\r\n });\r\n this.onChange(suggestion.id);\r\n this.inputControl.markAsTouched();\r\n this.inputControl.updateValueAndValidity(); // Trigger validation update\r\n this.isDropdownOpen = false;\r\n if (this.selectedItems?.id !== suggestion.id) {\r\n this.selectedItems = suggestion;\r\n this.optionSelected.emit(suggestion);\r\n }\r\n }\r\n\r\n // events\r\n onFocus() {\r\n this.hasFocus = true;\r\n if (this.readonly) return;\r\n if (this.loadAllOnOpen) {\r\n const val = this.inputControl.value || \"\";\r\n this.filterSuggestions(val);\r\n this.search.emit(val);\r\n }\r\n }\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n // Delay onBlur handling so that mousedown and click can occur first.\r\n setTimeout(() => {\r\n this.hasFocus = false;\r\n this.isDropdownOpen = false;\r\n\r\n // If an option click is in progress, do not clear the input.\r\n if (!this.preventClearOnBlur) {\r\n // Optionally: check if the current value is valid against options.\r\n // If not found, clear the input.\r\n const currentValue = this.inputControl.value;\r\n const found = this._options.find(\r\n (opt) =>\r\n String(opt[this.optionDisplayProperty]).toLowerCase() ===\r\n String(currentValue).toLowerCase()\r\n );\r\n if (!found) {\r\n this.inputControl.setValue(\"\");\r\n this.selectedItems = null;\r\n this.onChange(null);\r\n }\r\n }\r\n\r\n // Reset the flag after handling blur.\r\n this.preventClearOnBlur = false;\r\n }, 300);\r\n }\r\n onKeyDown(event: KeyboardEvent) {\r\n if (!this.isDropdownOpen) {\r\n return;\r\n }\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this.highlightedIndex =\r\n this.highlightedIndex === null ||\r\n this.highlightedIndex === this.filteredSuggestions.length - 1\r\n ? 0\r\n : this.highlightedIndex + 1;\r\n event.preventDefault();\r\n this.scrollHighlightedItemIntoView();\r\n break;\r\n case \"ArrowUp\":\r\n this.highlightedIndex =\r\n this.highlightedIndex === null || this.highlightedIndex === 0\r\n ? this.filteredSuggestions.length - 1\r\n : this.highlightedIndex - 1;\r\n event.preventDefault();\r\n this.scrollHighlightedItemIntoView();\r\n break;\r\n case \"Enter\":\r\n if (\r\n this.highlightedIndex !== null &&\r\n this.filteredSuggestions.length > 0\r\n ) {\r\n this.selectSuggestion(\r\n this.filteredSuggestions[this.highlightedIndex]\r\n );\r\n } else {\r\n this.isDropdownOpen = false;\r\n }\r\n event.preventDefault();\r\n break;\r\n case \"Escape\":\r\n this.isDropdownOpen = false;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n onOptionMouseDown(): void {\r\n this.preventClearOnBlur = true;\r\n }\r\n onMouseOver(index: number) {\r\n this.highlightedIndex = index;\r\n }\r\n\r\n // actions\r\n onAddNewItemClick(): void {\r\n this.addNewItemClicked.emit();\r\n }\r\n\r\n // popper\r\n private createPopperInstance() {\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n }\r\n if (this.inputElement && this.dropdownElement) {\r\n this.popperInstance = createPopper(\r\n this.inputElement.nativeElement,\r\n this.dropdownElement.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, 1],\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top-start\", \"bottom-start\"],\r\n },\r\n },\r\n ],\r\n }\r\n );\r\n }\r\n }\r\n private scrollHighlightedItemIntoView() {\r\n if (this.highlightedIndex !== null) {\r\n const highlightedItem =\r\n this.dropdownElement.nativeElement.querySelectorAll(\".list-item\")[\r\n this.highlightedIndex\r\n ];\r\n if (highlightedItem) {\r\n highlightedItem.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }\r\n }\r\n\r\n // clear\r\n resetInput() {\r\n this.inputControl.setValue(\"\");\r\n this.selectionCleared.emit();\r\n this.selectedItems = null;\r\n this.valueBuffer = null;\r\n }\r\n removeItem(item: any) {\r\n this.selectedItems = this.selectedItems.filter((i: any) => i !== item);\r\n this.onChange(this.selectedItems);\r\n this.optionSelected.emit(this.selectedItems);\r\n }\r\n}\r\n","<div class=\"form-group auto-complete\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n <input #inputElement type=\"text\" class=\"form-control\" [placeholder]=\"placeholder\" [formControl]=\"inputControl\"\r\n (blur)=\"onBlur()\" (keydown)=\"onKeyDown($event)\" (focus)=\"onFocus()\" [ngClass]=\"{'is-invalid': error}\"\r\n [attr.autocomplete]=\"autocomplete || null\" [readonly]=\"readonly\" />\r\n\r\n <span class=\"focus-border\"></span>\r\n\r\n @if (!inputLoader && inputControl.value && clearVal && hasFocus) {\r\n <label class=\"clear\" (click)=\"resetInput()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n @if (isDropdownOpen) {\r\n <div #dropdownElement class=\"option-list\">\r\n @if (filteredSuggestions.length === 0) {\r\n <div class=\"no-results\">\r\n <div>No results found</div>\r\n @if (isAddNewItem) {\r\n <div (click)=\"onAddNewItemClick()\" class=\"btn-new\">\r\n Add New Item\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n @for (suggestion of filteredSuggestions; track suggestion[optionDisplayProperty]; let i = $index) {\r\n <div class=\"list-item\" [ngClass]=\"{\r\n 'active': suggestion === selectedItems,\r\n 'highlighted': highlightedIndex === i\r\n }\" (mousedown)=\"onOptionMouseDown()\" (click)=\"selectSuggestion(suggestion)\" (mouseover)=\"onMouseOver(i)\">\r\n @if (suggestion.countryCode) {\r\n <img src=\"https://flagcdn.com/w80/{{ suggestion.countryCode }}.png\" width=\"20\"\r\n alt=\"{{ suggestion.countryCode }} flag\" loading=\"lazy\" />\r\n }\r\n {{ suggestion[optionDisplayProperty] }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import { CommonModule, DatePipe } from \"@angular/common\";\r\nimport { Component, OnInit, forwardRef, Input, HostListener, ViewChild, ElementRef, EventEmitter, Output, OnDestroy } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\ntype ViewMode = \"day\" | \"month\" | \"yearRange\";\r\n\r\n@Component({\r\n selector: \"calendar-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n templateUrl: \"./calendar-control.component.html\",\r\n styleUrl: \"./calendar-control.component.scss\",\r\n providers: [\r\n DatePipe,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CalendarControl),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CalendarControl implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n @Input() title!: string;\r\n @Input() required: boolean = false;\r\n @Input() customClass: string | object = \"\";\r\n @Input() clearVal: boolean = true;\r\n @Input() deFocus: boolean = true;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() hourFormat: string = \"24\";\r\n @Input() selectionMode: string = \"single\";\r\n @Input() timeOnly = false;\r\n @Input() dateFormat: string = \"dd/MM/yyyy\";\r\n @Input() placeholder: string = \"dd-mm-yyyy\";\r\n @Input() viewMode: \"date\" | \"month\" | \"year\" = \"date\";\r\n private _disabled = false;\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n @Input() readonly = false;\r\n @Input() submitted = false;\r\n @Input() inputPlaceholder: boolean = false;\r\n @Input(\"close-val\") closeVal: boolean = false;\r\n @Input() showTime = false;\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() dateSelected = new EventEmitter<Date | null>();\r\n\r\n private _defaultDate?: string;\r\n @Input() get defaultDate(): string | undefined {\r\n return this._defaultDate;\r\n }\r\n set defaultDate(value: string | undefined) {\r\n this._defaultDate = value;\r\n if (value && !this.selectedDate) {\r\n const parsed = new Date(value);\r\n if (!isNaN(parsed.getTime())) {\r\n this.displayMonth = parsed.getMonth();\r\n this.displayYear = parsed.getFullYear();\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n }\r\n }\r\n }\r\n\r\n private _minDate?: string;\r\n private _maxDate?: string;\r\n @Input() get minDate(): string | undefined {\r\n return this._minDate;\r\n }\r\n set minDate(value: string | undefined) {\r\n this._minDate = value;\r\n }\r\n @Input() get maxDate(): string | undefined {\r\n return this._maxDate;\r\n }\r\n set maxDate(value: string | undefined) {\r\n this._maxDate = value;\r\n }\r\n get meridian(): 'AM' | 'PM' {\r\n if (this.hourFormat !== '12') return 'AM';\r\n return this.selectedHour >= 12 ? 'PM' : 'AM';\r\n }\r\n private static _currentlyOpen?: CalendarControl;\r\n private onChangeFn: (val: string | null) => void = () => { };\r\n private onTouchedFn: () => void = () => { };\r\n private popperInstance: PopperInstance | null = null;\r\n\r\n @ViewChild(\"root\", { static: true }) rootElement!: ElementRef;\r\n @ViewChild(\"inputEl\", { static: true }) inputEl!: ElementRef<HTMLElement>;\r\n @ViewChild(\"datePicker\", { static: false }) datePickerEl!: ElementRef<HTMLElement>;\r\n\r\n isOpen: boolean = false;\r\n focus: boolean = false;\r\n displayMonth: number;\r\n displayYear: number;\r\n selectedDate: Date | null = null;\r\n today = new Date();\r\n todayYear = this.today.getFullYear();\r\n todayMonth = this.today.getMonth();\r\n todayDate = this.today.getDate();\r\n selectedHour = this.today.getHours();\r\n selectedMinute = this.today.getMinutes();\r\n dayClassMap: {\r\n [day: number]: { disabled: boolean; selected: boolean; today: boolean };\r\n } = {};\r\n\r\n inputVal: string | null = null; // Replace with the appropriate type and default value\r\n yearRangeSize = 15; // The year range view shows a chunk of years, for example 15 years at a time.\r\n currentView: ViewMode = \"day\";\r\n inputControl: FormControl = new FormControl({ value: \"\", disabled: false });\r\n\r\n constructor(\r\n public datePipe: DatePipe\r\n ) {\r\n const today = new Date();\r\n this.displayMonth = today.getMonth();\r\n this.displayYear = today.getFullYear();\r\n }\r\n\r\n ngOnInit(): void {\r\n const now = new Date();\r\n this.displayYear = now.getFullYear();\r\n this.displayMonth = now.getMonth();\r\n }\r\n\r\n ngAfterViewChecked() {\r\n if (this.isOpen) {\r\n this.initializePopper();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.isOpen) {\r\n this.initializePopper();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyPopper();\r\n }\r\n\r\n writeValue(value: any): void {\r\n // 1) Clear out if no value\r\n if (!value) {\r\n this.selectedDate = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n return;\r\n }\r\n if (this.timeOnly) {\r\n let hours: number, mins: number;\r\n\r\n if (typeof value === \"string\") {\r\n // “HH:mm” or “hh:mm AM/PM”\r\n const m24 = value.match(/^(\\d{1,2}):(\\d{2})$/);\r\n const m12 = value.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n if (m24) {\r\n hours = +m24[1];\r\n mins = +m24[2];\r\n } else if (m12) {\r\n let h = +m12[1];\r\n if (/PM/i.test(m12[3]) && h < 12) h += 12;\r\n if (/AM/i.test(m12[3]) && h === 12) h = 0;\r\n hours = h;\r\n mins = +m12[2];\r\n } else {\r\n // fallback parse\r\n const dt = new Date(value);\r\n hours = dt.getHours();\r\n mins = dt.getMinutes();\r\n }\r\n } else if (value instanceof Date) {\r\n hours = value.getHours();\r\n mins = value.getMinutes();\r\n } else {\r\n // maybe a timestamp or something else\r\n const dt = new Date(value);\r\n hours = dt.getHours();\r\n mins = dt.getMinutes();\r\n }\r\n\r\n // 3) Apply\r\n this.selectedHour = hours;\r\n this.selectedMinute = mins;\r\n // 4) Write back into the formControl & notify forms\r\n const out = this.formatOutputTimeOnly();\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n\r\n return;\r\n }\r\n // 2) Parse the incoming string (dd/MM/yyyy or dd/MM/yyyy HH:mm)\r\n const parsed = this.parseDate(value);\r\n this.selectedDate = parsed;\r\n if (this.showTime) {\r\n const raw = value as string;\r\n\r\n // split into date vs time\r\n let datePart = raw,\r\n timePart: string | null = null;\r\n const parts = raw.match(/^(.+?)\\s+(.+)$/);\r\n if (parts) {\r\n datePart = parts[1];\r\n timePart = parts[2];\r\n }\r\n\r\n // parse the date\r\n const parsedDate = this.parseDate(datePart);\r\n if (!parsedDate) {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n\r\n // parse the time portion (reuse your timeOnly logic)\r\n if (timePart) {\r\n let h: number, m: number;\r\n const m24 = timePart.match(/^(\\d{1,2}):(\\d{2})$/);\r\n const m12 = timePart.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n\r\n if (m24) {\r\n h = +m24[1];\r\n m = +m24[2];\r\n } else if (m12) {\r\n h = +m12[1];\r\n m = +m12[2];\r\n if (/PM/i.test(m12[3]) && h < 12) h += 12;\r\n if (/AM/i.test(m12[3]) && h === 12) h = 0;\r\n } else {\r\n const dt = new Date(`1970-01-01T${timePart}`);\r\n h = dt.getHours();\r\n m = dt.getMinutes();\r\n }\r\n\r\n parsedDate.setHours(h, m);\r\n this.selectedHour = h;\r\n this.selectedMinute = m;\r\n\r\n }\r\n\r\n // update calendar view & control value\r\n this.selectedDate = parsedDate;\r\n this.displayMonth = parsedDate.getMonth();\r\n this.displayYear = parsedDate.getFullYear();\r\n const out = this.formatOutput(parsedDate);\r\n\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n return;\r\n }\r\n if (parsed) {\r\n // 3) Always update the calendar view\r\n this.displayMonth = parsed.getMonth();\r\n this.displayYear = parsed.getFullYear();\r\n\r\n // 4) ONLY if showTime is on, pull hours/minutes\r\n if (this.showTime) {\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n\r\n }\r\n\r\n // 5) Finally, set the input text via your formatter\r\n this.inputControl.setValue(this.formatOutput(parsed), {\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => void): void {\r\n this.onChangeFn = fn;\r\n }\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouchedFn = fn;\r\n }\r\n setData(config: any) {\r\n if (config.hasOwnProperty(\"placeholder\")) {\r\n this.placeholder = config.placeholder;\r\n }\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.onTouchedFn();\r\n const raw = this.inputControl.value as string;\r\n if (this.showTime && !this.timeOnly) {\r\n // split off the date vs. time\r\n const match = raw.match(/^(.+?)\\s+(.+)$/);\r\n const datePart = match ? match[1] : raw;\r\n const timePart = match ? match[2] : \"\";\r\n // parse the date\r\n const pd = this.parseDate(datePart);\r\n if (!pd) return this.clearDate(new Event(\"manual\"));\r\n // parse the time portion (reuse your timeOnly logic)\r\n let h: number, m: number;\r\n const m24 = timePart.match(/^(\\d{1,2}):(\\d{2})$/);\r\n const m12 = timePart.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n if (m24) {\r\n h = +m24[1];\r\n m = +m24[2];\r\n } else if (m12) {\r\n h = +m12[1];\r\n m = +m12[2];\r\n if (/PM/i.test(m12[3]) && h < 12) h += 12;\r\n if (/AM/i.test(m12[3]) && h === 12) h = 0;\r\n } else {\r\n const tmp = new Date(`1970-01-01T${timePart}`);\r\n h = tmp.getHours();\r\n m = tmp.getMinutes();\r\n }\r\n // apply\r\n pd.setHours(h, m);\r\n this.selectedDate = pd;\r\n this.selectedHour = h;\r\n this.selectedMinute = m;\r\n\r\n // update calendar view\r\n this.displayMonth = pd.getMonth();\r\n this.displayYear = pd.getFullYear();\r\n // write back into the input & notify\r\n const out = this.formatOutput(pd);\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.dateSelected.emit(pd);\r\n this.blurEvent.emit();\r\n return;\r\n }\r\n if (this.timeOnly) {\r\n // try 24-hour HH:mm\r\n let m = raw.match(/^(\\d{1,2}):(\\d{2})$/);\r\n // or 12-hour h:mm AM/PM\r\n const mAmPm = !m && raw.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n\r\n if (m) {\r\n // 24h\r\n const h = +m[1],\r\n min = +m[2];\r\n if (h < 24 && min < 60 && this.isTimeValid(h, min)) {\r\n this.selectedHour = h;\r\n this.selectedMinute = min;\r\n\r\n } else {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n } else if (mAmPm) {\r\n // 12h\r\n let h = +mAmPm[1],\r\n min = +mAmPm[2];\r\n const ap = mAmPm[3].toUpperCase();\r\n if (h >= 1 && h <= 12 && min < 60) {\r\n if (ap === \"PM\" && h < 12) h += 12;\r\n if (ap === \"AM\" && h === 12) h = 0;\r\n if (this.isTimeValid(h, min)) {\r\n this.selectedHour = h;\r\n this.selectedMinute = min;\r\n } else {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n\r\n } else {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n } else {\r\n // not a valid time string\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n const out = this.formatOutputTimeOnly();\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.dateSelected.emit(this.selectedDate);\r\n this.blurEvent.emit();\r\n return;\r\n }\r\n if (this.showTime) {\r\n this.blurEvent.emit();\r\n return;\r\n }\r\n const parsed = this.parseDate(raw);\r\n\r\n if (!parsed) {\r\n this.clearDate(new Event(\"manual\"));\r\n } else {\r\n this.selectedDate = parsed;\r\n this.displayMonth = parsed.getMonth();\r\n this.displayYear = parsed.getFullYear();\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n\r\n const formatted = this.formatOutput(parsed);\r\n this.inputControl.setValue(formatted, { emitEvent: false });\r\n this.onChangeFn(formatted);\r\n }\r\n this.blurEvent.emit();\r\n }\r\n onFocus() {\r\n this.focus = true;\r\n }\r\n setDisabledState(isDisabled: boolean) {\r\n this.disabled = isDisabled;\r\n }\r\n onInputKeydown(event: KeyboardEvent) {\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n this.toggleCalendar();\r\n break;\r\n case \"Escape\":\r\n this.isOpen = false;\r\n break;\r\n case \" \":\r\n case \"Spacebar\":\r\n event.preventDefault();\r\n this.toggleCalendar();\r\n break;\r\n case \"Tab\":\r\n this.isOpen = false;\r\n break;\r\n }\r\n }\r\n\r\n // day\r\n selectDay(day: number | null) {\r\n if (!day) return;\r\n const picked = this.showTime\r\n ? this.buildDateWithTime(day)\r\n : new Date(this.displayYear, this.displayMonth, day);\r\n\r\n if (this.isDateDisabled(picked)) return;\r\n\r\n this.selectedDate = picked;\r\n\r\n const out = this.formatOutput(picked);\r\n\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(picked);\r\n\r\n this.isOpen = false;\r\n }\r\n get daysInMonth(): (number | null)[] {\r\n const firstDay = new Date(this.displayYear, this.displayMonth, 1).getDay();\r\n const totalDays = new Date(\r\n this.displayYear,\r\n this.displayMonth + 1,\r\n 0\r\n ).getDate();\r\n const offset = firstDay;\r\n\r\n const daysArray: (number | null)[] = Array(offset).fill(null);\r\n this.dayClassMap = {}; // Reset\r\n\r\n for (let i = 1; i <= totalDays; i++) {\r\n const date = new Date(this.displayYear, this.displayMonth, i);\r\n\r\n this.dayClassMap[i] = {\r\n disabled: this.isDateDisabled(date),\r\n selected:\r\n this.selectedDate?.getFullYear() === this.displayYear &&\r\n this.selectedDate?.getMonth() === this.displayMonth &&\r\n this.selectedDate?.getDate() === i,\r\n today:\r\n this.todayYear === this.displayYear &&\r\n this.todayMonth === this.displayMonth &&\r\n this.todayDate === i,\r\n };\r\n\r\n daysArray.push(i);\r\n }\r\n\r\n return daysArray;\r\n }\r\n parseDate(val: any): Date | null {\r\n if (typeof val === \"string\") {\r\n if (this.viewMode === \"month\") {\r\n const mIndex = this.months.findIndex(m => m.toLowerCase() === val.trim().toLowerCase());\r\n if (mIndex !== -1) {\r\n return new Date(this.todayYear, mIndex, 1);\r\n }\r\n }\r\n if (this.viewMode === \"date\" && val.length <= 2 && !isNaN(+val)) {\r\n return new Date(this.todayYear, this.todayMonth, +val);\r\n }\r\n const m = val.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\r\n if (m) {\r\n const d = +m[1],\r\n mo = +m[2] - 1,\r\n y = +m[3];\r\n return new Date(y, mo, d);\r\n }\r\n }\r\n // fallback\r\n const date = new Date(val);\r\n if (!isNaN(date.getTime())) return date;\r\n \r\n // final fallback for weird year parsing\r\n if (this.viewMode === \"year\" && !isNaN(+val)) {\r\n return new Date(+val, 0, 1);\r\n }\r\n \r\n return null;\r\n }\r\n formatOutput(date: Date): string {\r\n const datePart = this.datePipe.transform(date, this.dateFormat)!;\r\n if (this.showTime) {\r\n const timeFormat = this.hourFormat === \"12\" ? \"hh:mm a\" : \"HH:mm\";\r\n const timePart = this.datePipe.transform(date, timeFormat)!;\r\n return `${datePart} ${timePart}`;\r\n }\r\n return datePart;\r\n }\r\n isSelectedDay(day: number | null): boolean {\r\n if (!this.selectedDate || !day) return false;\r\n return (\r\n this.selectedDate.getFullYear() === this.displayYear &&\r\n this.selectedDate.getMonth() === this.displayMonth &&\r\n this.selectedDate.getDate() === day\r\n );\r\n }\r\n isDateDisabled(d: Date): boolean {\r\n if (this._minDate && d < new Date(this._minDate)) return true;\r\n if (this._maxDate && d > new Date(this._maxDate)) return true;\r\n return false;\r\n }\r\n isDayDisabled(day: number | null): boolean {\r\n return (\r\n day !== null &&\r\n this.isDateDisabled(new Date(this.displayYear, this.displayMonth, day))\r\n );\r\n }\r\n\r\n // month\r\n goToMonthView() {\r\n this.currentView = \"month\";\r\n }\r\n months = [\r\n \"Jan\",\r\n \"Feb\",\r\n \"Mar\",\r\n \"Apr\",\r\n \"May\",\r\n \"Jun\",\r\n \"Jul\",\r\n \"Aug\",\r\n \"Sep\",\r\n \"Oct\",\r\n \"Nov\",\r\n \"Dec\",\r\n ];\r\n selectMonth(index: number) {\r\n this.displayMonth = index;\r\n if (this.viewMode === \"month\") {\r\n const picked = new Date(this.displayYear, this.displayMonth, 1);\r\n if (this.isDateDisabled(picked)) return;\r\n this.selectedDate = picked;\r\n const out = this.formatOutput(picked);\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(picked);\r\n this.isOpen = false;\r\n } else {\r\n this.currentView = \"day\";\r\n }\r\n }\r\n get displayMonthName(): string {\r\n return this.months[this.displayMonth];\r\n }\r\n prevMonth() {\r\n if (this.displayMonth === 0) {\r\n this.displayMonth = 11;\r\n this.displayYear--;\r\n } else {\r\n this.displayMonth--;\r\n }\r\n }\r\n nextMonth() {\r\n if (this.displayMonth === 11) {\r\n this.displayMonth = 0;\r\n this.displayYear++;\r\n } else {\r\n this.displayMonth++;\r\n }\r\n }\r\n\r\n // year\r\n goToYearRangeView() {\r\n this.currentView = \"yearRange\";\r\n }\r\n get yearRange(): number[] {\r\n const startYear = this.getStartYearForRange();\r\n const years: number[] = [];\r\n for (let i = 0; i < this.yearRangeSize; i++) {\r\n years.push(startYear + i);\r\n }\r\n return years;\r\n }\r\n getStartYearForRange(): number {\r\n const remainder = this.displayYear % this.yearRangeSize;\r\n return this.displayYear - remainder;\r\n }\r\n selectYear(year: number) {\r\n this.displayYear = year;\r\n if (this.viewMode === \"year\") {\r\n const picked = new Date(this.displayYear, 0, 1);\r\n if (this.isDateDisabled(picked)) return;\r\n this.selectedDate = picked;\r\n const out = this.formatOutput(picked);\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(picked);\r\n this.isOpen = false;\r\n } else {\r\n this.currentView = \"month\";\r\n }\r\n }\r\n prevYearRange() {\r\n this.displayYear -= this.yearRangeSize;\r\n }\r\n nextYearRange() {\r\n this.displayYear += this.yearRangeSize;\r\n }\r\n\r\n // time picker\r\n private formatOutputTimeOnly(): string {\r\n // you could choose 12h vs 24h based on hourFormat\r\n return this.datePipe.transform(\r\n new Date(0, 0, 0, this.selectedHour, this.selectedMinute),\r\n this.hourFormat === \"12\" ? \"hh:mm a\" : \"HH:mm\"\r\n )!;\r\n }\r\n private patchDateWithTime() {\r\n if (!this.selectedDate) {\r\n const now = new Date();\r\n this.selectedDate = new Date(\r\n now.getFullYear(),\r\n now.getMonth(),\r\n now.getDate(),\r\n this.selectedHour,\r\n this.selectedMinute\r\n );\r\n } else {\r\n this.selectedDate.setHours(this.selectedHour, this.selectedMinute);\r\n }\r\n\r\n const output = this.timeOnly\r\n ? this.formatOutputTimeOnly()\r\n : this.formatOutput(this.selectedDate);\r\n\r\n this.inputControl.setValue(output, { emitEvent: false });\r\n this.onChangeFn(output);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(this.selectedDate);\r\n }\r\n setMeridian(value: \"AM\" | \"PM\") {\r\n if (this.meridian === value) return;\r\n let nextHour = this.selectedHour;\r\n if (value === \"AM\" && this.selectedHour >= 12) {\r\n nextHour -= 12;\r\n } else if (value === \"PM\" && this.selectedHour < 12) {\r\n nextHour += 12;\r\n }\r\n \r\n if (this.isTimeValid(nextHour, this.selectedMinute)) {\r\n this.selectedHour = nextHour;\r\n this.patchDateWithTime();\r\n }\r\n }\r\n private buildDateWithTime(day: number): Date {\r\n return new Date(\r\n this.displayYear,\r\n this.displayMonth,\r\n day,\r\n this.selectedHour,\r\n this.selectedMinute\r\n );\r\n }\r\n isTimeValid(hour: number, minute: number): boolean {\r\n const testDate = new Date(this.selectedDate || new Date());\r\n testDate.setHours(hour, minute, 0, 0);\r\n \r\n if (this._minDate) {\r\n const min = new Date(this._minDate);\r\n if (this.timeOnly || this.showTime) {\r\n min.setFullYear(testDate.getFullYear(), testDate.getMonth(), testDate.getDate());\r\n }\r\n if (testDate < min) return false;\r\n }\r\n if (this._maxDate) {\r\n const max = new Date(this._maxDate);\r\n if (this.timeOnly || this.showTime) {\r\n max.setFullYear(testDate.getFullYear(), testDate.getMonth(), testDate.getDate());\r\n }\r\n if (testDate > max) return false;\r\n }\r\n return true;\r\n }\r\n\r\n incrementHour() {\r\n let nextHour = this.selectedHour + 1;\r\n if (nextHour >= 24) {\r\n nextHour = 0;\r\n }\r\n if (this.isTimeValid(nextHour, this.selectedMinute)) {\r\n this.selectedHour = nextHour;\r\n if (this.showTime || this.timeOnly) this.patchDateWithTime();\r\n }\r\n }\r\n decrementHour() {\r\n let nextHour = this.selectedHour - 1;\r\n if (nextHour < 0) {\r\n nextHour = 23;\r\n }\r\n if (this.isTimeValid(nextHour, this.selectedMinute)) {\r\n this.selectedHour = nextHour;\r\n if (this.showTime || this.timeOnly) this.patchDateWithTime();\r\n }\r\n }\r\n incrementMinute() {\r\n let nextMin = this.selectedMinute + 1;\r\n let nextHour = this.selectedHour;\r\n if (nextMin >= 60) {\r\n nextMin = 0;\r\n nextHour = (nextHour + 1) % 24;\r\n }\r\n if (this.isTimeValid(nextHour, nextMin)) {\r\n this.selectedHour = nextHour;\r\n this.selectedMinute = nextMin;\r\n if (this.showTime || this.timeOnly) {\r\n this.patchDateWithTime();\r\n }\r\n }\r\n }\r\n decrementMinute() {\r\n let nextMin = this.selectedMinute - 1;\r\n let nextHour = this.selectedHour;\r\n if (nextMin < 0) {\r\n nextMin = 59;\r\n nextHour = (nextHour + 23) % 24;\r\n }\r\n if (this.isTimeValid(nextHour, nextMin)) {\r\n this.selectedHour = nextHour;\r\n this.selectedMinute = nextMin;\r\n if (this.showTime || this.timeOnly) {\r\n this.patchDateWithTime();\r\n }\r\n }\r\n }\r\n\r\n // popper\r\n initializePopper() {\r\n if (\r\n !this.popperInstance &&\r\n this.inputEl?.nativeElement &&\r\n this.datePickerEl?.nativeElement\r\n ) {\r\n this.popperInstance = createPopper(\r\n this.inputEl.nativeElement,\r\n this.datePickerEl.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n { name: \"offset\", options: { offset: [0, 1] } },\r\n { name: \"preventOverflow\", options: { boundary: \"viewport\" } },\r\n { name: \"flip\", options: { fallbackPlacements: [\"top-start\"] } },\r\n ],\r\n }\r\n );\r\n this.popperInstance.update();\r\n }\r\n }\r\n destroyPopper() {\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n this.popperInstance = null;\r\n }\r\n }\r\n\r\n // toggle, open, close and clear \r\n toggleCalendar(): void {\r\n if (this.disabled || this.readonly) return;\r\n\r\n // if another calendar is open, close it\r\n if (\r\n !this.isOpen &&\r\n CalendarControl._currentlyOpen &&\r\n CalendarControl._currentlyOpen !== this\r\n ) {\r\n CalendarControl._currentlyOpen.closeCalendar();\r\n }\r\n\r\n // flip open/close\r\n this.isOpen = !this.isOpen;\r\n\r\n if (this.isOpen) {\r\n // mark this one as current\r\n CalendarControl._currentlyOpen = this;\r\n\r\n if (this.viewMode === \"month\") {\r\n this.currentView = \"month\";\r\n } else if (this.viewMode === \"year\") {\r\n this.currentView = \"yearRange\";\r\n } else {\r\n this.currentView = \"day\";\r\n }\r\n if (this.selectedDate) {\r\n this.displayMonth = this.selectedDate.getMonth();\r\n this.displayYear = this.selectedDate.getFullYear();\r\n } else if (this._defaultDate) {\r\n const parsed = new Date(this._defaultDate);\r\n if (!isNaN(parsed.getTime())) {\r\n this.displayMonth = parsed.getMonth();\r\n this.displayYear = parsed.getFullYear();\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n }\r\n } else {\r\n const now = new Date();\r\n this.displayMonth = now.getMonth();\r\n this.displayYear = now.getFullYear();\r\n }\r\n\r\n if (!this.inputControl.value && (this.timeOnly || this.showTime)) {\r\n if (this._minDate) {\r\n const min = new Date(this._minDate);\r\n this.selectedHour = min.getHours();\r\n this.selectedMinute = min.getMinutes();\r\n } else if (!this.isTimeValid(this.selectedHour, this.selectedMinute)) {\r\n if (this._maxDate) {\r\n const max = new Date(this._maxDate);\r\n this.selectedHour = max.getHours();\r\n this.selectedMinute = max.getMinutes();\r\n }\r\n }\r\n }\r\n\r\n // destroy any old popper\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n this.popperInstance = null;\r\n }\r\n if (this.inputEl && this.datePickerEl) {\r\n this.popperInstance = createPopper(\r\n this.inputEl.nativeElement,\r\n this.datePickerEl.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n { name: \"offset\", options: { offset: [0, 1] } },\r\n { name: \"preventOverflow\", options: { boundary: \"viewport\" } },\r\n { name: \"flip\", options: { fallbackPlacements: [\"top-start\"] } },\r\n ],\r\n }\r\n );\r\n this.popperInstance.update();\r\n }\r\n } else {\r\n this.destroyPopper();\r\n }\r\n }\r\n openCalendar() {\r\n if (this.disabled || this.readonly || this.isOpen) return;\r\n this.toggleCalendar();\r\n }\r\n @HostListener(\"document:click\", [\"$event\"])\r\n clickOutside(event: Event) {\r\n if (!this.rootElement.nativeElement.contains(event.target) && this.isOpen) {\r\n this.isOpen = false;\r\n }\r\n }\r\n public closeCalendar() {\r\n this.destroyPopper();\r\n this.isOpen = false;\r\n if (CalendarControl._currentlyOpen === this) {\r\n CalendarControl._currentlyOpen = undefined;\r\n }\r\n }\r\n clearDate(event: Event) {\r\n this.selectionCleared.emit();\r\n event.stopPropagation();\r\n this.selectedDate = null;\r\n if (this._minDate) {\r\n const parsed = new Date(this._minDate);\r\n if (!isNaN(parsed.getTime())) {\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n }\r\n } else if (this._defaultDate) {\r\n const parsed = new Date(this._defaultDate);\r\n if (!isNaN(parsed.getTime())) {\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n }\r\n } else {\r\n this.selectedHour = this.today.getHours();\r\n this.selectedMinute = this.today.getMinutes();\r\n }\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n\r\n this.onChangeFn(null);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(null);\r\n }\r\n}\r\n","<div class=\"form-group calendar\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\" [class.disabled]=\"disabled\">\r\n <label class=\"inp-label\" [ngClass]=\"{'required' : required}\" *ngIf=\"title\">{{ title }}</label>\r\n <div class=\"form-group calendar\" #root (click)=\"openCalendar()\" >\r\n <input type=\"text\" #inputEl [placeholder]=\"(inputPlaceholder && placeholder) ? placeholder : ''\"\r\n [formControl]=\"inputControl\" class=\"form-control\" [ngClass]=\"{ 'is-invalid': error }\" (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\" [readonly]=\"readonly\" (click)=\"openCalendar(); $event.stopPropagation()\" (keydown)=\"onInputKeydown($event)\" />\r\n\r\n <span class=\"focus-border\" *ngIf=\"deFocus\"></span>\r\n <span class=\"calendar-icon\">\r\n <i class=\"he\" [ngClass]=\"!timeOnly ? 'he-calendar-blank' : 'he-clock'\"></i>\r\n </span>\r\n <label class=\"clear\" *ngIf=\"!inputLoader && (selectedDate && !disabled && !readonly) && clearVal\" (click)=\"clearDate($event)\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n <label *ngIf=\"inputLoader\" class=\"loader input-loader\"></label>\r\n <div *ngIf=\"error\" class=\"val-msg\">{{ errorMessage }}</div>\r\n\r\n <div class=\"datepicker-group\" #datePicker *ngIf=\"isOpen\" (click)=\"$event.stopPropagation()\">\r\n \r\n <!-- time picker -->\r\n <ng-container *ngIf=\"timeOnly\">\r\n <div class=\"time-picker\">\r\n <div class=\"time-select\">\r\n <button (click)=\"incrementHour()\"><i class=\"he he-chevron-up\"></i></button>\r\n <ng-container *ngIf=\"hourFormat === '12'; else show24\">\r\n <div class=\"time-value\">\r\n {{ ((selectedHour % 12) || 12) | number:'2.0' }}\r\n </div>\r\n </ng-container>\r\n <ng-template #show24>\r\n <div class=\"time-value\">\r\n {{ selectedHour | number:'2.0' }}\r\n </div>\r\n </ng-template>\r\n\r\n <button (click)=\"decrementHour()\"><i class=\"he he-chevron-down\"></i></button>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <div class=\"time-select\">\r\n <button (click)=\"incrementMinute()\"><i class=\"he he-chevron-up\"></i></button>\r\n <div class=\"time-value\">{{ selectedMinute | number:'2.0' }}</div>\r\n <button (click)=\"decrementMinute()\"><i class=\"he he-chevron-down\"></i></button>\r\n </div>\r\n <div class=\"ampm-toggle\" *ngIf=\"hourFormat === '12'\">\r\n <button type=\"button\" [class.active]=\"meridian === 'AM'\" (click)=\"setMeridian('AM')\">AM</button>\r\n <button type=\"button\" [class.active]=\"meridian === 'PM'\" (click)=\"setMeridian('PM')\">PM</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- day view -->\r\n <ng-container *ngIf=\"!timeOnly && currentView === 'day'\">\r\n <div class=\"header\">\r\n <button class=\"calendar-arrow\" (click)=\"prevMonth()\"><i class=\"he he-chevron-left\"></i></button>\r\n <div class=\"title\" (click)=\"goToMonthView()\">\r\n <div>{{ displayMonthName }}</div>\r\n <div>{{ displayYear }}</div>\r\n </div>\r\n <button class=\"calendar-arrow\" (click)=\"nextMonth()\"><i class=\"he he-chevron-right\"></i></button>\r\n </div>\r\n <div class=\"week-header\">\r\n <div>Sun</div>\r\n <div>Mon</div>\r\n <div>Tue</div>\r\n <div>Wed</div>\r\n <div>Thu</div>\r\n <div>Fri</div>\r\n <div>Sat</div>\r\n </div>\r\n <div class=\"days-grid\">\r\n <div class=\"day-cell\" *ngFor=\"let day of daysInMonth\" (click)=\"selectDay(day)\"\r\n [class.disabled]=\"day !== null && dayClassMap[day].disabled\"\r\n [class.selected]=\"day !== null && dayClassMap[day].selected\" [class.today]=\"\r\n day !== null &&\r\n displayYear === todayYear &&\r\n displayMonth === todayMonth &&\r\n day === todayDate\r\n \">\r\n {{day ? day : ''}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showTime\">\r\n <div class=\"time-picker\">\r\n <div class=\"time-select\">\r\n <button type=\"button\" (click)=\"incrementHour()\">\r\n <i class=\"he he-chevron-up\"></i>\r\n </button>\r\n <ng-container *ngIf=\"hourFormat === '12'; else show24\">\r\n <div class=\"time-value\">\r\n {{\r\n selectedHour % 12 === 0\r\n ? 12\r\n : selectedHour % 12\r\n | number:'2.0' }}\r\n </div>\r\n </ng-container>\r\n <ng-template #show24>\r\n <div class=\"time-value\">{{ selectedHour | number:'2.0' }}</div>\r\n </ng-template>\r\n <button type=\"button\" (click)=\"decrementHour()\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </button>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <div class=\"time-select\">\r\n <button type=\"button\" (click)=\"incrementMinute()\">\r\n <i class=\"he he-chevron-up\"></i>\r\n </button>\r\n <div class=\"time-value\">\r\n {{ selectedMinute < 10 ? '0' +selectedMinute : selectedMinute }} </div>\r\n <button type=\"button\" (click)=\"decrementMinute()\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </button>\r\n </div>\r\n <div class=\"ampm-toggle\" *ngIf=\"hourFormat === '12'\">\r\n <button type=\"button\" [class.active]=\"meridian === 'AM'\" (click)=\"setMeridian('AM')\">AM</button>\r\n <button type=\"button\" [class.active]=\"meridian === 'PM'\" (click)=\"setMeridian('PM')\">PM</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- month view -->\r\n <ng-container *ngIf=\"!timeOnly && currentView === 'month'\">\r\n <div class=\"header\" *ngIf=\"viewMode !== 'month'\">\r\n <button class=\"calendar-arrow\" (click)=\"displayYear = displayYear - 1\"><i\r\n class=\"he he-chevron-left\"></i></button>\r\n <div class=\"title\" (click)=\"goToYearRangeView()\">{{ displayYear }}</div>\r\n <button class=\"calendar-arrow\" (click)=\"displayYear = displayYear + 1\"><i\r\n class=\"he he-chevron-right\"></i></button>\r\n </div>\r\n <div class=\"month-grid\">\r\n <div class=\"month-cell\" *ngFor=\"let m of months; index as i\" (click)=\"selectMonth(i)\">{{ m }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- year range view -->\r\n <ng-container *ngIf=\"!timeOnly && currentView === 'yearRange'\">\r\n <div class=\"header\">\r\n <button class=\"calendar-arrow\" (click)=\"prevYearRange()\"><i class=\"he he-chevron-left\"></i></button>\r\n <div class=\"title\">{{ yearRange[0] }} ~ {{ yearRange[yearRangeSize-1] }}</div>\r\n <button class=\"calendar-arrow\" (click)=\"nextYearRange()\"><i class=\"he he-chevron-right\"></i></button>\r\n </div>\r\n <div class=\"year-grid\">\r\n <div class=\"year-cell\" *ngFor=\"let y of yearRange\" (click)=\"selectYear(y)\">{{ y }}</div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, forwardRef, Renderer2, ElementRef, ViewChild } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl, FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'checkbox-control',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './checkbox-control.component.html'\r\n})\r\nexport class CheckboxControl implements ControlValueAccessor {\r\n\r\n @Input() title!: string;\r\n @Input() customClass: string = '';\r\n @Input() type: 'boolean' | 'number' | 'string' = 'boolean';\r\n @Input() readonly: boolean = false;\r\n @Input() set disabled(value: boolean) { this._disabled = value; this.setDisabledState(value); }\r\n @Output() checkboxChange = new EventEmitter<boolean>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n @ViewChild('checkboxContainer') checkboxContainer!: ElementRef;\r\n\r\n private _disabled = false;\r\n checkboxControl = new FormControl({ value: false, disabled: this._disabled });\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _elementRef: ElementRef\r\n ) {\r\n this.checkboxControl.valueChanges.subscribe(value => {\r\n if (this.readonly) return;\r\n const converted = this.convertType(value);\r\n this.onChange(converted);\r\n this.onTouched();\r\n this.checkboxChange.emit(converted);\r\n });\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value !== undefined && value !== null) {\r\n this.checkboxControl.setValue(this.convertType(value), { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n convertType(value: any): any {\r\n switch (this.type) {\r\n case 'number':\r\n return Number(value == 2 ? 0 : value == 0 ? 2 : value);\r\n case 'string':\r\n return String(value);\r\n default:\r\n return !!value;\r\n }\r\n }\r\n\r\n // events\r\n onFocus(event: FocusEvent) {\r\n const targetElement = event.target as Element;\r\n if (targetElement.matches(':focus-visible')) {\r\n this.checkboxContainer.nativeElement.classList.add('focused');\r\n }\r\n }\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.checkboxContainer.nativeElement.classList.remove('focused');\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\r\n if (isDisabled) {\r\n this.checkboxControl.disable();\r\n } else {\r\n this.checkboxControl.enable();\r\n }\r\n }\r\n\r\n}\r\n","<label class=\"checkbox-container\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\" #checkboxContainer>\r\n <input type=\"checkbox\" [formControl]=\"checkboxControl\" (focus)=\"onFocus($event)\" (blur)=\"onBlur()\" [attr.readonly]=\"readonly ? true : null\" />\r\n <span class=\"checkmark\"></span>{{ title }}\r\n</label>","import { CommonModule } from \"@angular/common\";\r\nimport { Component, Input, Output, EventEmitter, forwardRef, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl, FormsModule } from \"@angular/forms\";\r\nimport { Subscription } from \"rxjs\";\r\n\r\n@Component({\r\n selector: \"input-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: \"./input-control.component.html\",\r\n styleUrls: [\"./input-control.component.scss\"],\r\n})\r\nexport class InputControl implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n @Input() type: | \"text\" | \"password\" | \"decimal\" | \"number\" | \"email\" | \"search\" = \"text\";\r\n @Input() title!: string;\r\n @Input() placeholder: string = \"\";\r\n @Input() customClass: string = '';\r\n @Input() clearVal: boolean = true;\r\n @Input() required: boolean = false;\r\n @Input() deFocus: boolean = true;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = '';\r\n @Input() readonly: boolean = false;\r\n @Input() search: boolean = false;\r\n @Input() price: boolean = false;\r\n @Input() maxlength!: number;\r\n @Input() ngModel!: string;\r\n @Input() advSearch: boolean = false;\r\n @Input() inputLoader: boolean = false;\r\n @Input() useReactiveForms: boolean = true;\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() inputChange = new EventEmitter<string>();\r\n @Output() ngModelChange: EventEmitter<string> = new EventEmitter<string>();\r\n @Output() searchClicked: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() advSearchClicked: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n private _disabled = false;\r\n @Input() set disabled(isDisabled: boolean) {\r\n this._disabled = isDisabled;\r\n this.setDisabledState(isDisabled);\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n private valueChangesSubscription!: Subscription;\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n isFocused: boolean = false;\r\n showPassword: boolean = false;\r\n inputControl = new FormControl(\"\");\r\n\r\n ngOnInit() {\r\n if (this.useReactiveForms) {\r\n this.valueChangesSubscription = this.inputControl.valueChanges.subscribe(\r\n (value) => {\r\n this.onChange(value);\r\n this.inputChange.emit(value ?? \"\");\r\n }\r\n );\r\n }\r\n }\r\n \r\n ngOnDestroy(): void {\r\n if (this.valueChangesSubscription) {\r\n this.valueChangesSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n // input type\r\n getInputType() {\r\n return this.type === \"password\" && this.showPassword ? \"text\" : this.type;\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.useReactiveForms) {\r\n if (value !== undefined) {\r\n this.inputControl.setValue(value, {\r\n emitEvent: false,\r\n });\r\n if (value != '') {\r\n this.onChange(value);\r\n }\r\n }\r\n if (this.inputControl.disabled !== this.disabled) {\r\n this.setDisabledState(this.disabled);\r\n }\r\n } else {\r\n this.ngModel = value;\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.blurEvent.emit();\r\n setTimeout(() => {\r\n this.isFocused = false;\r\n this.onTouched();\r\n if (!this.useReactiveForms) {\r\n this.ngModelChange.emit(this.ngModel);\r\n }\r\n }, 200);\r\n }\r\n onFocus() {\r\n this.isFocused = true;\r\n }\r\n onKeyPress(event: KeyboardEvent) {\r\n let allowedKeys: string[] = [];\r\n\r\n switch (this.type) {\r\n case \"number\":\r\n allowedKeys = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\r\n break;\r\n case \"decimal\":\r\n allowedKeys = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n if (this.search && event.key == \"Enter\") {\r\n this.onSearchClick();\r\n }\r\n if (\r\n (this.type == \"number\" || this.type == \"decimal\") &&\r\n !allowedKeys.includes(event.key)\r\n ) {\r\n event.preventDefault();\r\n return;\r\n }\r\n if (this.maxlength != null && (this.type == \"number\" || this.type == \"decimal\")) {\r\n const currentValue: string = this.inputControl.value ?? \"\";\r\n if (currentValue.length >= this.maxlength) {\r\n event.preventDefault();\r\n return;\r\n }\r\n }\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this._disabled = isDisabled;\r\n if (this._disabled && this.useReactiveForms) {\r\n this.inputControl.disable({\r\n emitEvent: false,\r\n });\r\n } else if (this.useReactiveForms) {\r\n this.inputControl.enable({\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n\r\n // actions\r\n passwordVisible() {\r\n this.showPassword = !this.showPassword;\r\n }\r\n onSearchClick(): void {\r\n this.searchClicked.emit();\r\n }\r\n onAdvSearchClick(): void {\r\n this.advSearchClicked.emit();\r\n }\r\n\r\n // clear\r\n showClearButton() {\r\n return (\r\n this.isFocused &&\r\n this.clearVal &&\r\n this.inputControl.value &&\r\n this.type !== \"password\"\r\n );\r\n }\r\n resetInput() {\r\n this.selectionCleared.emit();\r\n if (this.useReactiveForms) {\r\n this.inputControl.setValue(\"\");\r\n this.inputControl.markAsPristine({ onlySelf: true });\r\n\r\n } else {\r\n this.ngModel = \"\";\r\n this.ngModelChange.emit(this.ngModel);\r\n }\r\n }\r\n}\r\n","<div class=\"form-group input\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n @if (useReactiveForms) {\r\n <input [type]=\"getInputType()\" class=\"form-control\" [placeholder]=\"placeholder\" [formControl]=\"inputControl\"\r\n [ngClass]=\"{ 'is-invalid': error }\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [readonly]=\"readonly\"\r\n (keypress)=\"onKeyPress($event)\" [attr.autocomplete]=\"autocomplete || null\" />\r\n } @else {\r\n <input [type]=\"getInputType()\" class=\"form-control\" [placeholder]=\"placeholder\" [(ngModel)]=\"ngModel\"\r\n [ngClass]=\"{ 'is-invalid': error }\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [readonly]=\"readonly\"\r\n (keypress)=\"onKeyPress($event)\" />\r\n }\r\n @if(deFocus){\r\n <span class=\"focus-border\"></span>\r\n }\r\n @if (!inputLoader && showClearButton()) {\r\n <label class=\"clear\" (click)=\"resetInput()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n\r\n @if (price) {\r\n <label class=\"ls-price\">\r\n <i class=\"he he-rupee\"></i>\r\n </label>\r\n }\r\n\r\n @if (type === 'search') {\r\n <label class=\"ls-search\">\r\n <i class=\"he he-search\"></i>\r\n </label>\r\n }\r\n\r\n @if (advSearch) {\r\n <label class=\"rs-search\" (click)=\"onAdvSearchClick()\">\r\n <i class=\"he he-search-adv\"></i>\r\n </label>\r\n }\r\n\r\n @if (search) {\r\n <label class=\"rs-search\" (click)=\"onSearchClick()\">\r\n <i class=\"he he-search\"></i>\r\n </label>\r\n }\r\n\r\n @if (type === 'password' && !disabled) {\r\n <label class=\"toggle-eye\" (click)=\"passwordVisible()\">\r\n <i class=\"he\" [ngClass]=\"showPassword ? 'he-eye-off' : 'he-eye'\"></i>\r\n </label>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Output,\r\n inject,\r\n DestroyRef,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { fromEvent } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[clickOutside]',\r\n standalone: true,\r\n})\r\nexport class ClickOutsideDirective {\r\n @Output() clickOutside = new EventEmitter<MouseEvent>();\r\n\r\n private host = inject(ElementRef);\r\n private document = inject(DOCUMENT);\r\n private destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n fromEvent<MouseEvent>(this.document, 'click')\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((event: MouseEvent) => {\r\n const clickedInside = this.host.nativeElement.contains(event.target);\r\n if (!clickedInside) {\r\n this.clickOutside.emit(event);\r\n }\r\n });\r\n }\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport {\r\n Component, Input, Output, EventEmitter, forwardRef, OnInit, OnDestroy, ViewChild,\r\n ElementRef, HostListener, SimpleChanges, ChangeDetectorRef\r\n} from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, FormControl, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { debounceTime, distinctUntilChanged, Subject, Subscription } from \"rxjs\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\nimport { ClickOutsideDirective } from \"../../../directives/clickoutside.directive\";\r\n\r\n@Component({\r\n selector: \"multiselect-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ClickOutsideDirective\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => MultiselectControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: \"./multiselect-control.component.html\",\r\n styleUrls: [\"./multiselect-control.component.scss\"],\r\n})\r\nexport class MultiselectControl\r\n implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n private subscription: Subscription = new Subscription();\r\n\r\n @Input() title!: string;\r\n @Input() selectedItems: any[] = [];\r\n @Input() required: boolean = false;\r\n @Input() placeholder!: string;\r\n @Input() customClass: string = '';\r\n @Input() clearVal: boolean = true;\r\n @Input() deFocus: boolean = true;\r\n @Input() optionValueProperty: string = \"id\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = \"\";\r\n @Input() showSearch: boolean = false;\r\n @Input() optionDisplayProperty: string = \"displayname\";\r\n @Output() optionsSelected = new EventEmitter<any[]>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n inputControl: FormControl = new FormControl({ value: \"\", disabled: false });\r\n private _options: any[] = [];\r\n @Input()\r\n public set options(arr: any[]) {\r\n this._options = Array.isArray(arr) ? arr : [];\r\n this.filteredOptions = [...this._options];\r\n\r\n // If we previously received an array of primitive IDs, attempt to map them now that options have arrived\r\n if (this._isPrimitivePatch && this._pendingPrimitiveValues.length > 0) {\r\n this._mapPrimitivesToObjects();\r\n }\r\n\r\n this._recomputeSelectAllState();\r\n }\r\n public get options(): any[] {\r\n return this._options;\r\n }\r\n private _disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n private _isPrimitivePatch: boolean = false;\r\n private _pendingPrimitiveValues: any[] = [];\r\n private onChange: (value: any) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n @ViewChild(\"dropdown\", { static: false }) dropdown!: ElementRef;\r\n @ViewChild(\"input\", { static: false }) input!: ElementRef;\r\n\r\n filteredOptions: any[] = [];\r\n isDropdownOpen: boolean = false;\r\n selectAllChecked: boolean = false;\r\n keySearch: string = \"\";\r\n onSearch = new Subject<string>();\r\n selectedItemList: string = \"\";\r\n highlightedIndex: number | null = null;\r\n\r\n private dropdownInitialized = false;\r\n private popperInstance!: PopperInstance;\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n // Subscribe to search‐term changes, debounce, then filter\r\n this.subscription = this.onSearch\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((searchText) => {\r\n this._applyFilter(searchText);\r\n this._recomputeSelectAllState();\r\n });\r\n\r\n // Initialize filteredOptions to match all options\r\n this.filteredOptions = [...this.options];\r\n }\r\n\r\n ngAfterViewChecked() {\r\n if (this.isDropdownOpen && !this.dropdownInitialized) {\r\n this._createPopperInstance();\r\n this.dropdownInitialized = true;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes[\"options\"]) {\r\n // When the parent replaces “options,” we reapply any filtering and “select all” logic\r\n this.filteredOptions = [...this.options];\r\n this._recomputeSelectAllState();\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n // If parent gave us something that is not an array, clear selection\r\n if (!Array.isArray(value)) {\r\n this._isPrimitivePatch = false;\r\n this._pendingPrimitiveValues = [];\r\n this.selectedItems = [];\r\n this.selectedItemList = \"\";\r\n this.selectAllChecked = false;\r\n return;\r\n }\r\n\r\n // CASE A: array of primitive IDs, e.g. [12,17]\r\n if (\r\n value.length > 0 &&\r\n (typeof value[0] === \"string\" || typeof value[0] === \"number\")\r\n ) {\r\n this._isPrimitivePatch = true;\r\n this._pendingPrimitiveValues = [...value];\r\n this._mapPrimitivesToObjects();\r\n this._recomputeSelectAllState();\r\n return;\r\n }\r\n\r\n // CASE B: array of full objects (with `id` or whatever `optionValueProperty` is)\r\n if (\r\n value.length > 0 &&\r\n typeof value[0] === \"object\" &&\r\n value[0][this.optionValueProperty] != null\r\n ) {\r\n // Convert to an array of IDs, then treat exactly like CASE A\r\n const idArray = (value as any[]).map(\r\n (obj) => obj[this.optionValueProperty]\r\n );\r\n this._isPrimitivePatch = true;\r\n this._pendingPrimitiveValues = idArray;\r\n this._mapPrimitivesToObjects();\r\n this._recomputeSelectAllState();\r\n return;\r\n }\r\n\r\n // CASE C: maybe parent passed the exact same object references that already exist in `options`\r\n // In that case, we can just use them directly.\r\n this._isPrimitivePatch = false;\r\n this._pendingPrimitiveValues = [];\r\n this.selectedItems = [...value];\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n this.onChange(this.selectedItems);\r\n this._recomputeSelectAllState();\r\n }\r\n\r\n private _mapPrimitivesToObjects() {\r\n if (\r\n !this._isPrimitivePatch ||\r\n this._pendingPrimitiveValues.length === 0 ||\r\n this._options.length === 0\r\n ) {\r\n return;\r\n }\r\n\r\n // Find matching option‐objects whose ID property is in the pending list\r\n const matched = this._options.filter((opt) =>\r\n this._pendingPrimitiveValues.includes(opt[this.optionValueProperty])\r\n );\r\n\r\n this.selectedItems = matched;\r\n this.selectedItemList = matched\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n // Notify “onChange” with the full‐object selection\r\n this.onChange(this.selectedItems);\r\n\r\n this._isPrimitivePatch = false;\r\n this._pendingPrimitiveValues = [];\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n isSelected(option: any): boolean {\r\n return (\r\n Array.isArray(this.selectedItems) && this.selectedItems.includes(option)\r\n );\r\n }\r\n onBlur(event: FocusEvent) {\r\n this.blurEvent.emit();\r\n // const target = event.relatedTarget as HTMLElement;\r\n // if (\r\n // target &&\r\n // (target.closest(\".option-list\") || target.closest(\".list-filter\"))\r\n // ) {\r\n // return;\r\n // }\r\n this.onTouched();\r\n // setTimeout(() => {\r\n // this.isDropdownOpen = false;\r\n // }, 100);\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (isDisabled) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n // search box\r\n handleInput(event: Event) {\r\n const txt = (event.target as HTMLInputElement).value;\r\n this.onSearch.next(txt);\r\n }\r\n private _applyFilter(value: string) {\r\n const lower = value.toLowerCase();\r\n this.filteredOptions = this._options\r\n .filter((opt) =>\r\n opt[this.optionDisplayProperty]?.toLowerCase().includes(lower)\r\n )\r\n .sort((a, b) => {\r\n const aIndex = a[this.optionDisplayProperty]\r\n .toLowerCase()\r\n .indexOf(lower);\r\n const bIndex = b[this.optionDisplayProperty]\r\n .toLowerCase()\r\n .indexOf(lower);\r\n return aIndex - bIndex;\r\n });\r\n\r\n // If an item was previously selected but is no longer in filteredOptions, remove it temporarily\r\n this.selectedItems = this.selectedItems.filter((item) =>\r\n this.filteredOptions.includes(item)\r\n );\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n this.onChange(this.selectedItems);\r\n this.optionsSelected.emit(this.selectedItems);\r\n if (this.filteredOptions.length > 0) {\r\n this.highlightedIndex = this._options.indexOf(this.filteredOptions[0]);\r\n } else {\r\n this.highlightedIndex = null;\r\n }\r\n\r\n this._recomputeSelectAllState();\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n // checkbox events\r\n private _recomputeSelectAllState() {\r\n if (!this.filteredOptions || this.filteredOptions.length === 0) {\r\n this.selectAllChecked = false;\r\n return;\r\n }\r\n this.selectAllChecked = this.filteredOptions.every((opt) =>\r\n this.selectedItems.includes(opt)\r\n );\r\n }\r\n onSelectAllChange(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n this.selectAllChecked = input.checked;\r\n this._toggleSelectAll();\r\n }\r\n private _toggleSelectAll() {\r\n if (this.selectAllChecked) {\r\n // Add all currently filtered options to selection\r\n this.selectedItems = Array.from(\r\n new Set([...this.selectedItems, ...this.filteredOptions])\r\n );\r\n } else {\r\n // Remove all filtered options from selection\r\n this.selectedItems = this.selectedItems.filter(\r\n (item) => !this.filteredOptions.includes(item)\r\n );\r\n }\r\n\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n this.onChange(this.selectedItems);\r\n this.optionsSelected.emit(this.selectedItems);\r\n }\r\n removeSelectedOption(option: any) {\r\n this.selectedItems = this.selectedItems.filter((item) => item !== option);\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n this.onChange(this.selectedItems);\r\n this.onTouched();\r\n this.optionsSelected.emit(this.selectedItems);\r\n }\r\n toggleCheckbox(option: any) {\r\n if (this.isSelected(option)) {\r\n this.selectedItems = this.selectedItems.filter((item) => item !== option);\r\n } else {\r\n this.selectedItems = [...this.selectedItems, option];\r\n }\r\n\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n // Update “select all” checkbox\r\n this._recomputeSelectAllState();\r\n\r\n // Notify form that selection changed\r\n this.onChange(this.selectedItems);\r\n this.onTouched();\r\n this.optionsSelected.emit(this.selectedItems);\r\n }\r\n\r\n // Keyboard navigation inside the dropdown\r\n onKeyDown(event: KeyboardEvent) {\r\n if (this.isDropdownOpen) {\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this._highlightNext();\r\n event.preventDefault();\r\n break;\r\n case \"ArrowUp\":\r\n this._highlightPrevious();\r\n event.preventDefault();\r\n break;\r\n case \"Enter\":\r\n if (\r\n this.highlightedIndex !== null &&\r\n this.highlightedIndex < this.filteredOptions.length\r\n ) {\r\n this.toggleCheckbox(this.filteredOptions[this.highlightedIndex]);\r\n }\r\n event.preventDefault();\r\n break;\r\n case \"Escape\":\r\n this.isDropdownOpen = false;\r\n break;\r\n case \"Tab\":\r\n this.isDropdownOpen = false;\r\n break;\r\n }\r\n } else if (event.key === \" \") {\r\n this.toggleDropdown();\r\n event.preventDefault();\r\n }\r\n }\r\n @HostListener(\"window:keydown\", [\"$event\"])\r\n handleWindowKeydown(event: KeyboardEvent) {\r\n if (event.key === \"Tab\") {\r\n this.isDropdownOpen = false;\r\n }\r\n }\r\n private _highlightNext() {\r\n if (\r\n this.highlightedIndex === null ||\r\n this.highlightedIndex === this.filteredOptions.length - 1\r\n ) {\r\n this.highlightedIndex = 0;\r\n } else {\r\n this.highlightedIndex!++;\r\n }\r\n this._scrollToHighlighted();\r\n }\r\n private _highlightPrevious() {\r\n if (this.highlightedIndex === null || this.highlightedIndex === 0) {\r\n this.highlightedIndex = this.filteredOptions.length - 1;\r\n } else {\r\n this.highlightedIndex!--;\r\n }\r\n this._scrollToHighlighted();\r\n }\r\n private _scrollToHighlighted() {\r\n setTimeout(() => {\r\n const container = document.querySelector(\".option-list\");\r\n if (!container) return;\r\n const highlighted = container.querySelector(\".highlighted\");\r\n if (highlighted) {\r\n (highlighted as HTMLElement).scrollIntoView({ block: \"nearest\" });\r\n }\r\n }, 0);\r\n }\r\n\r\n // popper\r\n private _createPopperInstance() {\r\n if (!this.dropdown || !this.input) return;\r\n this.popperInstance = createPopper(\r\n this.input.nativeElement,\r\n this.dropdown.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, 1],\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top-start\", \"bottom-start\"],\r\n },\r\n },\r\n ],\r\n }\r\n );\r\n }\r\n\r\n // toggle, reset, close and clear\r\n toggleDropdown() {\r\n if (this.inputControl.disabled || this.readonly) return;\r\n this.isDropdownOpen = !this.isDropdownOpen;\r\n this.dropdownInitialized = false;\r\n if (this.isDropdownOpen) {\r\n this.filteredOptions = [...this.options];\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n selectListOutsideClick() {\r\n this.isDropdownOpen = false;\r\n }\r\n resetSelection() {\r\n this.selectedItems = [];\r\n this.selectedItemList = \"\";\r\n this.onChange([]);\r\n this.onTouched();\r\n this.isDropdownOpen = false;\r\n this.selectAllChecked = false;\r\n this.selectionCleared.emit();\r\n }\r\n onCloseDropdown(): void {\r\n this.isDropdownOpen = false;\r\n this._recomputeSelectAllState();\r\n }\r\n}\r\n","<div class=\"form-group multi-select\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\" (clickOutside)=\"selectListOutsideClick()\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n <input #input type=\"text\" class=\"form-control\" placeholder=\"{{ placeholder }}\" [formControl]=\"inputControl\"\r\n [ngClass]=\"{'is-invalid': error}\" (blur)=\"onBlur($event)\" (click)=\"toggleDropdown()\" readonly\r\n [value]=\"selectedItemList\" (keydown)=\"onKeyDown($event)\" [attr.autocomplete]=\"autocomplete || null\" />\r\n\r\n @if (deFocus) {\r\n <span class=\"focus-border\"></span>\r\n }\r\n\r\n @if (!inputLoader && isDropdownOpen && clearVal && selectedItems.length > 0) {\r\n <label class=\"clear\" (click)=\"resetSelection()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n\r\n @if (!inputLoader) {\r\n <label class=\"arrow\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </label> }\r\n\r\n @if (isDropdownOpen) {\r\n <div #dropdown class=\"option-list\">\r\n @if (showSearch && options.length > 3) {\r\n <div class=\"list-filter\">\r\n <div>\r\n <label class=\"checkbox-container select-all\">\r\n <input type=\"checkbox\" [checked]=\"selectAllChecked\" (change)=\"onSelectAllChange($event)\" tabindex=\"-1\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n <div class=\"form-group\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search...\" (input)=\"handleInput($event) \"\r\n (keydown)=\"onKeyDown($event)\" />\r\n </div>\r\n <div class=\"ms-close\">\r\n <button type=\"button\" class=\"icon-button\">\r\n <a (click)=\"onCloseDropdown()\"><i class=\"he he-close\"></i></a>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"list-wrap\">\r\n @for (option of filteredOptions; track option[optionDisplayProperty]; let i = $index) {\r\n <div class=\"list-item\" (change)=\"toggleCheckbox(option)\" [ngClass]=\"{ 'highlighted': i === highlightedIndex }\">\r\n <label class=\"checkbox-container multi-select\">\r\n <input type=\"checkbox\" [checked]=\"isSelected(option)\" tabindex=\"-1\" />\r\n <span class=\"checkmark\"></span>\r\n {{ option[optionDisplayProperty] }}\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (filteredOptions.length === 0) {\r\n <div class=\"no-results\">No results found</div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import { CommonModule } from \"@angular/common\";\r\nimport { Component, Input, Output, EventEmitter, forwardRef, OnInit, OnDestroy, ElementRef, ViewChild, SimpleChanges } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl } from \"@angular/forms\";\r\nimport { debounceTime, distinctUntilChanged, Subject, Subscription } from \"rxjs\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\nimport { ClickOutsideDirective } from \"../../../directives/clickoutside.directive\";\r\n\r\n@Component({\r\n selector: \"select-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ClickOutsideDirective\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: \"./select-control.component.html\",\r\n styleUrls: [\"./select-control.component.scss\"],\r\n})\r\nexport class SelectControl implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n private subscription: Subscription = new Subscription();\r\n\r\n @Input() optionDisplayProperty: string = \"displayname\";\r\n @Input() required: boolean = false;\r\n @Input() placeholder!: string;\r\n @Input() customClass: string = '';\r\n @Input() clearVal: boolean = true;\r\n @Input() deFocus: boolean = true;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = \"\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() isAddNewItem: boolean = false;\r\n @Output() optionSelected = new EventEmitter<any>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() addNewItemClicked: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() optionPatched = new EventEmitter<any>();\r\n\r\n @Input() title!: string;\r\n private _options: any[] = [];\r\n @Input()\r\n set options(opts: any[]) {\r\n this._options = opts;\r\n this.filteredOptions = [...this._options];\r\n this.highlightSelectedItem();\r\n this.processValueBuffer();\r\n }\r\n get options(): any[] {\r\n return this._options;\r\n }\r\n @Input() readonly: boolean = false;\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n @ViewChild(\"dropdown\", { static: false }) dropdown!: ElementRef;\r\n @ViewChild(\"input\", { static: false }) input!: ElementRef;\r\n\r\n filteredOptions: any[] = [];\r\n keySearch: string = \"\";\r\n selectedItem: any = null;\r\n onSearch = new Subject<string>();\r\n inputControl: FormControl = new FormControl({ value: \"\", disabled: false });\r\n isDropdownOpen = false;\r\n highlightedIndex: number | null = null;\r\n\r\n private onChange: (value: any) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n private valueBuffer: any = null;\r\n private _disabled: boolean = false;\r\n private dropdownInitialized = false;\r\n\r\n private popperInstance!: PopperInstance;\r\n\r\n ngOnInit() {\r\n this.subscription = this.onSearch\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((searchText) => {\r\n this.focusOption(searchText);\r\n this.keySearch = \"\";\r\n });\r\n\r\n this.filteredOptions = this._options;\r\n\r\n // Sync the input control value with the selected item\r\n this.inputControl.valueChanges.subscribe((value) => {\r\n this.onChange(value);\r\n });\r\n }\r\n\r\n ngAfterViewChecked() {\r\n if (this.isDropdownOpen && !this.dropdownInitialized) {\r\n this.createPopperInstance();\r\n this.dropdownInitialized = true;\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes[\"options\"]) {\r\n this.filteredOptions = [...this._options];\r\n this.highlightSelectedItem();\r\n }\r\n if (changes[\"disabled\"]) {\r\n this.disabled = changes[\"disabled\"].currentValue;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.inputControl.disabled !== this.disabled) {\r\n this.setDisabledState(this.disabled);\r\n }\r\n this.valueBuffer = value;\r\n this.processValueBuffer();\r\n }\r\n\r\n processValueBuffer(): void {\r\n if (\r\n this.valueBuffer !== null &&\r\n this._options &&\r\n this._options.length > 0\r\n ) {\r\n // Try to match selected item by ID\r\n const matchedItem = this._options.find(\r\n (option) => option.id === this.valueBuffer\r\n );\r\n\r\n if (matchedItem) {\r\n this.selectedItem = matchedItem;\r\n const displayValue = matchedItem[this.optionDisplayProperty];\r\n this.inputControl.setValue(displayValue, { emitEvent: false });\r\n this.filteredOptions = [...this._options];\r\n this.onTouched();\r\n this.inputControl.markAsDirty();\r\n this.optionPatched.emit(this.selectedItem);\r\n } else {\r\n // If not found, don't clear the field automatically\r\n // You may choose to keep it or clear it. Here we clear it.\r\n this.selectedItem = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.highlightedIndex = null;\r\n }\r\n } else if (this.valueBuffer === null) {\r\n this.selectedItem = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n setTimeout(() => {\r\n this.isDropdownOpen = false;\r\n }, 300);\r\n }\r\n onKeyDown(event: KeyboardEvent) {\r\n const isAlphabetOrNumberKey = /^[a-zA-Z0-9]$/.test(event.key);\r\n if (this.isDropdownOpen) {\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this.highlightNext();\r\n event.preventDefault();\r\n break;\r\n case \"ArrowUp\":\r\n this.highlightPrevious();\r\n event.preventDefault();\r\n break;\r\n case \"Enter\":\r\n if (this.highlightedIndex !== null) {\r\n this.selectOption(this.filteredOptions[this.highlightedIndex]);\r\n }\r\n event.preventDefault();\r\n break;\r\n case \"Escape\":\r\n this.isDropdownOpen = false;\r\n break;\r\n default:\r\n if (isAlphabetOrNumberKey) {\r\n this.keySearch += event.key.toString();\r\n if (this.keySearch !== \"\") {\r\n this.onSearch.next(this.keySearch);\r\n }\r\n }\r\n break;\r\n }\r\n } else if (event.key === \" \") {\r\n this.toggleDropdown();\r\n event.preventDefault();\r\n }\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (this.disabled) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n selectOption(option: any) {\r\n if (this.selectedItem !== option) {\r\n this.selectedItem = option;\r\n this.isDropdownOpen = false;\r\n const displayValue = this.selectedItem[this.optionDisplayProperty];\r\n this.inputControl.setValue(displayValue, { emitEvent: false });\r\n this.onChange(this.selectedItem.id);\r\n this.onTouched();\r\n this.inputControl.markAsDirty();\r\n this.optionSelected.emit(this.selectedItem);\r\n }\r\n }\r\n\r\n // highlight\r\n highlightSelectedItem() {\r\n const selectedIndex = this.filteredOptions.findIndex(\r\n (option) => option === this.selectedItem\r\n );\r\n if (selectedIndex !== -1) {\r\n this.highlightedIndex = selectedIndex;\r\n this.scrollToHighlighted();\r\n } else {\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n highlightNext() {\r\n if (\r\n this.highlightedIndex === null ||\r\n this.highlightedIndex === this.filteredOptions.length - 1\r\n ) {\r\n this.highlightedIndex = 0;\r\n } else {\r\n this.highlightedIndex++;\r\n }\r\n this.scrollToHighlighted();\r\n }\r\n highlightPrevious() {\r\n if (this.highlightedIndex === null || this.highlightedIndex === 0) {\r\n this.highlightedIndex = this.filteredOptions.length - 1;\r\n } else {\r\n this.highlightedIndex--;\r\n }\r\n this.scrollToHighlighted();\r\n }\r\n focusOption(value: string) {\r\n const filterValue = value.toLowerCase();\r\n let foundIndex = this._options.findIndex(\r\n (option) =>\r\n option[this.optionDisplayProperty]?.toLowerCase() === filterValue\r\n );\r\n if (foundIndex === -1) {\r\n foundIndex = this._options.findIndex((option) =>\r\n option[this.optionDisplayProperty]\r\n ?.toLowerCase()\r\n .startsWith(filterValue)\r\n );\r\n }\r\n if (foundIndex === -1) {\r\n foundIndex = this._options.findIndex((option) =>\r\n option[this.optionDisplayProperty]?.toLowerCase().includes(filterValue)\r\n );\r\n }\r\n\r\n if (foundIndex !== -1) {\r\n this.highlightedIndex = foundIndex;\r\n this.scrollToHighlighted();\r\n } else {\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n scrollToHighlighted() {\r\n setTimeout(() => {\r\n const container = document.querySelector(\".option-list\");\r\n if (container) {\r\n const highlighted = container.querySelector(\".highlighted\");\r\n if (highlighted) {\r\n highlighted.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }\r\n }, 0);\r\n }\r\n\r\n // actions\r\n onAddNewItemClick(): void {\r\n this.addNewItemClicked.emit();\r\n }\r\n\r\n // popper\r\n createPopperInstance() {\r\n if (this.dropdown) {\r\n this.popperInstance = createPopper(\r\n this.input.nativeElement,\r\n this.dropdown.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, 1],\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top-start\", \"bottom-start\"],\r\n },\r\n },\r\n ],\r\n }\r\n );\r\n }\r\n }\r\n\r\n // toggle, open, hide, reset and clear\r\n toggleDropdown() {\r\n if (!this.inputControl.disabled && !this.readonly) {\r\n this.isDropdownOpen = !this.isDropdownOpen;\r\n this.dropdownInitialized = false;\r\n if (this.isDropdownOpen && this.selectedItem) {\r\n this.highlightSelectedItem();\r\n }\r\n }\r\n }\r\n openDropdown(event: KeyboardEvent) {\r\n if (event.ctrlKey && event.key === \"Enter\") {\r\n this.toggleDropdown();\r\n }\r\n }\r\n selectListOutsideClick(e: Event) {\r\n this.isDropdownOpen = false;\r\n }\r\n hideDropdown() {\r\n setTimeout(() => {\r\n this.isDropdownOpen = false;\r\n }, 200);\r\n }\r\n resetSelection() {\r\n this.selectionCleared.emit();\r\n this.selectedItem = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.onChange(null);\r\n this.onTouched();\r\n this.valueBuffer = null;\r\n this.isDropdownOpen = false;\r\n }\r\n}\r\n","<div class=\"form-group select\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\" (clickOutside)=\"selectListOutsideClick($event)\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"placeholder ? placeholder : ''\"\r\n [formControl]=\"inputControl\" [ngClass]=\"{ 'is-invalid': error }\" (blur)=\"onBlur()\" (click)=\"toggleDropdown()\"\r\n (keydown)=\"onKeyDown($event)\" readonly [attr.autocomplete]=\"autocomplete || null\" />\r\n\r\n @if (deFocus) {\r\n <span class=\"focus-border\"></span>\r\n }\r\n\r\n @if (!inputLoader && isDropdownOpen && selectedItem && clearVal) {\r\n <label class=\"clear\" (click)=\"resetSelection()\">\r\n <i class=\"he he-close\"></i>\r\n </label> }\r\n @if (!inputLoader) {\r\n <label class=\"arrow\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </label>\r\n }\r\n\r\n @if (isDropdownOpen) {\r\n <div #dropdown class=\"option-list\">\r\n <div class=\"no-results\" *ngIf=\"filteredOptions.length === 0\">\r\n <div>No results found</div>\r\n <div *ngIf=\"isAddNewItem\" (click)=\"onAddNewItemClick()\" class=\"btn-new\">Add New Item</div>\r\n </div>\r\n\r\n @for (option of filteredOptions; track option[optionDisplayProperty]; let idx = $index) {\r\n <div class=\"list-item\" [ngClass]=\"{\r\n 'active': option === selectedItem,\r\n 'highlighted': idx === highlightedIndex\r\n }\" (click)=\"selectOption(option)\">\r\n @if (option.countryCode) {\r\n <img src=\"https://flagcdn.com/w80/{{ option.countryCode }}.png\" width=\"20\" alt=\"{{ option.countryCode }} flag\" loading=\"lazy\" />\r\n }\r\n {{ option[optionDisplayProperty] }}\r\n </div>\r\n }\r\n\r\n </div>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import { Component, Input, Output, EventEmitter, forwardRef, Renderer2, ElementRef, ViewChild } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'switch-control',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SwitchControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './switch-control.component.html',\r\n styleUrls: ['./switch-control.component.scss']\r\n})\r\nexport class SwitchControl implements ControlValueAccessor {\r\n\r\n @Input() title!: string;\r\n @Input() customClass: string = '';\r\n @Input() readonly: boolean = false;\r\n @Input() set disabled(value: boolean) {\r\n this._disabled = value;\r\n this.setDisabledState(value);\r\n }\r\n @Input()\r\n set checked(value: boolean) {\r\n this._checked = value;\r\n this.switchControl.setValue(value, { emitEvent: false }); // set without emitting\r\n }\r\n @Output() switchChange = new EventEmitter<boolean>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n @ViewChild('switchContainer') switchContainer!: ElementRef;\r\n\r\n get checked(): boolean {\r\n return this._checked;\r\n }\r\n\r\n private _checked: boolean = false;\r\n private _disabled = false;\r\n switchControl = new FormControl<boolean>({ value: false, disabled: this._disabled });\r\n\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _elementRef: ElementRef\r\n ) {\r\n this.switchControl.valueChanges.subscribe(value => {\r\n if (this.readonly) return;\r\n this.onChange(value ?? false);\r\n this.onTouched();\r\n this.switchChange.emit(value ?? false);\r\n });\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value !== undefined) {\r\n this.switchControl.setValue(value, { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onFocus() {\r\n this.switchContainer.nativeElement.classList.add('focused');\r\n }\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n this.switchContainer.nativeElement.classList.remove('focused');\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\r\n if (isDisabled) {\r\n this.switchControl.disable();\r\n } else {\r\n this.switchControl.enable();\r\n }\r\n }\r\n\r\n}\r\n","<label class=\"switch-container\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\" #switchContainer>\r\n <input type=\"checkbox\" [formControl]=\"switchControl\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\r\n <span class=\"switch-slider\"></span>\r\n</label>","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n ElementRef,\n ViewChild,\n AfterViewInit,\n HostListener,\n forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Lightweight rich-text editor built on a `contenteditable` element and the\n * browser's `document.execCommand` rich-editing API (the de-facto standard for\n * simple in-browser editors).\n *\n * Implemented as a `ControlValueAccessor`, so it works with `[(ngModel)]`,\n * `formControlName` and `[formControl]`. The emitted value is the editor's\n * inner HTML string.\n */\n@Component({\n selector: 'app-text-editor',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './text-editor.component.html',\n styleUrl: './text-editor.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextEditor),\n multi: true,\n },\n ],\n})\nexport class TextEditor implements ControlValueAccessor, AfterViewInit {\n\n @Input() header = true;\n @Input() media = true;\n @Input() link = true;\n @Input() placeholder = 'Type here...';\n @Input() readonly = false;\n\n /** Disabled state, set by Reactive Forms through `setDisabledState`. */\n disabled = false;\n\n @ViewChild('editor') editorRef!: ElementRef<HTMLDivElement>;\n\n private onChange: (value: string) => void = () => { };\n private onTouch: () => void = () => { };\n\n /** HTML received via `writeValue` before the view (and `editorRef`) is ready. */\n private pendingValue = '';\n private viewInitialized = false;\n\n /** Last selection range observed inside the editor (restored before commands). */\n private savedRange: Range | null = null;\n\n ngAfterViewInit(): void {\n this.viewInitialized = true;\n this.editorRef.nativeElement.innerHTML = this.pendingValue;\n }\n\n // ---- ControlValueAccessor ----\n writeValue(value: string): void {\n this.pendingValue = value ?? '';\n if (this.viewInitialized && this.editorRef) {\n this.editorRef.nativeElement.innerHTML = this.pendingValue;\n }\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // ---- Editor events (wired from the template) ----\n onInput(): void {\n this.onChange(this.editorRef.nativeElement.innerHTML);\n }\n onTouched(): void {\n this.onTouch();\n }\n\n /** Remember the caret/selection whenever it sits inside the editor. */\n @HostListener('document:selectionchange')\n saveSelection(): void {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0 || !this.editorRef) return;\n const range = selection.getRangeAt(0);\n if (this.editorRef.nativeElement.contains(range.commonAncestorContainer)) {\n this.savedRange = range.cloneRange();\n }\n }\n\n // ---- Inline formatting ----\n applyInlineStyle(style: 'bold' | 'italic' | 'underline'): void {\n this.exec(style);\n }\n\n // ---- Block formatting (headings / paragraph) ----\n applyBlockFormat(block: 'h1' | 'h2' | 'p'): void {\n this.exec('formatBlock', `<${block}>`);\n }\n\n // ---- Lists ----\n applyList(listType: 'ul' | 'ol'): void {\n this.exec(listType === 'ul' ? 'insertUnorderedList' : 'insertOrderedList');\n }\n\n // ---- Indentation ----\n indent(): void {\n this.exec('indent');\n }\n outdent(): void {\n this.exec('outdent');\n }\n\n // ---- Alignment ----\n setAlignment(alignment: 'left' | 'center' | 'right' | 'justify'): void {\n const command = {\n left: 'justifyLeft',\n center: 'justifyCenter',\n right: 'justifyRight',\n justify: 'justifyFull',\n }[alignment];\n this.exec(command);\n }\n\n // ---- Color / highlight ----\n applyColor(event: Event): void {\n this.exec('foreColor', (event.target as HTMLInputElement).value, true);\n }\n applyHighlight(event: Event): void {\n this.exec('hiliteColor', (event.target as HTMLInputElement).value, true);\n }\n\n // ---- Links / images ----\n createLink(): void {\n const url = prompt('Enter URL', 'https://');\n if (!url) return;\n this.exec('createLink', url);\n }\n insertImage(): void {\n const url = prompt('Enter image URL:');\n if (!url) return;\n this.exec('insertImage', url);\n }\n\n // ---- Undo / redo / clear ----\n undo(): void {\n this.exec('undo');\n }\n redo(): void {\n this.exec('redo');\n }\n clearFormatting(): void {\n this.exec('removeFormat');\n }\n\n /**\n * Focus the editor, restore the last selection, run a rich-text command and\n * propagate the resulting HTML. No-op while readonly/disabled.\n */\n private exec(command: string, value?: string, useCss = false): void {\n if (this.disabled || this.readonly) return;\n this.editorRef.nativeElement.focus();\n this.restoreSelection();\n // `useCss` keeps colors as inline styles; semantic tags (<b>, <i>…) otherwise.\n document.execCommand('styleWithCSS', false, String(useCss));\n document.execCommand(command, false, value);\n this.onInput();\n }\n\n private restoreSelection(): void {\n if (!this.savedRange) return;\n const selection = window.getSelection();\n if (!selection) return;\n selection.removeAllRanges();\n selection.addRange(this.savedRange);\n }\n}\n","<div class=\"text-editor\" [ngClass]=\"{'readonly': readonly || disabled}\">\n <div class=\"toolbar\" *ngIf=\"!readonly && !disabled\">\n <div class=\"toolbar-items\">\n <button type=\"button\" (click)=\"applyInlineStyle('bold')\" tooltip=\"Bold\">\n <i class=\"he he-bold\"></i>\n </button>\n <button type=\"button\" (click)=\"applyInlineStyle('italic')\" tooltip=\"italic\">\n <i class=\"he he-italics\"></i>\n </button>\n <button type=\"button\" (click)=\"applyInlineStyle('underline')\" tooltip=\"Underline\">\n <i class=\"he he-underline\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\" *ngIf=\"header\">\n <button type=\"button\" (click)=\"applyBlockFormat('h1')\" tooltip=\"Header 1\">\n <i class=\"he he-heading-1\"></i>\n </button>\n <button type=\"button\" (click)=\"applyBlockFormat('h2')\" tooltip=\"Header 2\">\n <i class=\"he he-heading-2\"></i>\n </button>\n </div>\n <div class=\"toolbar-items more-gap\">\n <div class=\"input-wrap\" tooltip=\"Text Color\">\n <i class=\"he he-text-drop\"></i>\n <input type=\"color\" (change)=\"applyColor($event)\" />\n </div>\n <div class=\"input-wrap\" tooltip=\"Background Color\">\n <i class=\"he he-background-drop\"></i>\n <input type=\"color\" (change)=\"applyHighlight($event)\" />\n </div>\n </div>\n <div class=\"toolbar-items\">\n <button type=\"button\" (click)=\"setAlignment('left')\" tooltip=\"Justify Left\">\n <i class=\"he he-left-align\"></i>\n </button>\n <button type=\"button\" (click)=\"setAlignment('center')\" tooltip=\"Justify Center\">\n <i class=\"he he-center-align\"></i>\n </button>\n <button type=\"button\" (click)=\"setAlignment('right')\" tooltip=\"Justify Right\">\n <i class=\"he he-right-align\"></i>\n </button>\n <button type=\"button\" (click)=\"setAlignment('justify')\" tooltip=\"Justify Full\">\n <i class=\"he he-justify\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\">\n <button type=\"button\" (click)=\"indent()\" tooltip=\"Indent\">\n <i class=\"he he-text-indent-left\"></i>\n </button>\n <button type=\"button\" (click)=\"outdent()\" tooltip=\"Outdent\">\n <i class=\"he he-text-indent-right\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\" *ngIf=\"media\">\n <button type=\"button\" (click)=\"applyList('ul')\" tooltip=\"Unordered list\">\n <i class=\"he he-unordered-list\"></i>\n </button>\n <button type=\"button\" (click)=\"applyList('ol')\" tooltip=\"Ordered list\">\n <i class=\"he he-ordered-list\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\" *ngIf=\"link\">\n <button type=\"button\" (click)=\"createLink()\" tooltip=\"Link\">\n <i class=\"he he-link\"></i>\n </button>\n <button type=\"button\" (click)=\"insertImage()\" tooltip=\"Image\">\n <i class=\"he he-image\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\">\n <button type=\"button\" (click)=\"undo()\" tooltip=\"Undo\">\n <i class=\"he he-undo\"></i>\n </button>\n <button type=\"button\" (click)=\"redo()\" tooltip=\"Redo\">\n <i class=\"he he-redo\"></i>\n </button>\n </div>\n <div class=\"toolbar-items\">\n <button type=\"button\" (click)=\"clearFormatting()\" tooltip=\"Clear Formatting\">\n <i class=\"he he-text-clear-format\"></i>\n </button>\n </div>\n </div>\n\n <div #editor class=\"editor-content\" [attr.contenteditable]=\"(readonly || disabled) ? 'false' : 'true'\" (input)=\"onInput()\" (blur)=\"onTouched()\"\n [attr.data-placeholder]=\"placeholder\">\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'textarea-control',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TextareaControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './textarea-control.component.html',\r\n styleUrl: './textarea-control.component.scss'\r\n})\r\nexport class TextareaControl {\r\n @Input() title!: string;\r\n @Input() placeholder: string = '';\r\n @Input() customClass: string = '';\r\n @Input() clearVal: boolean = true;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() error: boolean = false; // New input for error state\r\n @Input() errorMessage: string = ''; // New input for error message\r\n @Output() textareaChange = new EventEmitter<string>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n textareaControl = new FormControl('');\r\n\r\n constructor() {\r\n this.textareaControl.valueChanges.subscribe(value => {\r\n if (this.readonly) return;\r\n this.onChange(value);\r\n this.onTouched();\r\n this.textareaChange.emit(value ?? '');\r\n });\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value !== undefined) {\r\n this.textareaControl.setValue(value, { emitEvent: false });\r\n }\r\n if (this.textareaControl.disabled !== this.disabled) {\r\n this.setDisabledState(this.disabled);\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.textareaControl.disable({ emitEvent: false });\r\n } else {\r\n this.textareaControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n // clear\r\n resetTextarea() {\r\n this.textareaControl.setValue('');\r\n this.selectionCleared.emit();\r\n }\r\n\r\n}\r\n","<div class=\"form-group textarea\" [ngClass]=\"customClass\" [class.readonly]=\"readonly\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{'required' : required}\">{{ title }}</label>\r\n }\r\n <textarea class=\"form-control\" [placeholder]=\"placeholder\" [formControl]=\"textareaControl\"\r\n [ngClass]=\"{ 'is-invalid': error }\" [readonly]=\"readonly\" (blur)=\"onBlur()\"></textarea>\r\n\r\n <span class=\"focus-border\"></span>\r\n\r\n @if (textareaControl.value && clearVal && !readonly) {\r\n <label class=\"clear\" (click)=\"resetTextarea()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","/*\r\n * Public API Surface of heal-lib\r\n */\r\n\r\nexport { AutocompleteControl } from './lib/controls/autocomplete-control/autocomplete-control.component';\r\nexport { CalendarControl } from './lib/controls/calendar-control/calendar-control.component';\r\nexport { CheckboxControl } from './lib/controls/checkbox-control/checkbox-control.component';\r\nexport { InputControl } from './lib/controls/input-control/input-control.component';\r\nexport { MultiselectControl } from './lib/controls/multiselect-control/multiselect-control.component';\r\nexport { SelectControl } from './lib/controls/select-control/select-control.component';\r\nexport { SwitchControl } from './lib/controls/switch-control/switch-control.component';\r\nexport { TextEditor } from './lib/controls/text-editor/text-editor.component';\r\nexport { TextareaControl } from './lib/controls/textarea-control/textarea-control.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexheal-lib",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.1.0",
6
6
  "@angular/core": "^20.1.0"