carriera-intern-components 1.1.194 → 1.1.195
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/input/directives/number-format.directive.d.ts +6 -1
- package/app/components/input/input.component.d.ts +9 -3
- package/app/components/input/models/dropdown.model.d.ts +15 -0
- package/app/components/input/models/input.model.d.ts +7 -5
- package/app/components/input/pipes/filter-by-search.pipe.d.ts +1 -1
- package/app/utils/constants/input-character-sets.constants.d.ts +4 -4
- package/fesm2022/carriera-intern-components.mjs +115 -9
- package/fesm2022/carriera-intern-components.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carriera-intern-components.mjs","sources":["../../../projects/carriera-intern-components/src/app/utils/autofill-validators.ts","../../../projects/carriera-intern-components/src/app/utils/constants/input-character-sets.constants.ts","../../../projects/carriera-intern-components/src/app/components/input/models/input.model.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/remap-pm-icons.pipe.ts","../../../projects/carriera-intern-components/src/app/components/pm/pm.component.ts","../../../projects/carriera-intern-components/src/app/components/pm/pm.component.html","../../../projects/carriera-intern-components/src/app/pipes/number-format.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/error-message.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/highlight-search.ts","../../../projects/carriera-intern-components/src/app/pipes/currency.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/filter-by-search.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/helpers/mask.helper.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/password.directive.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/number-format.directive.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/mask.directive.ts","../../../projects/carriera-intern-components/src/app/components/avatar/pipes/initials.pipe.ts","../../../projects/carriera-intern-components/src/app/components/avatar/avatar.component.ts","../../../projects/carriera-intern-components/src/app/components/avatar/avatar.component.html","../../../projects/carriera-intern-components/src/app/components/input/input.component.ts","../../../projects/carriera-intern-components/src/app/components/input/input.component.html","../../../projects/carriera-intern-components/src/app/pipes/bytes-to-human-readable.pipe.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.html","../../../projects/carriera-intern-components/src/app/services/document.service.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-dropdown-arrow-class.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-placeholder-icon.class.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-clear-class.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/show-clear.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-date-time-container-class.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/services/calendar-datetime-picker.service.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/strategy/calendar-strategy.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/utils/constants/custom-datetime-pickers.constants.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-main-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-list-preview-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/pipes/calendar-months.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-left-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-type-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-scroll-type-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/config.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/enums/input-config-name-string.enum.ts","../../../projects/carriera-intern-components/src/app/enums/general-actions.enum.ts","../../../projects/carriera-intern-components/src/app/directives/hover-svg-directives.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.html","../../../projects/carriera-intern-components/src/app/enums/string-placeholder.enum.ts","../../../projects/carriera-intern-components/src/app/enums/alignment.enum.ts","../../../projects/carriera-intern-components/src/app/components/copy/copy.component.ts","../../../projects/carriera-intern-components/src/app/components/copy/copy.component.html","../../../projects/carriera-intern-components/src/app/components/input-address/enums/input-address-layers-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-address/enums/input-address-type-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-address/input-address.component.ts","../../../projects/carriera-intern-components/src/app/components/input-address/input-address.component.html","../../../projects/carriera-intern-components/src/public-api.ts","../../../projects/carriera-intern-components/src/carriera-intern-components.ts"],"sourcesContent":["import {\n AbstractControl,\n ValidatorFn,\n Validators,\n ValidationErrors,\n} from '@angular/forms';\n\n// Autofill interface\ninterface AutofillableFormControl extends AbstractControl {\n _autofilled?: boolean;\n}\n\n// More flexible validator type to handle different AbstractControl versions\ntype FlexibleValidatorFn = (control: any) => ValidationErrors | null;\n\n/**\n * Creates a validator that ignores validation rules when the control is autofilled.\n * This can be used by components to create form controls with autofill support.\n * @param validators - Array of validators to apply when not autofilled\n * @returns A validator function that bypasses validation for autofilled controls\n */\nexport function ignoreWhenAutofilled(\n ...validators: FlexibleValidatorFn[]\n): ValidatorFn {\n const composite = Validators.compose(validators as ValidatorFn[]);\n return (ctrl: AbstractControl): ValidationErrors | null =>\n (ctrl as AutofillableFormControl)._autofilled\n ? null\n : composite\n ? composite(ctrl)\n : null;\n}\n","export const INPUT_CHARACTER_SETS = {\n DIGITS: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\n FRENCH_LETTERS: [\n 'ç',\n 'é',\n 'â',\n 'ê',\n 'î',\n 'ô',\n 'û',\n 'à',\n 'è',\n 'ì',\n 'ò',\n 'ù',\n 'ë',\n 'ï',\n 'ü',\n ],\n\n LETTERS: [\n 'a',\n 'b',\n 'c',\n 'd',\n 'e',\n 'f',\n 'g',\n 'h',\n 'i',\n 'j',\n 'k',\n 'l',\n 'm',\n 'n',\n 'o',\n 'p',\n 'q',\n 'r',\n 's',\n 't',\n 'u',\n 'v',\n 'w',\n 'x',\n 'y',\n 'z',\n ],\n\n // Special characters\n BASIC_PUNCTUATION: ['.', ',', '!', '?', ';', ':'],\n COMMON_SYMBOLS: [\n '@',\n '#',\n '$',\n '%',\n '&',\n '*',\n '+',\n '-',\n '=',\n '_',\n '|',\n '~',\n '`',\n '^',\n '<',\n '>',\n '/',\n '|',\n '~',\n '`',\n '^',\n '<',\n '>',\n '\\\\',\n ],\n BRACKETS: ['(', ')', '[', ']', '{', '}'],\n QUOTES: ['\"', \"'\", '`'],\n WHITESPACE: [' ', '\\t'],\n\n get ALPHANUMERIC() {\n return [...this.LETTERS, ...this.DIGITS];\n },\n get ALPHANUMERIC_WITH_SPACES() {\n return [...this.ALPHANUMERIC, ' '];\n },\n\n // Email specific\n EMAIL_SPECIAL: ['@', '.', '-', '_', '+'],\n get EMAIL_CHARACTERS() {\n return [...this.ALPHANUMERIC, ...this.EMAIL_SPECIAL];\n },\n\n get SPECIAL_EXCEPT_NAME_FRIENDLY() {\n const excludeChars = ['.', ',', '-', \"'\", ' '];\n return this.SPECIAL.filter((char) => !excludeChars.includes(char));\n },\n\n get NAME_CHARACTER_EXCLUSIONS() {\n return [...this.SPECIAL_EXCEPT_NAME_FRIENDLY, ...this.DIGITS];\n },\n\n get SPECIAL() {\n return [\n ...this.BASIC_PUNCTUATION,\n ...this.COMMON_SYMBOLS,\n ...this.BRACKETS,\n ...this.QUOTES,\n ];\n },\n} as const;\n","import {\n Bank,\n Broker,\n Contact,\n DepartmentContactsPair,\n Dispatch,\n DispatchBoard,\n Dispatcher,\n DropdownOption,\n LabelOption,\n Shipper,\n TrailerOption,\n TruckOption,\n Hazardous,\n State,\n Owner,\n FuelCard,\n PMOption,\n ColorOption,\n MakeOption,\n TollOption,\n TollTransponderOption,\n} from './dropdown.model';\n\nexport interface CaiInputConfig {\n type?: 'text' | 'password' | 'number' | 'account';\n name?: string;\n required?: boolean;\n alignment?: 'left' | 'right';\n inverse?: boolean; // dark mode\n reveal?: number; // Revealed character count from the end of the password\n icon?: string | null; // icon name ex. 'cai-email'\n iconColor?: string; // color code for icons ex. #F89B2E\n dropdown?: boolean | DropdownType; // dropdown menu\n dropdownAutocomplete?: boolean; // dropdown autocomplete functionality\n fullState?: boolean; // full state dropdown functionality\n search?: boolean; // dropdown search functionality\n add?: boolean; // dropdown add new functionality\n subcontent?: string; // ex. months, years, lbs, gallons\n textTransform?: 'capitalize' | 'uppercase' | 'lowercase';\n textTransformExceptions?: string[]; // exception from text transform\n isNumberFormattingDisabled?: boolean;\n textColor?: 'positive';\n isAddress?: boolean; // address dropdown functionality\n\n isEdit?: boolean;\n\n placeholderBehavior?: 'dynamic' | 'fade' | 'static' | 'hidden';\n errorBehavior?: 'dynamic' | 'static' | 'floating';\n\n label?: string; // aria label\n mask?: string; // mask pattern ex. (000) 000-0000\n min?: number; // min value for number inputs\n max?: number; // max value for number inputs or max length for text inputs\n step?: number | 'automatic'; // step value for number inputs\n prefix?: string; // ex. $\n withButtons?: boolean; // + - buttons\n autocomplete?: string; // autocomplete\n list?: boolean; // list view (disables validation animations and shows different initial state)\n inTable?: boolean;\n disabled?: boolean; // disabled?\n passwordRequirements?: boolean; // password requirements\n canOpenModal?: boolean; // can open modal for add new\n noSeparator?: boolean; // no separator between label and input\n\n optionValue?: string; // option value (key)\n optionLabel?: string; // option label (key)\n\n removable?: boolean;\n autofocus?: boolean;\n\n customErrors?: CustomError[]; // custom error message\n disabledCharacters?: string[]; // characters that are disabled\n enabledCharacters?: string[]; // characters that are enabled\n spacesAllowed?: number;\n}\n\nexport type CustomError = {\n name: string; // name of the error\n message: string | null; // message of the error\n};\n\nexport const DropdownTypes = [\n 'multiple',\n 'dispatch',\n 'ftl-dispatch',\n 'label',\n 'broker',\n 'contact',\n 'shipper',\n 'bank',\n 'dispatcher',\n 'truck',\n 'trailer',\n 'subcontent',\n 'hazardous',\n 'state',\n 'owner',\n 'fuelcard',\n 'pm',\n 'color',\n 'make',\n 'toll',\n] as const;\n\nexport type DropdownType = (typeof DropdownTypes)[number];\n\nexport type DropdownArrays =\n | DropdownOption[]\n | LabelOption[]\n | Broker[]\n | DispatchBoard[]\n | DepartmentContactsPair[]\n | Shipper[]\n | Dispatch[]\n | Bank[]\n | Dispatcher[]\n | TruckOption[]\n | TrailerOption[]\n | Hazardous[]\n | State[]\n | Owner[]\n | FuelCard[]\n | PMOption[]\n | ColorOption[]\n | MakeOption[]\n | TollOption[];\n\nexport type DropdownOptions =\n | DropdownOption\n | LabelOption\n | Broker\n | Contact\n | Shipper\n | Dispatch\n | Bank\n | Dispatcher\n | TruckOption\n | TrailerOption\n | Hazardous\n | State\n | Owner\n | FuelCard\n | PMOption\n | ColorOption\n | MakeOption\n | TollTransponderOption;\n\nexport type DropdownKeys =\n | DropdownOption[keyof DropdownOption]\n | LabelOption[keyof LabelOption]\n | Dispatch[keyof Dispatch]\n | Broker[keyof Broker]\n | Contact[keyof Contact]\n | Shipper[keyof Shipper]\n | Bank[keyof Bank]\n | Dispatcher[keyof Dispatcher]\n | TruckOption[keyof TruckOption]\n | TrailerOption[keyof TrailerOption]\n | Hazardous[keyof Hazardous]\n | State[keyof State]\n | Owner[keyof Owner]\n | FuelCard[keyof FuelCard]\n | PMOption[keyof PMOption]\n | ColorOption[keyof ColorOption]\n | MakeOption[keyof MakeOption]\n | TollTransponderOption[keyof TollTransponderOption];\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'remapPmIcons',\n})\nexport class RemapPmIconsPipe implements PipeTransform {\n transform(pm: string | null | undefined): string {\n if (!pm) return 'cai-pm-base';\n\n switch (pm) {\n case 'Reefer Unit':\n return 'cai-repair-reefer';\n case 'Alignment':\n return 'cai-pm-alignment';\n case 'PTO Pump':\n return 'cai-pm-pto-pump';\n case 'Engine Oil & Filter':\n return 'cai-pm-engine-oil-filter';\n case 'Air Filter':\n return 'cai-pm-air-filter';\n case 'Belts':\n return 'cai-pm-belts';\n case 'Transmission Fluid':\n return 'cai-pm-transmission-fluid';\n case 'Engine Tune-Up':\n return 'cai-pm-engine-tune-up';\n case 'Oil Pump':\n return 'cai-pm-engine-oil-filter';\n case 'AC Compressor':\n return 'cai-pm-engine-tune-up';\n case 'Battery':\n return 'cai-pm-battery';\n case 'Turbo':\n return 'cai-pm-turbo';\n case 'Radiator':\n return 'cai-pm-radiator';\n case 'Air Compressor':\n return 'cai-pm-transmission-fluid';\n case 'Fuel Pump':\n return 'cai-pm-belts';\n case 'Water Pump':\n return 'cai-pm-air-filter';\n case 'Brake Chamber':\n return 'cai-pm-brake-chamber';\n default:\n return 'cai-pm-base';\n }\n }\n}\n","import {\n Component,\n input,\n output,\n signal,\n effect,\n Optional,\n Self,\n} from '@angular/core';\n\n// Bootstrap\nimport {\n NgbPopover,\n NgbTooltip,\n NgbTooltipModule,\n} from '@ng-bootstrap/ng-bootstrap';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Models\nimport { PmItem } from '../../models/pm.model';\n\n// Modules\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\n\n// Pipes\nimport { RemapPmIconsPipe } from '../input/pipes/remap-pm-icons.pipe';\n\n@Component({\n selector: 'cai-pm',\n templateUrl: './pm.component.html',\n styleUrl: './pm.component.scss',\n imports: [\n // Components\n SvgIconComponent,\n\n // Bootstrap\n NgbPopover,\n NgbTooltipModule,\n\n // Modules\n FormsModule,\n\n // Pipes\n RemapPmIconsPipe,\n ],\n})\nexport class PmComponent implements ControlValueAccessor {\n /**\n * List of PM items passed from the parent component.\n * Used to render all available PM options.\n */\n items = input<PmItem[]>([]);\n\n /**\n * Event emitted when the \"Add new\" button is clicked.\n * The parent component can listen to this and perform appropriate actions.\n */\n onAdd = output<void>();\n\n onSelectionChange = output<PmItem | null>();\n\n /**\n * The currently selected PM item.\n * Used to track and display the selected item's title and logo.\n */\n selectedPmItem = signal<PmItem | null>(null);\n\n /**\n * Disabled state for forms integration.\n */\n disabled = signal<boolean>(false);\n\n /**\n * Holder for incoming value from writeValue to resolve against items.\n */\n private _incomingValue: PmItem | number | string | null | undefined =\n undefined;\n\n // ControlValueAccessor callbacks\n onChange: (value: number | null) => void = () => {};\n onTouched: () => void = () => {};\n\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Resolve incoming value when items or value change\n effect(() => {\n const list = this.items();\n const incoming = this._incomingValue;\n if (incoming === undefined) return;\n\n if (incoming === null) {\n this.selectedPmItem.set(null);\n return;\n }\n\n const resolved = list?.find((i) => i.id === incoming) ?? null;\n this.selectedPmItem.set(resolved);\n });\n }\n\n /**\n * Boolean signal indicating whether the PM popover is currently visible.\n * Used to apply conditional styling or behavior when the popover is shown or hidden.\n */\n showPmPopover = signal<boolean>(false);\n\n /**\n * Called when the \"Add new\" button is clicked.\n * Emits the `onAdd` event to notify the parent component.\n */\n onAddItem(): void {\n this.onAdd.emit();\n }\n\n /**\n * Opens the tooltip when hovering over a PM item.\n */\n onShowTooltip(tooltip: NgbTooltip) {\n tooltip.open();\n }\n\n /**\n * Closes the tooltip when the mouse leaves a PM item.\n */\n onHideTooltip(tooltip: NgbTooltip) {\n tooltip.close();\n }\n\n /**\n * Called when the PM popover becomes visible.\n */\n onPmShown() {\n this.showPmPopover.set(true);\n }\n\n /**\n * Called when the PM popover is hidden.\n */\n onPmHidden() {\n this.showPmPopover.set(false);\n }\n\n /**\n * Called when a PM item is clicked.\n * Sets the `selectedPmItem` with the clicked item's data.\n */\n onSelectedItem(item: PmItem) {\n this.selectedPmItem.set(item);\n this.onSelectionChange.emit(item);\n this.onChange(item.id ?? null);\n this.onTouched();\n }\n\n /**\n * Clears the selected PM item.\n * Resets id, title and logoName.\n */\n onClear() {\n this.selectedPmItem.set(null);\n this.onSelectionChange.emit(null);\n this.onChange(null);\n this.onTouched();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: number | string | null): void {\n this._incomingValue = value;\n }\n\n registerOnChange(fn: (value: number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","@let showPm = showPmPopover() === true;\n<!-- -->\n@let selectedItem = selectedPmItem(); @let isDisabled = disabled();\n<!-- -->\n\n<ng-template #pmTooltip>\n <span class=\"tooltip-text\">{{ selectedItem?.title ?? \"PM\" }}</span>\n</ng-template>\n<ng-template #pmPopover>\n <div class=\"pm-popover\">\n @if(selectedItem){\n <div class=\"clear-container\">\n <div class=\"clear\" (click)=\"onClear()\">\n <span>Clear</span>\n <svg-icon class=\"icon icon-sm\" name=\"cai-minus\"></svg-icon>\n </div>\n <div class=\"divider\"></div>\n </div>\n }\n <div class=\"add\" (click)=\"onAddItem()\">\n <span>Add new</span>\n <svg-icon class=\"icon icon-sm\" name=\"cai-plus\"></svg-icon>\n </div>\n @for (item of items(); track item.id;) {\n <div\n class=\"pm-item\"\n (click)=\"onSelectedItem(item)\"\n [class.selectedDesign]=\"selectedItem?.title === item.title\"\n >\n <div class=\"icon\">\n <svg-icon\n class=\"pm-item-icon\"\n [name]=\"item.title | remapPmIcons\"\n ></svg-icon>\n </div>\n <span class=\"pm-item-text\">{{ item.title }}</span>\n <svg-icon\n class=\"icon icon-sm checkmark-icon\"\n name=\"cai-checkmark\"\n ></svg-icon>\n </div>\n }\n </div>\n</ng-template>\n\n<div\n class=\"pm-container\"\n #buttonContainer\n [class.pm-icon-selected]=\"!!selectedItem\"\n>\n <button\n type=\"button\"\n class=\"icon-container\"\n [class.pm-focus]=\"showPm\"\n [ngbPopover]=\"pmPopover\"\n [triggers]=\"isDisabled ? '' : 'click'\"\n autoClose=\"outside inside\"\n container=\"body\"\n placement=\"bottom-left\"\n popoverClass=\"popover cai-dropdown\"\n (shown)=\"onPmShown()\"\n (hidden)=\"onPmHidden()\"\n [disabled]=\"isDisabled\"\n >\n <svg-icon\n [ngbTooltip]=\"pmTooltip\"\n (mouseenter)=\"onShowTooltip(tooltip)\"\n (mouseleave)=\"onHideTooltip(tooltip)\"\n #tooltip=\"ngbTooltip\"\n [triggers]=\"isDisabled ? '' : 'click'\"\n tooltipClass=\"custom-tooltip\"\n [positionTarget]=\"buttonContainer\"\n placement=\"bottom\"\n [name]=\"selectedItem?.title | remapPmIcons\"\n class=\"pm-icon\"\n ></svg-icon>\n </button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberFormat',\n})\nexport class NumberFormatPipe implements PipeTransform {\n transform(value: string): string {\n if (!value) return '';\n\n if (value.includes('.')) {\n const [integerPart, decimalPart] = value.split('.');\n \n // Cap decimal places to maximum 2\n const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';\n \n // Format the integer part with commas\n const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n \n // If there's a decimal part, show it (capped at 2 places)\n if (decimalPart !== undefined) {\n return `${formattedInteger}.${cappedDecimalPart}`;\n }\n \n // If user just typed a decimal point, show it\n return `${formattedInteger}.`;\n }\n\n return value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { NumberFormatPipe } from '../../../pipes/number-format.pipe';\nimport { CustomError } from '../models/input.model';\n\n@Pipe({\n name: 'errorMessage',\n})\nexport class ErrorMessagePipe implements PipeTransform {\n numberFormatPipe = new NumberFormatPipe();\n\n transform(\n errors: ValidationErrors | null | undefined,\n customErrors?: CustomError[] // custom error messages to be displayed in the input\n ): string[] {\n if (!errors) return [];\n\n // Create a map of custom errors for quick lookup\n const customErrorMap = new Map<string, string | null>();\n if (customErrors) {\n customErrors.forEach((error) => {\n customErrorMap.set(error.name, error.message);\n });\n }\n\n const defaultMessages: Record<string, (value?: any) => string> = {\n required: () => 'Required',\n minlength: (value: any) => `${value.requiredLength} Characters Min`,\n maxlength: (value: any) => `${value.requiredLength} Characters Max`,\n min: (value: any) =>\n `Min ${this.numberFormatPipe.transform(String(value.min))}`,\n max: (value: any) =>\n `Max ${this.numberFormatPipe.transform(String(value.max))}`,\n pattern: () => 'Invalid format',\n hasUppercase: () => 'Must contain at least one uppercase letter',\n hasNumber: () => 'Must contain at least one number',\n hasSymbol: () => 'Must contain at least one symbol',\n passwordDontMatch: () => \"Passwords don't match\",\n };\n\n return Object.entries(errors)\n .map(([key, value]) => {\n // Check if there's a custom error for this key\n if (customErrorMap.has(key)) {\n const customMessage = customErrorMap.get(key);\n return customMessage || '';\n }\n\n // Fall back to default message\n const getMessage = defaultMessages[key];\n return getMessage ? getMessage(value) : 'Invalid';\n })\n .filter((message): message is string => message !== null); // Remove null values\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'highlightSearch'\n})\nexport class HighlightSearchPipe implements PipeTransform {\n /**\n * Formats an option for the dropdown by highlighting the search value if it exists in the option.\n * @param option - The option to format.\n * @param searchValue - The value to search and highlight within the option.\n * @returns The formatted option.\n */\n transform(option: string, searchValue: string | undefined | null): string {\n if (!searchValue || typeof searchValue !== 'string' || searchValue.trim() === '') {\n return option;\n }\n\n const escapedSearchValue = searchValue.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&'\n );\n\n const regex = new RegExp(escapedSearchValue, 'gi');\n\n if (option.toLowerCase().includes(searchValue.toLowerCase())) {\n return option.replace(regex, '<span class=\"highlight\">$&</span>');\n }\n\n return option;\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @ngdoc pipe\n * @name currencyPipe\n * @description\n * Formats a given dollar amount into a compact string (e.g., $35.21K, $1.23M).\n *\n * Usage:\n * {{ value | currency }}\n *\n * Example:\n * {{ 35210 | currency }} // outputs: $35.21K\n * {{ 1234567 | currency }} // outputs: $1.23M\n * {{ 999 | currency }} // outputs: $999\n * {{ 1234567890 | currency }} // outputs: $1.23B\n */\n@Pipe({\n name: 'currency',\n})\nexport class CurrencyPipe implements PipeTransform {\n /**\n * Transforms a numeric value into a formatted currency string.\n *\n * @param {number | string} value The dollar amount to format. Can be a number or a string that can be parsed to a number.\n * @returns {string} The formatted currency string, or '$0.00' if the input is invalid.\n */\n transform(value: number | string): string {\n let amount: number;\n if (typeof value === 'string') {\n amount = parseFloat(value);\n } else if (typeof value === 'number') {\n amount = value;\n } else {\n console.error(\n 'Invalid input for currencyPipe: value must be a number or a string convertible to a number.'\n );\n return '$0.00';\n }\n\n if (isNaN(amount)) {\n console.error('Invalid number provided to currencyPipe.');\n return '$0.00';\n }\n\n const suffixes = ['', 'K', 'M', 'B', 'T']; // K = Thousand, M = Million, B = Billion, T = Trillion\n const absAmount = Math.abs(amount);\n\n let suffixIndex = 0;\n let divisor = 1;\n\n while (absAmount >= 1000 * divisor && suffixIndex < suffixes.length - 1) {\n divisor *= 1000;\n suffixIndex++;\n }\n\n let formattedNumber = (amount / divisor).toFixed(2);\n\n return `$${formattedNumber}${suffixes[suffixIndex]}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n Bank,\n Broker,\n CaiInputConfig,\n ColorOption,\n MakeOption,\n DepartmentContactsPair,\n Dispatch,\n DispatchBoard,\n Dispatcher,\n DropdownArrays,\n FuelCard,\n Hazardous,\n LabelOption,\n Owner,\n Shipper,\n State,\n TrailerType,\n TruckType,\n TollOption,\n} from '../models';\n\n@Pipe({\n name: 'filterBySearch',\n})\nexport class FilterBySearchPipe implements PipeTransform {\n hasProperty<T extends object>(obj: T, prop: PropertyKey): prop is keyof T {\n return prop in obj;\n }\n\n transform(\n options: DropdownArrays,\n value: string | undefined | null,\n type: CaiInputConfig['dropdown'],\n shouldSearch?: boolean,\n foldedBoards?: number[],\n label?: string\n ): any[] {\n const optionLabel = label || 'label';\n\n if (!Array.isArray(options)) {\n return [];\n }\n\n if (!options.length) {\n return [];\n }\n\n if (typeof value !== 'string') {\n return options;\n }\n\n const searchValue = value?.trim().toLowerCase();\n\n switch (type) {\n case 'dispatch':\n case 'ftl-dispatch':\n if (!(options as DispatchBoard[]) || !(options as Dispatch[]))\n return [];\n\n // TODO: Leave only board variant once backend is fixed\n let dispatches = (options as DispatchBoard[]) || [];\n\n if (!this.hasProperty(dispatches[0], 'dispatches')) {\n dispatches = [\n {\n dispatcher: 'NOBOARDSVARIANT',\n count: options.length,\n id: 0,\n dispatches: options as Dispatch[],\n teamBoard: false,\n },\n ];\n }\n\n if (!shouldSearch) {\n return dispatches as DispatchBoard[];\n }\n\n if (searchValue) {\n dispatches = dispatches.map((board) => {\n const newBoard = { ...board };\n\n newBoard.dispatches = board.dispatches.filter((dispatch) => {\n const truckIdMatch = dispatch.truck.truckNumber\n ?.toString()\n .toLowerCase()\n .includes(searchValue);\n const trailerIdMatch = dispatch.trailer?.trailerNumber\n ?.toString()\n .toLowerCase()\n .includes(searchValue);\n\n let driverNameMatch = (\n dispatch.driver?.firstName?.toLowerCase() +\n ' ' +\n dispatch.driver?.lastName?.toLowerCase()\n ).includes(searchValue);\n\n if (dispatch.coDriver) {\n driverNameMatch = (\n dispatch.driver.firstName.toLowerCase() +\n ' & ' +\n dispatch.coDriver.firstName.toLowerCase()\n ).includes(searchValue);\n }\n\n return truckIdMatch || trailerIdMatch || driverNameMatch;\n });\n\n return newBoard;\n });\n }\n\n if (foldedBoards?.length && !searchValue) {\n dispatches = dispatches.map((board) => {\n if (foldedBoards.includes(board.id)) {\n const { dispatches, ...rest } = board;\n\n return rest as DispatchBoard;\n }\n return board;\n });\n }\n\n return dispatches as DispatchBoard[];\n case 'broker':\n const brokers = (options as Broker[]) || [];\n\n if (!shouldSearch) {\n return brokers as Broker[];\n }\n\n if (searchValue) {\n return brokers.filter((broker) =>\n (broker.businessName || '').toLowerCase().includes(searchValue)\n );\n }\n return brokers;\n case 'contact':\n const contacts =\n (options as DepartmentContactsPair[]).sort(\n (a, b) => (a.department?.id || 0) - (b.department?.id || 0)\n ) || [];\n\n if (!shouldSearch) {\n return contacts;\n }\n\n if (searchValue) {\n return contacts.map((contact) => {\n return {\n ...contact,\n contacts: contact.contacts?.filter((contact) =>\n (contact.contactName || '').toLowerCase().includes(searchValue)\n ),\n };\n });\n }\n return contacts;\n case 'shipper':\n const shippers = (options as Shipper[]) || [];\n\n if (!shouldSearch) {\n return shippers;\n }\n\n if (searchValue) {\n return shippers.filter((shipper) =>\n (shipper.businessName + ' ' + shipper.address?.address || '')\n .toLowerCase()\n .includes(searchValue)\n );\n }\n return shippers;\n case 'label':\n const labels = (options as LabelOption[]) || [];\n\n if (!shouldSearch) {\n return labels;\n }\n\n if (searchValue) {\n return labels.filter((label) =>\n label.name?.toLowerCase().includes(searchValue)\n );\n }\n return labels;\n case 'bank':\n const banks = (options as Bank[]) || [];\n\n if (!shouldSearch) {\n return banks;\n }\n\n if (searchValue) {\n return banks.filter((bank) =>\n bank.name?.toLowerCase().includes(searchValue)\n );\n }\n return banks;\n case 'dispatcher':\n const dispatcher = (options as Dispatcher[]) || [];\n\n if (!shouldSearch) {\n return dispatcher;\n }\n\n if (searchValue) {\n return dispatcher.filter((bank) =>\n bank.fullName?.toLowerCase().includes(searchValue)\n );\n }\n return dispatcher;\n case 'truck':\n const trucks = (options as TruckType[]) || [];\n\n if (!shouldSearch) {\n return trucks;\n }\n\n if (searchValue) {\n return trucks.filter((truck) =>\n (truck.name || '').toLowerCase().includes(searchValue)\n );\n }\n return trucks;\n case 'trailer':\n const trailers = (options as TrailerType[]) || [];\n\n if (!shouldSearch) {\n return trailers;\n }\n\n if (searchValue) {\n return trailers.filter((trailer) =>\n (trailer.name || '').toLowerCase().includes(searchValue)\n );\n }\n return trailers;\n case 'hazardous':\n const hazardous = (options as Hazardous[]) || [];\n\n if (!shouldSearch) {\n return hazardous;\n }\n\n if (searchValue) {\n return hazardous.filter((hazardous) =>\n hazardous.description?.toLowerCase().includes(searchValue)\n );\n }\n return hazardous;\n case 'state':\n const states = (options as State[]) || [];\n\n if (!shouldSearch) {\n return states;\n }\n\n if (searchValue) {\n return states.filter((state) =>\n (state?.stateShortName + ' ' + state?.stateName)\n ?.toLowerCase()\n .includes(searchValue)\n );\n }\n return states;\n case 'owner':\n const owners = (options as Owner[]) || [];\n\n if (!shouldSearch) {\n return owners;\n }\n\n if (searchValue) {\n return owners.filter((owner) =>\n (owner.ein?.toLowerCase() || '')\n .concat(' ', owner.name?.toLowerCase() || '')\n .includes(searchValue)\n );\n }\n return owners;\n case 'fuelcard':\n const fuelcards = (options as FuelCard[]) || [];\n\n if (!shouldSearch) {\n return fuelcards;\n }\n\n if (searchValue) {\n return fuelcards.filter((fuelcard) =>\n (fuelcard.number?.toLowerCase() || '')\n .concat(' ', fuelcard.brand?.toLowerCase() || '')\n .concat(' ', fuelcard.account?.toLowerCase() || '')\n .includes(searchValue)\n );\n }\n return fuelcards;\n case 'color':\n const colors = (options as ColorOption[]) || [];\n\n if (!shouldSearch) {\n return colors;\n }\n\n if (searchValue) {\n return colors.filter((color) =>\n color.name?.toLowerCase().includes(searchValue)\n );\n }\n return colors;\n case 'make':\n const makes = (options as MakeOption[]) || [];\n\n if (!shouldSearch) {\n return makes;\n }\n\n if (searchValue) {\n return makes.filter((make) =>\n make.name?.toLowerCase().includes(searchValue)\n );\n }\n return makes;\n case 'toll':\n const tolls = (options as TollOption[]) || [];\n\n if (!shouldSearch) {\n return tolls;\n }\n\n if (searchValue) {\n return tolls.map((toll) => {\n return {\n ...toll,\n tollTransponders: toll.tollTransponders?.filter((transponder) =>\n transponder.name?.toLowerCase().includes(searchValue)\n ),\n };\n });\n }\n return tolls;\n default:\n const dropdownOptions = options as any[];\n\n if (!shouldSearch) {\n return options;\n }\n\n if (searchValue) {\n return dropdownOptions.filter((option) =>\n option[optionLabel]?.toLowerCase().includes(searchValue)\n );\n }\n\n return options;\n }\n }\n}\n","export class MaskHelper {\n static extractUserInput(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '');\n }\n\n static isPlaceholder(char: string): boolean {\n return char === '0' || char === 'a' || char === '*';\n }\n\n static charMatchesPlaceholder(char: string, placeholder: string): boolean {\n if (placeholder === '0') return /^\\d$/.test(char);\n if (placeholder === 'a') return /^[a-zA-Z]$/.test(char);\n if (placeholder === '*') return /^[a-zA-Z0-9]$/.test(char);\n return false;\n }\n\n /**\n * Applies the mask to a given string of user input.\n * @param realValue The clean user input.\n * @param mask The mask pattern.\n * @returns An object with the formatted value and the final real value.\n */\n static applyMask(\n realValue: string,\n mask: string\n ): { formattedValue: string; finalRealValue: string } {\n let formatted = '';\n let realValueIndex = 0;\n let maskIndex = 0;\n let newRealValue = '';\n\n while (realValueIndex < realValue.length && maskIndex < mask.length) {\n const maskChar = mask[maskIndex];\n const realChar = realValue[realValueIndex];\n\n if (this.isPlaceholder(maskChar)) {\n if (this.charMatchesPlaceholder(realChar, maskChar)) {\n formatted += realChar;\n newRealValue += realChar;\n maskIndex++;\n realValueIndex++;\n } else {\n break;\n }\n } else {\n formatted += maskChar;\n maskIndex++;\n }\n }\n return { formattedValue: formatted, finalRealValue: newRealValue };\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { MaskHelper } from './helpers';\n\n@Directive({\n selector: '[appPassword]',\n})\nexport class PasswordDirective implements OnInit {\n /**\n * Input property to enable or disable the password masking behavior.\n */\n appPassword = input<boolean>(true);\n\n /**\n * Input property to hide or show the password\n */\n visible = input<boolean>(false);\n\n /**\n * Input property to specify the type of the password\n */\n account = input<boolean>(false);\n\n /**\n * Input property to specify how many characters from the end of the\n * password should be revealed. Defaults to 0 (fully masked).\n */\n reveal = input<number>(0);\n\n appMask = input<string>('');\n\n max = input<number | undefined>(0);\n\n /**\n * Stores the actual, unmasked password value,\n * while the input element displays a masked version.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n /**\n * Lifecycle hook called after Angular initializes the directive's data-bound properties.\n * If password masking is enabled, it sets up the initial masking.\n */\n ngOnInit(): void {\n if (this.appPassword() && this.reveal() > 0) {\n this.setupPasswordMasking();\n }\n }\n\n /**\n * Sets up the initial state for password masking.\n * It reads the initial value from the input (if any) as the `realValue`\n * and then updates the input's display to show the masked version.\n */\n private setupPasswordMasking(): void {\n const input = this.el.nativeElement;\n this.realValue = input.value || ''; // Assume initial value is unmasked or is the real one\n this.updateDisplayValue();\n }\n\n /**\n * HostListener for the 'input' event on the host element.\n * This is the core logic for synchronizing `realValue` with user input\n * on the masked field. It infers changes to `realValue`\n * based on `event.data`, cursor position, and the difference in length\n * between the input's current display value and the previous `realValue`.\n * @param event - The InputEvent object.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appPassword() || !this.reveal()) return;\n const input = this.el.nativeElement;\n let cursorPosition = input.selectionStart || 0;\n const displayValue = input.value;\n const lengthDiff = displayValue.length - this.realValue.length;\n let newRealValue = this.realValue;\n\n if (event.data && lengthDiff <= 0) {\n const deletedCount = Math.abs(lengthDiff) + event.data.length;\n const replaceStart = cursorPosition - event.data.length;\n newRealValue =\n this.realValue.slice(0, Math.max(0, replaceStart)) +\n event.data +\n this.realValue.slice(Math.max(0, replaceStart) + deletedCount);\n } else if (lengthDiff > 0) {\n const addedChars =\n event.data ||\n displayValue.slice(cursorPosition - lengthDiff, cursorPosition);\n const insertPosition = cursorPosition - addedChars.length;\n newRealValue =\n this.realValue.slice(0, Math.max(0, insertPosition)) +\n addedChars +\n this.realValue.slice(Math.max(0, insertPosition));\n } else if (lengthDiff < 0) {\n const deletedCount = Math.abs(lengthDiff);\n newRealValue =\n this.realValue.slice(0, cursorPosition) +\n this.realValue.slice(cursorPosition + deletedCount);\n }\n\n // Only enforce numeric input if account() is true\n if (this.account() && !/^\\d*$/.test(newRealValue)) {\n // Revert the input field to the previous masked value and restore cursor\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition - 1); // Move cursor back\n return;\n }\n\n if (this.max()) {\n if (newRealValue.length > this.max()!) {\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition - 1); // Move cursor back\n\n return;\n }\n }\n\n if (this.appMask() && this.appMask() !== '') {\n const { formattedValue } = MaskHelper.applyMask(\n MaskHelper.extractUserInput(newRealValue),\n this.appMask()\n );\n cursorPosition =\n cursorPosition + formattedValue.length - newRealValue.length;\n newRealValue = formattedValue;\n }\n\n this.realValue = newRealValue;\n\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition);\n this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'cut' event.\n * Prevents default cut behavior to operate on `realValue`.\n * It copies the corresponding part of `realValue` to the clipboard\n * and updates `realValue` and the display.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appPassword() || !this.reveal()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default cut action\n const cutText = this.realValue.slice(start, end); // Cut from realValue\n event.clipboardData?.setData('text/plain', cutText);\n\n this.realValue =\n this.realValue.slice(0, start) + this.realValue.slice(end);\n\n this.updateDisplayValue();\n this.setCursorPosition(start); // Set cursor to the start of the cut area\n this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'copy' event.\n * Prevents default copy behavior to ensure the unmasked `realValue` segment is copied.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appPassword() || !this.reveal()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default copy action\n const copiedText = this.realValue.slice(start, end); // Copy from realValue\n event.clipboardData?.setData('text/plain', copiedText);\n }\n }\n\n /**\n * Updates the input element's display value with a masked version of `realValue`.\n * Uses '•' for masked characters. Respects the `reveal` input to show\n * a specified number of characters from the end of the password.\n * This method is responsible for creating the visual masking.\n */\n private updateDisplayValue(): void {\n if (!this.appPassword() || !this.reveal()) return;\n if (this.visible()) {\n this.el.nativeElement.value = this.realValue;\n return;\n }\n\n const revealCount = this.reveal();\n const realLength = this.realValue.length;\n let displayValue = '';\n\n if (revealCount > 0 && realLength > revealCount) {\n const actualRevealCount = Math.min(revealCount, realLength);\n // Calculate how many characters to mask\n const maskedCharsCount = realLength - actualRevealCount;\n\n if (maskedCharsCount > 0) {\n // Get the part of the real value that should be revealed\n const revealedPart = this.realValue.slice(maskedCharsCount); // Corrected from slice(realLength - actualRevealCount)\n displayValue = '•'.repeat(maskedCharsCount) + revealedPart;\n } else {\n // If all characters are to be revealed (revealCount >= realLength)\n displayValue = this.realValue;\n }\n } else {\n // Fully mask if revealCount is 0 or realValue is lesser than revealCount\n displayValue = '•'.repeat(realLength);\n }\n\n this.el.nativeElement.value = displayValue;\n }\n\n /**\n * Sets the cursor position within the input field.\n * This is crucial after `updateDisplayValue` changes the entire input value,\n * to maintain a natural cursor behavior for the user.\n * Uses `setTimeout` to ensure the operation occurs after Angular's view update.\n * @param position - The desired cursor position.\n */\n private setCursorPosition(position: number): void {\n const input = this.el.nativeElement;\n // setTimeout ensures this runs after the current browser rendering tick\n setTimeout(() => {\n // Clamp position to be within the bounds of the current display value's length\n const currentLength = input.value.length;\n const newPosition = Math.max(0, Math.min(position, currentLength));\n input.setSelectionRange(newPosition, newPosition);\n }, 0);\n }\n\n /**\n * Dispatches a custom event named 'realValueChange' from the host element.\n * The event's `detail` property contains the unmasked `realValue`.\n * This allows parent components (like your `InputComponent`) to listen for\n * changes to the actual password.\n */\n private dispatchRealValueChange(): void {\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true, // Allows event to bubble up the DOM\n composed: true, // Allows event to cross Shadow DOM boundaries\n detail: this.realValue,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unmasked \"real\" password value.\n * @returns The real password value as a string.\n */\n getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" password value from outside the directive\n * (e.g., when the parent form control's value is changed programmatically).\n * It updates the internal `realValue` and then refreshes the masked display.\n * @param value - The new real password value to set.\n */\n setRealValue(value: string): void {\n this.realValue = value || '';\n this.updateDisplayValue();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { NumberFormatPipe } from '../../../pipes/number-format.pipe';\n\n@Directive({\n selector: '[appNumberFormat]',\n providers: [NumberFormatPipe],\n})\nexport class NumberFormatDirective implements OnInit {\n /**\n * Input property to enable or disable the number formatting.\n * Defaults to true, meaning formatting is active by default.\n */\n appNumberFormat = input<boolean>(true);\n\n /**\n *\n */\n max = input<number>();\n\n /**\n * Input property to enable or disable the number formatting.\n * Defaults to true, meaning formatting is active by default.\n */\n isNumberFormattingDisabled = input<boolean>(false);\n\n prefix = input<string>('');\n\n /**\n * Stores the unformatted, \"real\" numeric value of the input.\n * This is the value that should be used for calculations or form submissions,\n * as opposed to the formatted display value.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n /**\n * Lifecycle hook that is called after Angular has initialized all data-bound\n * properties of a directive.\n * If number formatting is enabled, it sets up the initial formatting.\n */\n ngOnInit(): void {\n if (this.appNumberFormat()) {\n this.setupNumberFormatting();\n }\n }\n\n /**\n * Initializes the number formatting on the input element.\n * It extracts the initial numeric value from the input's current value\n * and then updates the display with the formatted version.\n */\n private setupNumberFormatting(): void {\n const input = this.el.nativeElement;\n // Extract numeric value from whatever might be in the input initially\n this.realValue = this.extractNumericValue(input.value || '');\n this.updateDisplayValue(); // Format and display it\n }\n\n /**\n * HostListener for the 'input' event on the host element.\n * This triggers whenever the user types or pastes content into the input.\n * It extracts the numeric value from the current input, updates the\n * display with the formatted number, moves the cursor to the end,\n * and dispatches a 'realValueChange' event with the unformatted numeric value.\n * @param event - The InputEvent object.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appNumberFormat()) return; // Do nothing if formatting is disabled\n\n const input = this.el.nativeElement;\n const displayValue = input.value;\n\n this.realValue = this.extractNumericValue(displayValue);\n if (this.max()) {\n if (Number(this.realValue) > (this.max() || 0)) {\n this.realValue = this.realValue.slice(0, -1);\n }\n }\n this.updateDisplayValue();\n this.setCursorToEnd(); // Important for UX after reformatting\n this.dispatchRealValueChange(); // Notify parent components of the raw value change\n }\n\n /**\n * HostListener for the 'cut' event.\n * Prevents the default cut behavior to manually handle the value change.\n * It reconstructs the value after the cut, extracts the numeric part,\n * updates the display, sets the cursor, and dispatches the real value.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default cut\n const cutText = input.value.slice(start, end);\n event.clipboardData?.setData('text', this.extractNumericValue(cutText)); // Put numeric part on clipboard\n\n // Reconstruct value without the cut part\n const newValue = input.value.slice(0, start) + input.value.slice(end);\n this.realValue = this.extractNumericValue(newValue);\n\n this.updateDisplayValue();\n this.setCursorToEnd();\n this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'copy' event.\n * Prevents the default copy behavior if there's a selection to ensure\n * that the copied text is the unformatted numeric value of the selection,\n * rather than the potentially formatted display text.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default copy\n const selectedText = input.value.slice(start, end);\n // Copy the underlying numeric value of the selection\n event.clipboardData?.setData(\n 'text',\n this.extractNumericValue(selectedText)\n );\n }\n }\n\n /**\n * HostListener for the 'keydown' event.\n * Filters key presses to allow only digits, a single decimal point,\n * and control keys (Backspace, Arrows, Tab, etc.).\n * This helps maintain a valid numeric input format before the 'input' event fires.\n * @param event - The KeyboardEvent object.\n */\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const controlKeys = [\n 'Backspace',\n 'Delete',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Tab',\n 'Enter',\n 'Escape',\n 'Home',\n 'End',\n ];\n\n // Allow control keys, and modifier key combinations (Ctrl+A, Ctrl+C, etc.)\n if (\n controlKeys.includes(event.key) ||\n event.ctrlKey ||\n event.metaKey ||\n event.altKey\n ) {\n return; // Don't prevent default for these\n }\n\n // Allow a single decimal point if not already present in the realValue\n if (event.key === '.' && !this.realValue.includes('.')) {\n return;\n }\n\n // Prevent non-digit keys\n if (!/^\\d$/.test(event.key)) {\n event.preventDefault();\n }\n }\n\n /**\n * Extracts a clean numeric string from a given value.\n * It removes any non-digit characters except for a single decimal point.\n * It also ensures that there's only one decimal point and limits\n * the decimal part to two digits.\n * @param value - The string value to clean.\n * @returns A string representing the extracted numeric value.\n */\n private extractNumericValue(value: string): string {\n // Remove all non-digit characters except for the decimal point\n value = value.toString();\n let cleanValue = value.replace(/[^\\d.]/g, '');\n\n // Handle multiple decimal points: keep only the first one\n const parts = cleanValue.split('.');\n if (parts.length > 1) {\n const integerPart = parts[0];\n const decimalPart = parts.slice(1).join(''); // Join back any subsequent parts\n cleanValue = `${integerPart}.${decimalPart}`;\n }\n\n // Limit decimal part to two digits\n if (cleanValue.includes('.')) {\n const [integerPart, decimalPart] = cleanValue.split('.');\n const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';\n cleanValue = `${integerPart}.${cappedDecimalPart}`;\n }\n\n return cleanValue;\n }\n\n /**\n * Updates the input element's display value with the formatted version\n * of the current `realValue`.\n * It uses the `NumberFormatPipe` for formatting.\n */\n private updateDisplayValue(): void {\n const input = this.el.nativeElement;\n let formattedValue = '';\n\n if (this.realValue === '') {\n input.value = '';\n return;\n }\n\n let [integerPart, decimalPart] = this.realValue.split('.');\n\n if (integerPart.length > 1) {\n integerPart = integerPart.replace(/^0+/, '') || '0';\n }\n\n // If number formatting is disabled, skip thousand separators and decimals\n if (this.isNumberFormattingDisabled()) {\n formattedValue = integerPart;\n\n // Still add decimal part if it exists and formatting is not disabled\n if (this.realValue.endsWith('.')) {\n formattedValue = formattedValue + '.';\n } else if (decimalPart !== undefined) {\n formattedValue = formattedValue + '.' + decimalPart;\n }\n } else {\n // Use full formatting with NumberFormatPipe\n const formattedInteger = new NumberFormatPipe().transform(integerPart);\n\n if (this.realValue.endsWith('.')) {\n formattedValue = formattedInteger + '.';\n } else if (decimalPart !== undefined) {\n formattedValue = formattedInteger + '.' + decimalPart;\n } else {\n formattedValue = formattedInteger;\n }\n }\n\n if (this.prefix()) {\n formattedValue = this.prefix() + formattedValue;\n }\n\n input.value = formattedValue;\n }\n\n /**\n * Sets the cursor position to the end of the input field.\n * This is typically called after the input value is reformatted to prevent\n * the cursor from jumping to an unexpected position.\n * Uses `setTimeout` to ensure the operation occurs after Angular's view update.\n */\n private setCursorToEnd(): void {\n const input = this.el.nativeElement;\n // setTimeout ensures this runs after the current browser rendering tick,\n // allowing the value to be fully set in the input before moving the cursor.\n setTimeout(() => {\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }, 0);\n }\n\n /**\n * Dispatches a custom event named 'realValueChange' from the host element.\n * The event's `detail` property contains the unformatted `realValue`.\n * This allows parent components or other directives to listen for changes\n * to the underlying numeric value.\n */\n private dispatchRealValueChange(): void {\n let number = Number(this.realValue) + '';\n if (this.realValue === '') number = '';\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true, // Allows event to bubble up the DOM\n composed: true, // Allows event to cross Shadow DOM boundaries\n detail: number,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unformatted \"real\" numeric value.\n * @returns The real numeric value as a string.\n */\n getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" numeric value from outside the directive.\n * It extracts the numeric part from the provided value and updates the\n * input's display with the formatted version.\n * @param value - The new value to set (can be formatted or unformatted).\n */\n setRealValue(value: string): void {\n this.realValue = this.extractNumericValue(value || '');\n this.updateDisplayValue();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { MaskHelper } from './helpers';\n\n@Directive({\n selector: '[appMask]',\n})\nexport class MaskDirective implements OnInit {\n /**\n * The mask pattern to apply.\n * Placeholders:\n * '0' - Digit (0-9)\n * 'a' - Letter (a-z, A-Z)\n * '*' - Alphanumeric (0-9, a-z, A-Z)\n * @example '(000) 000-0000' for a phone number.\n */\n appMask = input<string>('');\n\n reveal = input<number>(0);\n\n /**\n * Stores the unmasked, \"real\" value of the input, containing only\n * the characters entered by the user that fit the mask placeholders.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n ngOnInit(): void {\n if (this.appMask() && this.el.nativeElement.value) {\n this.formatValue(this.el.nativeElement.value);\n }\n }\n\n /**\n * HostListener for the 'input' event. This is the primary handler for\n * formatting the value as the user types or pastes.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appMask() || this.reveal() !== 0) return;\n this.formatValue(this.el.nativeElement.value);\n //this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'paste' event. It intercepts pasted content,\n * cleans it, and integrates it into the masked value.\n */\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent): void {\n if (!this.appMask()) return;\n //event.preventDefault();\n //const pastedData = event.clipboardData?.getData('text') || '';\n //this.formatValue(this.realValue + pastedData);\n //this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'copy' event. Ensures that copying a selection\n * from the input copies the unmasked, \"real\" value.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appMask()) return;\n const selection = this.el.nativeElement.value.substring(\n this.el.nativeElement.selectionStart || 0,\n this.el.nativeElement.selectionEnd || 0\n );\n if (selection) {\n event.preventDefault();\n const unmaskedSelection = MaskHelper.extractUserInput(selection);\n //event.clipboardData?.setData('text/plain', unmaskedSelection);\n event.clipboardData?.setData('text/plain', selection);\n }\n }\n\n /**\n * HostListener for the 'cut' event. Ensures cutting a selection removes\n * the corresponding part from the real value and reformats the input.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appMask()) return;\n const start = this.el.nativeElement.selectionStart || 0;\n const end = this.el.nativeElement.selectionEnd || 0;\n if (start !== end) {\n event.preventDefault();\n const selection = this.el.nativeElement.value.substring(start, end);\n const unmaskedSelection = MaskHelper.extractUserInput(selection);\n //event.clipboardData?.setData('text/plain', unmaskedSelection);\n event.clipboardData?.setData('text/plain', selection);\n\n const valueBefore = MaskHelper.extractUserInput(\n this.el.nativeElement.value.substring(0, start)\n );\n const valueAfter = MaskHelper.extractUserInput(\n this.el.nativeElement.value.substring(end)\n );\n this.formatValue(valueBefore + valueAfter);\n //this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'keydown' event. It validates key presses against\n * the mask pattern, preventing invalid characters from being entered.\n */\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n const mask = this.appMask();\n if (!mask) return;\n\n const controlKeys = [\n 'Backspace',\n 'Delete',\n 'ArrowLeft',\n 'ArrowRight',\n 'Tab',\n 'Enter',\n 'Escape',\n 'Home',\n 'End',\n ];\n if (controlKeys.includes(event.key) || event.metaKey || event.ctrlKey) {\n return;\n }\n\n const placeholders = mask.replace(/[^0a*]/g, '');\n if (this.realValue.length >= placeholders.length) {\n event.preventDefault();\n return;\n }\n\n const nextPlaceholder = placeholders[this.realValue.length];\n if (!MaskHelper.charMatchesPlaceholder(event.key, nextPlaceholder)) {\n event.preventDefault();\n }\n }\n\n /**\n * The core formatting logic. It takes a value, extracts the valid user\n * input, applies the mask, updates the display, and dispatches the change.\n * @param value The current value from the input field.\n */\n private formatValue(value: string): void {\n const mask = this.appMask();\n if (!mask) return;\n\n const extractedValue = MaskHelper.extractUserInput(value);\n\n const { formattedValue, finalRealValue } = MaskHelper.applyMask(\n extractedValue,\n mask\n );\n this.realValue = finalRealValue;\n\n this.el.nativeElement.value = formattedValue;\n this.setCursorToEnd();\n }\n\n private setCursorToEnd(): void {\n setTimeout(() => {\n const len = this.el.nativeElement.value.length;\n this.el.nativeElement.setSelectionRange(len, len);\n }, 0);\n }\n\n private dispatchRealValueChange(): void {\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true,\n composed: true,\n detail: this.realValue,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unmasked \"real\" value.\n * @returns The real value as a string.\n */\n public getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" value from outside the directive.\n * @param value The new value to set.\n */\n public setRealValue(value: string): void {\n if (this.appMask()) {\n this.formatValue(value || '');\n } else {\n this.el.nativeElement.value = value || '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'initials',\n})\nexport class InitialsPipe implements PipeTransform {\n transform({\n firstName,\n lastName,\n fullName,\n }: {\n firstName?: string | null;\n lastName?: string | null;\n fullName?: string | null;\n }): string {\n let initials = '';\n if (fullName) {\n initials =\n fullName.split(' ')[0].charAt(0).toUpperCase() +\n fullName.split(' ')[1].charAt(0).toUpperCase();\n } else {\n if (firstName) {\n initials += firstName.charAt(0).toUpperCase();\n }\n if (lastName) {\n initials += lastName.charAt(0).toUpperCase();\n }\n }\n return initials;\n }\n}\n","import { Component, input } from '@angular/core';\nimport { Driver, Size } from './models';\nimport { InitialsPipe } from './pipes/initials.pipe';\n\n/**\n * Represents a user avatar component.\n */\n@Component({\n selector: 'cai-avatar',\n imports: [InitialsPipe],\n templateUrl: './avatar.component.html',\n styleUrl: './avatar.component.scss',\n})\nexport class AvatarComponent {\n /**\n * The driver object containing information to display in the avatar.\n * This input is required.\n * @type {Driver}\n */\n driver = input.required<Driver>();\n\n /**\n * The size of the avatar in pixels.\n * @type {Size}\n */\n size = input<Size>(18);\n\n /**\n * Whether the avatar should be rounded or not.\n * @type {boolean}\n */\n rounded = input<boolean>(false);\n\n /**\n * Whether the owner element should be dark or light\n * @type {boolean}\n */\n inverse = input<boolean>(false);\n}\n","@let firstName = driver()?.firstName; @let lastName = driver()?.lastName; @let\nisOwner = driver()?.owner; @let color = driver()?.colorFlag?.name ??\ndriver()?.avatarColor; @let avatarUrl = driver()?.avatarFile?.url ??\ndriver()?.avatarUrl; @let fullName = driver()?.fullName;\n\n<div\n class=\"avatar\"\n [class]=\"{\n 'is-owner': isOwner,\n\n xs: size() === 18,\n sm: size() === 22,\n md: size() === 32,\n lg: size() === 74,\n xl: size() === 160,\n\n blue: color === 'Blue',\n green: color === 'Green',\n red: color === 'Red',\n yellow: color === 'Yellow',\n purple: color === 'Purple',\n gold: color === 'Gold',\n 'light-green': color === 'Light Green',\n orange: color === 'Orange',\n 'light-blue': color === 'Light Blue',\n pink: color === 'Pink',\n brown: color === 'Brown',\n gray: color === 'Gray',\n lime: color === 'Lime',\n navy: color === 'Navy',\n azure: color === 'Azure',\n magenta: color === 'Magenta',\n\n inverse: inverse(),\n rounded: rounded()\n }\"\n>\n @if( avatarUrl ){\n <img class=\"avatar-image\" [src]=\"avatarUrl\" />\n }\n <p class=\"avatar-initials\">\n {{ { firstName, lastName, fullName } | initials }}\n </p>\n</div>\n","// Angular\nimport {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n HostListener,\n input,\n OnInit,\n Optional,\n output,\n Self,\n signal,\n ViewChild,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\n\n// Pipes\nimport { ErrorMessagePipe } from './pipes/error-message.pipe';\nimport { HighlightSearchPipe } from './pipes/highlight-search';\nimport { CurrencyPipe } from '../../pipes/currency.pipe';\nimport { FilterBySearchPipe } from './pipes/filter-by-search.pipe';\nimport { RemapPmIconsPipe } from './pipes/remap-pm-icons.pipe';\n\n// Directives\nimport { PasswordDirective } from './directives/password.directive';\nimport { NumberFormatDirective } from './directives/number-format.directive';\nimport { MaskDirective } from './directives/mask.directive';\n\n// Bootstrap\nimport {\n NgbDropdownModule,\n NgbPopover,\n NgbTooltip,\n} from '@ng-bootstrap/ng-bootstrap';\n\n// Models\nimport {\n Bank,\n Broker,\n CaiInputConfig,\n Contact,\n DepartmentContactsPair,\n Dispatcher,\n DropdownOption,\n LabelColor,\n LabelOption,\n Shipper,\n Dispatch,\n DispatchBoard,\n DropdownArrays,\n DropdownOptions,\n DropdownKeys,\n TruckType,\n TrailerType,\n Hazardous,\n State,\n Owner,\n FuelCard,\n PMOption,\n MakeOption,\n ColorOption,\n TollOption,\n TollTransponderOption,\n} from './models';\n\n// Components\nimport { AvatarComponent } from '../avatar/avatar.component';\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Autofill interface\ninterface AutofillableFormControl extends AbstractControl {\n _autofilled?: boolean;\n}\n\n/**\n * This component is a generic input component that can be used to create various types of inputs.\n */\n@Component({\n selector: 'cai-input',\n imports: [\n // Pipes\n ErrorMessagePipe,\n CurrencyPipe,\n HighlightSearchPipe,\n FilterBySearchPipe,\n RemapPmIconsPipe,\n // Directives\n PasswordDirective,\n NumberFormatDirective,\n MaskDirective,\n // Bootstrap\n NgbDropdownModule,\n NgbTooltip,\n NgTemplateOutlet,\n // Components\n SvgIconComponent,\n AvatarComponent,\n ],\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n})\nexport class InputComponent\n implements ControlValueAccessor, AfterViewInit, OnInit\n{\n // Refs\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n @ViewChild('containerRef') containerRef!: ElementRef<HTMLInputElement>;\n @ViewChild('dropdown') dropdown!: NgbPopover;\n @ViewChild('closeTooltip') closeTooltip!: NgbPopover;\n\n // Directive refs\n @ViewChild(PasswordDirective) PasswordDirective!: PasswordDirective;\n @ViewChild(NumberFormatDirective)\n NumberFormatDirective!: NumberFormatDirective;\n @ViewChild(MaskDirective)\n MaskDirective!: MaskDirective;\n\n // Template refs\n @ViewChild('multipleRef') multipleRef: any;\n @ViewChild('hazardousRef') hazardousRef: any;\n @ViewChild('dropdownOptionsRef') dropdownOptionsRef: any;\n @ViewChild('dispatchesRef') dispatchesRef: any;\n @ViewChild('ftlDispatchRef') ftlDispatchRef: any;\n @ViewChild('labelPickerRef') labelPickerRef: any;\n @ViewChild('brokerRef') brokerRef: any;\n @ViewChild('contactRef') contactRef: any;\n @ViewChild('shipperRef') shipperRef: any;\n @ViewChild('bankRef') bankRef: any;\n @ViewChild('dispatcherRef') dispatcherRef: any;\n @ViewChild('truckRef') truckRef: any;\n @ViewChild('trailerRef') trailerRef: any;\n @ViewChild('stateRef') stateRef: any;\n @ViewChild('ownerRef') ownerRef: any;\n @ViewChild('fuelcardRef') fuelcardRef: any;\n @ViewChild('colorRef') colorRef: any;\n @ViewChild('makeRef') makeRef: any;\n @ViewChild('tollRef') tollRef: any;\n\n @ViewChild('pmRef') pmRef: any;\n @ViewChild('selectedPmRef') selectedPmRef: any;\n\n @ViewChild('selectedOwnerRef') selectedOwnerRef: any;\n @ViewChild('selectedHazardousRef') selectedHazardousRef: any;\n @ViewChild('selectedDispatchRef') selectedDispatchRef: any;\n @ViewChild('selectedLabelRef') selectedLabelRef: any;\n @ViewChild('selectedBrokerRef') selectedBrokerRef: any;\n @ViewChild('selectedContactRef') selectedContactRef: any;\n @ViewChild('selectedShipperRef') selectedShipperRef: any;\n @ViewChild('selectedBankRef') selectedBankRef: any;\n @ViewChild('selectedDispatcherRef') selectedDispatcherRef: any;\n @ViewChild('selectedTruckRef') selectedTruckRef: any;\n @ViewChild('selectedTrailerRef') selectedTrailerRef: any;\n @ViewChild('selectedStateRef') selectedStateRef: any;\n @ViewChild('selectedFuelcardRef') selectedFuelcardRef: any;\n @ViewChild('selectedColorRef') selectedColorRef: any;\n @ViewChild('selectedMakeRef') selectedMakeRef: any;\n @ViewChild('selectedTollRef') selectedTollRef: any;\n\n // Inputs\n\n /**\n * Defines the unique identifier for the input element.\n * It is provided by the parent component as an Angular `input()` signal.\n */\n id = input<string>('');\n\n /**\n * Configuration object for the input's behavior and appearance.\n * It is provided by the parent component as an Angular `input()` signal.\n - `type`: HTML input type (`'text'`, `'password'`, `'account'`, `'number'`).\n - `name`: The HTML `name` attribute.\n - `required`: If `true`, the input is required for form submission.\n - `alignment`: Text alignment within the input (`'left'` or `'right'`).\n - `inverse`: If `true`, renders the input in a dark mode style.\n - `reveal`: For password inputs, the number of characters to reveal from the end.\n - `icon`: Name of an icon to display (e.g., `'cai-email'`).\n - `iconColor`: Color of the displayed icon (e.g., `'#FF0000'`).\n - `dropdown`: If `true`, the input is associated with a dropdown menu, can also have `'dispatch'`, `'ftl-dispatch'`, `'broker'`, `'contact'`, `'shipper'`, `'dispatcher'`, `'truck'`, `'trailer'`, `'bank'`, `'label'`, `'state'`, `'owner'`, `'fuelcard'`, `'pm'`, or `'subcontent'` variants.\n - `options`: An array of options for the dropdown can be of type `DropdownOption[]` | `LabelOption[]` | `DispatchBoard[]` | `Broker[]` | `DepartmentContactsPair[]` | `Shipper[]` | `Bank[]` | `Dispatcher[]` | `TruckOption[]` | `TrailerOption[]` | `Hazardous[]` | `State[]` | `Owner[]` | `FuelCard[]` | `PMOption[]`.\n - `labelColors`: An array of label colors for the label picker.\n - `search`: Enables search within the dropdown.\n - `add`: Enables 'add new' functionality in the dropdown.\n - `placeholderBehavior`: Defines placeholder animation (`'dynamic'` , `'fade'`, `'static'`).\n - `errorBehavior`: Defines error animation (`'static'`, `'dynamic'`, `'floating'`).\n - `label`: An `aria-label` for accessibility.\n - `list`: If `true`, the input has no validation, no background and no separators for icons\n - `inTable`: If `true`, has in-table styles\n - `mask`: A pattern string for input masking (e.g., `'(000) 000-0000'`).\n - `min`: Minimum value for number inputs.\n - `max`: Maximum value for number inputs (e.g., `999` meaning 3 characters) or maximum length for text inputs in characters.\n - `textTransform`: Text transformation for text inputs (`'capitalize'`, `'uppercase'`, `'lowercase'`).\n - `textColor`: Text color for text inputs (`'positive'`).\n - `step`: Step value for number inputs. Can also be `automatic` for automatic step calculation.\n - `withButtons`: If `true`, adds increment/decrement buttons for number inputs.\n - `autocomplete`: The HTML `autocomplete` attribute.\n - `disabled`: If `true`, the input is disabled (for use without reactive form).\n - `passwordRequirements`: If `true`, shows password requirements for password inputs.\n - `optionValue`: The key of the option to use in the formControl for the selected option in the dropdown.\n - `optionLabel`: The key of the option to use as the label in the dropdown.\n - `subContent`: An optional slot for additional content to be displayed next to the content the user is entering. (ex. lbs, months, etc.)\n - `removable`: If `true`, displays `cai-delete` icon over clear button.\n - `autofocus`: If `true`, the input will be focused when the component is initialized.\n - `canOpenModal`: If `true`, the input can open a modal for adding new options.\n - `customErrors`: An array of custom error messages to be displayed in the input.\n - `isNumberFormattingDisabled`: If `true`, the input will not be formatted as a number.\n */\n config = input<CaiInputConfig>({});\n\n /**\n * Input property to hold the dropdown options.\n */\n options = input<DropdownArrays>([]);\n\n preselectedOptions = input<DropdownArrays | null>(null);\n\n /**\n * Input property to hold the label colors for the label picker.\n */\n labelColors = input<LabelColor[]>();\n\n /**\n * Input property to hide the validation.\n */\n hideValidation = input<boolean>(false);\n\n /**\n * Input property to show the no results message.\n */\n showNoResults = input<boolean>(true);\n\n /**\n * Preselected dropdown option\n */\n preselectedUnit = input<string | null>(null);\n\n // Signals\n\n closing = signal<boolean>(false);\n\n /**\n * Internal signal to track the disabled state of the input.\n */\n disabled = signal<boolean>(false);\n\n /**\n * Holds the internal, unmasked, and unformatted value of the input.\n */\n value = signal<string>('');\n\n /**\n * Tracks the visibility state for inputs of `type='password' and 'account'`.\n */\n visible = signal<boolean>(false);\n\n /**\n * A signal that holds the locally added options.\n */\n localOptions = signal(this.options());\n\n /**\n * A signal that holds the currently selected option from the dropdown.\n */\n selectedOption = signal<DropdownOptions | null>(null);\n\n /**\n * A signal that holds the currently selected options from the dropdown.\n */\n multipleSelectedOptions = signal<DropdownOptions[]>([]);\n\n /**\n * A signal that indicates whether the input is focused.\n */\n focused = signal<boolean>(false);\n\n /**\n * A signal that indicates whether the input is hovered.\n */\n hovered = signal<boolean>(false);\n\n /**\n * A signal that indicates whether a new option is being added.\n */\n isAdding = signal<boolean>(false);\n\n /**\n * A signal that tracks whether the field has been autofilled.\n */\n isAutofilled = signal<boolean>(false);\n\n // Label picker signals\n\n /**\n * A signal that holds the currently selected color from the label picker.\n */\n selectedColor = signal<LabelColor>({});\n\n isPickingColor = signal<boolean>(false);\n\n // Dispatch board signals\n\n /**\n * A signal that holds the currently selected dispatch board from the dispatch board picker.\n */\n\n foldedBoards = signal<number[]>([]);\n\n randomAutocomplete = signal<string>(this.randomizeAutocomplete());\n\n // Computed signals\n\n /**\n * A computed signal that indicates whether the placeholder selected option should be shown.\n */\n hasText = computed<boolean>(() => {\n return Boolean(\n this.value() ||\n (this.selectedOption() && this.config().dropdown !== 'subcontent') ||\n this.isAdding() ||\n this.isPickingColor() ||\n this.isAutofilled() ||\n !!this.multipleSelectedOptions().length\n );\n });\n\n /**\n * A signal that holds the container width to prevent ExpressionChangedAfterItHasBeenCheckedError.\n */\n containerWidth = signal<number>(0);\n\n /**\n * A computed signal that dynamically calculates the step value for number inputs.\n */\n step = computed(() => {\n const numericValue = parseFloat(this.value() || '0');\n const value = numericValue || 0;\n if (this.config().step === 'automatic') {\n if (value < 20000) return 1000;\n else if (value < 50000) return 5000;\n else if (value < 100000) return 10000;\n else return 20000;\n } else if (this.config().step) return this.config().step as number;\n else {\n return 1;\n }\n });\n\n combinedOptions = computed(() => {\n if (!this.options()) return [];\n if (!this.localOptions()) return this.options();\n return [...this.options(), ...this.localOptions()] as DropdownArrays;\n });\n\n // Dispatch board\n\n dispatchCount = computed<number>(() => {\n if (!(this.options() as DispatchBoard[])) return 0;\n return (this.options() as DispatchBoard[])!.reduce(\n (acc, board) => acc + board.count,\n 0\n );\n });\n\n // Outputs\n onBlur = output();\n onFocused = output();\n\n onValueChange = output<string | number | null>();\n\n /**\n * An output signal that emits the value of the added option.\n */\n onOptionAdded = output<string | LabelOption>();\n\n /**\n * An output signal that emits when the user clicks on the \"ADD NEW\" button in the dropdown.\n */\n onAdd = output();\n\n /**\n * An output signal that emits the `optionValue` or `id` of the changed dropdown option.\n */\n onSelectionChange = output<DropdownKeys | null>();\n\n /**\n * An output signal that emits when the user clicks on the \"CLEAR\" button.\n */\n onClear = output();\n\n /**\n * An output signal that emits when the user clicks on the \"AUTOFILL\" button.\n */\n onAutofill = output();\n\n /**\n * Constructor for the InputComponent.\n * It injects NgControl to integrate with Angular's forms API.\n * If NgControl is present, it sets this component as the value accessor\n * for the form control.\n * @param ngControl - Optional NgControl instance for form integration.\n * @param cdr - ChangeDetectorRef for manual change detection.\n */\n constructor(\n @Optional() @Self() public ngControl: NgControl | null,\n private cdr: ChangeDetectorRef\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Handles autofill detection from Chrome's autofill animation.\n * Marks the control as autofilled and updates validity.\n */\n onAutofilled(): void {\n if (!this.config().autocomplete) {\n return;\n }\n\n this.onAutofill.emit();\n\n const ctrl = this.ngControl?.control as AutofillableFormControl;\n if (!ctrl) return;\n\n ctrl._autofilled = true;\n this.isAutofilled.set(true);\n ctrl.setErrors(null);\n ctrl.markAsDirty();\n ctrl.markAsTouched();\n ctrl.updateValueAndValidity({ emitEvent: false });\n this.cdr.detectChanges();\n }\n\n /**\n * Clears the autofill flag when user manually edits the field.\n * Re-enables normal validation.\n */\n clearAutofillFlag(): void {\n const ctrl = this.ngControl?.control as AutofillableFormControl;\n if (ctrl?._autofilled) {\n ctrl._autofilled = false;\n this.isAutofilled.set(false);\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n }\n\n ngOnInit(): void {\n const optionLabel = this.config().optionLabel;\n\n if (\n this.preselectedUnit() &&\n this.options() &&\n this.config().dropdown === 'subcontent'\n ) {\n const option = (this.options() as DropdownOption[])!.find((option) => {\n if (optionLabel && this.hasProperty(option, optionLabel)) {\n return (\n option[optionLabel]?.toString().toLowerCase() ===\n this.preselectedUnit()?.toString().toLowerCase()\n );\n } else {\n return (\n option['label']?.toString().toLowerCase() ===\n this.preselectedUnit()?.toString().toLowerCase()\n );\n }\n });\n if (option) {\n this.selectedOption.set(option);\n }\n }\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.updateContainerWidth();\n if (this.config().autofocus) {\n this.focus();\n }\n\n // Set up autofill detection via animation events\n if (\n this.config().autocomplete &&\n this.config().autocomplete !== 'off' &&\n this.inputRef?.nativeElement\n ) {\n this.setupAutofillDetection();\n }\n }, 0);\n }\n\n /**\n * Sets up autofill detection by checking for Chrome's -webkit-autofill CSS pseudo-class\n */\n private setupAutofillDetection(): void {\n if (!this.inputRef?.nativeElement) return;\n\n const inputElement = this.inputRef.nativeElement;\n\n // Check for autofill using CSS pseudo-class detection\n const checkForAutofill = () => {\n if (this.isAutofilled()) return;\n\n // Check if the element matches the -webkit-autofill pseudo-class\n const isAutofilled =\n inputElement.matches(':-webkit-autofill') ||\n inputElement.matches(':-webkit-autofill:hover') ||\n inputElement.matches(':-webkit-autofill:focus') ||\n inputElement.matches(':-webkit-autofill:active');\n\n if (isAutofilled) {\n this.onAutofilled();\n }\n };\n\n // Periodic checks for autofill\n setTimeout(checkForAutofill, 200);\n setTimeout(checkForAutofill, 500);\n setTimeout(checkForAutofill, 1000);\n }\n\n /**\n * Updates the container width signal to prevent ExpressionChangedAfterItHasBeenCheckedError\n */\n private updateContainerWidth(): void {\n if (this.containerRef?.nativeElement) {\n this.containerWidth.set(this.containerRef.nativeElement.offsetWidth);\n }\n }\n\n /**\n * Handles the native 'input' event from the HTMLInputElement.\n * Updates the component's internal value and notifies Angular forms\n * about the change.\n * @param event - The input event object.\n */\n onInput(event: Event): void {\n // Clear autofill flag when user manually types\n this.clearAutofillFlag();\n\n const inputElement = event.target as HTMLInputElement;\n const inputEvent = event as InputEvent;\n const inputData = inputEvent.data;\n const max = this.config().max;\n\n // Handle inputs normally for all inputs other than password and number\n if (\n ((this.config().type === 'password' ||\n this.config().type === 'account') &&\n this.config().reveal) ||\n this.config().type === 'number' //||\n //!!this.config().mask\n ) {\n return;\n }\n\n if (\n inputData &&\n (this.config().disabledCharacters?.length ||\n this.config().enabledCharacters?.length ||\n this.config().spacesAllowed !== undefined)\n ) {\n let filteredData = inputData;\n\n if (this.config().disabledCharacters?.length) {\n filteredData = Array.from(filteredData)\n .filter(\n (char) =>\n !this.config().disabledCharacters?.includes(char?.toLowerCase())\n )\n .join('');\n }\n\n if (this.config().enabledCharacters?.length) {\n filteredData = Array.from(filteredData)\n .filter((char) =>\n this.config().enabledCharacters?.includes(char?.toLowerCase())\n )\n .join('');\n }\n\n if (this.config().spacesAllowed !== undefined) {\n const cursorPosition = inputElement.selectionStart || 0;\n const beforeCursor = inputElement.value.substring(\n 0,\n cursorPosition - inputData.length\n );\n const afterCursor = inputElement.value.substring(cursorPosition);\n\n // First, handle space validation (leading spaces and double spaces)\n let processedData = '';\n for (let i = 0; i < filteredData.length; i++) {\n const char = filteredData[i];\n const fullValueSoFar = beforeCursor + processedData;\n\n if (char === ' ') {\n if (fullValueSoFar.length === 0) {\n continue;\n }\n\n if (fullValueSoFar.endsWith(' ')) {\n continue;\n }\n }\n\n processedData += char;\n }\n\n const fullValue = beforeCursor + processedData + afterCursor;\n const currentSpaceCount = (fullValue.match(/ /g) || []).length;\n\n // Then apply space count limit\n if (currentSpaceCount > this.config().spacesAllowed!) {\n const spacesInProcessedData = (processedData.match(/ /g) || [])\n .length;\n const currentSpacesWithoutProcessed =\n currentSpaceCount - spacesInProcessedData;\n const allowedSpacesInProcessed = Math.max(\n 0,\n this.config().spacesAllowed! - currentSpacesWithoutProcessed\n );\n\n if (allowedSpacesInProcessed === 0) {\n processedData = processedData.replace(/ /g, '');\n } else if (spacesInProcessedData > allowedSpacesInProcessed) {\n const spacesToRemove =\n spacesInProcessedData - allowedSpacesInProcessed;\n let removedCount = 0;\n processedData = Array.from(processedData)\n .filter((char) => {\n if (char === ' ' && removedCount < spacesToRemove) {\n removedCount++;\n return false;\n }\n return true;\n })\n .join('');\n }\n }\n\n filteredData = processedData;\n }\n\n if (filteredData !== inputData) {\n const cursorPosition = inputElement.selectionStart || 0;\n const beforeCursor = inputElement.value.substring(\n 0,\n cursorPosition - inputData.length\n );\n const afterCursor = inputElement.value.substring(cursorPosition);\n inputElement.value = beforeCursor + filteredData + afterCursor;\n\n const newCursorPosition = beforeCursor.length + filteredData.length;\n inputElement.setSelectionRange(newCursorPosition, newCursorPosition);\n }\n }\n\n if (max && inputElement.value.length > max) {\n inputElement.value = inputElement.value.slice(0, max);\n }\n\n if (this.config().textTransform) {\n switch (this.config().textTransform) {\n case 'capitalize':\n let words = inputElement.value.split(' ');\n inputElement.value = words\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n break;\n case 'uppercase':\n inputElement.value = inputElement.value\n .split('')\n .map((letter) => {\n if (this.config().textTransformExceptions?.includes(letter)) {\n return letter.toLowerCase();\n }\n return letter.toUpperCase();\n })\n .join('');\n break;\n case 'lowercase':\n inputElement.value = inputElement.value.toLowerCase();\n break;\n }\n }\n\n this.value.set(inputElement.value);\n\n if (this.config().search && !this.config().dropdownAutocomplete) {\n return;\n }\n\n this.dispatchOnChange(this.value());\n }\n\n /**\n * Listens for a custom 'realValueChange' event.\n * This event is expected to be emitted by child directives (PasswordDirective, NumberFormatDirective)\n * when their internal \"real\" value changes, allowing the parent input component\n * to stay in sync.\n * @param event - A CustomEvent containing the new real value in `event.detail`.\n */\n @HostListener('realValueChange', ['$event'])\n onRealValueChange(event: CustomEvent): void {\n this.value.set(event.detail);\n this.dispatchOnChange(event.detail);\n }\n\n // ControlValueAccessor methods\n onChange = (_: any) => {};\n onTouched = () => {};\n\n /**\n * Dispatches the onChange event with the provided value.\n * This method wraps the onChange call to provide a centralized way to handle value changes.\n * @param value - The value to pass to onChange\n */\n dispatchOnChange(value: any): void {\n if (value === undefined || value === null || value === '') {\n this.onChange(null);\n this.onValueChange.emit(null);\n } else {\n this.onChange(value);\n this.onValueChange.emit(value);\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /**\n * Writes a new value to the element. (ControlValueAccessor)\n */\n writeValue(value: any): void {\n if (value && this.config().textTransform && typeof value === 'string') {\n switch (this.config().textTransform) {\n case 'capitalize':\n let words = value.split(' ');\n value = words\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n break;\n case 'uppercase':\n value = value\n .split('')\n .map((letter) => {\n if (this.config().textTransformExceptions?.includes(letter)) {\n return letter.toLowerCase();\n }\n return letter.toUpperCase();\n })\n .join('');\n break;\n case 'lowercase':\n value = value.toLowerCase();\n break;\n }\n }\n this.value.set(value);\n\n const optionValue = this.config().optionValue;\n\n setTimeout(() => {\n if (value || value === 0) {\n this.onTouched();\n } else {\n this.selectedOption.set(null);\n this.setValue();\n return;\n }\n\n if (\n !(this.config().dropdown && !this.config().dropdownAutocomplete) ||\n this.config().dropdown === 'subcontent'\n ) {\n this.setValue();\n }\n\n if (this.config().dropdownAutocomplete) {\n return;\n }\n\n if (!this.options()) {\n return;\n }\n\n if (!this.options().length) {\n return;\n }\n\n const options = !!this.preselectedOptions()?.length\n ? [...this.options(), ...this.preselectedOptions()!]\n : this.options();\n\n switch (this.config().dropdown) {\n case 'dispatch':\n case 'ftl-dispatch':\n // TODO: Leave only board variant once backend is fixed\n if (this.hasProperty(options[0], 'dispatches')) {\n for (const board of (options as DispatchBoard[])!) {\n const dispatch = board.dispatches.find((dispatch) => {\n if (optionValue && this.hasProperty(dispatch, optionValue)) {\n return (\n dispatch[optionValue]?.toString() === value?.toString()\n );\n } else {\n return dispatch.id?.toString() === value?.toString();\n }\n });\n if (dispatch) {\n this.selectedOption.set(dispatch);\n this.value.set('');\n } else {\n this.value.set('');\n }\n }\n } else {\n const dispatch = (options as Dispatch[])!.find((dispatch) => {\n if (optionValue && this.hasProperty(dispatch, optionValue)) {\n return dispatch[optionValue]?.toString() === value?.toString();\n } else {\n return dispatch.id?.toString() === value?.toString();\n }\n });\n if (dispatch) {\n this.selectedOption.set(dispatch);\n this.value.set('');\n } else {\n this.value.set('');\n }\n }\n break;\n case 'label':\n const label = (options as LabelOption[])!.find((label) => {\n if (optionValue && this.hasProperty(label, optionValue)) {\n return label[optionValue]?.toString() === value?.toString();\n } else {\n return label.id?.toString() === value?.toString();\n }\n });\n if (label) {\n this.selectedOption.set(label);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'broker':\n const broker = (options as Broker[])!.find((broker) => {\n if (optionValue && this.hasProperty(broker, optionValue)) {\n return broker[optionValue]?.toString() === value?.toString();\n } else {\n return broker.id?.toString() === value?.toString();\n }\n });\n if (broker) {\n this.selectedOption.set(broker);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'contact':\n for (const departmentContactsPair of options as DepartmentContactsPair[]) {\n const contact = departmentContactsPair.contacts?.find((contact) => {\n if (optionValue && this.hasProperty(contact, optionValue)) {\n return contact[optionValue]?.toString() === value?.toString();\n } else {\n return contact.id?.toString() === value?.toString();\n }\n });\n if (contact) {\n this.selectedOption.set(contact);\n this.value.set('');\n } else {\n this.value.set('');\n }\n }\n break;\n case 'shipper':\n const shipper = (options as Shipper[])!.find((shipper) => {\n if (optionValue && this.hasProperty(shipper, optionValue)) {\n return shipper[optionValue]?.toString() === value?.toString();\n } else {\n return shipper.id?.toString() === value?.toString();\n }\n });\n if (shipper) {\n this.selectedOption.set(shipper);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'bank':\n const bank = (options as Bank[])!.find((bank) => {\n if (optionValue && this.hasProperty(bank, optionValue)) {\n return bank[optionValue]?.toString() === value?.toString();\n } else {\n return bank.id?.toString() === value?.toString();\n }\n });\n if (bank) {\n this.selectedOption.set(bank);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n\n case 'dispatcher':\n const dispatcher = (options as Dispatcher[])!.find((dispatcher) => {\n if (optionValue && this.hasProperty(dispatcher, optionValue)) {\n return dispatcher[optionValue]?.toString() === value?.toString();\n } else {\n return dispatcher.id?.toString() === value?.toString();\n }\n });\n if (dispatcher) {\n this.selectedOption.set(dispatcher);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'truck':\n const truck = (options as TruckType[])!.find((truck) => {\n if (optionValue && this.hasProperty(truck, optionValue)) {\n return truck[optionValue]?.toString() === value?.toString();\n } else {\n return truck.id?.toString() === value?.toString();\n }\n });\n if (truck) {\n this.selectedOption.set(truck);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'trailer':\n const trailer = (options as TrailerType[])!.find((trailer) => {\n if (optionValue && this.hasProperty(trailer, optionValue)) {\n return trailer[optionValue]?.toString() === value?.toString();\n } else {\n return trailer.id?.toString() === value?.toString();\n }\n });\n if (trailer) {\n this.selectedOption.set(trailer);\n this.value.set('');\n }\n break;\n case 'hazardous':\n const hazardous = (options as Hazardous[])!.find((hazardous) => {\n if (optionValue && this.hasProperty(hazardous, optionValue)) {\n return hazardous[optionValue]?.toString() === value?.toString();\n } else {\n return hazardous.id?.toString() === value?.toString();\n }\n });\n if (hazardous) {\n this.selectedOption.set(hazardous);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'owner':\n const owner = (options as Owner[])!.find((owner) => {\n if (optionValue && this.hasProperty(owner, optionValue)) {\n return owner[optionValue]?.toString() === value?.toString();\n } else {\n return owner.id?.toString() === value?.toString();\n }\n });\n if (owner) {\n this.selectedOption.set(owner);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'state':\n const state = (options as State[])!.find((state) => {\n if (optionValue && this.hasProperty(state, optionValue)) {\n return state[optionValue]?.toString() === value?.toString();\n } else {\n return state.id?.toString() === value?.toString();\n }\n });\n if (state) {\n this.selectedOption.set(state);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'fuelcard':\n const fuelcard = (options as FuelCard[])!.find((fuelcard) => {\n if (optionValue && this.hasProperty(fuelcard, optionValue)) {\n return fuelcard[optionValue]?.toString() === value?.toString();\n } else {\n return fuelcard.id?.toString() === value?.toString();\n }\n });\n if (fuelcard) {\n this.selectedOption.set(fuelcard);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'multiple':\n const multipleOptions = (options as DropdownOption[])!.filter(\n (option) => {\n if (optionValue && this.hasProperty(option, optionValue)) {\n return value.includes(option[optionValue]);\n } else {\n return value.includes(option.id);\n }\n }\n );\n\n if (!!multipleOptions.length) {\n this.multipleSelectedOptions.set(multipleOptions);\n this.value.set('');\n } else {\n this.value.set('');\n }\n\n break;\n case 'pm':\n const pm = (options as PMOption[])!.find((pm) => {\n if (optionValue && this.hasProperty(pm, optionValue)) {\n return pm[optionValue]?.toString() === value?.toString();\n } else {\n return pm.id?.toString() === value?.toString();\n }\n });\n if (pm) {\n this.selectedOption.set(pm);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'make':\n const make = (options as MakeOption[])!.find((make) => {\n if (optionValue && this.hasProperty(make, optionValue)) {\n return make[optionValue]?.toString() === value?.toString();\n } else {\n return make.id?.toString() === value?.toString();\n }\n });\n if (make) {\n this.selectedOption.set(make);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'toll':\n (options as TollOption[]).forEach((toll) => {\n const transponder = toll.tollTransponders?.find((transponder) => {\n if (optionValue && this.hasProperty(transponder, optionValue)) {\n return (\n transponder[optionValue]?.toString() === value?.toString()\n );\n } else {\n return transponder.id?.toString() === value?.toString();\n }\n });\n if (transponder) {\n this.selectedOption.set(transponder);\n this.value.set('');\n } else {\n this.value.set('');\n }\n });\n\n break;\n case 'color':\n const color = (options as ColorOption[])!.find((color) => {\n if (optionValue && this.hasProperty(color, optionValue)) {\n return color[optionValue]?.toString() === value?.toString();\n } else {\n return color.id?.toString() === value?.toString();\n }\n });\n if (color) {\n this.selectedOption.set(color);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'subcontent':\n break;\n case true:\n const option = (options as DropdownOption[])!.find((option) => {\n if (optionValue && this.hasProperty(option, optionValue)) {\n return option[optionValue]?.toString() === value?.toString();\n } else {\n return option.id?.toString() === value?.toString();\n }\n });\n if (option) {\n if (!this.config().dropdownAutocomplete) {\n this.selectedOption.set(option);\n }\n if (\n (this.config().search && !this.config().dropdownAutocomplete) ||\n this.config().add\n ) {\n this.value.set('');\n } else {\n this.value.set(option[this.config().optionLabel || 'label']);\n }\n } else {\n this.value.set('');\n }\n break;\n default:\n break;\n }\n });\n }\n\n /**\n * Increments the value of a number input by the current step.\n */\n increment(event: MouseEvent): void {\n const max = this.config().max;\n if (max && Number(this.value()) + this.step() > max) {\n this.value.set(String(max));\n } else {\n this.value.update((v) =>\n String(\n (parseFloat(v) ? parseFloat(v) : this.config().min || 0) + this.step()\n )\n );\n }\n this.dispatchOnChange(this.value());\n this.setValue();\n this.focus(event);\n }\n\n /**\n * Decrements the value of a number input by the current step.\n */\n decrement(event: MouseEvent): void {\n const min = this.config().min;\n if (min && Number(this.value()) - this.step() < min) {\n this.value.set(String(min));\n } else {\n this.value.update((v) => {\n const currentValue = parseFloat(v) ? parseFloat(v) : 0;\n const nextValue = currentValue - this.step();\n return String(nextValue <= 0 ? 0 : nextValue);\n });\n }\n this.dispatchOnChange(this.value());\n this.setValue();\n this.focus(event);\n }\n\n /**\n * Toggles the visibility of the password input.\n * @param event - The MouseEvent that triggered the toggle.\n */\n toggleVisibility(event: MouseEvent): void {\n if (this.config().type !== 'password' && this.config().type !== 'account') {\n return;\n }\n\n this.focus(event); // Ensure input remains focused after toggle\n this.visible.update((v) => !v);\n setTimeout(() => this.setValue(), 0);\n }\n\n /**\n * Sets the value in the actual HTML input element or updates the\n * \"real\" value in the associated directive.\n */\n setValue(): void {\n if (!this.inputRef || !this.inputRef.nativeElement) {\n return;\n }\n\n let type =\n !!this.config().mask && !this.config().reveal\n ? 'masked'\n : this.config().type;\n\n if ((type === 'password' || type === 'account') && !this.config().reveal) {\n type = 'text';\n }\n\n switch (type) {\n case 'password':\n if (this.PasswordDirective) {\n this.PasswordDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'account':\n if (this.PasswordDirective) {\n this.PasswordDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'number':\n if (this.NumberFormatDirective) {\n this.NumberFormatDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'masked':\n if (this.MaskDirective) {\n this.MaskDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n default:\n this.inputRef.nativeElement.value = this.value();\n break;\n }\n }\n\n /**\n * Focuses the input element.\n * Prevents the default action of the mouse event to avoid unintended behaviors\n * like double focus or focus loss.\n * @param event - The MouseEvent that initiated the focus action.\n */\n focus(event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (this.inputRef && this.inputRef.nativeElement) {\n this.inputRef.nativeElement.focus();\n }\n }\n\n /**\n * Called when the input element receives focus (focus event).\n */\n onFocus(event: FocusEvent): void {\n this.onFocused.emit();\n this.updateContainerWidth();\n this.focused.set(true);\n if (\n !this.config().add &&\n !(this.config().dropdown === 'dispatch') &&\n !this.config().search\n )\n return;\n if (this.isAdding()) return;\n\n if (this.config().search && !this.config().dropdownAutocomplete) {\n this.value.set('');\n this.inputRef.nativeElement.value = this.value();\n }\n }\n\n /**\n * Called when the input element loses focus (blur event).\n */\n dispatchOnBlur(): void {\n this.onBlur.emit();\n this.onTouched();\n this.closeDropdown();\n this.focused.set(false);\n\n if (\n !this.config().add &&\n !(this.config().dropdown === 'dispatch') &&\n !this.config().search\n )\n return;\n if (this.isAdding()) return;\n\n setTimeout(() => {\n if (!this.config().dropdownAutocomplete) {\n this.inputRef.nativeElement.value = '';\n }\n }, 0);\n\n setTimeout(() => {\n if (!this.config().dropdownAutocomplete) {\n this.value.set('');\n }\n }, 200);\n }\n\n toggleHovered(value: boolean): void {\n this.hovered.set(value);\n }\n\n /**\n * Resets the input field's value to an empty string.\n */\n reset(): void {\n if (this.isAdding()) this.isAdding.set(false);\n\n if (this.config().dropdown === 'multiple') {\n this.multipleSelectedOptions.set([]);\n }\n this.value.set('');\n this.dispatchOnChange(''); // Notify form control of the change\n this.setValue(); // Update the actual input element\n\n this.onClear.emit();\n this.selectedOption.set(null);\n this.onSelectionChange.emit(null);\n\n this.closeTooltip.close();\n\n this.closeDropdown();\n }\n\n closeDropdown(addNew?: boolean): void {\n if (!addNew) {\n this.closing.set(true);\n\n setTimeout(() => {\n this.dropdown.close();\n this.closing.set(false);\n }, 200);\n } else {\n this.dropdown.close();\n this.closing.set(false);\n }\n }\n\n /**\n * Returns the reference to the dropdown element based on the dropdown type.\n */\n getDropdownRef() {\n if (!this.config().dropdown) return null;\n switch (this.config().dropdown) {\n case 'dispatch':\n return this.dispatchesRef;\n case 'ftl-dispatch':\n return this.ftlDispatchRef;\n case 'label':\n return this.labelPickerRef;\n case 'broker':\n return this.brokerRef;\n case 'contact':\n return this.contactRef;\n case 'shipper':\n return this.shipperRef;\n case 'bank':\n return this.bankRef;\n case 'dispatcher':\n return this.dispatcherRef;\n case 'trailer':\n return this.trailerRef;\n case 'truck':\n return this.truckRef;\n case 'hazardous':\n return this.hazardousRef;\n case 'state':\n return this.stateRef;\n case 'owner':\n return this.ownerRef;\n case 'fuelcard':\n return this.fuelcardRef;\n case 'pm':\n return this.pmRef;\n case 'multiple':\n return this.multipleRef;\n case 'make':\n return this.makeRef;\n case 'toll':\n return this.tollRef;\n case 'color':\n return this.colorRef;\n case 'subcontent':\n default:\n return this.dropdownOptionsRef;\n }\n }\n\n /**\n * Returns the reference to the selected element based on the dropdown type.\n */\n getSelectedRef() {\n switch (this.config().dropdown) {\n case 'dispatch':\n case 'ftl-dispatch':\n return this.selectedDispatchRef;\n case 'label':\n return this.selectedLabelRef;\n case 'broker':\n return this.selectedBrokerRef;\n case 'contact':\n return this.selectedContactRef;\n case 'shipper':\n return this.selectedShipperRef;\n case 'bank':\n return this.selectedBankRef;\n case 'dispatcher':\n return this.selectedDispatcherRef;\n case 'trailer':\n return this.selectedTrailerRef;\n case 'truck':\n return this.selectedTruckRef;\n case 'hazardous':\n return this.selectedHazardousRef;\n case 'state':\n return this.selectedStateRef;\n case 'owner':\n return this.selectedOwnerRef;\n case 'fuelcard':\n return this.selectedFuelcardRef;\n case 'pm':\n return this.selectedPmRef;\n case 'make':\n return this.selectedMakeRef;\n case 'toll':\n return this.selectedTollRef;\n case 'color':\n return this.selectedColorRef;\n default:\n return;\n }\n }\n\n randomizeAutocomplete(): string {\n return `${Math.random().toString(36).substring(2, 15)}`;\n }\n\n /**\n * Type guard that checks if a given property exists on an object.\n * @param obj The object to check.\n * @param prop The property to check for.\n * @returns `true` if `prop` exists on `obj`, `false` otherwise.\n */\n hasProperty<T extends object>(obj: T, prop: PropertyKey): prop is keyof T {\n return prop in obj;\n }\n\n /**\n * Handles when an option is selected from the dropdown.\n * @param option - The selected option.\n * @param event - The MouseEvent that initiated the selection action.\n */\n handleOption(option: DropdownOptions, event?: MouseEvent) {\n const optionValue = this.config().optionValue;\n\n if (optionValue && this.hasProperty(option, optionValue)) {\n if (\n this.config().dropdown !== 'subcontent' &&\n this.config().dropdown !== 'multiple'\n ) {\n this.dispatchOnChange(option[optionValue]);\n }\n if (this.config().dropdown === 'multiple') {\n if (\n this.multipleSelectedOptions().some(\n (selectedOption) => selectedOption.id === option.id\n )\n ) {\n this.multipleSelectedOptions.update((options) =>\n options.filter((selectedOption) => selectedOption.id !== option.id)\n );\n } else {\n this.multipleSelectedOptions.update((options) => [\n ...options,\n option,\n ]);\n }\n\n this.dispatchOnChange([\n ...this.multipleSelectedOptions().map(\n (option) => option[optionValue]\n ),\n ]);\n }\n this.onSelectionChange.emit(option[optionValue]);\n } else {\n if (\n this.config().dropdown !== 'subcontent' &&\n this.config().dropdown !== 'multiple'\n ) {\n this.dispatchOnChange(option.id);\n }\n if (this.config().dropdown === 'multiple') {\n if (\n this.multipleSelectedOptions().some(\n (selectedOption) => selectedOption.id === option.id\n )\n ) {\n this.multipleSelectedOptions.update((options) =>\n options.filter((selectedOption) => selectedOption.id !== option.id)\n );\n } else {\n this.multipleSelectedOptions.update((options) => [\n ...options,\n option,\n ]);\n }\n\n this.dispatchOnChange([\n ...this.multipleSelectedOptions().map((option) => option.id),\n ]);\n }\n this.onSelectionChange.emit(option.id);\n }\n\n if (\n this.config().dropdown !== 'multiple' &&\n !this.config().dropdownAutocomplete\n ) {\n this.selectedOption.set(option);\n }\n\n if (this.config().dropdown === 'subcontent') {\n this.closeDropdown();\n this.focus(event);\n this.setValue();\n\n return;\n }\n\n if (typeof this.config().dropdown === 'string') {\n this.value.set('');\n } else {\n if (!this.config().dropdownAutocomplete) {\n this.selectedOption.set(option as DropdownOption);\n }\n if (\n (this.config().search && !this.config().dropdownAutocomplete) ||\n this.config().add\n ) {\n this.value.set('');\n } else {\n this.value.set(\n (option as DropdownOption)[this.config().optionLabel || 'label']\n );\n }\n }\n\n this.setValue();\n this.closeDropdown();\n }\n\n isSelectedOption(option: DropdownOptions) {\n if (this.config().dropdown === 'multiple') {\n return this.multipleSelectedOptions().some(\n (selectedOption) => selectedOption.id === option.id\n );\n }\n return this.selectedOption()?.id === option.id;\n }\n\n /**\n * Adds a new option to the dropdown.\n * @param option - The option to add.\n */\n addOption() {\n if (!this.inputRef.nativeElement.value) {\n this.isAdding.set(false);\n this.reset();\n }\n\n if (this.config().isEdit) {\n this.onOptionAdded.emit(this.inputRef.nativeElement.value);\n this.reset();\n return;\n }\n\n // Label picker add option logic\n if (this.config().dropdown === 'label') {\n let labels = [...this.options(), ...this.localOptions()] as LabelOption[];\n let id = labels.length + 1;\n while (labels.find((label) => label.id === id)) {\n id++;\n }\n const label: LabelOption = {\n id: id,\n name: this.inputRef.nativeElement.value,\n color: this.selectedColor().name,\n colorId: this.selectedColor().id,\n code: this.selectedColor().code,\n hoverCode: this.selectedColor().hoverCode,\n };\n\n this.localOptions.update((labels) => [\n ...(labels as LabelOption[]),\n label as LabelOption,\n ]);\n this.isAdding.set(false);\n\n this.value.set('');\n this.dispatchOnChange(label.id);\n this.setValue();\n\n this.selectedOption.set(label);\n this.onOptionAdded.emit(label);\n return;\n }\n\n const option = this.inputRef.nativeElement.value;\n\n this.isAdding.set(false);\n\n this.setValue();\n this.onOptionAdded.emit(option);\n }\n\n /**\n * Handles when the user clicks on the \"ADD NEW\" button in the dropdown.\n * It sets the `isAdding` signal to `true`, closes the dropdown, and focuses the input.\n * @param event - The MouseEvent that initiated the action.\n */\n handleAddingOption(event?: MouseEvent) {\n this.onAdd.emit();\n\n if (!this.config().add) return;\n if (\n this.config().canOpenModal ||\n (typeof this.config().dropdown === 'string' &&\n this.config().dropdown !== 'label' &&\n this.config().dropdown !== 'pm')\n ) {\n this.closeDropdown(true);\n return;\n }\n // Color picker logic for label input\n if (this.config().dropdown === 'label') {\n if (this.isPickingColor()) {\n this.isAdding.set(true);\n this.isPickingColor.set(false);\n this.closeDropdown();\n if (event) this.focus(event);\n return;\n }\n this.isPickingColor.set(true);\n if (event) this.focus(event);\n this.dropdown.open();\n this.value.set('');\n this.setValue();\n return;\n }\n\n this.isAdding.set(true);\n this.closeDropdown();\n if (event) this.focus(event);\n }\n\n // Dispatch modal\n\n fold(boardId: number, event: MouseEvent) {\n this.focus(event);\n if (this.foldedBoards().includes(boardId)) {\n this.foldedBoards.update((boards) =>\n boards.filter((id) => id !== boardId)\n );\n return;\n }\n this.foldedBoards.update((boards) => [...boards, boardId]);\n }\n\n // Label picker\n\n handleSelectColor(color: LabelColor, event?: MouseEvent) {\n this.value.set('');\n this.setValue();\n this.selectedColor.set(color);\n this.handleAddingOption(event);\n }\n\n // Broker modal\n\n getBrokerProgress(broker: Broker, disable?: boolean) {\n let activePercentageOfPaid;\n let status;\n let availableCredit = broker.availableCredit || 0;\n let creditLimit = broker.creditLimit || 0;\n if (broker.availableCredit === 0) {\n activePercentageOfPaid = 100;\n status = disable ? 'disable' : 'high';\n return { activePercentageOfPaid, status };\n } else {\n activePercentageOfPaid = (+availableCredit / +creditLimit) * 100;\n }\n\n if (activePercentageOfPaid >= 0 && activePercentageOfPaid < 30) {\n status = disable ? 'disable' : 'low';\n } else if (activePercentageOfPaid > 30 && activePercentageOfPaid < 60) {\n status = disable ? 'disable' : 'medium';\n } else if (activePercentageOfPaid > 60 && activePercentageOfPaid <= 100) {\n status = disable ? 'disable' : 'high';\n } else {\n status = null;\n }\n\n return { activePercentageOfPaid, status };\n }\n\n // Casting methods for template\n\n castAsDispatch(value: unknown): Dispatch | null {\n return value as Dispatch;\n }\n\n castAsLabelOption(value: unknown): LabelOption | null {\n return value as LabelOption;\n }\n\n castAsBroker(value: unknown): Broker | null {\n return value as Broker;\n }\n\n castAsContact(value: unknown): Contact | null {\n return value as Contact;\n }\n\n castAsShipper(value: unknown): Shipper | null {\n return value as Shipper;\n }\n\n castAsBank(value: unknown): Bank | null {\n return value as Bank;\n }\n\n castAsDispatcher(value: unknown): Dispatcher | null {\n return value as Dispatcher;\n }\n\n castAsDropdownOption(value: unknown): DropdownOption | null {\n return value as DropdownOption;\n }\n\n castAsTruckOption(value: unknown): TruckType | null {\n return value as TruckType;\n }\n\n castAsTrailerOption(value: unknown): TrailerType | null {\n return value as TrailerType;\n }\n\n castAsHazardous(value: unknown): Hazardous | null {\n return value as Hazardous;\n }\n\n castAsState(value: unknown): State | null {\n return value as State;\n }\n\n castAsOwner(value: unknown): Owner | null {\n return value as Owner;\n }\n\n castAsFuelCard(value: unknown): FuelCard | null {\n return value as FuelCard;\n }\n\n castAsPMOption(value: unknown): PMOption | null {\n return value as PMOption;\n }\n\n castAsColorOption(value: unknown): ColorOption | null {\n return value as ColorOption;\n }\n\n castAsMake(value: unknown): MakeOption | null {\n return value as MakeOption;\n }\n\n castAsTollOption(value: unknown): TollOption | null {\n return value as TollOption;\n }\n\n castAsTollTransponderOption(value: unknown): TollTransponderOption | null {\n return value as TollTransponderOption;\n }\n}\n","@let valid = (ngControl?.valid && (ngControl?.touched || ngControl?.dirty) &&\n!isAdding());\n<!---->\n@let invalid = ngControl?.invalid && (ngControl?.touched || ngControl?.dirty) &&\n!isAdding(); @let type = config().type;\n<!---->\n@let icon = config().icon;\n<!---->\n@let alignment = config().alignment;\n<!---->\n@let inverse = config().inverse;\n<!---->\n@let name = config().name;\n<!---->\n@let required = config().required;\n<!---->\n@let reveal = config().reveal;\n<!---->\n@let password = type === 'password' || type === 'account';\n<!---->\n@let number = type === 'number';\n<!---->\n@let ariaLabel = config().label;\n<!---->\n@let hasDropdown = config().dropdown;\n<!---->\n@let add = config().add;\n<!---->\n@let search = config().search;\n<!---->\n@let placeholderBehavior = config().placeholderBehavior;\n<!---->\n@let errorBehavior = config().errorBehavior;\n<!---->\n@let mask = this.config().mask;\n<!---->\n@let autocomplete = this.config().autocomplete;\n<!---->\n@let withButtons = this.config().withButtons;\n<!---->\n@let iconColor = this.config().iconColor;\n<!---->\n@let list = this.config().list;\n<!---->\n@let passwordRequirements = this.config().passwordRequirements;\n<!---->\n@let dispatch = config().dropdown === 'dispatch';\n<!---->\n@let ftlDispatch = config().dropdown === 'ftl-dispatch';\n<!---->\n@let labelPicker = this.config().dropdown === 'label';\n<!---->\n@let broker = this.config().dropdown === 'broker';\n<!---->\n@let contact = this.config().dropdown === 'contact';\n<!---->\n@let shipper = this.config().dropdown === 'shipper';\n<!---->\n@let subcontent = this.config().subcontent || (this.config().dropdown ===\n'subcontent' && selectedOption() &&\ncastAsDropdownOption(selectedOption())![this.config().optionLabel || \"label\"]);\n<!---->\n@let bank = this.config().dropdown === 'bank';\n<!---->\n@let state = this.config().dropdown === 'state';\n<!---->\n@let optionLabel = this.config().optionLabel || 'label';\n<!---->\n@let dispatcher = this.config().dropdown === 'dispatcher';\n<!---->\n@let trailer = this.config().dropdown === 'trailer';\n<!---->\n@let truck = this.config().dropdown === 'truck';\n<!---->\n@let hazardous = this.config().dropdown === 'hazardous';\n<!---->\n@let removable = this.config().removable;\n<!---->\n@let inTable = this.config().inTable;\n<!---->\n@let textColor = this.config().textColor;\n<!-- -->\n@let dropdownSubcontent = this.config().dropdown === 'subcontent';\n<!---->\n@let isNumberFormattingDisabled = this.config().isNumberFormattingDisabled;\n<!---->\n@let owner = this.config().dropdown === 'owner';\n<!---->\n@let fuelcard = this.config().dropdown === 'fuelcard';\n<!---->\n@let multiple = this.config().dropdown === 'multiple';\n<!---->\n@let pm = this.config().dropdown === 'pm';\n<!---->\n@let color = this.config().dropdown === 'color';\n<!---->\n@let make = this.config().dropdown === 'make';\n<!---->\n@let toll = this.config().dropdown === 'toll';\n<!---->\n@let noSeparator = this.config().noSeparator;\n<!---->\n@let dropdownAutocomplete = this.config().dropdownAutocomplete;\n<!---->\n@let isAddress = this.config().isAddress;\n<!---->\n<!-- dropdowns -->\n@let dropdownOptions = (combinedOptions() | filterBySearch: value() :\nthis.config().dropdown : search: this.foldedBoards() : optionLabel) || [];\n<!-- -->\n@let isEdit = this.config().isEdit;\n<!---->\n@if(config().dropdown === 'multiple' && !!multipleSelectedOptions().length){\n<!-- -->\n<div\n (mousedown)=\"focus($event)\"\n (mouseenter)=\"toggleHovered(true)\"\n (mouseleave)=\"toggleHovered(false)\"\n class=\"multiple-container\"\n [class]=\"{\n 'focused': focused(),\n 'hovered': hovered(),\n}\"\n>\n <label class=\"multiple-label\">{{ name }}</label>\n\n @for(option of multipleSelectedOptions(); track $index){\n <div class=\"multiple-selected\">\n <p>{{ castAsDropdownOption(option)![optionLabel || \"label\"] }}</p>\n <button\n type=\"button\"\n class=\"multiple-remove-button bg-icon\"\n (click)=\"handleOption(option)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Remove\"\n [placement]=\"'top'\"\n tooltipClass=\"tooltip input-tooltip\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n [container]=\"'body'\"\n >\n <svg-icon name=\"cai-cancel\" class=\"multiple-remove-icon\"></svg-icon>\n </button>\n </div>\n }\n</div>\n}\n<div\n class=\"app-input-container\"\n [class]=\"{\n 'has-text': hasText(),\n 'is-empty': !hasText(),\n 'hovered': hovered() && multiple,\n 'has-error': invalid && !list && !isEdit && !hideValidation(),\n 'has-valid': valid && !list && !isEdit && !hideValidation(),\n 'has-icon': icon,\n 'has-password': password,\n 'has-visible': password && visible(),\n 'has-number': number && withButtons,\n 'has-right': alignment === 'right',\n inverse: inverse,\n 'has-dropdown': hasDropdown && !dropdownAutocomplete,\n 'is-adding': (add && isAdding()) || isEdit,\n 'has-ftl-dispatch': ftlDispatch,\n 'has-dispatch': dispatch,\n 'fade-placeholder': placeholderBehavior === 'fade' || inTable,\n 'static-placeholder': placeholderBehavior === 'static',\n 'floating-error': errorBehavior === 'floating' || inTable,\n 'static-error': errorBehavior === 'static',\n 'has-selected': selectedOption(),\n 'list-view': list,\n 'has-end-item': broker || contact || dispatch || ftlDispatch || shipper,\n removable: removable,\n 'in-table': inTable,\n 'text-color-positive': textColor === 'positive',\n 'has-multiple-dropdown': multiple,\n 'is-address': isAddress,\n }\"\n ngbDropdown\n [autoClose]=\"false\"\n #dropdown=\"ngbDropdown\"\n dropdownClass=\"cai-dropdown\"\n #containerRef\n [ngbTooltip]=\"errorTooltip\"\n [container]=\"'body'\"\n [placement]=\"'bottom'\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip \"\n (mouseenter)=\"multiple && toggleHovered(true)\"\n (mouseleave)=\"multiple && toggleHovered(false)\"\n>\n @if (config().icon && !password && !withButtons) {\n <div\n class=\"icon-container\"\n (mousedown)=\"focus($event)\"\n [class]=\"{\n 'colored-icon': iconColor\n }\"\n [style.--icon-color]=\"iconColor || ''\"\n >\n @if(hasDropdown && placeholderBehavior === 'static'){\n <div class=\"separator separator-static-dropdown\"></div>\n }\n <svg-icon class=\"icon\" name=\"{{ icon }}\"></svg-icon>\n @if(!noSeparator){\n <div class=\"separator\"></div>\n }\n </div>\n } @if (password){\n <div class=\"icon-container\" (mousedown)=\"toggleVisibility($event)\">\n <div\n class=\"password-icons\"\n [ngbTooltip]=\"passwordTooltip\"\n [container]=\"'body'\"\n tooltipClass=\"tooltip input-tooltip\"\n [autoClose]=\"true\"\n [placement]=\"'top'\"\n >\n <svg-icon class=\"icon password-key\" name=\"cai-password-key\"></svg-icon>\n <svg-icon\n class=\"icon password-shown\"\n name=\"cai-password-shown\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-hidden\"\n name=\"cai-password-hidden\"\n ></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [type]=\"password && !reveal ? (visible() ? 'text' : 'password') : 'text'\"\n [required]=\"required\"\n [disabled]=\"disabled() || this.config().disabled\"\n (input)=\"onInput($event)\"\n (blur)=\"dispatchOnBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.name]=\"autocomplete ? autocomplete : randomAutocomplete()\"\n placeholder=\"\"\n [autocomplete]=\"autocomplete ? autocomplete : randomAutocomplete()\"\n #inputRef\n [appPassword]=\"password\"\n [appMask]=\"mask || ''\"\n [reveal]=\"reveal || 0\"\n [account]=\"type === 'account'\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"number\"\n [isNumberFormattingDisabled]=\"isNumberFormattingDisabled || false\"\n [prefix]=\"this.config().prefix || ''\"\n [max]=\"this.config().max\"\n (focus)=\"\n !isAdding() && (hasDropdown || passwordRequirements) && dropdown.open();\n onFocus($event)\n \"\n (click)=\"!isAdding() && hasDropdown && dropdown.open()\"\n />\n @if(!(multiple && !!multipleSelectedOptions().length) && placeholderBehavior\n !== 'hidden'){\n <label class=\"app-input-label\">\n @if(dispatch || ftlDispatch){\n <p class=\"truck-item app-input-name\">Truck</p>\n <p class=\"trailer-item\">Trailer</p>\n <p>Driver</p>\n <p class=\"sub-label\">Rate</p>\n } @else if(broker){\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Credit</p>\n }@else if(contact){\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Phone</p>\n }@else if(shipper){\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Address</p>\n } @else if(owner){\n <p class=\"owner-ein app-input-name\">EIN</p>\n <p class=\"app-input-name\">Company Name</p>\n } @else if(fuelcard){\n <p class=\"fuelcard-number app-input-name\">Card No.</p>\n <p class=\"fuelcard-brand app-input-name\">Provider</p>\n <p class=\"app-input-name\">Nickname</p>\n } @else {\n <span class=\"app-input-name\">{{ name }}</span>\n } </label\n >} @if(number && withButtons) {\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <div\n ngbTooltip=\"Add\"\n tooltipClass=\"tooltip input-tooltip\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n (mousedown)=\"increment($event)\"\n >\n <svg-icon name=\"cai-plus\" class=\"bg-icon plus-icon\"></svg-icon>\n </div>\n <div\n ngbTooltip=\"Remove\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n tooltipClass=\"tooltip input-tooltip\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n (mousedown)=\"decrement($event)\"\n >\n <svg-icon name=\"cai-minus\" class=\"bg-icon minus-icon\"></svg-icon>\n </div>\n </div>\n </div>\n } @if(!inTable){ @if(!hasDropdown){\n <svg-icon\n name=\"cai-checkmark\"\n class=\"app-input-icon positive-icon\"\n ></svg-icon>\n <svg-icon\n name=\"cai-status-warning\"\n class=\"app-input-icon warning-icon\"\n ></svg-icon>\n } @if (invalid && (ngControl?.errors | errorMessage:\n config().customErrors)[0]) {\n <div class=\"app-input-error\">\n {{ (ngControl?.errors | errorMessage : config().customErrors)[0] }}\n </div>\n } }\n\n <!-- Accept button -->\n @if((add && isAdding()) || isEdit){\n <button\n type=\"button\"\n class=\"app-input-icon button-icon accept-button\"\n (click)=\"addOption()\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Accept\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n tooltipClass=\"tooltip input-tooltip\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n >\n <svg-icon class=\"bg-icon\" name=\"cai-checkmark\"></svg-icon>\n </button>\n }\n\n <!-- Cancel button -->\n <button\n type=\"button\"\n class=\"app-input-icon button-icon cancel-button\"\n (click)=\"reset()\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"{{ hasText() && (isAdding() || isEdit) ? 'Cancel' : 'Delete' }}\"\n [openDelay]=\"600\"\n tooltipClass=\"tooltip input-tooltip\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n >\n <svg-icon\n class=\"bg-icon\"\n name=\"{{ removable ? 'cai-delete' : 'cai-cancel' }}\"\n ></svg-icon>\n </button>\n\n <div class=\"dropdown-anchor\" ngbDropdownAnchor></div>\n <!-- Dropdown menu -->\n @if(hasDropdown) {\n <div\n class=\"dropdown-menu\"\n ngbDropdownMenu\n [style.width.px]=\"containerWidth()\"\n [class]=\"{\n 'hide-dropdown': dropdownAutocomplete && !dropdownOptions.length && !(showNoResults() && value()),\n }\"\n [class.closing]=\"closing()\"\n >\n @if(add && !dispatch && !ftlDispatch){\n <button\n class=\"dropdown-item add-new\"\n (mousedown)=\"handleAddingOption($event)\"\n >\n <p>ADD NEW</p>\n <svg-icon name=\"cai-plus\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n <ng-container *ngTemplateOutlet=\"getDropdownRef()\"></ng-container>\n </div>\n\n @if(!dropdownAutocomplete){\n <div class=\"dropdown-icon-container\" (mousedown)=\"focus($event)\">\n <svg-icon\n name=\"cai-arrow-secondary-down\"\n class=\"dropdown-icon icon\"\n ></svg-icon>\n </div>\n } @let specialDropdown = dispatch || ftlDispatch || broker || labelPicker ||\n contact || shipper || bank || dispatcher || truck || trailer || hazardous ||\n state || owner || fuelcard || pm || color || make || toll;\n <!-- Placeholder -->\n @if(specialDropdown){\n <ng-container *ngTemplateOutlet=\"getSelectedRef()\"></ng-container>\n } @else if ((add || search) && !inputRef.value && !this.isAdding() &&\n !dropdownSubcontent ){\n <div class=\"dropdown-selected\">\n @if(placeholderBehavior === 'static'){\n <p class=\"selected-label-hidden\">{{ name + (required ? \" *\" : \"\") }}</p>\n <p class=\"selected-text\">\n {{\n selectedOption() &&\n castAsDropdownOption(selectedOption())![optionLabel || \"label\"]\n }}\n </p>\n } @else { @if(selectedOption() &&\n castAsDropdownOption(selectedOption())![optionLabel || \"label\"] ===\n \"Hazardous\"){\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n castAsDropdownOption(selectedOption())![optionLabel || \"label\"]\n }}\n </p>\n } @else {\n {{\n selectedOption() &&\n castAsDropdownOption(selectedOption())![optionLabel || \"label\"]\n }}\n } }\n </div>\n } } @else if(isEdit && !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ name }}</p>\n </div>\n } @if(passwordRequirements){\n <div\n class=\"dropdown-menu password-requirement\"\n ngbDropdownMenu\n [style.width.px]=\"containerWidth()\"\n >\n <ng-container *ngTemplateOutlet=\"passwordRequirementsRef\"></ng-container>\n </div>\n } @if(subcontent){\n <p class=\"subcontent\">\n @if(!(alignment === 'right')){\n <span class=\"subcontent-hide\">{{ inputRef.value }} </span>\n }\n {{ subcontent }}\n </p>\n }\n</div>\n\n<!-- Templates -->\n\n<!-- Password requirements -->\n<ng-template #passwordRequirementsRef>\n <p>Password Requirement</p>\n <ul>\n <li>\n <svg-icon\n [name]=\"\n !this.ngControl?.errors?.['minlength'] && this.value()\n ? 'cai-checkmark'\n : 'cai-cancel'\n \"\n class=\"icon\"\n ></svg-icon\n ><span>Minimum 8 characters</span>\n </li>\n <li>\n <svg-icon\n class=\"icon\"\n [name]=\"\n !this.ngControl?.errors?.['hasNumber'] && this.value() ? 'cai-checkmark' : 'cai-cancel'\n \"\n ></svg-icon\n ><span>One number</span>\n </li>\n <li>\n <svg-icon\n class=\"icon\"\n [name]=\"\n !this.ngControl?.errors?.['hasSymbol'] && this.value() ? 'cai-checkmark' : 'cai-cancel'\n \"\n ></svg-icon\n ><span>One symbol</span>\n </li>\n <li>\n <svg-icon\n class=\"icon\"\n [name]=\"\n !this.ngControl?.errors?.['hasUppercase'] && this.value()\n ? 'cai-checkmark'\n : 'cai-cancel'\n \"\n ></svg-icon\n ><span>One upper-case letter</span>\n </li>\n </ul>\n</ng-template>\n\n<!-- Standard dropdown -->\n<ng-template #dropdownOptionsRef>\n @if(dropdownOptions.length){ @for(option of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ option.id }}\"\n (mousedown)=\"handleOption(option, $event)\"\n [class]=\"{\n 'selected': castAsDropdownOption(selectedOption())?.id === option.id,\n }\"\n >\n @if(option[optionLabel] === \"Hazardous\"){\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n }\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (option[optionLabel] | highlightSearch : value())\n : option[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #multipleRef>\n @if(dropdownOptions.length){ @for(option of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ option.id }}\"\n (mousedown)=\"handleOption(option, $event)\"\n [class]=\"{\n 'selected': isSelectedOption(option),\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (option[optionLabel] | highlightSearch : value())\n : option[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #bankRef>\n @if(dropdownOptions.length){ @for(bank of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ bank.id }}\"\n (mousedown)=\"handleOption(bank)\"\n [class]=\"{\n 'selected': castAsBank(selectedOption())?.id === bank.id,\n }\"\n >\n @if(bank.logoName){\n <svg-icon class=\"full-icon\" [name]=\"bank.logoName.slice(0, -4)\"></svg-icon>\n }@else{\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"search ? (bank.name | highlightSearch : value()) : bank.name\"\n ></p>\n\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #makeRef>\n @if(dropdownOptions.length){ @for(make of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ make.id }}\"\n (mousedown)=\"handleOption(make)\"\n [class]=\"{\n 'selected': castAsMake(selectedOption())?.id === make.id,\n }\"\n >\n @if(make.logoName){\n <svg-icon class=\"full-icon\" [name]=\"make.logoName.slice(0, -4)\"></svg-icon>\n }@else{\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"search ? (make.name | highlightSearch : value()) : make.name\"\n ></p>\n\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Broker -->\n<ng-template #brokerRef>\n @if(dropdownOptions.length){ @for(broker of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"broker-{{ broker.id }}\"\n (mousedown)=\"!(broker.dnu || broker.ban) && handleOption(broker)\"\n [class]=\"{\n selected: castAsBroker(selectedOption())?.id === broker.id,\n banned: broker.dnu || broker.ban,\n dnu: broker.dnu\n }\"\n >\n @if(broker.dnu || broker.ban){\n <svg-icon name=\"cai-minus\" class=\"round-icon\"></svg-icon>\n } @else if((broker.availableCredit || 0) < 0){\n <svg-icon name=\"cai-status-warning-lite\" class=\"icon fraud\"></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (broker.businessName || '' | highlightSearch : value())\n : broker.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n @if(!broker.creditLimit){\n <p>Unlimited</p>\n } @else {\n <p>{{ broker.availableCredit || 0 | currency }}</p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n getBrokerProgress(broker, broker.dnu || broker.ban)\n .activePercentageOfPaid + '%'\n \"\n [class]=\"getBrokerProgress(broker, broker.dnu || broker.ban).status\"\n ></div>\n }\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ broker.loadsCount }} | {{ broker.availableCredit || 0 | currency }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Contact dropdown -->\n<ng-template #contactRef>\n @if(dropdownOptions.length){ @for(departmentContactsPair of dropdownOptions;\n track $index ){ @for(contact of departmentContactsPair.contacts; track\n $index){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"contact-{{ contact.id }}\"\n (mousedown)=\"handleOption(contact)\"\n [class]=\"{\n selected: castAsContact(selectedOption())?.id === contact.id,\n }\"\n >\n <p\n [innerHTML]=\"\n search\n ? (contact.contactName || '' | highlightSearch : value())\n : contact.contactName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p>{{ departmentContactsPair.department?.name }}</p>\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ contact.phone }}\n </p>\n </div>\n </div>\n </button>\n } } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Owner dropdown -->\n<ng-template #ownerRef>\n @if(dropdownOptions.length){ @for(owner of dropdownOptions; track $index ){\n @let ownerOption = castAsOwner(owner);\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"owner-{{ ownerOption?.id }}\"\n (mousedown)=\"handleOption(ownerOption!)\"\n [class]=\"{\n selected: castAsOwner(selectedOption())?.id === ownerOption?.id,\n }\"\n >\n <p\n class=\"owner-ein\"\n [innerHTML]=\"\n search\n ? (ownerOption?.ein || '' | highlightSearch : value())\n : ownerOption?.ein\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (ownerOption?.name || '' | highlightSearch : value())\n : ownerOption?.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Fuelcard dropdown -->\n<ng-template #fuelcardRef>\n @if(dropdownOptions.length){ @for(fuelcard of dropdownOptions; track $index ){\n @let fuelcardOption = castAsFuelCard(fuelcard);\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"fuelcard-{{ fuelcardOption?.id }}\"\n (mousedown)=\"handleOption(fuelcardOption!)\"\n [class]=\"{\n selected: castAsFuelCard(selectedOption())?.id === fuelcardOption?.id,\n }\"\n >\n <p\n class=\"fuelcard-number\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.number || '' | highlightSearch : value())\n : fuelcardOption?.number\n \"\n ></p>\n <p\n class=\"fuelcard-brand\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.brand || '' | highlightSearch : value())\n : fuelcardOption?.brand\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (fuelcardOption?.account || '' | highlightSearch : value())\n : fuelcardOption?.account\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Shipper dropdown -->\n<ng-template #shipperRef>\n @if(dropdownOptions.length){ @for(shipper of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"shipper-{{ shipper.id }}\"\n (mousedown)=\"handleOption(shipper)\"\n [class]=\"{\n selected: castAsShipper(selectedOption())?.id === shipper.id,\n }\"\n >\n <p\n [innerHTML]=\"\n search\n ? (shipper.businessName || '' | highlightSearch : value())\n : shipper.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p\n [innerHTML]=\"\n search\n ? (shipper.address?.address || '' | highlightSearch : value())\n : shipper.address?.address\n \"\n ></p>\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ shipper.pickupCount }} Pickup |\n {{ shipper.deliveryCount }} Delivery\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatch dropdown -->\n<ng-template #dispatchesRef>\n @if(dropdownOptions.length){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (mousedown)=\"reset()\"\n [class]=\"{\n 'selected': !selectedOption(),\n }\"\n >\n <p>Unassigned</p>\n <div class=\"unassigned-ltl\">\n <p>{{ dispatchCount() || 0 }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </button>\n @for(dispatchBoard of dropdownOptions; track dispatchBoard.id){\n @if(dispatchBoard.count > 0){ @if(dispatchBoard.dispatcher !==\n \"NOBOARDSVARIANT\"){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (mousedown)=\"fold(dispatchBoard.id, $event)\"\n [class]=\"{\n 'unfolded': dispatchBoard.dispatches?.length || 0 > 0,\n }\"\n >\n <p>\n {{ dispatchBoard.teamBoard ? \"Team Board\" : dispatchBoard.dispatcher }}\n </p>\n <p class=\"counter\">{{ dispatchBoard.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon></button\n >} @for(dispatch of dispatchBoard.dispatches; track dispatch.id ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (mousedown)=\"handleOption(dispatch)\"\n [class]=\"{\n 'selected': castAsDispatch(selectedOption())?.id === dispatch.id,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [style.--truck-color]=\"dispatch.truck.color?.code || ''\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"dispatch.truck.truckNumber | highlightSearch : value()\"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if(dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"dispatch.trailer.trailerNumber | highlightSearch : value()\"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if(dispatch.coDriver){\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' & ' + dispatch.coDriver.firstName\n | highlightSearch : value()\n \"\n ></p>\n } @else{\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch : value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base dispatch-ltl\">\n <p>{{ dispatch.dispatcherId }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n } } } }@else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- ftl dispatch dropdown -->\n<ng-template #ftlDispatchRef>\n @if(dropdownOptions.length){ @for(dispatchBoard of dropdownOptions; track\n dispatchBoard.id){ @if(dispatchBoard.count > 0){ @if(dispatchBoard.dispatcher\n !== \"NOBOARDSVARIANT\"){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (mousedown)=\"fold(dispatchBoard.id, $event)\"\n [class]=\"{\n 'unfolded': dispatchBoard.dispatches?.length || 0 > 0,\n }\"\n >\n <p>\n {{ dispatchBoard.teamBoard ? \"Team Board\" : dispatchBoard.dispatcher }}\n </p>\n <p class=\"counter\">{{ dispatchBoard.count }}</p>\n <svg-icon name=\"cai-arrow-primary-up\" class=\"group-icon icon\"></svg-icon>\n </button>\n } @for(dispatch of dispatchBoard.dispatches; track dispatch.id ){\n <button\n class=\"dropdown-item\"\n (mousedown)=\"handleOption(dispatch)\"\n [class]=\"{\n 'selected': castAsDispatch(selectedOption())?.id === dispatch.id,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [style.--truck-color]=\"dispatch.truck.color?.code || ''\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"dispatch.truck.truckNumber | highlightSearch : value()\"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if(dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"dispatch.trailer.trailerNumber | highlightSearch : value()\"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if(dispatch.coDriver){\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' & ' + dispatch.coDriver.firstName\n | highlightSearch : value()\n \"\n ></p>\n } @else{\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch : value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @if(dispatch.status?.statusString){\n <div\n class=\"dispatch-status\"\n [class]=\"\n 'status-' +\n dispatch.status?.statusString\n ?.toLowerCase()\n ?.replaceAll(' ', '')\n ?.replaceAll('.', '')\n \"\n >\n @if(dispatch.status?.statusString?.toLowerCase() === \"repair\"){\n <p class=\"status-block blue\">D</p>\n <p class=\"status-block green\">L</p>\n }\n {{ dispatch.status?.statusString }}\n @if(dispatch.status?.statusString?.toLowerCase() === \"repair\"){\n <p class=\"status-block green\">P</p>\n <p class=\"status-block orange\">D</p>\n } @if(dispatch.status?.statusCheckInNumber){\n <p class=\"status-block\">\n {{ dispatch.status?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">{{ dispatch.driver.status }}</p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n } } } }@else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #tollRef>\n @if(dropdownOptions.length){ @for(toll of dropdownOptions; track $index){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n [class]=\"{\n 'unfolded': toll.tollTransponders?.length || 0 > 0,\n }\"\n >\n <p>\n {{ toll.groupName }}\n </p>\n </button>\n @let tollTransponders = toll.tollTransponders || []; @for(tollTransponder of\n tollTransponders; track tollTransponder.id ){\n <button\n class=\"dropdown-item\"\n (mousedown)=\"handleOption(tollTransponder)\"\n [class]=\"{\n 'selected': castAsTollTransponderOption(selectedOption())?.id === tollTransponder.id,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (tollTransponder.name || '' | highlightSearch : value())\n : tollTransponder.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Label dropdown -->\n<ng-template #labelPickerRef>\n @if(dropdownOptions.length && !isPickingColor()){ @for(label of\n dropdownOptions; track label.id ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item label-item\"\n (mousedown)=\"handleOption(label)\"\n [class]=\"{\n 'selected': castAsLabelOption(selectedOption())?.id === label.id,\n }\"\n >\n <svg-icon\n name=\"cai-label\"\n class=\"icon label-color\"\n [style.--label-color]=\"label.code\"\n [style.--label-hover-color]=\"label.hoverCode\"\n ></svg-icon>\n <p\n [innerHTML]=\"\n search ? (label.name || '' | highlightSearch : value()) : label.name\n \"\n ></p>\n <p class=\"dropdown-item-count\">{{ label.count || 0 }}</p>\n </button>\n } } @else if(isPickingColor()){ @for(color of labelColors(); track color.id){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item label-item\"\n (mousedown)=\"handleSelectColor(color, $event)\"\n [class]=\"{\n 'selected': selectedColor().id === color.id,\n }\"\n >\n <svg-icon\n name=\"cai-label\"\n class=\"icon label-color\"\n [style.--label-color]=\"color.code\"\n [style.--label-hover-color]=\"color.hoverCode\"\n ></svg-icon>\n <p\n [innerHTML]=\"\n search ? (color.name || '' | highlightSearch : value()) : color.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatcher dropdown -->\n\n<ng-template #dispatcherRef>\n @if(dropdownOptions.length){ @for(dispatcher of dropdownOptions; track $index\n ){ @let dispatcherOption = castAsDispatcher(dispatcher)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dispatcherOption.id }}\"\n (mousedown)=\"handleOption(dispatcherOption)\"\n [class]=\"{\n 'selected': castAsDispatcher(selectedOption())?.id === dispatcherOption.id,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n }\"\n [rounded]=\"true\"\n ></cai-avatar>\n <p\n [innerHTML]=\"\n search\n ? (dispatcherOption.fullName || '' | highlightSearch : value())\n : dispatcherOption.fullName\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #truckRef>\n @if(dropdownOptions.length){ @for(truck of dropdownOptions; track $index ){\n @let truckOption = castAsTruckOption(truck)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOption.id }}\"\n (mousedown)=\"handleOption(truckOption)\"\n [class]=\"{\n 'selected': castAsTruckOption(selectedOption())?.id === truckOption.id,\n }\"\n >\n <p\n [innerHTML]=\"\n search\n ? (truckOption.name || '' | highlightSearch : value())\n : truckOption.name\n \"\n ></p>\n <svg-icon\n class=\"truck-trailer-option\"\n [name]=\"truckOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #trailerRef>\n @if(dropdownOptions.length){ @for(truck of dropdownOptions; track $index ){\n @let trailerOption = castAsTrailerOption(truck)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ trailerOption.id }}\"\n (mousedown)=\"handleOption(trailerOption)\"\n [class]=\"{\n 'selected': castAsTrailerOption(selectedOption())?.id === trailerOption.id,\n }\"\n >\n <p\n [innerHTML]=\"\n search\n ? (trailerOption.name || '' | highlightSearch : value())\n : trailerOption.name\n \"\n ></p>\n\n <svg-icon\n class=\"truck-trailer-option\"\n [name]=\"trailerOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Hazardous dropdown -->\n<ng-template #hazardousRef>\n @if(dropdownOptions.length){ @for(hazardous of dropdownOptions; track $index\n ){ @let hazardousOption = castAsHazardous(hazardous)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ hazardousOption.id }}\"\n (mousedown)=\"handleOption(hazardousOption)\"\n [class]=\"{ 'selected': castAsHazardous(selectedOption())?.id === hazardousOption.id, }\"\n >\n <svg-icon [name]=\"hazardousOption.logoName?.slice(0, -4)\"></svg-icon>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (hazardousOption.description || '' | highlightSearch : value())\n : hazardousOption.description\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #pmRef>\n @if(dropdownOptions.length){ @for(pm of dropdownOptions; track $index ){ @let\n pmOption = castAsPMOption(pm)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ pmOption.id }}\"\n (mousedown)=\"handleOption(pmOption)\"\n [class]=\"{ 'selected': castAsPMOption(selectedOption())?.id === pmOption.id, }\"\n >\n <svg-icon class=\"icon\" [name]=\"pmOption.title | remapPmIcons\"></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (pmOption.title || '' | highlightSearch : value())\n : pmOption.title\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #colorRef>\n @if(dropdownOptions.length){ @for(color of dropdownOptions; track $index ){\n @let colorOption = castAsColorOption(color)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ colorOption.id }}\"\n (mousedown)=\"handleOption(colorOption)\"\n [class]=\"{ 'selected': castAsColorOption(selectedOption())?.id === colorOption.id, }\"\n >\n <svg-icon\n class=\"icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (colorOption.name || '' | highlightSearch : value())\n : colorOption.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #stateRef>\n @if(dropdownOptions.length){ @for(state of dropdownOptions; track $index ){\n @let stateOption = castAsState(state)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ stateOption.id }}\"\n (mousedown)=\"handleOption(stateOption)\"\n [class]=\"{ 'selected': castAsState(selectedOption())?.id === stateOption.id, }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (stateOption.stateShortName +\n ' ' +\n (config().fullState ? ' (' + stateOption?.stateName + ')' : '') ||\n '' | highlightSearch : value())\n : stateOption.stateShortName +\n ' ' +\n (config().fullState ? ' (' + stateOption?.stateName + ')' : '')\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Selected options -->\n\n<!-- selected dispatch -->\n<ng-template #selectedDispatchRef>\n @let dispatchOption = castAsDispatch(selectedOption()); @if(dispatchOption &&\n !inputRef.value && !isPickingColor() && !isAdding()){\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"dispatchOption!.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ dispatchOption!.truck.truckNumber }}\n </p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if(dispatchOption!.trailer){\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"\n castAsDispatch(\n selectedOption()\n )!.trailer?.trailerType?.logoName?.slice(0, -4)\n \"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ dispatchOption!.trailer?.trailerNumber }}\n </p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if(dispatchOption!.coDriver){\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" & \" +\n dispatchOption!.coDriver?.firstName\n }}\n </p>\n } @else{\n <cai-avatar [driver]=\"dispatchOption!.driver\" [size]=\"18\"></cai-avatar>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" \" +\n dispatchOption!.driver.lastName\n }}\n </p>\n }\n </div>\n <p class=\"selected-end-item\">\n {{ dispatchOption!.payType }}\n </p>\n </div>\n } @else { @if(!inputRef.value && this.config().dropdown == 'dispatch'){\n <p class=\"dropdown-selected\">Unassigned</p>\n } }\n</ng-template>\n\n<!-- selected label -->\n<ng-template #selectedLabelRef>\n @let labelOption = castAsLabelOption(selectedOption()); @if(labelOption &&\n !inputRef.value && !isPickingColor() && !isAdding()){\n <div class=\"dropdown-selected label-item\">\n <svg-icon\n name=\"cai-label\"\n class=\"icon label-color\"\n [style.--label-color]=\"labelOption!.code\"\n [style.--label-hover-color]=\"labelOption!.hoverCode\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ labelOption!.name }}</p>\n </div>\n } @else if(isPickingColor() && !inputRef.value){\n <div class=\"dropdown-selected label-item\">\n <svg-icon name=\"cai-label\" class=\"icon\"></svg-icon>\n <p>Label Color</p>\n </div>\n } @else if(isAdding() && !inputRef.value){\n <div class=\"dropdown-selected label-item\">\n <svg-icon\n name=\"cai-label\"\n class=\"icon label-color\"\n [style.--label-color]=\"selectedColor()!.code\"\n [style.--label-hover-color]=\"selectedColor()!.hoverCode\"\n ></svg-icon>\n <p>Label Name</p>\n </div>\n }\n</ng-template>\n\n<!-- selected broker -->\n<ng-template #selectedBrokerRef>\n @let brokerOption = castAsBroker(selectedOption()); @if(brokerOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n @if((brokerOption!.availableCredit || 0) < 0){\n <svg-icon name=\"cai-status-warning-lite\" class=\"icon fraud\"></svg-icon>\n }\n <p class=\"dropdown-selected-content\">{{ brokerOption!.businessName }}</p>\n <div class=\"selected-end-item\">\n @if(!brokerOption!.creditLimit){\n <p>Unlimited</p>\n } @else {\n <p>\n {{ brokerOption!.availableCredit || 0 | currency }}\n </p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n getBrokerProgress(\n brokerOption!,\n brokerOption!.dnu || brokerOption!.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n getBrokerProgress(\n brokerOption!,\n brokerOption!.dnu || brokerOption!.ban\n ).status\n \"\n ></div>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedContactRef>\n @let contactOption = castAsContact(selectedOption()); @if(contactOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ contactOption?.contactName }}</p>\n <div class=\"selected-end-item\">\n <p>{{ contactOption?.phone }}</p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedShipperRef>\n @let shipperOption = castAsShipper(selectedOption()); @if(shipperOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ shipperOption?.businessName }}</p>\n <div class=\"selected-end-item\">\n <p>{{ shipperOption?.address?.address }}</p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedOwnerRef>\n @let ownerOption = castAsOwner(selectedOption()); @if(ownerOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content owner-ein\">{{ ownerOption?.ein }}</p>\n <p class=\"dropdown-selected-content\">{{ ownerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedFuelcardRef>\n @let fuelcardOption = castAsFuelCard(selectedOption()); @if(fuelcardOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content fuelcard-number\">\n {{ fuelcardOption?.number }}\n </p>\n <p class=\"dropdown-selected-content fuelcard-brand\">\n {{ fuelcardOption?.brand }}\n </p>\n <p class=\"dropdown-selected-content\">\n {{ fuelcardOption?.account }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedBankRef>\n @let bankOption = castAsBank(selectedOption()); @if(bankOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n @if(bankOption?.logoName){\n <svg-icon\n class=\"option-icon\"\n [name]=\"bankOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n }@else {\n <p class=\"dropdown-selected-content\">{{ bankOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedMakeRef>\n @let makeOption = castAsMake(selectedOption()); @if(makeOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n @if(makeOption?.logoName){\n <svg-icon\n class=\"option-icon\"\n [name]=\"makeOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n }@else {\n <p class=\"dropdown-selected-content\">{{ makeOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedStateRef>\n @let stateOption = castAsState(selectedOption()); @if(stateOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ stateOption?.stateShortName }}\n {{ config().fullState ? \" (\" + stateOption?.stateName + \")\" : \"\" }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDispatcherRef>\n @let dispatcherOption = castAsDispatcher(selectedOption());\n @if(dispatcherOption && !inputRef.value){\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n }\"\n [rounded]=\"true\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ dispatcherOption?.fullName }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckRef>\n @let truckOption = castAsTruckOption(selectedOption()); @if(truckOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"truckOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p>{{ truckOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTrailerRef>\n @let trailerOption = castAsTrailerOption(selectedOption()); @if(trailerOption\n && !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"trailerOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p>{{ trailerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedHazardousRef>\n @let hazardousOption = castAsHazardous(selectedOption()); @if(hazardousOption\n && !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"hazard-icon\"\n [name]=\"hazardousOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content dropdown-selected-hazardous\">\n {{ hazardousOption?.description }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedPmRef>\n @let pmOption = castAsPMOption(selectedOption()); @if(pmOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"pmOption?.title | remapPmIcons\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ pmOption?.title }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedColorRef>\n @let colorOption = castAsColorOption(selectedOption()); @if(colorOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ colorOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTollRef>\n @let tollOption = castAsTollTransponderOption(selectedOption());\n @if(tollOption && !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">\n {{ tollOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #passwordTooltip>\n {{ visible() ? \"Hide\" : \"Show\" }}\n</ng-template>\n\n<ng-template #errorTooltip>\n @if((errorBehavior === \"floating\" || (errorBehavior === \"static\" && hasText())\n || inTable) && invalid && !dropdown.isOpen()){\n {{ (ngControl?.errors | errorMessage : config().customErrors)[0] }} }\n</ng-template>\n","// src/app/bytes-to-human-readable.pipe.ts\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'bytesToHumanReadable',\n})\nexport class BytesToHumanReadablePipe implements PipeTransform {\n transform(bytes: number | null | undefined, precision: number = 2): string {\n if (bytes === null || bytes === undefined || isNaN(bytes)) {\n return '';\n }\n\n if (bytes === 0) {\n return '0 Bytes';\n }\n\n const units = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n\n const unitIndex = Math.min(i, units.length - 1);\n\n const value = bytes / Math.pow(1024, unitIndex);\n\n const formattedValue = parseFloat(value.toFixed(precision));\n\n return `${formattedValue} ${units[unitIndex]}`;\n }\n}","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n input,\n OnChanges,\n OnInit,\n Output,\n output,\n signal,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//Components\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n//Models\nimport { AppFile } from '../../models/appFile.model';\n\n//Pipes\nimport { BytesToHumanReadablePipe } from '../../pipes/bytes-to-human-readable.pipe';\n\n//Bootstrap\nimport {\n NgbPopover,\n NgbPopoverModule,\n NgbTooltipModule,\n} from '@ng-bootstrap/ng-bootstrap';\n\n//Modules\nimport { NgModule } from '@angular/core';\nimport { InputComponent } from '../input/input.component';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n/**\n * This component displays a preview of a document, including its name, size,\n * and provides actions to delete, download, and tag the document.\n */\n@Component({\n selector: 'cai-document-preview',\n imports: [\n //Components\n SvgIconComponent,\n InputComponent,\n\n //Forms\n ReactiveFormsModule,\n\n //Pipes\n BytesToHumanReadablePipe,\n //Bootstrap\n NgbPopoverModule,\n NgbTooltipModule,\n ],\n templateUrl: './document-preview.component.html',\n styleUrl: './document-preview.component.scss',\n})\nexport class DocumentPreviewComponent implements OnChanges, OnInit {\n @Input() coverMinimalMode: boolean = false;\n\n isCrop = signal<boolean>(false);\n\n constructor() { }\n\n ngOnInit(): void {\n if (!this.coverMinimalMode) {\n this.isCrop.set(false);\n } else {\n this.isCrop.set(true);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['coverMinimalMode']) {\n this.isCrop.set(true);\n }\n }\n\n @Input() noTagOption: boolean = false;\n showInput = signal<boolean>(false);\n\n inputFormControl = new FormControl();\n\n showFileNameInput() {\n if (this.inputFormControl.dirty)\n this.inputFormControl.setValue(this.file().fileName);\n this.showInput.set(true);\n }\n\n hideFileNameInput() {\n setTimeout(() => {\n this.showInput.set(false);\n }, 300);\n }\n\n handleEdit(event: any) {\n this.file().fileName = event;\n console.log(this.file().fileName);\n console.log(\"control\", this.inputFormControl.value);\n this.hideFileNameInput();\n\n }\n\n /**\n * Signal that controls whether the delete modal is visible.Used to confirm the file deletion.\n */\n showDeleteModal = signal<boolean>(false);\n\n /**\n * Boolean flag indicating whether the tag popover is visible.Used to apply conditional styling or behavior.\n */\n showTag: boolean = false;\n\n /**\n * Currently selected tag for the document.\n */\n selectedTag: string = '';\n\n /**\n * The application file to be displayed in the preview. This is a required input.\n * @type {InputSignal<AppFile>}\n */\n file = input.required<AppFile>();\n /**\n * /**\n * The view mode in whic the file is displayed. This is a required input.\n * @type {InputSignal<string>}\n */\n viewMode = input.required<string>();\n /**\n * An output event that emits the file name when the delete action is triggered.\n * @type {OutputEmitterRef<string>}\n */\n onDelete = output<string>();\n\n /**\n * An output event that emits the file name when the download action is triggered.\n * @type {OutputEmitterRef<string>}\n */\n onDownload = output<string>();\n\n /**\n * Handles the delete action. Emits the `fileName` of the current `file` via the `onDelete` output.\n */\n handleDelete() {\n this.showDeleteModal.set(true);\n }\n\n /**\n * Cancels the delete operation and hides the confirmation modal.\n */\n cancelDelete() {\n this.showDeleteModal.set(false);\n }\n\n /**\n * Confirms the deletion and emits the `onDelete` event.\n */\n confirmDelete() {\n this.onDelete.emit(this.file().fileName);\n this.showDeleteModal.set(false);\n }\n\n /**\n * Handles the download action. Emits the `fileName` of the current `file` via the `onDownload` output.\n */\n handleDownload() {\n this.onDownload.emit(this.file().fileName);\n }\n\n /**\n * Callback triggered when the tag popover is shown. Used to update internal state.\n */\n onTagShown() {\n this.showTag = true;\n }\n\n /**\n * Callback triggered when the tag popover is hidden. Used to update internal state.\n */\n onTagHidden() {\n this.showTag = false;\n }\n\n /**\n * List of available tags for labeling the document. These are selectable within the tag popover.\n */\n tags: string[] = [\n 'Article of Incorporation',\n 'IFTA Licence',\n 'EIN',\n 'W9',\n 'Setup Packet',\n 'MC Certificate',\n 'Other',\n ];\n\n /**\n * Emits when a tag is selected or removed for the file.\n * Contains the file name and the selected tag.\n * @type {OutputEmitterRef<{ fileName: string; tag: string }>}\n */\n onTagChange = output<{ fileName: string; tag: string }>();\n\n /**\n * Selects a tag and emits the `onTagChange` output.\n * @param newTag The newly selected tag string.\n */\n getTag(newTag: string) {\n this.selectedTag = newTag;\n this.onTagChange.emit({ fileName: this.file().fileName, tag: newTag });\n }\n\n /**\n * Removes the currently selected tag. Does not emit an event — must be called manually.\n */\n removeTag() {\n this.selectedTag = '';\n }\n\n /**\n * Placeholder for handling document sharing. Currently logs the file name to the console.\n */\n handleShare() {\n console.log(this.file().fileName);\n }\n}\n","@let fileType = file().type; @let fileSize\n= file().size; @let pdf = fileType === 'pdf'; @let video = ['avi', 'mp4',\n'mov'].includes(fileType); @let image = ['jpg', 'png', 'jpeg',\n'gif'].includes(fileType); @let pageCount = file().pageCount; @let\nimagePreviewUrl = file().imagePreviewUrl; @let showTagModal = showTag === true;\n@let selected = this.selectedTag !== \"\"; @let largeView = viewMode() ===\n\"large\"; @let coverMode = isCrop() === true; @let noTag = noTagOption == true;\n<div\n #document\n class=\"document\"\n [class.noTouch]=\"showDeleteModal()\"\n [class.buttonsVisibility]=\"showTagModal\"\n [class.large-view]=\"largeView\"\n [class.croppedVariant]=\"coverMode\"\n>\n <div class=\"document-image-container\">\n <img [src]=\"imagePreviewUrl\" class=\"document-image\" />\n <div class=\"badge-tag-container\">\n @if(!selected){\n <div class=\"badges\">\n <p class=\"tag\">No Tag</p>\n </div>\n } @if(selected) {\n <div class=\"badges\">\n <p class=\"tag\">{{ selectedTag }}</p>\n </div>\n }\n <div class=\"badges\" [class.bottomTags]=\"largeView\">\n <p\n class=\"badge file-type\"\n [class]=\"{\n pdf: pdf,\n video: video,\n image: image\n }\"\n >\n {{ fileType }}\n </p>\n <p class=\"badge page-count\">\n @if(pdf && pageCount) {\n <span>{{ pageCount }} p.</span>\n }\n <span class=\"file-size\"> {{ fileSize | bytesToHumanReadable }}</span>\n </p>\n </div>\n </div>\n <div class=\"delete-modal\">\n <div class=\"delete-header\">\n <span class=\"delete-header-text\"\n >Are you sure you want to delete this file?</span\n >\n </div>\n <div class=\"modal-buttons\">\n <button class=\"delete-button\" (click)=\"confirmDelete()\">Delete</button>\n <button class=\"cancel-button\" (click)=\"cancelDelete()\">Cancel</button>\n </div>\n </div>\n </div>\n <div class=\"document-name\" (click)=\"showFileNameInput()\">\n @if(!showInput()){\n <p class=\"file-name\">{{ file().fileName }}</p>\n } @if(showInput()){\n <div class=\"input\">\n <cai-input\n [formControl]=\"inputFormControl\"\n [config]=\"{\n type: 'text',\n name: 'File Name Example',\n isEdit: true,\n autofocus: true,\n placeholderBehavior: 'hidden',\n }\"\n (onBlur)=\"hideFileNameInput()\"\n (onClear)=\"hideFileNameInput()\"\n (onOptionAdded)=\"handleEdit($event)\"\n ></cai-input>\n </div>\n }\n </div>\n <div class=\"document-actions\" [class.noTagOption]=\"noTag\">\n @if(!largeView){\n <div class=\"document-actions-container label\">\n <button\n class=\"document-actions-button\"\n [class.tagIcon]=\"showTagModal\"\n [ngbPopover]=\"tagPopover\"\n popoverClass=\"tagPopover\"\n positionTarget=\"document\"\n autoClose=\"outside inside\"\n container=\"body\"\n [openDelay]=\"20\"\n (shown)=\"onTagShown()\"\n (hidden)=\"onTagHidden()\"\n placement=\"right-top left-top\"\n >\n <svg-icon\n name=\"cai-label\"\n ngbTooltip=\"Tag\"\n placement=\"top\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n tooltipClass=\"tooltip\"\n positionTarget=\"document\"\n class=\"icon\"\n ></svg-icon>\n </button>\n </div>\n\n <div class=\"document-actions-container\">\n <button\n class=\"document-actions-button download\"\n (click)=\"handleDownload()\"\n >\n <svg-icon\n name=\"cai-download\"\n ngbTooltip=\"Download\"\n placement=\"top\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n tooltipClass=\"tooltip\"\n positionTarget=\"document\"\n class=\"icon\"\n ></svg-icon>\n </button>\n <button class=\"document-actions-button\" (click)=\"handleDelete()\">\n <svg-icon\n name=\"cai-delete\"\n ngbTooltip=\"Delete\"\n placement=\"top\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n tooltipClass=\"tooltip-delete\"\n positionTarget=\"document\"\n class=\"icon\"\n ></svg-icon>\n </button>\n </div>\n } @if(largeView) {\n <div #buttonsContainer class=\"document-actions-container label\">\n <button\n class=\"document-actions-button\"\n [class.tagIcon]=\"showTagModal\"\n [ngbPopover]=\"tagPopover\"\n popoverClass=\"tagPopover\"\n autoClose=\"outside inside\"\n container=\"body\"\n [positionTarget]=\"buttonsContainer\"\n [openDelay]=\"20\"\n (shown)=\"onTagShown()\"\n (hidden)=\"onTagHidden()\"\n placement=\"right-top left-top\"\n >\n <svg-icon name=\"cai-label\" class=\"icon\"></svg-icon>\n </button>\n <button class=\"document-actions-button share\" (click)=\"handleShare()\">\n <svg-icon name=\"cai-share\" class=\"icon\"></svg-icon>\n </button>\n <button\n class=\"document-actions-button download\"\n (click)=\"handleDownload()\"\n >\n <svg-icon name=\"cai-download\" class=\"icon\"></svg-icon>\n </button>\n <button class=\"document-actions-button delete\" (click)=\"handleDelete()\">\n <svg-icon name=\"cai-delete\" class=\"icon\"></svg-icon>\n </button>\n </div>\n }\n </div>\n\n <ng-template #tagPopover>\n <div class=\"tag-popover\">\n <div class=\"dropdown-list\">\n @if(selectedTag){\n <div class=\"tag-header\" (click)=\"removeTag()\">\n <div class=\"header\">\n <span class=\"tag-header-text\">REMOVE TAG</span>\n <svg-icon name=\"cai-minus\" class=\"minus-icon\"></svg-icon>\n </div>\n <div class=\"divider\"></div>\n </div>\n }\n <div class=\"tag-list\">\n @for (tag of tags; track $index) {\n <div\n class=\"tag-item\"\n (click)=\"getTag(tag)\"\n [class.selectedDesign]=\"selectedTag === tag\"\n >\n <span class=\"tag-text\">{{ tag }}</span>\n <svg-icon name=\"cai-checkmark\" class=\"checkmark-icon\"></svg-icon>\n </div>\n }\n </div>\n </div>\n </div>\n </ng-template>\n</div>\n","import { Injectable } from '@angular/core';\nimport * as pdfjsLib from 'pdfjs-dist';\nimport { FileExtension } from '../models/appFile.model';\n\npdfjsLib.GlobalWorkerOptions.workerSrc = '/pdfjs/pdf.worker.min.mjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DocumentService {\n /**\n * Generates a data URL thumbnail for a given file.\n * Handles PDFs, videos, and images.\n * @param file The file to generate a thumbnail for.\n * @returns A promise that resolves to a data URL string for the thumbnail.\n */\n async generateThumbnail(file: File): Promise<string> {\n const extension: FileExtension = file.name\n .split('.')\n .pop()\n ?.toLowerCase() as FileExtension;\n\n switch (extension) {\n case 'pdf':\n try {\n return await this.generatePdfThumbnail(file);\n } catch (error) {\n console.error('Error generating PDF thumbnail:', error);\n return '/assets/exampledoc.png';\n }\n case 'mp4':\n case 'mov':\n case 'avi':\n try {\n return await this.generateVideoThumbnail(file);\n } catch (error) {\n console.error('Error generating video thumbnail:', error);\n return '/assets/truck.png';\n }\n case 'jpg':\n case 'jpeg':\n case 'png':\n case 'gif':\n return URL.createObjectURL(file);\n default:\n return '/assets/exampledoc.png';\n }\n }\n\n private generatePdfThumbnail(file: Blob): Promise<string> {\n const fileReader = new FileReader();\n return new Promise<string>((resolve, reject) => {\n fileReader.onload = async () => {\n const typedArray = new Uint8Array(fileReader.result as ArrayBuffer);\n try {\n const pdf = await pdfjsLib.getDocument(typedArray).promise;\n const page = await pdf.getPage(1);\n const viewport = page.getViewport({ scale: 1 });\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n const desiredWidth = 280;\n const scale = desiredWidth / viewport.width;\n const scaledViewport = page.getViewport({ scale });\n canvas.height = scaledViewport.height;\n canvas.width = scaledViewport.width;\n\n if (!context) {\n return reject('Could not get canvas context');\n }\n\n await page.render({\n canvas,\n canvasContext: context,\n viewport: scaledViewport,\n }).promise;\n resolve(canvas.toDataURL('image/png'));\n } catch (error) {\n reject(error);\n }\n };\n fileReader.onerror = () => reject(fileReader.error);\n fileReader.readAsArrayBuffer(file);\n });\n }\n\n private generateVideoThumbnail(file: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n video.autoplay = true;\n video.muted = true;\n video.src = URL.createObjectURL(file);\n\n video.onloadeddata = () => {\n video.currentTime = Math.min(0.1, video.duration / 2);\n };\n\n video.onseeked = () => {\n const desiredWidth = 280;\n const scale = desiredWidth / video.videoWidth;\n canvas.width = desiredWidth;\n canvas.height = video.videoHeight * scale;\n\n if (context) {\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\n video.pause();\n URL.revokeObjectURL(video.src);\n resolve(canvas.toDataURL('image/png'));\n } else {\n reject('Could not get canvas context for video thumbnail');\n }\n };\n\n video.onerror = (e) => {\n URL.revokeObjectURL(video.src);\n reject('Error loading video for thumbnail: ' + e);\n };\n });\n }\n\n /**\n * Reads a PDF file and returns the total number of pages.\n *\n * @param file The PDF Blob or File.\n * @returns A promise that resolves to the page count (number).\n * @throws If the file is not a valid PDF or an error occurs during processing.\n */\n async getPdfPageCount(file: Blob): Promise<number> {\n const fileReader = new FileReader();\n\n return new Promise<number>((resolve, reject) => {\n fileReader.onload = async () => {\n const typedArray = new Uint8Array(fileReader.result as ArrayBuffer);\n try {\n const pdf = await pdfjsLib.getDocument(typedArray).promise;\n resolve(pdf.numPages);\n } catch (error) {\n console.error('Error getting PDF page count:', error);\n reject(new Error('Failed to load PDF or get page count.'));\n }\n };\n fileReader.onerror = () => {\n reject(new Error('FileReader error during PDF page count operation.'));\n };\n fileReader.readAsArrayBuffer(file);\n });\n }\n}\n","import {\n Component,\n ElementRef,\n signal,\n ViewChild,\n inject,\n computed,\n input,\n Output,\n EventEmitter,\n effect,\n} from '@angular/core';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { DocumentPreviewComponent } from '../document-preview/document-preview.component';\nimport { AppFile, FileExtension } from '../../models/appFile.model';\nimport {\n ImageCropperComponent,\n ImageCroppedEvent,\n LoadedImage,\n ImageTransform,\n} from 'ngx-image-cropper';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { AvatarComponent } from '../avatar/avatar.component';\nimport { Driver } from '../avatar/models';\nimport { DocumentService } from '../../services/document.service';\nimport { FileResponse } from './models/file.response';\nimport { FormGroup } from '@angular/forms';\n/**\n * A component that provides a user interface for file uploading via\n * drag-and-drop or a file input dialog. It displays previews of the\n * selected files in a carousel.\n */\n@Component({\n selector: 'cai-drop-zone',\n imports: [\n SvgIconComponent,\n DocumentPreviewComponent,\n ImageCropperComponent,\n AvatarComponent,\n ],\n templateUrl: './drop-zone.component.html',\n styleUrl: './drop-zone.component.scss',\n})\nexport class DropZoneComponent {\n // Signals\n public zoomValue = signal<number>(5.8);\n public smallView = signal<boolean>(false);\n public cropHeight = signal<number>(0);\n public cropWidth = signal<number>(0);\n private initialFilesProcessed = signal(false);\n public driver = signal<Driver>({\n id: 0,\n firstName: '',\n lastName: '',\n avatarFile: null,\n avatarColor: 'Blue',\n });\n\n public transform: ImageTransform = {\n scale: this.zoomValue(),\n };\n\n public imageChangedEvent: Event | null = null;\n public croppedImage: SafeUrl | null = '';\n public showCropper = signal<boolean>(false);\n public isCropperReady = signal<boolean>(false);\n public originalImageWidth: number = 0;\n public originalImageHeight: number = 0;\n public base64Image: string = '';\n public deletedDocs = signal<number[]>([]);\n\n // Inputs\n public crop = input<boolean>(false);\n public size = input<string>();\n public rounded = input<boolean>(false);\n public files = input<FileResponse[]>([]);\n public deletedFileIds = input<number[]>([]);\n public maxCountFiles = input<number>(1);\n\n /**\n * A input that holds an FormGroup object that is used to update the form validity when the crop mode is closed.\n */\n\n public parentForm = input<FormGroup | null>(null);\n\n /**\n * A signal that holds an array of `AppFile` objects representing the files\n * that have been selected or dropped by the user.\n \n */\n variant = input<string>('document');\n\n /**\n * Injects the DocumentService for file processing tasks like\n * thumbnail generation and PDF page counting.\n * @private\n */\n private documentService = inject(DocumentService);\n\n /**\n * An array of file extensions that should be excluded from the supported list.\n * @defaultValue `[]` (an empty array)\n * @type {FileExtension[]}\n */\n excludedFileTypes = input<FileExtension[]>([]);\n\n /**\n * The base array of all file extensions that are generally allowed.\n * Supported file types will be derived from this list, after excluding\n * any types specified in `excludedFileTypes`.\n *\n * @defaultValue `['avi', 'mov', 'mp4', 'pdf', 'gif', 'png', 'jpg', 'jpeg']`\n * @type {FileExtension[]}\n */\n fileTypes = input<FileExtension[]>([\n 'pdf',\n 'png',\n 'jpg',\n 'jpeg',\n 'gif',\n 'avi',\n 'mov',\n 'mp4',\n ]);\n\n public coverUrl: string = '';\n public profileUrl: string = '';\n public logoUrl: string = '';\n\n @Output() onDeletedFileIds = new EventEmitter<number[]>();\n @Output() docsChange = new EventEmitter<AppFile[]>();\n\n @ViewChild('inputRange') inputRange!: ElementRef<HTMLInputElement>;\n\n constructor(private sanitizer: DomSanitizer) {\n effect(() => {\n const files = this.files();\n\n if (!this.initialFilesProcessed() && files?.length) {\n this.populateDocs(files);\n this.initialFilesProcessed.set(true);\n }\n });\n }\n\n ngOnInit() {\n this.cropDimensions();\n }\n\n ngAfterViewInit() {}\n\n emitDocs() {\n this.docsChange.emit(this.docs());\n }\n\n populateDocs(currentFiles: FileResponse[]) {\n if (currentFiles?.length) {\n this.docs.set(\n currentFiles.map((file) => {\n if ((file as AppFile).imagePreviewUrl) return file as AppFile;\n return {\n fileName: file.fileName || '',\n baseName: file.fileName || '',\n fileId: file.fileId || 0,\n type:\n (file.fileName\n ?.split('.')\n .pop()\n ?.toLowerCase() as FileExtension) || 'pdf',\n size: file.fileSize || 0,\n imagePreviewUrl: file.url || '',\n file: null,\n pageCount: undefined,\n tag: file.tags?.[0] || '',\n };\n })\n );\n }\n\n if (this.crop()) {\n this.base64Image = currentFiles[0].url || '';\n this.submitCrop(true);\n }\n\n this.deletedDocs.set(this.deletedFileIds() ?? []);\n }\n\n updateRangeBackground(input: HTMLInputElement) {\n if (!input) return;\n const min = Number(input.min);\n const max = Number(input.max);\n var value;\n value = ((this.zoomValue() - min) / (max - min)) * 100;\n input.style.background = `linear-gradient(to right, #6692f1 0%, #6692f1 ${value}%, #eeeeee ${value}%, #eeeeee 100%)`;\n }\n\n cropDimensions() {\n const variant = this.variant();\n const rounded = this.rounded();\n let width = 0;\n let height = 0;\n switch (variant) {\n case 'profile':\n if (rounded) {\n width = 178;\n height = 178;\n } else {\n width = 160;\n height = 178;\n }\n break;\n case 'logo':\n width = 628;\n height = 214;\n break;\n case 'cover':\n width = 267;\n height = 178;\n break;\n }\n\n this.cropWidth.set(width);\n this.cropHeight.set(height);\n }\n\n ratioHelper(): number {\n const width = this.cropWidth();\n const height = this.cropHeight();\n\n return width && height ? width / height : 1;\n }\n\n onZoomChange(event: Event) {\n const input = event.target as HTMLInputElement;\n const zoom = Number(input.value);\n this.zoomValue.set(zoom);\n\n this.transform = {\n scale: zoom,\n };\n this.updateRangeBackground(event.target as HTMLInputElement);\n }\n\n fileChangeEvent(event: Event): void {\n this.imageChangedEvent = event;\n this.isCropperReady.set(false);\n const target = event.target as HTMLInputElement;\n const file = target.files?.[0];\n\n this.zoomValue.set(5.8);\n this.transform = { scale: this.zoomValue() };\n\n const fileExtension = file?.name.split('.').pop()?.toLowerCase();\n const isSupportedImage =\n file &&\n file.type.startsWith('image/') &&\n fileExtension &&\n this.supportedFileTypes().includes(fileExtension as FileExtension);\n if (isSupportedImage && this.crop()) {\n this.setInvalid();\n this.showCropper.set(true);\n } else {\n this.showCropper.set(false);\n }\n\n this.zoomValue.set(5.8);\n }\n\n imageCropped(event: ImageCroppedEvent) {\n if (event.objectUrl) {\n this.croppedImage = this.sanitizer.bypassSecurityTrustUrl(\n event.objectUrl\n );\n } else {\n this.base64Image = (event.base64 as string).replace(\n 'data:image/png;base64,',\n ''\n );\n this.croppedImage = null;\n }\n }\n\n imageLoaded(image: LoadedImage) {}\n\n cropperReady() {\n this.isCropperReady.set(true);\n if (this.inputRange?.nativeElement) {\n this.updateRangeBackground(this.inputRange.nativeElement);\n }\n }\n\n loadImageFailed() {\n // show message\n }\n\n onTransformChange(event: ImageTransform) {\n const scale = event?.scale as number;\n this.zoomValue.set(scale);\n }\n\n cancelCrop() {\n this.clearInvalid();\n this.showCropper.set(false);\n }\n submitCrop(initial: boolean = false) {\n const newPreviewUrl = this.base64Image as string;\n\n const lastIndex = this.docs().length - 1;\n\n if (lastIndex >= 0) {\n const updatedDocs = [...this.docs()];\n const lastDoc = { ...updatedDocs[lastIndex] };\n lastDoc.imagePreviewUrl = newPreviewUrl;\n updatedDocs[lastIndex] = lastDoc;\n\n this.docs.set(updatedDocs);\n this.clearInvalid();\n\n this.showCropper.set(false);\n }\n\n if (this.variant() === 'profile' && this.base64Image) {\n this.profileUrl = initial\n ? this.base64Image\n : `data:image/png;base64,${this.base64Image}`;\n }\n if (this.variant() === 'cover' && this.base64Image) {\n this.coverUrl = initial\n ? this.base64Image\n : `data:image/png;base64,${this.base64Image}`;\n if (this.size() === '480px' && this.coverUrl) {\n this.smallView.set(true);\n }\n }\n if (this.variant() === 'logo' && this.base64Image) {\n this.logoUrl = initial\n ? this.base64Image\n : `data:image/png;base64,${this.base64Image}`;\n }\n this.cropDimensions();\n if (!initial) this.emitDocs();\n }\n\n /**\n * A computed signal that derives the list of currently supported file extensions.\n * It filters the base `fileTypes` array, removing any extensions present\n * in the `excludedFileTypes` input.\n */\n supportedFileTypes = computed(() => {\n const excluded = this.excludedFileTypes();\n const types = this.fileTypes();\n\n if (!excluded || excluded.length === 0) {\n return types;\n }\n\n return types.filter((type) => !excluded.includes(type));\n });\n\n /**\n * A signal that holds an array of `AppFile` objects representing the files\n * that have been selected or dropped by the user.\n */\n docs = signal<AppFile[]>([]);\n\n /**\n * A signal that acts as a boolean flag. It is set to `true` when the user\n * attempts to upload a file with an unsupported extension.\n */\n unsupported = signal(false);\n\n /**\n * Handles the 'change' event from the hidden file input. It extracts the\n * selected files and passes them to the `processFiles` method.\n * @param event The `Event` object from the file input element.\n */\n onInput(event: Event) {\n const target = event.target as HTMLInputElement;\n const files = target.files as FileList;\n this.processFiles(files);\n }\n\n /**\n * Handles the 'drop' event on the component. It prevents the browser's\n * default file handling, extracts the dropped files, and passes them to\n * the `processFiles` method.\n * @param event The `DragEvent` object containing the dropped files.\n */\n onDrop(event: DragEvent) {\n event.preventDefault();\n const files = event.dataTransfer?.files as FileList;\n this.processFiles(files);\n }\n\n /**\n * Asynchronously processes a list of files. For each file, it validates\n * the extension against `supportedFileTypes`. If valid, it generates a\n * thumbnail, counts pages for PDFs, creates an `AppFile` object, and adds\n * it to the `docs` signal. If any file is unsupported, the `unsupported`\n * flag is set.\n * @param files The `FileList` object to be processed.\n */\n async processFiles(files: FileList) {\n this.unsupported.set(false);\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const fileExtension = file.name.split('.').pop()?.toLowerCase();\n\n if (\n !fileExtension ||\n !this.supportedFileTypes().includes(fileExtension as FileExtension)\n ) {\n this.unsupported.set(true);\n continue;\n }\n\n let pageCount: number | undefined;\n\n if (fileExtension === 'pdf') {\n try {\n pageCount = await this.documentService.getPdfPageCount(file);\n } catch (error) {\n console.error(`Failed to get page count for ${file.name}:`, error);\n }\n }\n\n const imagePreviewUrl = await this.documentService.generateThumbnail(\n file\n );\n\n const filePreview: AppFile = {\n fileName: file.name,\n baseName: file.name.split('.').slice(0, -1).join('.'),\n type: fileExtension as FileExtension,\n size: file.size,\n imagePreviewUrl: imagePreviewUrl,\n file: file,\n pageCount: pageCount,\n tag: '',\n };\n\n if (['profile', 'cover', 'logo'].includes(this.variant())) {\n this.docs.set([filePreview]);\n } else {\n this.docs.update((docs) => [...docs, filePreview]);\n }\n\n if (!this.crop()) this.emitDocs();\n\n const visibleCount = this.size() === '480px' ? 2 : 3;\n const total = this.docs().length;\n\n if (total > visibleCount) {\n this.carouselIndex.set(total - visibleCount);\n } else {\n this.carouselIndex.set(0);\n }\n\n if (total === this.maxCountFiles() && this.variant() === 'document') {\n this.inputRef.nativeElement.disabled = true;\n }\n }\n }\n\n /**\n * Handles the download action for a specific file.\n * Note: This is a placeholder and currently only logs the file name.\n * @param fileName The name of the file to be downloaded.\n */\n handleDownload(fileName: string) {\n const fileToDownload = this.docs().find((doc) => doc.fileName === fileName);\n\n if (!fileToDownload || !fileToDownload.file) {\n console.error('File not found or is null');\n return;\n }\n\n const file = fileToDownload.file;\n const url = URL.createObjectURL(file);\n\n const a = document.createElement('a');\n a.href = url;\n a.download = fileToDownload.fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n URL.revokeObjectURL(url);\n }\n\n /**\n * A ViewChild reference to the native `<input type='file'>` element.\n * Used to programmatically trigger the file selection dialog.\n */\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n\n /**\n * Resets the component's state after an unsupported file type error\n * by setting the `unsupported` signal to `false`.\n */\n cancel() {\n this.unsupported.set(false);\n }\n\n /**\n * Programmatically triggers a click on the hidden file input element,\n * which opens the system's file selection dialog.\n */\n handleClickToAdd() {\n this.inputRef.nativeElement.click();\n }\n\n /**\n * Deletes a file from the preview list. It filters the `docs` array to\n * remove the specified file and adjusts the carousel position.\n * @param fileName The name of the file to be deleted.\n */\n handleDelete(fileName: string) {\n this.carouselLeft();\n\n const fileIdToDelete = this.docs().find(\n (doc) => doc.fileName === fileName\n )?.fileId;\n\n if (fileIdToDelete) {\n this.deletedDocs.set([...this.deletedDocs(), fileIdToDelete]);\n\n this.onDeletedFileIds.emit(this.deletedDocs());\n }\n\n this.docs.set(this.docs().filter((doc) => doc.fileName !== fileName));\n this.emitDocs();\n\n if (this.docs().length === 0) {\n this.unsupported.set(false);\n }\n\n if (this.docs().length < this.maxCountFiles()) {\n this.inputRef.nativeElement.disabled = false;\n }\n\n this.coverUrl = '';\n this.smallView.set(false);\n }\n\n // Carousel logic\n\n /**\n * A signal that stores the current index for the file preview carousel.\n * This determines which part of the carousel is visible.\n */\n carouselIndex = signal(0);\n\n /**\n * A computed signal that calculates the CSS `translateX` value for the\n * carousel container. This creates the sliding effect based on the\n * `carouselIndex`.\n */\n carouselTransform = computed(() => {\n const offset = (148 + 6) * this.carouselIndex() * -1; // 148px width + 6px gap\n return `translateX(${offset}px)`;\n });\n\n /**\n * Navigates the carousel one step to the left by decrementing the\n * `carouselIndex`. The index will not go below 0.\n */\n carouselLeft() {\n this.carouselIndex.update((i) => Math.max(0, i - 1));\n }\n\n /**\n * Navigates the carousel one step to the right by incrementing the\n * `carouselIndex`. The index will not exceed the maximum possible value\n * based on the number of documents.\n */\n carouselRight() {\n const visibleCount = this.size() === '480px' ? 2 : 3;\n const maxIndex = Math.max(0, this.docs().length - visibleCount);\n this.carouselIndex.update((i) => Math.min(maxIndex, i + 1));\n }\n\n handleTagChange(event: { fileName: string; tag: string }) {\n this.docs().forEach((doc) => {\n if (doc.fileName === event.fileName) doc.tag = event.tag;\n });\n }\n\n setInvalid() {\n this.parentForm()?.setErrors({ childInvalid: true });\n }\n\n clearInvalid() {\n const { childInvalid, ...rest } = this.parentForm()?.errors ?? {};\n const next = Object.keys(rest).length ? rest : null;\n this.parentForm()?.setErrors(next);\n this.parentForm()?.updateValueAndValidity({\n emitEvent: true,\n onlySelf: true,\n });\n\n // Clear the input value to allow the same file to be selected again\n if (this.inputRef?.nativeElement) {\n this.inputRef.nativeElement.value = '';\n }\n }\n}\n","@let docCount = docs().length; @let cropFile = crop() === true; @let showCrop =\nshowCropper() === true; @let documentVariant = variant() === \"document\"; @let\nvideoVariant = variant() === \"video\"; @let profileVariant = variant() ===\n\"profile\"; @let coverVariant = variant() === \"cover\"; @let logoVariant =\nvariant() === \"logo\"; @let roundedBorder = rounded() === true; @let coverPreview\n= coverUrl !== \"\"; @let profilePreview = profileUrl !== \"\"; @let logoPreview =\nlogoUrl !== \"\"; @let smallSize = size() === \"480px\"; @let countFiles =\nthis.maxCountFiles();\n\n<div\n class=\"container\"\n [class]=\"{\n smallContainer: smallSize,\n largeContainer: !smallSize,\n logoVar: logoVariant,\n hasCropper: isCropperReady()\n }\"\n>\n @if(coverVariant && coverPreview){\n <cai-document-preview\n class=\"cover-container\"\n [file]=\"{\n fileName: 'cover.png',\n imagePreviewUrl: coverUrl,\n type: 'png',\n size: 0,\n file: null,\n baseName: 'cover',\n pageCount: undefined,\n tag: ''\n }\"\n viewMode=\"small\"\n [coverMinimalMode]=\"true\"\n (onDelete)=\"handleDelete('cover.png')\"\n ></cai-document-preview>\n } @if (profileVariant) { @if(!profilePreview) {\n <div>\n <cai-avatar\n [driver]=\"driver()\"\n [size]=\"160\"\n [rounded]=\"rounded()\"\n ></cai-avatar>\n </div>\n } @else if(profilePreview) {\n <div class=\"profile-container\">\n <img\n [class]=\"{\n 'profile-rounded-image': rounded(),\n 'profile-square-image': !rounded()\n }\"\n [src]=\"profileUrl\"\n />\n </div>\n } }\n <!--Image Cropper-->\n @if(cropFile && showCrop){ @if (!isCropperReady()) {\n <div class=\"cropper-loader\">\n <div class=\"spinner\"></div>\n </div>\n }\n <div class=\"cropper-overlay\">\n <image-cropper\n #cropper\n class=\"img-cropper\"\n [output]=\"'base64'\"\n [class.logoBorder]=\"logoVariant\"\n [roundCropper]=\"roundedBorder ? true : false\"\n [hideResizeSquares]=\"true\"\n [allowMoveImage]=\"true\"\n [transform]=\"transform\"\n (transformChange)=\"onTransformChange($event)\"\n format=\"png\"\n [aspectRatio]=\"ratioHelper()\"\n [resizeToWidth]=\"cropWidth()\"\n [resizeToHeight]=\"cropHeight()\"\n [containWithinAspectRatio]=\"true\"\n [imageChangedEvent]=\"imageChangedEvent\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded($event)\"\n (cropperReady)=\"cropperReady()\"\n (loadImageFailed)=\"loadImageFailed()\"\n ></image-cropper>\n @if(isCropperReady()){\n <div class=\"lower-part\">\n <div class=\"range\">\n <input\n #inputRange\n type=\"range\"\n class=\"custom-range\"\n min=\"1\"\n max=\"10\"\n step=\"0.1\"\n [value]=\"zoomValue()\"\n (input)=\"onZoomChange($event)\"\n />\n </div>\n <div class=\"cropper-buttons\">\n <button class=\"cancel-button\" (click)=\"cancelCrop()\">Cancel</button>\n <button class=\"submit-button\" (click)=\"submitCrop()\">Submit</button>\n </div>\n </div>\n }\n </div>\n }\n <!-- Carousel -->\n @if(docCount > 0 && (documentVariant || videoVariant)) {\n <div class=\"docs\">\n <div class=\"doc-container\" [style.transform]=\"carouselTransform()\">\n @for (doc of docs(); track $index) {\n <cai-document-preview\n class=\"doc\"\n [file]=\"doc\"\n (onDelete)=\"handleDelete($event)\"\n (onDownload)=\"handleDownload($event)\"\n (onTagChange)=\"handleTagChange($event)\"\n viewMode=\"small\"\n ></cai-document-preview>\n }\n </div>\n @if((docCount >= 3 && !smallSize) || (docCount >= 2 && smallSize) ) {\n <button class=\"carousel-button carousel-left\" (click)=\"carouselLeft()\">\n <svg-icon name=\"cai-arrow-secondary-left\" class=\"arrow\"></svg-icon>\n </button>\n <button class=\"carousel-button carousel-right\" (click)=\"carouselRight()\">\n <svg-icon name=\"cai-arrow-secondary-right\" class=\"arrow\"></svg-icon>\n </button>\n }\n </div>\n }\n\n <!-- Drop Zone -->\n <div\n class=\"drop-zone-container\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"$event.preventDefault()\"\n [class]=\"{\n 'more-docs': docCount >= 3 && !smallSize,\n 'small-more-docs': docCount >= 2 && smallSize,\n 'max-reached-drop-design': countFiles === this.docs().length && variant() === 'document',\n 'max-reached-more-doc-sm':\n countFiles === this.docs().length &&\n variant() === 'document' &&\n docCount >= 2 && smallSize,\n 'max-reached-more-doc-lg':\n countFiles === this.docs().length &&\n variant() === 'document' &&\n docCount >= 3 && !smallSize,\n\n unsupported: unsupported(),\n smallView: this.smallView()\n }\"\n >\n <!-- Drop Zone -->\n <div class=\"drop-zone\" (click)=\"handleClickToAdd()\">\n @if(logoVariant && logoPreview){\n <div class=\"logo-container\">\n <img class=\"logo-image\" [src]=\"logoUrl\" />\n </div>\n } @if(coverVariant || logoVariant){\n <svg-icon\n name=\"cai-illustration-drop-zone-cover\"\n class=\"illustration\"\n ></svg-icon>\n } @if(profileVariant){\n <svg-icon\n name=\"cai-illustration-drop-zone-profile\"\n class=\"illustration\"\n ></svg-icon>\n } @if(documentVariant){\n <svg-icon\n name=\"cai-illustration-drop-zone\"\n class=\"illustration\"\n ></svg-icon>\n } @if(videoVariant){\n <svg-icon\n name=\"cai-illustration-drop-zone-video\"\n class=\"illustration\"\n ></svg-icon>\n } @if(countFiles === this.docs().length && this.variant() === \"document\")\n {\n <div class=\"drop-zone-text\">\n <p class=\"heading\">\n <span class=\"line\">MAX COUNT</span>\n <span class=\"line\">REACHED</span>\n </p>\n <p class=\"subtext\">\n <span class=\"line\">{{ countFiles }} FILES </span>\n <span class=\"line\">IMPORTED</span>\n </p>\n </div>\n\n } @else{\n <div class=\"drop-zone-text\">\n <p class=\"heading\">\n DRAG FILES @if (docCount < 1) { <span>HERE</span>\n }\n </p>\n @if(!coverPreview && !profilePreview){\n <p class=\"subtext\">OR CLICK TO ADD</p>\n } @if(coverPreview || profilePreview){\n <p class=\"subtext\">OR CLICK TO REPLACE</p>\n }\n </div>\n }\n\n <input\n type=\"file\"\n aria-hidden=\"true\"\n multiple\n class=\"drop-zone-input\"\n #inputRef\n (input)=\"onInput($event)\"\n (change)=\"fileChangeEvent($event)\"\n />\n </div>\n\n <!-- Drop Zone Error -->\n <div class=\"drop-zone-error\">\n <div class=\"drop-zone-text\">\n <p class=\"heading invalid\">INVALID FILE TYPE</p>\n <p class=\"subtext\">SUPPORTED FORMATS</p>\n </div>\n <div class=\"file-types\">\n @for (type of supportedFileTypes(); track $index) {\n <p\n class=\"badge\"\n [class]=\"{\n pdf: type === 'pdf',\n video: ['avi', 'mp4', 'mov'].includes(type),\n image: ['jpg', 'png', 'jpeg', 'gif'].includes(type)\n }\"\n >\n {{ type }}\n </p>\n }\n </div>\n <button class=\"cancel-button\">\n <svg-icon name=\"cai-cancel\" (click)=\"cancel()\"></svg-icon>\n </button>\n </div>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { ICaInput } from '../components/cai-custom-datetime-pickers/config';\n\n@Pipe({\n name: 'inputDropdownArrowClass',\n standalone: true,\n})\nexport class InputDropdownArrowClassPipe implements PipeTransform {\n transform(\n getSuperControl: AbstractControl<any, any> | null,\n isFocusInput: boolean,\n inputConfig: ICaInput,\n isTouchedInput: boolean,\n value: string\n ): { [key: string]: boolean | undefined } {\n return {\n focus: isFocusInput,\n 'valid-focus-in':\n (!inputConfig.dropdownLabel &&\n (getSuperControl?.value || inputConfig.placeholder) &&\n getSuperControl?.valid &&\n isFocusInput &&\n !inputConfig.isDisabled &&\n !inputConfig.isInvalidSearchInDropdown) ||\n ((inputConfig.dropdownImageInput?.url ||\n inputConfig.dropdownImageInput?.nameInitialsInsteadUrl ||\n inputConfig.placeholder) &&\n isFocusInput &&\n !inputConfig.isInvalidSearchInDropdown &&\n !inputConfig.isDisabled),\n 'valid-focus-out':\n (getSuperControl?.value &&\n getSuperControl?.valid &&\n !isFocusInput &&\n !inputConfig.isDisabled) ||\n (!inputConfig.dropdownImageInput?.withText &&\n inputConfig.dropdownImageInput?.url &&\n !isFocusInput &&\n !inputConfig.isDisabled),\n 'invalid-focus-in':\n (getSuperControl?.value &&\n getSuperControl?.invalid &&\n isFocusInput &&\n !inputConfig.isDisabled) ||\n (isFocusInput &&\n getSuperControl?.value &&\n inputConfig.isInvalidSearchInDropdown &&\n inputConfig.isDropdown &&\n !inputConfig.blackInput &&\n !inputConfig.mergeDropdownBodyWithInput &&\n !inputConfig.isDisabled),\n 'invalid-focus-out':\n !getSuperControl?.value &&\n getSuperControl?.invalid &&\n (isTouchedInput || getSuperControl?.touched) &&\n !isFocusInput &&\n !inputConfig.isDisabled,\n 'invalid-search-in-dropdown-focus-in':\n inputConfig.isInvalidSearchInDropdown &&\n inputConfig.isDropdown &&\n isFocusInput &&\n getSuperControl?.value &&\n getSuperControl?.invalid &&\n !inputConfig.isDisabled,\n };\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { AbstractControl } from \"@angular/forms\";\nimport { ICaInput } from \"../components/cai-custom-datetime-pickers/config\";\n\n@Pipe({\n name: \"inputPlaceholderIconClass\",\n standalone: true,\n})\nexport class InputPlaceholderIconClassPipe implements PipeTransform {\n transform(\n getSuperControl: AbstractControl<any, any> | null,\n isFocusInput: boolean,\n inputConfig: ICaInput,\n selectedDropdownLabelColor: any | null,\n isTouchedInput: boolean,\n isEditInput: boolean,\n value: string\n ): { [key: string]: boolean | undefined } {\n return {\n \"inactive-empty\": !getSuperControl?.value && inputConfig.isDisabled,\n \"inactive-filled\": getSuperControl?.value && inputConfig.isDisabled,\n \"default-svg-color\":\n !(inputConfig.dropdownLabel && isFocusInput) &&\n !(inputConfig.dropdownLabel && selectedDropdownLabelColor),\n focus: isFocusInput && !inputConfig.dropdownLabel,\n \"valid-focus-in\":\n getSuperControl?.value &&\n getSuperControl?.valid &&\n isFocusInput &&\n !selectedDropdownLabelColor &&\n !inputConfig.dropdownLabel &&\n !inputConfig.blackInput &&\n !inputConfig.commands?.active &&\n !inputConfig.isDisabled,\n \"valid-focus-out\":\n getSuperControl?.value &&\n getSuperControl?.valid &&\n !isFocusInput &&\n !selectedDropdownLabelColor &&\n !inputConfig.dropdownLabel &&\n !inputConfig.isDisabled,\n \"valid-focus-out-dropdown-label\":\n getSuperControl?.value &&\n getSuperControl?.valid &&\n !isFocusInput &&\n selectedDropdownLabelColor &&\n inputConfig.dropdownLabel &&\n !inputConfig.isDisabled,\n \"invalid-focus-in\":\n getSuperControl?.value &&\n getSuperControl?.invalid &&\n isFocusInput &&\n !selectedDropdownLabelColor &&\n !inputConfig.dropdownLabel &&\n !inputConfig.blackInput &&\n !inputConfig.isDisabled,\n \"invalid-focus-out\":\n getSuperControl?.invalid &&\n !isFocusInput &&\n !selectedDropdownLabelColor &&\n !inputConfig.dropdownLabel &&\n (isTouchedInput || getSuperControl?.touched) &&\n !inputConfig.isDisabled,\n hidden: inputConfig.type === \"password\" && getSuperControl?.value,\n 'cursor-pointer': isEditInput\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\n// confis\nimport { ICaInput } from '../components/cai-custom-datetime-pickers/config';\n\nexport enum DropdownTemplateTypeEnum {\n PAYROLL_TRUCKS = 'payroll-trucks'\n}\n\n@Pipe({\n name: 'inputClearClass',\n standalone: true\n})\nexport class InputClearClassPipe implements PipeTransform {\n transform(\n getSuperControl: AbstractControl<any, any> | null,\n isFocusInput: boolean,\n inputConfig: ICaInput,\n incorrectValue: boolean,\n selectedDropdownLabelColor: boolean,\n template: string,\n value: string\n ): { [key: string]: boolean | undefined } {\n return {\n focus:\n isFocusInput &&\n getSuperControl?.value &&\n !(inputConfig.blackInput && inputConfig.isDropdown),\n 'valid-focus-in':\n (getSuperControl?.value &&\n getSuperControl?.valid &&\n isFocusInput &&\n !inputConfig.customClass?.includes('repair-shop-open-hour') &&\n !inputConfig.blackInput &&\n !inputConfig.dropdownImageInput?.url &&\n !inputConfig.isInvalidSearchInDropdown &&\n !inputConfig.mergeDropdownBodyWithInput &&\n !inputConfig.isDisabled) ||\n (inputConfig.multipleInputValues?.options.length &&\n isFocusInput &&\n !inputConfig.isInvalidSearchInDropdown &&\n !inputConfig.blackInput &&\n !inputConfig.mergeDropdownBodyWithInput &&\n !inputConfig.isDisabled &&\n !inputConfig.dropdownLabel &&\n template === DropdownTemplateTypeEnum.PAYROLL_TRUCKS),\n 'valid-focus-out':\n getSuperControl?.value &&\n getSuperControl?.valid &&\n !isFocusInput &&\n !inputConfig.customClass?.includes('repair-shop-open-hour') &&\n !inputConfig.blackInput &&\n !inputConfig.isDisabled,\n 'invalid-focus-in':\n (getSuperControl?.value &&\n getSuperControl?.invalid &&\n isFocusInput &&\n !inputConfig.mergeDropdownBodyWithInput &&\n !inputConfig.blackInput &&\n !inputConfig.isDisabled) ||\n (inputConfig.isInvalidSearchInDropdown &&\n inputConfig.isDropdown &&\n isFocusInput &&\n getSuperControl?.value &&\n !inputConfig.mergeDropdownBodyWithInput &&\n !inputConfig.blackInput &&\n !inputConfig.isDisabled),\n 'invalid-focus-out':\n getSuperControl?.value &&\n getSuperControl?.invalid &&\n !isFocusInput &&\n !inputConfig.isDropdown &&\n !inputConfig.blackInput &&\n !(\n !inputConfig.dropdownImageInput?.withText &&\n inputConfig.dropdownImageInput?.url\n ) &&\n !inputConfig.isDisabled,\n 'incorrect-input': inputConfig.incorrectInput && getSuperControl?.value,\n 'incorrect-input-on':\n inputConfig.incorrectInput && getSuperControl?.value && incorrectValue,\n hidden:\n getSuperControl?.value && isFocusInput && inputConfig.dropdownLabel,\n 'dropdown-on':\n (getSuperControl?.value &&\n inputConfig.isDropdown &&\n !inputConfig.isDisabled &&\n !inputConfig.blackInput &&\n !inputConfig.multiSelectDropdownActive &&\n !inputConfig.mergeDropdownBodyWithInput) ||\n (inputConfig.dropdownImageInput?.url &&\n !inputConfig.isDisabled &&\n !inputConfig.blackInput &&\n !inputConfig.multiSelectDropdownActive &&\n !inputConfig.mergeDropdownBodyWithInput) ||\n (!inputConfig.blackInput && selectedDropdownLabelColor) ||\n (inputConfig.dropdownImageInput?.url &&\n !inputConfig.blackInput &&\n !inputConfig.mergeDropdownBodyWithInput) ||\n template === DropdownTemplateTypeEnum.PAYROLL_TRUCKS,\n 'trash-can-svg': inputConfig.removeInput,\n };\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { ICaInput } from \"../components/cai-custom-datetime-pickers/config\";\n\n@Pipe({\n name: \"showClear\",\n standalone: true\n})\nexport class ShowClearPipe implements PipeTransform {\n transform(inputConfig: ICaInput, disabled?: boolean): boolean | undefined {\n const isDisabled = disabled || inputConfig.isDisabled;\n return (\n (!inputConfig.hideClear &&\n (!isDisabled || inputConfig.removeInput) &&\n !inputConfig.customClass?.includes(\"details-pages\") &&\n !inputConfig.commands?.active &&\n !inputConfig?.loadingSpinner?.isLoading) ||\n inputConfig.incorrectInput\n );\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { ICaInput } from '../components/cai-custom-datetime-pickers/config';\n\n@Pipe({\n name: 'inputDateTimeContainerClass',\n standalone: true,\n})\nexport class InputDateTimeContainerClassPipe implements PipeTransform {\n transform(\n getSuperControl: AbstractControl<any, any> | null,\n isFocusInput: boolean,\n inputConfig: ICaInput,\n value: string,\n isDisabledInput?: boolean,\n invalid?: boolean,\n isTouchedInput?: boolean,\n ): { [key: string]: boolean | undefined | null | string } {\n\n const isDisabled = isDisabledInput ?? inputConfig.isDisabled;\n return {\n 'datetime-transparent': inputConfig.transparentInput,\n //'datetime-custom-empty-hover': !isFocusInput,\n 'datetime-custom-empty-focus': isFocusInput && !isTouchedInput && !value,\n 'datetime-custom-filled-hover':\n value && !isFocusInput && !inputConfig.dropdownLabel,\n 'datetime-invalid-filled-focus-out':\n value &&\n invalid &&\n //isTouchedInput &&\n !isFocusInput &&\n !inputConfig.blackInput &&\n !isDisabled,\n 'datetime-invalid-empty-focus-out':\n !value &&\n invalid &&\n isTouchedInput &&\n !isFocusInput &&\n !inputConfig.blackInput &&\n !isDisabled &&\n !inputConfig.dropdownLabel,\n 'datetime-invalid-focus-in':\n invalid &&\n isFocusInput &&\n !inputConfig.blackInput &&\n !isDisabled,\n 'datetime-valid-focus-in':\n value &&\n !invalid &&\n isFocusInput &&\n !isDisabled,\n 'datetime-valid-focus-out':\n value &&\n !invalid &&\n !isFocusInput &&\n !inputConfig.blackInput &&\n !inputConfig.isDisabled,\n 'datetime-inactive-empty': isDisabled && !value,\n 'datetime-inactive-filled': isDisabled && value,\n 'datetime-input-remove-trash-can': inputConfig.removeInput,\n 'datetime-input-remove-background': inputConfig.isInputBackgroundRemoved,\n 'datetime-input-blue-text': inputConfig.isBlueText,\n 'datetime-required-label-table': inputConfig.requiredLabel,\n };\n }\n}","import { distinctUntilChanged } from \"rxjs/operators\";\nimport { Subject } from \"rxjs\";\nimport { Injectable } from \"@angular/core\";\n\n// models\nimport { ScrollChange } from \"../models/scroll-change.model\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class CalendarDateTimePickerService {\n public index$ = new Subject<ScrollChange>();\n public indexAuto$ = new Subject<number>();\n public scrollToDate = new Subject<string>();\n public dateChanged = new Subject<any>();\n public selectedIndex = 0;\n scrolledIndexChange = this.index$.pipe(distinctUntilChanged());\n scrollToAutoIndex = this.indexAuto$.pipe(distinctUntilChanged());\n private scrolledScroll!: string;\n\n constructor() {}\n\n public set setAutoIndex(number: number) {\n this.selectedIndex = number;\n this.indexAuto$.next(number);\n }\n\n public set scrolledScrollItem(name: string) {\n this.scrolledScroll = name;\n }\n\n public get selectedScroll() {\n return this.scrolledScroll;\n }\n}\n","import {\n CdkVirtualScrollViewport,\n VirtualScrollStrategy,\n} from '@angular/cdk/scrolling';\nimport { Inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\n// services\nimport { CalendarDateTimePickerService } from '../services/calendar-datetime-picker.service';\n\nexport const STARTING_YEAR = new Date().getFullYear() - 90;\n\nexport const RANGE = 100 * 12;\n\nconst BUFFER = 500;\n\n@Injectable()\nexport class CalendarStrategy implements VirtualScrollStrategy {\n constructor(\n private calendarService: CalendarDateTimePickerService,\n @Inject(String) private startedHeight: number,\n @Inject(String) private FULL_SIZE: number,\n @Inject(String) private SCROLL_TYPE: string\n ) {}\n\n private index$ = new Subject<any>();\n scrolledIndexChange = this.index$.pipe(distinctUntilChanged());\n private viewport?: CdkVirtualScrollViewport;\n\n public attach(viewport: CdkVirtualScrollViewport): void {\n this.viewport = viewport;\n this.viewport.setTotalContentSize(this.startedHeight);\n this.updateRenderedRange(this.viewport);\n }\n\n public updateScrollHeights(height: number): void {\n this.viewport?.setTotalContentSize(height);\n this.updateRenderedRange(this.viewport);\n }\n\n public detach(): void {\n this.index$.complete();\n this.viewport = undefined;\n }\n\n public onContentScrolled(): void {\n if (this.viewport) this.updateRenderedRange(this.viewport);\n }\n\n /** These do not matter for this case */\n public onDataLengthChanged(): void {}\n\n public onContentRendered(): void {}\n\n public onRenderedOffsetChanged(): void {}\n\n public scrollToIndex(index: number, behavior: ScrollBehavior): void {\n if (this.viewport)\n this.viewport.scrollToOffset(this.getOffsetForIndex(index), behavior);\n }\n\n public scrollToOffset(offset: number, behavior: ScrollBehavior): void {\n if (this.viewport) this.viewport.scrollToOffset(offset, behavior);\n }\n\n public getOffsetForIndex(index: number): number {\n return this.FULL_SIZE * index;\n }\n\n private getIndexForOffset(offset: number): number {\n return Math.round(offset / this.FULL_SIZE);\n }\n private updateRenderedRange(viewport?: CdkVirtualScrollViewport): void {\n if (!viewport) return;\n\n const offset = viewport.measureScrollOffset();\n\n const { start, end } = viewport.getRenderedRange();\n const viewportSize = 230;\n\n const dataLength = viewport.getDataLength();\n\n const newRange = { start, end };\n const firstVisibleIndex = this.getIndexForOffset(offset);\n\n const startOffsetIndex = this.FULL_SIZE * start;\n\n const startBuffer = offset - startOffsetIndex;\n if (startBuffer < BUFFER && start !== 0) {\n newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER * 2));\n newRange.end = Math.min(\n dataLength,\n this.getIndexForOffset(offset + viewportSize + BUFFER)\n );\n } else {\n const endBuffer = this.FULL_SIZE * end - offset - viewportSize;\n\n if (endBuffer < BUFFER && end !== dataLength) {\n newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER));\n newRange.end = Math.min(\n dataLength,\n this.getIndexForOffset(offset + viewportSize + BUFFER * 2)\n );\n }\n }\n\n viewport.setRenderedRange(newRange);\n viewport.setRenderedContentOffset(this.getOffsetForIndex(newRange.start));\n\n // Used for update of 2nd scroll that is listening\n if (this.calendarService.selectedScroll === this.SCROLL_TYPE)\n this.index$.next({\n indx: firstVisibleIndex,\n scrollOffset: offset,\n cycleSize: this.FULL_SIZE,\n type: this.SCROLL_TYPE,\n });\n }\n}\n","export class CustomDatetimePickersConstants {\n public static readonly timeMinutes = ['00', '15', '30', '45'];\n public static readonly timeMinutesGapFive = [\n '00',\n '05',\n '10',\n '15',\n '20',\n '25',\n '30',\n '35',\n '40',\n '45',\n '50',\n '55',\n ];\n public static readonly monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n public static readonly hourTimes = [\n 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,\n 11,\n ];\n public static readonly defaultScrollTypes = {\n pmAmScroll: 0,\n minutesScroll: 0,\n hourScroll: 8,\n monthScroll: 0,\n dayScroll: 0,\n yearScroll: 0,\n };\n public static readonly timeOfDay = ['AM', 'PM'];\n public static readonly defaultSelectedTime = '12:00 AM';\n public static readonly defaultOutputTypeTime = ['hh', ':', 'mm', ' ', 'AM'];\n public static readonly defaultOutputTypeDate = ['MM', '/', 'DD', '/', 'YY'];\n public static readonly dayOfWeekLetters = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'cai-custom-datetime-picker-calendar-days',\n templateUrl: './cai-custom-datetime-pickers-calendar-days.component.html',\n styleUrls: ['./cai-custom-datetime-pickers-calendar-days.component.scss'],\n imports: [CommonModule, FormsModule]\n})\nexport class CaCustomDateTimePickersCalendarDaysComponent implements OnInit {\n @Input() dateTime!: Date;\n @Input() year!: number;\n @Input() selectedMonth!: string;\n @Input() index!: number;\n @Input() activeMonth!: boolean;\n @Output() selectDay = new EventEmitter();\n public currentYear: number = new Date().getFullYear();\n public currentMonth: number = new Date().getMonth();\n public currentDay: number = new Date().getDate();\n public selectedMonthFromInput!: number;\n public selectedYearFromInput!: number;\n public days: ReadonlyArray<string | number> = [];\n public selectedDay: number = -1;\n public selMonth: number = -1;\n public selectedYear: number = -1;\n\n @Input()\n set month(month: Date) {\n this.selectedMonthFromInput = parseInt(\n ('0' + month.getMonth() + 1).slice(-2)\n );\n this.selectedYearFromInput = month.getFullYear();\n const fillerCount = month.getDay();\n const lastDay = new Date(month.getFullYear(), month.getMonth() + 1, 0);\n const daysCount = lastDay.getDate();\n\n this.days = [\n ...Array.from({ length: fillerCount }).map(() => ''),\n ...Array.from({ length: daysCount }).map((_, i) => i + 1),\n ];\n }\n\n constructor() { }\n\n ngOnInit(): void {\n this.setSelectedDate();\n }\n\n public chooseDay(day: number | string): void {\n this.selectDay.emit({ index: this.index, day });\n }\n\n private setSelectedDate(): void {\n this.selectedDay = parseInt(('0' + this.dateTime.getDate()).slice(-2));\n this.selMonth = parseInt(\n ('0' + this.dateTime.getMonth() + 1).slice(-2)\n );\n this.selectedYear = this.dateTime.getFullYear();\n }\n}","<div class=\"calendar_days\">\n @for (day of days; let indx = $index; track indx) {\n <div\n (click)=\"day && chooseDay(day)\"\n [ngClass]=\"{\n 'selected_day ta-font-bold':\n day === selectedDay &&\n selectedMonthFromInput === selMonth &&\n selectedYearFromInput === selectedYear,\n }\"\n [class.empty_day]=\"!day\"\n [class.day_in_current_month]=\"activeMonth\"\n [class.current_day]=\"\n day === currentDay &&\n year === currentYear &&\n selectedMonth === currentMonth.toString()\n \"\n class=\"calendar_day ta-font-medium\"\n >\n <span>{{ day }}</span>\n </div>\n }\n</div>\n","export enum CalendarMainStringEnum {\n FULL_SIZE = 182,\n CYCLE_HEIGHT = 100 * (12 * FULL_SIZE) + 50,\n CYCLE_HEIGHT_BY_MONTHS = 100 * FULL_SIZE + 65,\n}\n","export enum CalendarStringEnum {\n AUTO = 'auto',\n LEFT = 'left',\n LIST_PREVIEW = 'listPreview',\n MAIN = 'main'\n}\n","export enum CalendarListPreviewStringEnum {\n FULL_LIST = 'full_list',\n MONTH_LIST = 'month_list',\n}","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n OnDestroy,\n forwardRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\n\n// modules\nimport {\n ScrollingModule,\n VIRTUAL_SCROLL_STRATEGY,\n} from '@angular/cdk/scrolling';\n\n// moment\nimport moment from 'moment';\n\n// services\nimport { CalendarDateTimePickerService } from '../../services/calendar-datetime-picker.service';\n\n// components\nimport { CaCustomDateTimePickersCalendarDaysComponent } from '../cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component';\n\n// strategy\nimport {\n CalendarStrategy,\n STARTING_YEAR,\n} from '../../strategy/calendar-strategy';\n\n// enums\nimport { CalendarMainStringEnum } from '../../enums/calendar-main-string.enum';\nimport { CalendarStringEnum } from '../../enums/calendar-string.enum';\nimport { CalendarListPreviewStringEnum } from '../../enums/calendar-list-preview-string.enum';\nimport { CustomDatetimePickersConstants } from '../../utils/constants/custom-datetime-pickers.constants';\n\nfunction factory(dir: CaCustomDateTimePickerCalendarDatesMainComponent) {\n return dir.scrollStrategy;\n}\n\n@Component({\n selector: 'cai-custom-datetime-pickers--calendar-dates-main',\n templateUrl: './cai-custom-datetime-pickers-calendar-dates-main.component.html',\n styleUrls: [\n './cai-custom-datetime-pickers-calendar-dates-main.component.scss',\n ],\n imports: [\n CommonModule,\n FormsModule,\n ScrollingModule,\n CaCustomDateTimePickersCalendarDaysComponent,\n ],\n providers: [\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n useFactory: factory,\n deps: [\n forwardRef(() => CaCustomDateTimePickerCalendarDatesMainComponent),\n ],\n },\n ]\n})\nexport class CaCustomDateTimePickerCalendarDatesMainComponent\n implements OnInit, OnDestroy {\n @Input() months!: Date[];\n @Input() dateTime!: Date;\n @Input() currentIndex!: number;\n @Input() currentYearIndex!: number;\n @Input() activeIndex!: number;\n @Input() monthYearsIndx!: string[];\n\n public _listPreview!: string;\n @Input() set listPreview(value: string) {\n this._listPreview = value;\n this.scrollStrategy.updateScrollHeights(\n value === CalendarListPreviewStringEnum.MONTH_LIST\n ? CalendarMainStringEnum.CYCLE_HEIGHT_BY_MONTHS\n : CalendarMainStringEnum.CYCLE_HEIGHT\n );\n }\n @Input() isMonthAndYearOnly!: boolean;\n @Output() setListPreviewToFull: EventEmitter<number> = new EventEmitter();\n @Output() setAutoIndex: EventEmitter<number> = new EventEmitter();\n\n public scrollStrategy!: CalendarStrategy;\n\n private destroy$ = new Subject<void>();\n\n public monthNames = CustomDatetimePickersConstants.monthNames;\n\n public selectedYear!: number;\n public selectedYearFromInput!: number;\n public selMonth!: number;\n public selectedMonth!: string;\n private activeMonth = 0;\n\n constructor(private calendarService: CalendarDateTimePickerService) {\n this.scrollStrategy = new CalendarStrategy(\n this.calendarService,\n CalendarMainStringEnum.CYCLE_HEIGHT,\n CalendarMainStringEnum.FULL_SIZE,\n CalendarStringEnum.MAIN\n );\n }\n\n ngOnInit(): void {\n this.initScrollListeners();\n }\n\n public initScrollListeners(): void {\n this.selMonth = this.dateTime.getMonth();\n this.selectedYearFromInput = this.dateTime.getFullYear();\n //this.selectedYearFromInput = this.months.getFullYear();\n\n this.calendarService.scrollToAutoIndex\n .pipe(takeUntil(this.destroy$))\n .subscribe((indx) => {\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n indx,\n CalendarStringEnum.AUTO\n );\n });\n });\n\n this.calendarService.scrolledIndexChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n if (\n res.type !== CalendarStringEnum.MAIN &&\n this.calendarService.selectedScroll !==\n CalendarStringEnum.MAIN\n ) {\n const sizeTimes =\n CalendarMainStringEnum.FULL_SIZE / res.cycleSize;\n const newScrollSize = Math.ceil(\n sizeTimes * res.scrollOffset\n );\n this.scrollStrategy.scrollToOffset(\n newScrollSize,\n CalendarStringEnum.AUTO\n );\n }\n });\n\n this.calendarService.scrollToDate\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n setTimeout(() => {\n if (res) {\n const indx = this.findIndexInMonth(res);\n this.scrollStrategy.scrollToIndex(\n indx,\n CalendarStringEnum.AUTO\n );\n } else {\n this.scrollStrategy.scrollToIndex(\n this.currentIndex,\n CalendarStringEnum.AUTO\n );\n }\n }, 200);\n });\n\n if (this.isMonthAndYearOnly) {\n setTimeout(() => {\n this.scrollStrategy.updateScrollHeights(\n CalendarMainStringEnum.CYCLE_HEIGHT_BY_MONTHS\n );\n\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n this.currentYearIndex,\n CalendarStringEnum.AUTO\n );\n }, 200);\n }, 200);\n }\n }\n\n public findIndexInMonth(date: string): number {\n const selectedDate = new Date(date);\n const indexMonth = (selectedDate.getFullYear() - STARTING_YEAR) * 12;\n const indx = indexMonth + selectedDate.getMonth();\n return indx;\n }\n\n public onMonthChange(data: any): void {\n if (this.months[data.indx]) {\n this.selectedYear = this.months[data.indx].getFullYear();\n this.selectedMonth =\n this.monthNames[this.months[data.indx].getMonth()];\n this.activeMonth = data.indx;\n this.calendarService.index$.next(data);\n }\n }\n\n public getMonth(index: number): string {\n return CustomDatetimePickersConstants.monthNames[index];\n }\n\n public mouseOverSetItem() {\n this.calendarService.scrolledScrollItem = CalendarStringEnum.MAIN;\n }\n\n public setCalendarListPreview(num: number, index: number): void {\n this.selMonth = num;\n\n if (this.isMonthAndYearOnly) {\n this.setAutoIndex.emit(num);\n\n const selectedMonth = this.months[index];\n const new_date = moment(\n new Date(selectedMonth.getFullYear(), num + 1, 0)\n ).format();\n this.calendarService.dateChanged.next(new_date);\n } else {\n this.setListPreviewToFull.emit(num);\n }\n }\n\n public selectDay(data: { day: number; index: number }): void {\n const selectedMonth = this.months[data.index];\n const new_date = moment(\n new Date(\n selectedMonth.getFullYear(),\n selectedMonth.getMonth(),\n data.day\n )\n ).format();\n this.calendarService.dateChanged.next(new_date);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div (mouseover)=\"mouseOverSetItem()\">\n <cdk-virtual-scroll-viewport #monthsScrollRef (scrolledIndexChange)=\"onMonthChange($event)\"\n style=\"height: 200px; width: 100%; margin: 0\">\n <ng-container *cdkVirtualFor=\"\n let month of months;\n let indx = index;\n templateCacheSize: 10\n \">\n <div class=\"calendar_indicator ta-font-bold\" [class.full_calendar]=\"_listPreview === 'full_list'\"\n [class.current_year]=\"\n isMonthAndYearOnly\n ? selectedYearFromInput === month.getFullYear()\n : selectedYearFromInput === month.getFullYear() &&\n selMonth === month.getMonth()\n \">\n @if (_listPreview === 'full_list') {\n <span>{{ getMonth(month.getMonth()) }} </span>\n }\n {{ month.getFullYear() }}\n </div>\n @if (_listPreview === 'full_list') {\n <div>\n <cai-custom-datetime-picker-calendar-days (selectDay)=\"selectDay($event)\" [index]=\"indx\" [month]=\"month\"\n [selectedMonth]=\"month.getMonth().toString()\" [year]=\"selectedYear\" [dateTime]=\"dateTime\"\n [activeMonth]=\"\n selectedYearFromInput === month.getFullYear() &&\n selMonth === month.getMonth()\n \"></cai-custom-datetime-picker-calendar-days>\n </div>\n }\n @if (_listPreview === 'month_list') {\n <div>\n <div class=\"month_list\" [class.current_year]=\"\n selectedYearFromInput === month.getFullYear()\n \">\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(0, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 0 === selMonth,\n }\">\n JAN\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(1, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 1 === selMonth,\n }\">\n FEB\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(2, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 2 === selMonth,\n }\">\n MAR\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(3, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 3 === selMonth,\n }\">\n APR\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(4, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 4 === selMonth,\n }\">\n MAY\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(5, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 5 === selMonth,\n }\">\n JUN\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(6, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 6 === selMonth,\n }\">\n JUL\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(7, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 7 === selMonth,\n }\">\n AUG\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(8, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 8 === selMonth,\n }\">\n SEP\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(9, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 9 === selMonth,\n }\">\n OCT\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(10, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 10 === selMonth,\n }\">\n NOV\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(11, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 11 === selMonth,\n }\">\n DEC\n </div>\n </div>\n </div>\n }\n </ng-container>\n </cdk-virtual-scroll-viewport>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\nimport { CustomDatetimePickersConstants } from '../utils/constants/custom-datetime-pickers.constants';\nimport { CalendarListPreviewStringEnum } from '../enums/calendar-list-preview-string.enum';\n\n@Pipe({\n name: 'calendarmonths',\n standalone: true,\n})\nexport class CalendarMonthsPipe implements PipeTransform {\n private MONTHS = CustomDatetimePickersConstants.monthNames;\n\n constructor() {}\n\n transform(index: Date, listPreview: string): string {\n if (\n this.MONTHS[index.getMonth()] === 'January' ||\n listPreview === CalendarListPreviewStringEnum.MONTH_LIST\n )\n return `<span class=\"left-year-show\">${index.getFullYear()}</span>`;\n\n return this.MONTHS[index.getMonth()].slice(0, 3);\n }\n}","export enum CalendarLeftStringEnum {\n FULL_SIZE = 22,\n CYCLE_HEIGHT = 100 * (12 * FULL_SIZE) + 265,\n CYCLE_HEIGHT_BY_MONTHS = 100 * FULL_SIZE + 265,\n}\n","import { Component, forwardRef, Input, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { Subject, takeUntil } from 'rxjs';\n\n// services\nimport { CalendarDateTimePickerService } from '../../services/calendar-datetime-picker.service';\n\n// modules\nimport {\n ScrollingModule,\n VIRTUAL_SCROLL_STRATEGY,\n} from '@angular/cdk/scrolling';\n\n// pipes\nimport { CalendarMonthsPipe } from '../../pipes/calendar-months.pipe';\n\n// strategy\nimport {\n CalendarStrategy,\n STARTING_YEAR,\n} from '../../strategy/calendar-strategy';\n\n// enums\nimport { CalendarLeftStringEnum } from '../../enums/calendar-left-string.enum';\nimport { CalendarListPreviewStringEnum } from '../../enums/calendar-list-preview-string.enum';\nimport { CalendarStringEnum } from '../../enums/calendar-string.enum';\n\nfunction factory(dir: CaCustomDateTimePickersCalendarLeftComponent) {\n return dir.scrollStrategy;\n}\n\n@Component({\n selector: 'cai-custom-datetime-pickers-calendar-left',\n templateUrl: './cai-custom-datetime-pickers-calendar-left.component.html',\n styleUrls: ['./cai-custom-datetime-pickers-calendar-left.component.scss'],\n imports: [CommonModule, FormsModule, ScrollingModule, CalendarMonthsPipe],\n providers: [\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n useFactory: factory,\n deps: [\n forwardRef(() => CaCustomDateTimePickersCalendarLeftComponent),\n ],\n },\n ]\n})\nexport class CaCustomDateTimePickersCalendarLeftComponent\n implements OnInit, OnDestroy\n{\n @Input() months!: Date[];\n @Input() currentIndex!: number;\n @Input() isMonthAndYearOnly: boolean = false;\n\n public _listPreview!: string;\n @Input() set listPreview(value: string) {\n this._listPreview = value;\n this.scrollStrategy.updateScrollHeights(\n value === CalendarListPreviewStringEnum.MONTH_LIST\n ? CalendarLeftStringEnum.CYCLE_HEIGHT_BY_MONTHS\n : CalendarLeftStringEnum.CYCLE_HEIGHT\n );\n }\n\n public _currentYearIndex: number = 0;\n @Input() set currentYearIndex(value: number) {\n this._currentYearIndex = value;\n if (this.isMonthAndYearOnly && this._currentYearIndex)\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n this._currentYearIndex,\n CalendarStringEnum.AUTO\n );\n }, 200);\n }\n\n public _activeIndex: number = 0;\n @Input() set activeIndex(value: number) {\n this._activeIndex = value;\n if (!this.isMonthAndYearOnly && this._activeIndex)\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n this._activeIndex,\n CalendarStringEnum.AUTO\n );\n }, 200);\n }\n public isHovered!: boolean;\n private isFirstCall: boolean = true;\n\n private destroy$ = new Subject<void>();\n\n constructor(private calendarService: CalendarDateTimePickerService) {\n this.scrollStrategy = new CalendarStrategy(\n this.calendarService,\n CalendarLeftStringEnum.CYCLE_HEIGHT,\n CalendarLeftStringEnum.FULL_SIZE,\n CalendarStringEnum.LEFT\n );\n }\n\n scrollStrategy!: CalendarStrategy;\n\n ngOnInit(): void {\n this.initScrollListeners();\n }\n\n public initScrollListeners(): void {\n this.calendarService.scrollToAutoIndex\n .pipe(takeUntil(this.destroy$))\n .subscribe((indx) => {\n this.scrollStrategy.scrollToIndex(\n indx,\n CalendarStringEnum.AUTO\n );\n });\n\n this.calendarService.scrolledIndexChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n if (\n res.type != CalendarStringEnum.LEFT &&\n this.calendarService.selectedScroll !=\n CalendarStringEnum.LEFT\n ) {\n const sizeTimes =\n CalendarLeftStringEnum.FULL_SIZE / res.cycleSize;\n const newScrollSize = sizeTimes * res.scrollOffset;\n this.scrollStrategy.scrollToOffset(\n newScrollSize,\n CalendarStringEnum.AUTO\n );\n }\n });\n\n this.calendarService.scrollToDate\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n setTimeout(() => {\n if (res) {\n const indx = this.findIndexInMonth(res);\n this.scrollStrategy.scrollToIndex(\n indx,\n CalendarStringEnum.AUTO\n );\n } else\n this.scrollStrategy.scrollToIndex(\n this.currentIndex,\n CalendarStringEnum.AUTO\n );\n });\n });\n\n if (this.isMonthAndYearOnly) {\n setTimeout(() => {\n if (this.isFirstCall) {\n this.scrollStrategy.updateScrollHeights(\n CalendarLeftStringEnum.CYCLE_HEIGHT_BY_MONTHS\n );\n\n this.scrollStrategy.scrollToIndex(\n this._currentYearIndex,\n CalendarStringEnum.AUTO\n );\n\n this.isFirstCall = false;\n }\n }, 200);\n }\n }\n\n public findIndexInMonth(date: string): number {\n const selectedDate = new Date(date);\n const indexMonth = (selectedDate.getFullYear() - STARTING_YEAR) * 12;\n const indx = indexMonth + selectedDate.getMonth();\n return indx;\n }\n\n public onScrollChanged(data: any): void {\n this.calendarService.index$.next(data);\n }\n\n public selectMonth(indx: number): void {\n this.scrollStrategy.scrollToIndex(indx, CalendarStringEnum.AUTO);\n }\n\n public mouseOverSetItem(): void {\n this.calendarService.scrolledScrollItem = CalendarStringEnum.LEFT;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}","<div (mouseover)=\"mouseOverSetItem()\">\n <cdk-virtual-scroll-viewport\n #leftSideRef\n (scrolledIndexChange)=\"onScrollChanged($event)\"\n style=\"height: 290px; width: 100%; margin: 0\"\n >\n <ng-container\n *cdkVirtualFor=\"\n let month of months;\n let indx = index;\n templateCacheSize: 10\n \"\n >\n <div\n (click)=\"selectMonth(indx)\"\n class=\"month-year-item ta-font-medium\"\n [ngClass]=\"{\n 'current_month_year ta-font-bold': isMonthAndYearOnly\n ? indx === _currentYearIndex\n : indx === _activeIndex,\n }\"\n [innerHTML]=\"month | calendarmonths: _listPreview\"\n ></div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n</div>\n","import {\n Component,\n Input,\n OnInit,\n Output,\n EventEmitter,\n OnDestroy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { Subject, Subscription, takeUntil } from 'rxjs';\n\n// moment\nimport moment from 'moment';\n\n// services\nimport { CalendarDateTimePickerService } from '../../services/calendar-datetime-picker.service';\n\n// constants\nimport { RANGE, STARTING_YEAR } from '../../strategy/calendar-strategy';\nimport { CustomDatetimePickersConstants } from '../../utils/constants/custom-datetime-pickers.constants';\n\n// components\nimport { CaCustomDateTimePickerCalendarDatesMainComponent } from '../cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component';\nimport { CaCustomDateTimePickersCalendarLeftComponent } from '../cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component';\n\n// enums\nimport { CalendarListPreviewStringEnum } from '../../enums/calendar-list-preview-string.enum';\n\n@Component({\n selector: 'cai-custom-datetime-pickers-date-calendars',\n templateUrl: './cai-custom-datetime-pickers-date-calendars.component.html',\n styleUrls: ['./cai-custom-datetime-pickers-date-calendars.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n CaCustomDateTimePickerCalendarDatesMainComponent,\n CaCustomDateTimePickersCalendarLeftComponent,\n ]\n})\nexport class CaCustomDateTimePickersDateCalendarsComponent\n implements OnInit, OnDestroy\n{\n @Input() listPreview!: string;\n @Input() dateTime!: Date;\n @Input() isMonthAndYearOnly: boolean = false;\n @Output() setListPreviewValue = new EventEmitter();\n\n private currentYear: number = new Date().getFullYear();\n private currentMonth: number = new Date().getMonth();\n private activeMonth: number = 0;\n private subscription?: Subscription;\n private destroy$ = new Subject<void>();\n private monthNames: string[] = CustomDatetimePickersConstants.monthNames;\n public dayOfWeekLetters: string[] =\n CustomDatetimePickersConstants.dayOfWeekLetters;\n\n public activeIndex: number = 0;\n public currentIndex!: number;\n public currentYearIndex!: number;\n public monthYearsIndx: string[] = [];\n public months: Date[] = Array.from({ length: RANGE }, (_, i) => {\n const year = STARTING_YEAR + Math.floor(i / 12);\n const month = i % 12;\n if (year === this.currentYear && month === this.currentMonth) {\n this.currentIndex = i;\n this.activeIndex = i;\n }\n const sendDate = new Date(year, month, 1);\n this.monthYearsIndx.push(moment(sendDate).format('MM/DD/YY'));\n return sendDate;\n });\n\n public justYears: Date[] = Array.from({ length: 100 }, (_, i) => {\n const year = STARTING_YEAR + i;\n if (year === this.currentYear) this.currentYearIndex = i;\n\n return new Date(STARTING_YEAR + i, 1, 1);\n });\n\n public selectedYear!: number;\n public selectedMonth!: string;\n\n constructor(private calendarService: CalendarDateTimePickerService) {}\n\n ngOnInit(): void {\n this.initInitalState();\n this.initScrollListener();\n }\n\n public initScrollListener(): void {\n this.calendarService.scrolledIndexChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((res: { indx: number }) => {\n this.activeIndex = res.indx;\n this.onMonthChange(res.indx);\n });\n }\n\n public initInitalState(): void {\n this.selectedMonth = this.monthNames[this.dateTime.getMonth()];\n this.selectedYear = this.dateTime.getFullYear();\n\n if (this.calendarService.selectedIndex)\n this.activeIndex = this.calendarService.selectedIndex;\n\n if (this.isMonthAndYearOnly)\n this.currentYearIndex = this.justYears.findIndex(\n (year) => year.getFullYear() === this.selectedYear\n );\n }\n\n public onMonthChange(month: number): void {\n this.listPreview === CalendarListPreviewStringEnum.FULL_LIST\n ? (this.selectedYear = this.months[month].getFullYear())\n : (this.selectedYear = this.justYears[month].getFullYear());\n\n this.selectedMonth = this.monthNames[this.months[month].getMonth()];\n this.activeMonth = month;\n }\n\n public getMonth(index: number): string {\n return CustomDatetimePickersConstants.monthNames[index];\n }\n\n public setListPreview(): void {\n if (this.listPreview === CalendarListPreviewStringEnum.FULL_LIST) {\n this.setListPreviewValue.emit(\n CalendarListPreviewStringEnum.MONTH_LIST\n );\n this.calendarService.setAutoIndex = Math.floor(\n this.activeIndex / 12\n );\n }\n }\n\n public setListPreviewToFull(num: number): void {\n this.setListPreviewValue.emit(CalendarListPreviewStringEnum.FULL_LIST);\n this.setAutoIndex(num);\n }\n\n public setAutoIndex(num: number): void {\n this.calendarService.setAutoIndex = this.activeIndex * 12 + num;\n }\n\n public selectCurrentDay(): void {\n const new_date = moment(new Date()).format();\n this.calendarService.dateChanged.next(new_date);\n this.setListPreviewValue.emit(CalendarListPreviewStringEnum.FULL_LIST);\n }\n\n ngOnDestroy() {\n if (this.subscription) this.subscription.unsubscribe();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div class=\"d-flex\">\n <div class=\"month-years-size\">\n <div class=\"calendar_border\"></div>\n <cai-custom-datetime-pickers-calendar-left\n [currentIndex]=\"currentIndex\"\n [currentYearIndex]=\"currentYearIndex\"\n [activeIndex]=\"activeIndex\"\n [months]=\"listPreview === 'full_list' ? months : justYears\"\n [listPreview]=\"listPreview\"\n [isMonthAndYearOnly]=\"isMonthAndYearOnly\"\n >\n </cai-custom-datetime-pickers-calendar-left>\n </div>\n <div class=\"full-calendars-list\">\n <div class=\"full_list\">\n <div class=\"calendar_view\">\n <div class=\"calendar_view_head\">\n <div class=\"month_name ta-font-bold\">\n <span (click)=\"setListPreview()\" class=\"year_hold\">\n @if (listPreview === 'full_list') {\n <span>{{ selectedMonth }}</span>\n }\n {{ selectedYear }}\n </span>\n </div>\n <div\n class=\"today ta-font-bold\"\n (click)=\"selectCurrentDay()\"\n >\n Today\n </div>\n </div>\n <div class=\"calendars_list_view\">\n <div\n class=\"calendar_month_days\"\n [class.hideVisibility]=\"listPreview != 'full_list'\"\n >\n @for (\n dayLetter of dayOfWeekLetters;\n let indx = $index;\n track indx\n ) {\n <div class=\"cal_day ta-font-bold\">\n {{ dayLetter }}\n </div>\n }\n </div>\n <cai-custom-datetime-pickers--calendar-dates-main\n [currentIndex]=\"currentIndex\"\n [currentYearIndex]=\"currentYearIndex\"\n [activeIndex]=\"activeIndex\"\n [monthYearsIndx]=\"monthYearsIndx\"\n [months]=\"\n listPreview === 'full_list' ? months : justYears\n \"\n [listPreview]=\"listPreview\"\n [dateTime]=\"dateTime\"\n [isMonthAndYearOnly]=\"isMonthAndYearOnly\"\n (setListPreviewToFull)=\"setListPreviewToFull($event)\"\n (setAutoIndex)=\"setAutoIndex($event)\"\n ></cai-custom-datetime-pickers--calendar-dates-main>\n </div>\n </div>\n </div>\n </div>\n</div>\n","export enum CalendarTypeStringEnum {\n TIME = 'time',\n}\n","export enum CalendarScrollTypeStringEnum {\n HOURS_SCROLL = 'hourScroll',\n PM_AM_SCROLL = 'pmAmScroll',\n}","export enum InputConfigNameStringEnum {\n DATE_PICKER = 'datepicker',\n TIME_PICKER = 'timepicker',\n DATE_PICKER_BANK_CARD = 'datepickerBankCard',\n INPUT_DROPDOWN_BANK_NAME = 'Input Dropdown Bank Name',\n ADDRESS = 'Address'\n } ","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef,\n OnDestroy,\n AfterViewInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n// moment\nimport moment from 'moment';\n\n// services\nimport { CalendarDateTimePickerService } from './services/calendar-datetime-picker.service';\n\n// components\nimport { CaCustomDateTimePickersDateCalendarsComponent } from './components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component';\n\n// constants\nimport { CustomDatetimePickersConstants } from './utils/constants/custom-datetime-pickers.constants';\n\n// models\nimport { ScrollType } from './models/scroll-type.model';\n\n// enums\nimport { CalendarTypeStringEnum } from './enums/calendar-type-string.enum';\nimport { CalendarListPreviewStringEnum } from './enums/calendar-list-preview-string.enum';\nimport { CalendarScrollTypeStringEnum } from './enums/calendar-scroll-type-string.enum';\nimport { ICaInput } from './config';\nimport { InputConfigNameStringEnum } from './enums/config.enum';\n\n@Component({\n selector: 'cai-custom-datetime-pickers',\n templateUrl: './cai-custom-datetime-pickers.component.html',\n styleUrls: ['./cai-custom-datetime-pickers.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n CaCustomDateTimePickersDateCalendarsComponent\n ]\n})\nexport class CaCustomDatetimePickersComponent\n implements OnInit, OnDestroy, AfterViewInit {\n @Input() dateTime!: Date;\n @ViewChild('ref', { read: ViewContainerRef }) ref!: ViewContainerRef;\n public _inputConfig!: ICaInput;\n @Input() set inputConfig(config: ICaInput) {\n this._inputConfig = config;\n if (\n this._inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n )\n this.listPreview = CalendarListPreviewStringEnum.MONTH_LIST;\n\n if (this._inputConfig.minutesGapFive)\n this.timeMinutes =\n CustomDatetimePickersConstants.timeMinutesGapFive;\n else this.timeMinutes = CustomDatetimePickersConstants.timeMinutes;\n }\n\n @Output() closePopover: EventEmitter<Date> = new EventEmitter();\n\n @ViewChild(CaCustomDateTimePickersDateCalendarsComponent)\n dateCalendar!: CaCustomDateTimePickersDateCalendarsComponent;\n @ViewChild('pmAmScroll') pmAmScroll!: ElementRef;\n @ViewChild('minutesScroll') minutesScroll!: ElementRef;\n @ViewChild('hourScroll') hourScroll!: ElementRef;\n\n public selectedDateTime!: string;\n public calendarMainType!: string;\n public outputType!: (string | number)[];\n public currentYear: number = new Date().getFullYear();\n public currentMonth: number = new Date().getMonth();\n public currentDay: number = new Date().getDate();\n public listPreview: string = CalendarListPreviewStringEnum.FULL_LIST;\n public timeMinutes!: string[];\n public monthArray: number[] = new Array(12)\n .fill(0)\n .map((_, indx) => indx + 1);\n public monthDayList: number[] = new Array(31)\n .fill(0)\n .map((_, indx) => indx + 1);\n public yearsList: (string | number)[] = new Array(100)\n .fill(0)\n .map((_, idx) => (idx < 10 ? '0' + idx : idx));\n public scrollTimer!: ReturnType<typeof setTimeout> | number;\n public hoveredItem!: string | null;\n public isInputFocus!: boolean;\n public monthNames: string[] = CustomDatetimePickersConstants.monthNames;\n public hourTimes: number[] = CustomDatetimePickersConstants.hourTimes;\n public scrollTypes: ScrollType =\n CustomDatetimePickersConstants.defaultScrollTypes;\n public selectedTime: string =\n CustomDatetimePickersConstants.defaultSelectedTime;\n public timeOfDay: string[] = CustomDatetimePickersConstants.timeOfDay;\n\n public previousRangeSide!: boolean;\n\n constructor(private calendarService: CalendarDateTimePickerService) { }\n\n @Input()\n set calendarType(calendarType: string) {\n this.calendarMainType = calendarType;\n if (calendarType === CalendarTypeStringEnum.TIME)\n this.outputType =\n CustomDatetimePickersConstants.defaultOutputTypeTime;\n else\n this.outputType =\n CustomDatetimePickersConstants.defaultOutputTypeDate;\n }\n\n @Input()\n set placeholder(placeholder: string) {\n this.selectedDateTime = placeholder;\n }\n\n ngOnInit(): void {\n this.initDateChangedListener();\n }\n\n ngAfterViewInit(): void {\n this.setTimeValue();\n this.changeOpened();\n }\n\n public initDateChangedListener(): void {\n this.calendarService.dateChanged.subscribe((date) => {\n if (this.calendarMainType !== CalendarTypeStringEnum.TIME) {\n this.outputType[0] = date[0];\n this.outputType[2] = date[1];\n this.outputType[4] = date[2];\n this.selectedDateTime = this.createStringFromOutput();\n }\n });\n }\n\n public setTimeValue() {\n const dateInputArray = moment(this.dateTime)\n .format('h/mm/A')\n .split('/');\n\n console.log(dateInputArray, 'this.inputConfig');\n\n setTimeout(() => {\n this.scrollTypes.hourScroll = this.hourTimes.indexOf(\n parseInt(dateInputArray[0])\n );\n this.scrollTypes.minutesScroll = this.timeMinutes.indexOf(\n dateInputArray[1]\n );\n\n this.scrollTypes.pmAmScroll = dateInputArray[2] === 'AM' ? 0 : 1;\n });\n }\n\n public setListPreview(value: string): void {\n this.listPreview = value;\n }\n\n public inputInFocus(): void {\n this.isInputFocus = true;\n }\n\n public inputBlur(): void {\n this.isInputFocus = false;\n }\n\n public changeOpened(): void {\n // this.isInputFocus = e;\n // if (e) {\n if (this.calendarMainType === CalendarTypeStringEnum.TIME) {\n setTimeout(() => {\n this.hourScroll.nativeElement.scrollTop =\n this.scrollTypes.hourScroll * 22;\n this.minutesScroll.nativeElement.scrollTop =\n this.scrollTypes.minutesScroll * 22;\n this.pmAmScroll.nativeElement.scrollTop =\n this.scrollTypes.pmAmScroll * 22;\n });\n } else {\n let test = `${this.dateTime.getMonth() + 1\n }/${this.dateTime.getDate()}/${this.dateTime.getFullYear()}`;\n\n this.calendarService.scrollToDate.next(\n `${this.dateTime.getMonth() + 1\n }/${this.dateTime.getDate()}/${this.dateTime.getFullYear()}`\n );\n }\n }\n\n public setTime(): void {\n this.outputType[0] = this.hourTimes[this.scrollTypes.hourScroll];\n this.outputType[2] = this.timeMinutes[this.scrollTypes.minutesScroll];\n this.outputType[4] = this.timeOfDay[this.scrollTypes.pmAmScroll];\n\n this.selectedDateTime = this.createStringFromOutput();\n\n let currentDate = moment().format('MM/DD/YYYY');\n\n // this.calendarService.dateChanged.next(\n // new Date(currentDate + ' ' + this.selectedDateTime)\n // );\n\n this.closePopover.emit(new Date(currentDate + ' ' + this.selectedDateTime));\n }\n\n public setDefaultTime(): void {\n let currentDate = moment().format('MM/DD/YYYY');\n //this.calendarService.dateChanged.next(new Date(currentDate + ' 08:00'));\n\n this.closePopover.emit(new Date(currentDate + ' 08:00'));\n }\n\n public closePopup(): void {\n this.closePopover.emit();\n }\n\n public createStringFromOutput(): string {\n return this.outputType.join('');\n }\n\n public onScroll(\n event: Event,\n type: keyof ScrollType,\n index: number | null = null\n ): void {\n\n const scrolFromTop = Math.floor(\n (event.target as HTMLElement).scrollTop\n );\n const scrollIndex =\n index === null ? Math.floor(scrolFromTop / 22) : index;\n const scrollRemaining = scrolFromTop % 22;\n clearInterval(this.scrollTimer);\n this.scrollTimer = setTimeout(() => {\n if (scrollRemaining < 11 && index === null) {\n (event.target as HTMLElement).scrollTop = scrollIndex * 22;\n this.scrollTypes[type] = scrollIndex;\n } else if (index !== null) {\n (<HTMLElement>(\n (<HTMLElement>event.target).parentNode\n )).scrollTop = scrollIndex * 22;\n this.scrollTypes[type] = scrollIndex;\n } else {\n (event.target as HTMLElement).scrollTop =\n (scrollIndex + 1) * 22;\n this.scrollTypes[type] = scrollIndex + 1;\n }\n\n this.checkForScrolledType(type);\n }, 200);\n }\n\n public checkForScrolledType(type: string): void {\n if (type === CalendarScrollTypeStringEnum.HOURS_SCROLL) {\n if (this.scrollTypes[type] >= 12) {\n this.pmAmScroll.nativeElement.scrollTop = 22;\n this.scrollTypes.pmAmScroll = 1;\n } else {\n this.pmAmScroll.nativeElement.scrollTop = 0;\n this.scrollTypes.pmAmScroll = 0;\n }\n }\n\n if (type === CalendarScrollTypeStringEnum.PM_AM_SCROLL) {\n if (this.scrollTypes[type] === 0) {\n if (this.scrollTypes.hourScroll >= 12) {\n this.hourScroll.nativeElement.scrollTop =\n (this.scrollTypes.hourScroll - 12) * 22;\n this.scrollTypes.hourScroll = Math.floor(\n this.scrollTypes.hourScroll - 12\n );\n }\n } else {\n if (this.scrollTypes.hourScroll < 12) {\n this.hourScroll.nativeElement.scrollTop =\n (this.scrollTypes.hourScroll + 12) * 22;\n this.scrollTypes.hourScroll = Math.floor(\n this.scrollTypes.hourScroll + 12\n );\n }\n }\n }\n\n this.selectedTime = this.timeMinutes[this.scrollTypes.minutesScroll] ? `${this.hourTimes[this.scrollTypes.hourScroll]}:${this.timeMinutes[this.scrollTypes.minutesScroll]\n } ${this.timeOfDay[this.scrollTypes.pmAmScroll]}` : '';\n }\n\n ngOnDestroy() {\n this.listPreview = CalendarListPreviewStringEnum.FULL_LIST;\n }\n}","<div class=\"temp_inp_holder\">\n <div>\n <div class=\"pickers_holder dark_picker\">\n @if (calendarMainType === 'date') {\n <div class=\"date_picker\">\n <cai-custom-datetime-pickers-date-calendars [listPreview]=\"listPreview\" [dateTime]=\"dateTime\"\n [isMonthAndYearOnly]=\"\n _inputConfig.name === 'datepickerBankCard'\n \"\n (setListPreviewValue)=\"setListPreview($event)\"></cai-custom-datetime-pickers-date-calendars>\n </div>\n }\n @if (calendarMainType === 'time') {\n <div class=\"time_picker\">\n <div class=\"time_picker_head d-flex\">\n <div class=\"selected_time ta-font-bold\">\n {{ selectedTime || (dateTime | date : 'hh:mm aa') }}\n </div>\n <div class=\"sel_now ta-font-bold\" (click)=\"setDefaultTime()\">\n Default\n </div>\n </div>\n <div class=\"time_picker_body\">\n <div class=\"picker_body_head\">\n <div class=\"ta-font-bold\" [class.active]=\"hoveredItem === 'hours'\">\n Hour\n </div>\n <div class=\"ta-font-bold\" [class.active]=\"hoveredItem === 'minutes'\">\n Minute\n </div>\n <div class=\"ta-font-bold\" [class.active]=\"hoveredItem === 'times'\">\n AM/PM\n </div>\n </div>\n <div class=\"picker_body\">\n <div #hourScroll (mouseout)=\"hoveredItem = null\" (mouseover)=\"hoveredItem = 'hours'\"\n (scroll)=\"onScroll($event, 'hourScroll')\" class=\"scroll_pickers\">\n @for (\n hour of hourTimes;\n let indx = $index;\n track indx\n ) {\n <div class=\"scroll_item ta-font-medium\" [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.hourScroll === indx,\n }\" (click)=\"\n onScroll($event, 'hourScroll', indx)\n \">\n {{ hour }}\n </div>\n }\n </div>\n <div #minutesScroll (mouseout)=\"hoveredItem = null\" (mouseover)=\"hoveredItem = 'minutes'\"\n (scroll)=\"onScroll($event, 'minutesScroll')\" class=\"scroll_pickers\">\n @for (\n minutes of timeMinutes;\n let indx = $index;\n track indx\n ) {\n <div class=\"scroll_item ta-font-medium\" [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.minutesScroll ===\n indx,\n }\" (click)=\"\n onScroll(\n $event,\n 'minutesScroll',\n indx\n )\n \">\n {{ minutes }}\n </div>\n }\n </div>\n <div #pmAmScroll (mouseout)=\"hoveredItem = null\" (mouseover)=\"hoveredItem = 'times'\"\n (scroll)=\"onScroll($event, 'pmAmScroll')\" class=\"scroll_pickers\">\n @for (\n when of timeOfDay;\n let indx = $index;\n track indx\n ) {\n <div class=\"scroll_item ta-font-medium\" [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.pmAmScroll === indx,\n }\" (click)=\"\n onScroll($event, 'pmAmScroll', indx)\n \">\n {{ when }}\n </div>\n }\n </div>\n <div class=\"picker_line\">\n <span class=\"border_line\"></span>\n <span class=\"border_line line_2\"></span>\n </div>\n </div>\n <div class=\"picker_buttons\">\n <div (click)=\"closePopup()\" class=\"pick_button ta-font-bold\">\n Cancel\n </div>\n <div (click)=\"setTime()\" class=\"pick_button set_button ta-font-bold\">\n Set\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>","export enum InputConfigNameStringEnum {\n DATE_PICKER = 'datepicker',\n TIME_PICKER = 'timepicker',\n DATE_PICKER_BANK_CARD = 'datepickerBankCard',\n INPUT_DROPDOWN_BANK_NAME = 'Input Dropdown Bank Name',\n ADDRESS = 'Address'\n}","export enum eGeneralActions {\n ADD = 'Add',\n ADD_LOWERCASE = 'add',\n ADD_NEW_ITEM = 'Add New Item',\n UPDATE = 'Update',\n UPDATE_LOWERCASE = 'update',\n DELETE = 'Delete',\n DELETE_LOWERCASE = 'delete',\n EDIT = 'Edit',\n EDIT_LOWERCASE = 'edit',\n EDIT_UPPERCASE = 'EDIT',\n\n SAVE = 'Save',\n SAVE_LOWERCASE = 'save',\n CANCEL = 'Cancel',\n CANCEL_LOWERCASE = 'cancel',\n ENTER = 'Enter',\n ESCAPE = 'Escape',\n CONFIRM = 'Confirm',\n CONFIRM_LOWERCASE = 'confirm',\n SET = 'Set',\n SET_LOWERCASE = 'set',\n REMOVE = 'Remove',\n REMOVE_LOWERCASE = 'remove',\n\n SELECT = 'Select',\n SELECT_LOWERCASE = 'select',\n SEARCH = 'Search',\n SEARCH_LOWERCASE = 'search',\n\n SELECT_ALL = 'Select All',\n SELECT_REMAINING = 'Select Remaining',\n CLEAR_SELECTED = 'Clear Selected',\n\n ACTIVATE = 'Activate',\n ACTIVATE_LOWERCASE = 'activate',\n DEACTIVATE = 'deactivate',\n DEACTIVATE_LOWERCASE = 'deactivate',\n\n CLOSE = 'Close',\n CLOSE_LOWERCASE = 'close',\n CLOSE_UPPERCASE = 'CLOSE',\n OPEN = 'Open',\n OPEN_LOWERCASE = 'open',\n\n NEXT = 'Next',\n NEXT_LOWERCASE = 'next',\n PREVIOUS = 'Previous',\n PREVIOUS_LOWERCASE = 'previous',\n\n CLEAR = 'Clear',\n CLEAR_LOWERCASE = 'clear',\n CLEAR_ALL = 'Clear All',\n\n SHOW_MORE = 'show more',\n\n OPEN_MODAL = 'open-modal',\n\n EXPAND = 'Expand',\n EXPAND_LOWERCASE = 'expand',\n EXPAND_UPPERCASE = 'EXPAND',\n\n COLLAPSE = 'Collapse',\n COLLAPSE_LOWERCASE = 'collapse',\n COLLAPSE_UPPERCASE = 'COLLAPSE',\n\n SORT_BY = 'Sort By',\n\n COPY = 'Copy',\n COPIED = 'Copied',\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n Renderer2,\n} from \"@angular/core\";\n\n@Directive({\n selector: \"[appHoverSvg]\",\n standalone: true,\n})\nexport class HoverSvgDirective {\n @Input() set fill(value: string | null | undefined) {\n if (value) {\n this._fill = value;\n\n this.renderer2.setStyle(this.elRef.nativeElement, \"fill\", this._fill);\n }\n }\n\n @Input() set fillHover(value: string | null | undefined) {\n if (value) {\n this._fillHover = value;\n }\n }\n\n public _fill: string = \"\";\n public _fillHover: string = \"\";\n\n constructor(\n private elRef: ElementRef,\n private renderer2: Renderer2\n ) {}\n\n @HostListener(\"mouseover\")\n onMouseOver() {\n this.renderer2.setStyle(\n this.elRef.nativeElement,\n \"fill\",\n this._fillHover ? this._fillHover : this._fill\n );\n }\n\n @HostListener(\"mouseleave\")\n onMouseLeave() {\n this.renderer2.setStyle(this.elRef.nativeElement, \"fill\", this._fill);\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n// Imports\nimport moment from 'moment';\nimport { NgbModule, NgbPopover } from '@ng-bootstrap/ng-bootstrap';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AngularSvgIconModule } from 'angular-svg-icon';\n\n// Pipe\nimport { InputDropdownArrowClassPipe } from './pipes/input-dropdown-arrow-class.pipe';\nimport { InputPlaceholderIconClassPipe } from './pipes/input-placeholder-icon.class.pipe';\nimport { InputClearClassPipe } from './pipes/input-clear-class.pipe';\nimport { ShowClearPipe } from './pipes/show-clear.pipe';\nimport { InputDateTimeContainerClassPipe } from './pipes/input-date-time-container-class.pipe';\n\n// Components\nimport { CaCustomDatetimePickersComponent } from './components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component';\n\n// Enums\nimport { InputConfigNameStringEnum } from './enums/input-config-name-string.enum';\nimport { eGeneralActions } from '../../enums/general-actions.enum';\n\n// Services\nimport { CalendarDateTimePickerService } from './components/cai-custom-datetime-pickers/services/calendar-datetime-picker.service';\n\n// Directives\nimport { HoverSvgDirective } from '../../directives';\n\n// Models\nimport { ICaInput } from './components/cai-custom-datetime-pickers/config';\n\n// Types\nexport type InputChangeValue = string | number | Date;\n\n@Component({\n selector: 'cai-input-datetime-picker',\n templateUrl: './cai-input-datetime-picker.component.html',\n styleUrls: [\n './cai-input-datetime-picker.component.scss'\n ],\n imports: [\n // modules\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n AngularSvgIconModule,\n NgbModule,\n // components\n CaCustomDatetimePickersComponent,\n // pipes\n InputDateTimeContainerClassPipe,\n InputPlaceholderIconClassPipe,\n InputDropdownArrowClassPipe,\n InputClearClassPipe,\n ShowClearPipe,\n // Directives\n HoverSvgDirective,\n ],\n providers: [CalendarDateTimePickerService],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CaiInputDatetimePickerComponent\n implements AfterViewInit, ControlValueAccessor, OnDestroy {\n @Input() inputConfig!: ICaInput;\n @Input() formFormat?: string;\n\n @Output('clear') clearInputEvent: EventEmitter<boolean> =\n new EventEmitter<boolean>();\n @Output('blurInput') blurInputEvent: EventEmitter<boolean> =\n new EventEmitter<boolean>();\n\n @ViewChild('dateTimePopover') dateTimePopover!: NgbPopover;\n @ViewChild(\"t2\") t2!: NgbPopover;\n\n\n public showDateInput: boolean = false;\n public dateTimeInputDate: Date = new Date();\n public dateTimeIntDate: Date = new Date();\n public selectionInput: number = -1;\n\n // Timers\n private dateTimeMainTimer!: ReturnType<typeof setTimeout> | number;\n private focusBlur!: ReturnType<typeof setTimeout> | number;\n private timeoutCleaner!: ReturnType<typeof setTimeout> | number;\n\n // Component properties\n public eGeneralActions = eGeneralActions;\n public isTouchedInput: boolean = false;\n public isFocusInput: boolean = false;\n public preventBlur: boolean = false;\n public valueAfterWriteValue!: string;\n // Date\n public newInputChanged: boolean = false;\n\n // Outputs\n @Output() selectLastOneForSelectionEmitter = new EventEmitter<boolean>();\n @Output() selectLastOneAfterMouseUpEmitter = new EventEmitter<boolean>();\n @Output() onDatePasteEmitter = new EventEmitter<ClipboardEvent>();\n @Output() onFocusEmitter = new EventEmitter<FocusEvent>();\n @Output() changeSelectionEmmiter = new EventEmitter<{\n e: KeyboardEvent;\n noPreventDefault: boolean;\n }>();\n @Output() setSelectionEmmiter = new EventEmitter<{\n preventDefault: () => void;\n stopPropagation: () => void;\n target: any;\n }>();\n\n // View Children\n @ViewChild('span1', { static: true }) span1!: ElementRef;\n @ViewChild('span2', { static: true }) span2!: ElementRef;\n @ViewChild('span3', { static: true }) span3!: ElementRef;\n @ViewChild('holder1', { static: true }) holder1!: ElementRef;\n\n // Private\n private destroy$: Subject<void> = new Subject<void>();\n\n constructor(\n @Self() public superControl: NgControl,\n private calendarService: CalendarDateTimePickerService\n ) {\n this.superControl.valueAccessor = this;\n }\n\n ngOnInit(): void { }\n\n // Control Value Accessor\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public onChange(_: InputChangeValue): void { }\n\n public onTouched = (): void => { };\n\n public writeValue(obj: InputChangeValue): void {\n if (obj) this.setTimeDateInput(obj, true);\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public blurInput(): void {\n this.isFocusInput = false;\n }\n\n public ngAfterViewInit(): void {\n if (this.valueAfterWriteValue) {\n this.setTimeDateInput(this.valueAfterWriteValue);\n } else {\n this.setTimePickerTime();\n }\n\n this.calendarService.dateChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe((date) => {\n if (!this.inputConfig.isDisabled) {\n this.setTimeDateInput(date);\n this.t2.close();\n }\n });\n }\n\n get getSuperControl() {\n return this.superControl.control;\n }\n\n // 05/05/2025\n public onDatePaste(event: ClipboardEvent): void {\n event.preventDefault();\n\n const pasteText = event.clipboardData?.getData('text') as string;\n const pastedDate = new Date(pasteText);\n if (!isNaN(pastedDate.getTime())) {\n this.setTimeDateInput(pastedDate);\n this.selectSpanByTabIndex(this.selectionInput);\n }\n }\n\n changeSelection(e: any, noPreventDefault = false): void {\n\n e.preventDefault();\n e.stopPropagation();\n const isCtrlV = (e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'v';\n\n if (isCtrlV) {\n // Allow paste\n return;\n }\n\n if (\n e.keyCode == 37 ||\n e.keyCode == 38 ||\n e.keyCode == 39 ||\n e.keyCode == 40 ||\n e.keyCode == 8 ||\n e.keyCode == 9 ||\n e.keyCode == 46 ||\n (this.selectionInput == 3 && this.inputConfig.name === 'timepicker')\n ) {\n !e.noPrevent && e.preventDefault();\n if (e.keyCode == 37) {\n this.selectionInput = this.selectionInput <= 0 ? 0 : this.selectionInput - 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n } else if (e.keyCode == 39 || e.keyCode == 9) {\n if (\n ((this.inputConfig.name === 'datepickerBankCard' &&\n this.selectionInput != 1) ||\n (this.inputConfig.name !== 'datepickerBankCard' &&\n this.selectionInput != 2)) &&\n !e.shiftKey\n ) {\n this.selectionInput = this.selectionInput + 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n } else if (e.keyCode == 9 && !e.shiftKey) {\n let allInputs = document.querySelectorAll(\n 'input.input-control'\n ) as NodeListOf<HTMLInputElement>;\n [...(allInputs as any)].map((item, indx) => {\n // if (\n // item ===\n // this.caInputComponent.inputElement.nativeElement\n // ) {\n // if (allInputs[indx + 1]) {\n // allInputs[indx + 1].focus();\n // } else {\n // this.blurOnDateTime();\n // }\n // this.selectionInput = -1;\n // return;\n // }\n });\n } else if (\n e.shiftKey &&\n e.keyCode == 9 &&\n this.selectionInput != 0\n ) {\n if (this.selectionInput == -1) {\n this.selectionInput = 3;\n }\n this.selectionInput = this.selectionInput - 1;\n this.selectSpanByTabIndex(this.selectionInput);\n } else if (\n e.shiftKey &&\n e.keyCode == 9 &&\n this.selectionInput == 0\n ) {\n let allInputs = document.querySelectorAll('input');\n [...(allInputs as any)].map((item, indx) => {\n // if (\n // item ===\n // this.caInputComponent.inputElement.nativeElement\n // ) {\n // if (allInputs[indx - 1]) {\n // allInputs[indx - 1].focus();\n // }\n // this.selectionInput = -1;\n // return;\n // }\n });\n }\n } else if (e.keyCode == 38) {\n this.setDateTimeModel('up');\n } else if (e.keyCode == 40) {\n this.setDateTimeModel('down');\n } else if (e.keyCode == 8 || e.keyCode == 46) {\n this.handleKeyboardInputs(e, true);\n }\n } else if (!this.isNumber(e)) {\n if (!noPreventDefault) {\n e.preventDefault();\n }\n } else {\n if (!noPreventDefault) {\n e.preventDefault();\n }\n if (this.selectionInput == -1) {\n this.selectionInput = 0;\n }\n\n this.handleKeyboardInputs(e);\n }\n }\n\n public changeSelectionTwo(\n event: KeyboardEvent,\n noPreventDefault = false\n ): void {\n if (!noPreventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const isNavigationKey = this.isNavigationKey(event);\n const isSpecialTimePickerKey =\n this.selectionInput === 3 &&\n this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER;\n\n if (isNavigationKey || isSpecialTimePickerKey) {\n event.preventDefault();\n this.handleNavigationKey(event);\n } else if (!this.isNumber(event)) {\n if (!noPreventDefault) event.preventDefault();\n else {\n if (!noPreventDefault) event.preventDefault();\n\n if (this.selectionInput === -1) this.selectionInput = 0;\n this.handleKeyboardInputs(event);\n }\n }\n }\n\n private isNumber(evt: KeyboardEvent): boolean {\n evt = evt ? evt : (window.event as KeyboardEvent);\n let charCode = evt.which ? evt.which : evt.keyCode;\n return (\n (charCode >= 48 && charCode <= 57) ||\n (charCode >= 96 && charCode <= 105)\n );\n }\n\n private isNavigationKey(e: KeyboardEvent): boolean {\n const navigationKeys = [37, 38, 39, 40, 8, 9, 46]; // Arrow keys, Backspace, Tab, Delete\n return navigationKeys.includes(e.keyCode);\n }\n\n public onFocus(event?: FocusEvent): void {\n this.onFocusEmitter.emit(event);\n }\n\n public closePopover(date: Date): void {\n if (date) {\n this.setTimeDateInput(date);\n }\n this.t2?.close();\n }\n\n public handleFocusInput(e: Event) {\n const event = e as FocusEvent;\n\n if (!this.inputConfig.isDisabled) {\n clearTimeout(this.dateTimeMainTimer);\n clearTimeout(this.focusBlur);\n this.showDateInput = true;\n if (\n (this.selectionInput === -1 &&\n (event?.target as HTMLElement)?.nodeName === 'INPUT') ||\n (event?.relatedTarget as HTMLElement)?.nodeName === 'INPUT' ||\n event?.relatedTarget === null\n ) {\n this.preventBlur = true;\n this.holder1.nativeElement.focus();\n this.setSpanSelection(this.holder1.nativeElement);\n this.selectionInput = -1;\n }\n\n this.t2.toggle();\n }\n }\n\n public setSpanSelection(element: Node): void {\n let range: Range;\n let selection: Selection | null;\n\n if (window.getSelection && document.createRange) {\n selection = window.getSelection();\n range = document.createRange();\n range.selectNodeContents(element);\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n }\n\n public setSelection(event: {\n preventDefault: () => void;\n stopPropagation: () => void;\n target: any;\n }): void {\n const element = event.target;\n\n const selectionInput = parseInt(element.getAttribute('tabindex'));\n\n const currentSelection = window.getSelection();\n\n if (currentSelection && currentSelection.toString().length > 10) {\n this.holder1.nativeElement.focus();\n this.selectionInput = 0;\n this.setSpanSelection(this.holder1.nativeElement);\n clearTimeout(this.dateTimeMainTimer);\n clearTimeout(this.focusBlur);\n return;\n }\n\n clearTimeout(this.dateTimeMainTimer);\n if (element.classList.contains('main')) {\n this.selectionInput = selectionInput;\n this.setSpanSelection(element);\n } else {\n if (this.selectionInput === -1) {\n this.holder1.nativeElement.focus();\n this.selectionInput = 0;\n this.setSpanSelection(this.span1.nativeElement);\n } else {\n event.preventDefault();\n this.selectSpanByTabIndex(this.selectionInput);\n }\n }\n }\n\n // BLUR ON INPUT\n public blurOnDateTime(): void {\n clearTimeout(this.dateTimeMainTimer);\n this.dateTimeMainTimer = setTimeout(() => {\n if (\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER\n ) {\n if (\n !isNaN(this.span1?.nativeElement.innerHTML) &&\n !isNaN(this.span2?.nativeElement.innerHTML) &&\n !isNaN(this.span3?.nativeElement.innerHTML)\n ) {\n if (\n this.inputConfig.isFutureDateDisabled &&\n moment(this.dateTimeInputDate).isAfter(moment())\n )\n this.superControl.control?.setErrors({\n invalid: true,\n });\n // don't accept future dates\n else {\n if (\n this.inputConfig.expiredDateInvalid &&\n moment(this.dateTimeInputDate).isBefore(moment())\n ) {\n this.superControl.control?.setErrors({\n invalid: true,\n }); // don't accept expired dates\n } else {\n this.calendarService.dateChanged.next(\n this.dateTimeInputDate\n );\n }\n }\n } else {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'dd';\n this.span3.nativeElement.innerHTML = 'yy';\n this.dateTimeInputDate = new Date();\n this.showDateInput = false;\n }\n } else if (\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n if (\n !isNaN(this.span1.nativeElement.innerHTML) &&\n !isNaN(this.span2.nativeElement.innerHTML)\n ) {\n if (\n this.inputConfig.expiredDateInvalid &&\n moment(this.dateTimeInputDate).isBefore(moment())\n ) {\n this.superControl.control?.setErrors({ invalid: true }); // don't accept expired dates\n } else {\n this.calendarService.dateChanged.next(\n this.dateTimeInputDate\n );\n }\n } else {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'yy';\n this.dateTimeInputDate = new Date();\n this.showDateInput = false;\n }\n } else {\n if (\n !isNaN(this.span1.nativeElement.innerHTML) &&\n !isNaN(this.span2.nativeElement.innerHTML)\n ) {\n this.calendarService.dateChanged.next(\n this.dateTimeInputDate\n );\n } else {\n this.span1.nativeElement.innerHTML = 'HH';\n this.span2.nativeElement.innerHTML = 'MM';\n this.setTimePickerTime();\n this.showDateInput = false;\n }\n }\n\n // Clear the timer reference after it's executed\n this.dateTimeMainTimer = 0;\n this.selectionInput = -1;\n this.newInputChanged = true;\n }, 100);\n }\n\n public onPopoverShown(): void {\n this.showDateInput = true;\n this.isFocusInput = true;\n\n clearTimeout(this.dateTimeMainTimer);\n clearTimeout(this.focusBlur);\n this.holder1.nativeElement.focus();\n this.selectionInput = -1;\n this.setSpanSelection(this.holder1.nativeElement);\n }\n\n public onPopoverHidden(): void {\n this.blurOnDateTime();\n }\n\n public setTimeDateInput(date: InputChangeValue, hasValue?: boolean): void {\n let text, dateFormat, timeFormat;\n if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {\n text = moment(new Date(date)).format('MM/DD/YY');\n dateFormat = text.split('/');\n } else if (\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n text = moment(new Date(date)).format('MM/DD/YY');\n dateFormat = text.split('/');\n } else {\n \n date =\n date instanceof Date\n ? date\n : new Date(moment().format('MM/DD/YYYY') + ' ' + date);\n text = moment(new Date(date)).format('HH:mm');\n\n timeFormat = moment(new Date(date)).format('hh/mm/A');\n dateFormat = timeFormat.split('/');\n }\n\n if (this.formFormat) {\n const newFormFormat = moment(new Date(date)).format(\n this.formFormat\n );\n this.valueAfterWriteValue = newFormFormat;\n text = newFormFormat;\n }\n\n if (!hasValue) {\n this.onChange(text);\n // Mark as touched when user changes the value\n this.markAsTouched();\n }\n this.setIsFocusInput(false);\n\n // HAS TO BE IN TIMEOUT BECAUSE OF ANGULAR STACK\n setTimeout(() => {\n if (this.span1) this.span1.nativeElement.innerHTML = dateFormat[0];\n\n if (this.span2)\n if (\n this.inputConfig.name !==\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n this.span2.nativeElement.innerHTML = dateFormat[1];\n this.span3.nativeElement.innerHTML = dateFormat[2];\n } else {\n this.span2.nativeElement.innerHTML = dateFormat[2];\n }\n }, 0);\n\n if (date) {\n this.dateTimeInputDate = new Date(date);\n }\n this.showDateInput = true;\n }\n\n private markAsTouched(): void {\n if (this.getSuperControl && !this.getSuperControl.touched) {\n this.onTouched();\n }\n }\n\n public handleKeyboardInputs(e: KeyboardEvent, isRestart?: boolean): void {\n const spanOneValue: number | undefined =\n isNaN(this.span1.nativeElement.innerHTML) || this.newInputChanged\n ? undefined\n : parseInt(this.span1.nativeElement.innerHTML);\n const span2Value: number | undefined =\n isNaN(this.span2.nativeElement.innerHTML) || this.newInputChanged\n ? undefined\n : parseInt(this.span2.nativeElement.innerHTML);\n\n let span3Value: string | number | undefined;\n\n if (\n this.inputConfig.name !==\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n span3Value =\n isNaN(this.span3.nativeElement.innerHTML) ||\n this.newInputChanged\n ? ''\n : parseInt(this.span3.nativeElement.innerHTML);\n }\n\n this.newInputChanged = false;\n if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {\n if (this.selectionInput === 0) {\n if (isRestart) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n } else if (spanOneValue !== undefined) {\n let final_value = parseInt(`${spanOneValue}${e.key}`);\n if (final_value > 12) {\n this.span1.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(\n parseInt(\n this.span1.nativeElement.innerHTML +\n parseInt(e.key)\n ) - 1\n )\n );\n\n if (!final_value)\n this.span1.nativeElement.innerHTML = 'mm';\n else\n this.span1.nativeElement.innerHTML = (\n this.span1.nativeElement.innerHTML +\n parseInt(e.key)\n ).slice(-2);\n\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n this.markAsTouched();\n }\n } else {\n if (parseInt(e.key))\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(e.key) - 1)\n );\n\n const final_value = ('0' + parseInt(e.key)).slice(-2);\n\n this.span1.nativeElement.innerHTML = final_value;\n\n if (parseInt(`1${e.key}`) > 12) {\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n }\n this.markAsTouched();\n }\n } else if (this.selectionInput === 1) {\n if (isRestart) {\n this.span2.nativeElement.innerHTML = 'dd';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n } else if (span2Value !== undefined) {\n let final_value = parseInt(`${span2Value}${e.key}`);\n if (final_value > 31) {\n this.span2.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n this.markAsTouched();\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(\n parseInt(\n this.span2.nativeElement.innerHTML +\n parseInt(e.key)\n )\n )\n );\n\n if (!final_value) {\n this.span2.nativeElement.innerHTML = 'dd';\n } else {\n this.span2.nativeElement.innerHTML = (\n this.span2.nativeElement.innerHTML +\n parseInt(e.key)\n ).slice(-2);\n }\n\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n }\n } else {\n if (parseInt(e.key))\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(parseInt(e.key))\n );\n\n this.span2.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n\n if (parseInt(`1${e.key}`) > 31) {\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.selectSpanByTabIndex(1);\n }\n this.markAsTouched();\n }\n } else {\n if (isRestart) {\n this.span3.nativeElement.innerHTML = 'yy';\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else if (!span3Value || span3Value.toString().length === 2) {\n this.span3.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(\n parseInt(`200${parseInt(e.key)}`)\n )\n );\n\n this.selectSpanByTabIndex(2);\n } else {\n const finalYear = parseInt(\n this.span3.nativeElement.innerHTML + parseInt(e.key)\n );\n\n const finalShowYear =\n finalYear > 31\n ? parseInt(`19${finalYear}`)\n : parseInt(`20${finalYear}`);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(finalShowYear)\n );\n\n this.span3.nativeElement.innerHTML = (\n this.span3.nativeElement.innerHTML + parseInt(e.key)\n ).slice(-2);\n this.selectSpanByTabIndex(2);\n this.markAsTouched();\n }\n }\n } else if (\n this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER &&\n !this.inputConfig.preventTyping\n ) {\n // Handle time picker keyboard input\n if (this.selectionInput === 0) {\n // Hours input\n if (isRestart) {\n this.span1.nativeElement.innerHTML = 'HH';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n } else if (spanOneValue !== undefined) {\n let final_value = parseInt(`${spanOneValue}${e.key}`);\n if (final_value > 12) {\n this.span1.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n // Convert 12-hour to 24-hour for internal storage\n const currentHour = this.dateTimeInputDate.getHours();\n const isPM = currentHour >= 12;\n const newHour = isPM ? final_value + 12 : final_value;\n\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(newHour)\n );\n\n if (!final_value)\n this.span1.nativeElement.innerHTML = 'HH';\n else\n this.span1.nativeElement.innerHTML = (\n this.span1.nativeElement.innerHTML +\n parseInt(e.key)\n ).slice(-2);\n\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n this.markAsTouched();\n }\n } else {\n if (parseInt(e.key) >= 1 && parseInt(e.key) <= 9) {\n // Convert 12-hour to 24-hour for internal storage\n const currentHour = this.dateTimeInputDate.getHours();\n const isPM = currentHour >= 12;\n const newHour = isPM ? parseInt(e.key) + 12 : parseInt(e.key);\n\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(newHour)\n );\n\n const final_value = ('0' + parseInt(e.key)).slice(-2);\n this.span1.nativeElement.innerHTML = final_value;\n\n if (parseInt(`1${e.key}`) > 12) {\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n }\n this.markAsTouched();\n }\n }\n } else if (this.selectionInput === 1) {\n // Minutes input\n if (isRestart) {\n this.span2.nativeElement.innerHTML = 'MM';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n } else if (span2Value !== undefined) {\n let final_value = parseInt(`${span2Value}${e.key}`);\n if (final_value > 59) {\n this.span2.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMinutes(final_value)\n );\n\n if (!final_value) {\n this.span2.nativeElement.innerHTML = 'MM';\n } else {\n this.span2.nativeElement.innerHTML = (\n this.span2.nativeElement.innerHTML +\n parseInt(e.key)\n ).slice(-2);\n }\n\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n this.markAsTouched();\n }\n } else {\n if (parseInt(e.key) <= 5) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMinutes(parseInt(e.key))\n );\n\n this.span2.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n\n if (parseInt(`1${e.key}`) > 59) {\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.selectSpanByTabIndex(1);\n }\n this.markAsTouched();\n }\n }\n } else if (this.selectionInput === 2) {\n // AM/PM input\n if (isRestart) {\n this.span3.nativeElement.innerHTML = 'AM';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n } else {\n const currentHour = this.dateTimeInputDate.getHours();\n const isPM = e.key.toLowerCase() === 'p';\n\n if (isPM && currentHour < 12) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(currentHour + 12)\n );\n this.span3.nativeElement.innerHTML = 'PM';\n } else if (!isPM && currentHour >= 12) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(currentHour - 12)\n );\n this.span3.nativeElement.innerHTML = 'AM';\n }\n\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n this.markAsTouched();\n }\n }\n } else if (\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n if (!this.selectionInput) {\n if (isRestart) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n } else if (spanOneValue) {\n const final_value = parseInt(`${spanOneValue}${e.key}`);\n if (final_value > 12) {\n this.span1.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(\n parseInt(\n this.span1.nativeElement.innerHTML +\n parseInt(e.key)\n ) - 1\n )\n );\n\n if (!final_value) {\n this.span1.nativeElement.innerHTML = 'mm';\n } else {\n this.span1.nativeElement.innerHTML = (\n this.span1.nativeElement.innerHTML +\n parseInt(e.key)\n ).slice(-2);\n }\n\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n }\n } else {\n if (parseInt(e.key))\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(e.key) - 1)\n );\n\n const final_value = ('0' + parseInt(e.key)).slice(-2);\n\n this.span1.nativeElement.innerHTML = final_value;\n\n if (parseInt(`1${e.key}`) > 12) {\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else this.selectSpanByTabIndex(0);\n }\n } else {\n if (isRestart) {\n this.span2.nativeElement.innerHTML = 'yy';\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else if (!span2Value || span2Value.toString().length === 2) {\n this.span2.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(\n parseInt(`200${parseInt(e.key)}`)\n )\n );\n\n this.selectSpanByTabIndex(1);\n } else {\n const finalYear = parseInt(\n this.span2.nativeElement.innerHTML + parseInt(e.key)\n );\n\n const finalShowYear =\n finalYear > 31\n ? parseInt(`19${finalYear}`)\n : parseInt(`20${finalYear}`);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(finalShowYear)\n );\n\n this.span2.nativeElement.innerHTML = (\n this.span2.nativeElement.innerHTML + parseInt(e.key)\n ).slice(-2);\n this.selectSpanByTabIndex(1);\n }\n }\n }\n }\n\n selectSpanByTabIndex(indx: number, changeTab?: boolean): void {\n switch (indx) {\n case 0:\n this.setSpanSelection(this.span1.nativeElement);\n break;\n case 1:\n this.setSpanSelection(this.span2.nativeElement);\n break;\n case 2:\n this.setSpanSelection(this.span3.nativeElement);\n break;\n default:\n this.setSpanSelection(this.holder1.nativeElement);\n }\n\n // Ensure the holder1 element stays focused\n this.holder1.nativeElement.focus();\n\n if (changeTab) this.newInputChanged = true;\n }\n\n private handleNavigationKey(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case 37: // Left arrow\n this.moveSelectionLeft();\n break;\n case 39: // Right arrow\n case 9: // Tab\n this.moveSelectionRightOrTab(event);\n break;\n case 38: // Up arrow\n this.setDateTimeModel('up');\n break;\n case 40: // Down arrow\n this.setDateTimeModel('down');\n break;\n case 8: // Backspace\n case 46: // Delete\n this.handleKeyboardInputs(event, true);\n break;\n }\n }\n\n private handleDatePickerInput(isUp: boolean, isDatePicker: boolean): void {\n if (this.selectionInput === 0) this.updateMonth(isUp);\n else if (this.selectionInput === 1) this.updateDate(isUp, isDatePicker);\n else this.updateYear(isUp, isDatePicker);\n }\n\n private setDateTimeModel(direction: string): void {\n if (this.selectionInput === -1) this.selectionInput = 0;\n\n const isUp = direction === 'up';\n const isDatePicker =\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER;\n const isBankCardPicker =\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;\n\n if (isDatePicker || isBankCardPicker)\n this.handleDatePickerInput(isUp, isDatePicker);\n else this.handleTimePickerInput(isUp);\n }\n\n private moveSelectionRightOrTab(e: KeyboardEvent): void {\n const isDatepickerBankCard =\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;\n const maxIndex = isDatepickerBankCard ? 1 : 2;\n\n if (this.selectionInput < maxIndex && !e.shiftKey) {\n this.selectionInput += 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n } else if (e.keyCode === 9 && !e.shiftKey) {\n this.focusNextInput();\n } else if (e.shiftKey && e.keyCode === 9) {\n this.focusPreviousInput();\n }\n }\n\n private focusPreviousInput(): void {\n const allInputs = Array.from(\n document.querySelectorAll('input.input-control')\n ) as HTMLInputElement[];\n\n const currentIndex = -1;\n\n // allInputs.findIndex(\n // (input) =>\n // input === this.caInputComponent.inputElement.nativeElement\n // );\n\n if (currentIndex === -1) this.selectionInput = 3;\n else if (currentIndex === 0) this.selectionInput = 0;\n else {\n this.selectionInput -= 1;\n this.selectSpanByTabIndex(this.selectionInput);\n }\n\n if (currentIndex > 0) allInputs[currentIndex - 1].focus();\n\n this.selectionInput = -1;\n }\n\n private focusNextInput(): void {\n const allInputs = Array.from(\n document.querySelectorAll('input.input-control')\n ) as HTMLInputElement[];\n const currentIndex = 0;\n\n // allInputs.findIndex(\n // (input) =>\n // input === this.caInputComponent.inputElement.nativeElement\n // );\n\n if (allInputs[currentIndex + 1]) allInputs[currentIndex + 1].focus();\n else {\n this.setIsFocusInput(false);\n this.blurOnDateTime();\n }\n\n this.selectionInput = -1;\n }\n\n public setIsFocusInput(value: boolean): void {\n this.isFocusInput = value;\n }\n\n private moveSelectionLeft(): void {\n if (this.selectionInput > 0) {\n this.selectionInput -= 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n }\n }\n\n private updateMonth(isUp: boolean): void {\n const monthDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(\n this.dateTimeInputDate.getMonth() + monthDelta\n )\n );\n\n this.span1.nativeElement.innerHTML = this.padValue(\n this.dateTimeInputDate.getMonth() + 1\n );\n this.setSpanSelection(this.span1.nativeElement);\n }\n\n private updateDate(isUp: boolean, isDatePicker: boolean): void {\n const dateDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(\n this.dateTimeInputDate.getDate() + dateDelta\n )\n );\n\n const spanElement = isDatePicker\n ? this.span2.nativeElement\n : this.span1.nativeElement;\n spanElement.innerHTML = this.padValue(this.dateTimeInputDate.getDate());\n this.setSpanSelection(spanElement);\n }\n\n private updateYear(isUp: boolean, isDatePicker: boolean): void {\n const yearDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(\n this.dateTimeInputDate.getFullYear() + yearDelta\n )\n );\n\n const spanElement = isDatePicker\n ? this.span3.nativeElement\n : this.span2.nativeElement;\n spanElement.innerHTML = this.dateTimeInputDate\n .getFullYear()\n .toString()\n .slice(-2);\n this.setSpanSelection(spanElement);\n }\n\n private padValue(value: number): string {\n return ('0' + value).slice(-2);\n }\n\n private handleTimePickerInput(isUp: boolean): void {\n if (this.selectionInput === 0) this.updateHours(isUp);\n else if (this.selectionInput === 1) this.updateMinutes(isUp);\n else this.toggleAMPM();\n }\n\n private updateHours(isUp: boolean): void {\n const hoursDelta = isUp ? 1 : -1;\n let selectedHours = this.dateTimeInputDate.getHours() + hoursDelta;\n\n // Handle 12-hour format with AM/PM\n if (selectedHours === 0) selectedHours = 12; // 12 AM\n if (selectedHours === -1) selectedHours = 11; // 11 PM\n if (selectedHours === 13) selectedHours = 1; // 1 PM\n if (selectedHours === 25) selectedHours = 1; // 1 AM\n\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(selectedHours)\n );\n\n // Display 12-hour format\n const displayHour = selectedHours > 12 ? selectedHours - 12 : selectedHours;\n this.span1.nativeElement.innerHTML = this.padValue(displayHour);\n this.setSpanSelection(this.span1.nativeElement);\n\n this.span3.nativeElement.innerHTML =\n selectedHours >= 12 ? 'PM' : 'AM';\n\n this.markAsTouched();\n }\n\n private updateMinutes(isUp: boolean): void {\n const minutesDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMinutes(\n this.dateTimeInputDate.getMinutes() + minutesDelta\n )\n );\n\n this.span2.nativeElement.innerHTML = this.padValue(\n this.dateTimeInputDate.getMinutes()\n );\n this.setSpanSelection(this.span2.nativeElement);\n\n this.markAsTouched();\n }\n\n private toggleAMPM(): void {\n this.span3.nativeElement.innerHTML =\n this.span3.nativeElement.innerHTML === 'AM' ? 'PM' : 'AM';\n\n const hoursToAdd =\n this.span3.nativeElement.innerHTML === 'AM' ? -12 : 12;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(\n this.dateTimeInputDate.getHours() + hoursToAdd\n )\n );\n\n this.setSpanSelection(this.span3.nativeElement);\n\n this.markAsTouched();\n }\n\n public clearInput(event: Event): void {\n this.clearInputEvent.emit(true);\n this.onChange('');\n this.dateTimeInputDate = new Date();\n this.dateTimeIntDate = new Date();\n this.showDateInput = false;\n this.resetDateTimeInputs();\n this.markAsTouched();\n }\n\n public onBlurInput(event: any): void {\n this.blurInputEvent.emit(event);\n // Datepicker\n this.focusBlur = setTimeout(() => {\n this.blurOnDateTime();\n }, 100);\n }\n\n public resetDateTimeInputs(): void {\n if (this.span1)\n if (\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER\n ) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'dd';\n this.span3.nativeElement.innerHTML = 'yy';\n } else if (\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'yy';\n } else if (\n this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER\n ) {\n this.span1.nativeElement.innerHTML = 'HH';\n this.span2.nativeElement.innerHTML = 'MM';\n this.span3.nativeElement.innerHTML = 'AM';\n }\n\n this.setTimePickerTime();\n this.newInputChanged = true;\n this.setIsFocusInput(false);\n this.showDateInput = false;\n }\n\n public setTimePickerTime(): void {\n if (this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER)\n this.dateTimeInputDate = new Date(\n moment().format('MM/DD/YYYY') +\n (this.inputConfig?.isFromDate ? ' 12:15' : ' 12:00')\n );\n }\n\n public ngOnDestroy() {\n // Clear all timers\n if (this.dateTimeMainTimer) {\n clearTimeout(this.dateTimeMainTimer);\n }\n if (this.focusBlur) {\n clearTimeout(this.focusBlur);\n }\n if (this.timeoutCleaner) {\n clearTimeout(this.timeoutCleaner);\n }\n\n // Complete the destroy subject to unsubscribe from all observables\n this.destroy$.next();\n this.destroy$.complete();\n }\n}","<div\n class=\"datetime-picker-main-holder datetime-input-custom-group datetimeclass\"\n [ngClass]=\"\n getSuperControl\n | inputDateTimeContainerClass\n : isFocusInput\n : inputConfig\n : getSuperControl?.value\n : getSuperControl?.disabled\n : getSuperControl?.invalid\n : getSuperControl?.touched\n \"\n>\n <div\n #t2=\"ngbPopover\"\n [ngbPopover]=\"dateTimePopover\"\n [placement]=\"['bottom-start', 'top-start']\"\n [popoverClass]=\"'datetimepopovermain'\"\n [autoClose]=\"'outside'\"\n [container]=\"'body'\"\n class=\"datetime-input-icon {{ inputConfig.customClass }}\"\n ngbTooltip\n position=\"bottom\"\n (shown)=\"onPopoverShown()\"\n (hidden)=\"onPopoverHidden()\"\n [ngClass]=\"\n getSuperControl\n | inputPlaceholderIconClass\n : (isFocusInput || false)\n : inputConfig\n : null\n : (isTouchedInput || false)\n : false\n : (getSuperControl?.value || '')\n \"\n [ngStyle]=\"{ opacity: inputConfig.isIconHidden ? '0' : {} }\"\n >\n @if (inputConfig.placeholderIcon) {\n <svg-icon\n appHoverSvg\n [stretch]=\"true\"\n [fill]=\"inputConfig.dropdownLabel ? '#b7b7b7' : null\"\n [name]=\"inputConfig.placeholderIcon === 'date' ? 'cai-date' : 'cai-time'\"\n ></svg-icon>\n } @else {\n <div style=\"height: 26px\"></div>\n }\n </div>\n\n <div\n #holder1\n class=\"date_time_holder input-control\"\n [class.active]=\"showDateInput\"\n tabindex=\"1\"\n (paste)=\"onDatePaste($event)\"\n (keydown)=\"changeSelection($event)\"\n (blur)=\"blurInput()\"\n [ngStyle]=\"{\n 'padding-left': inputConfig.isIconHidden ? '2px' : '27px',\n }\"\n >\n <span\n #span1\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput,\n }\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'mm' : 'HH'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ':'\"\n ></div>\n </span>\n <span\n #span2\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput,\n }\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'dd' : 'MM'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ' '\"\n ></div>\n </span>\n <span\n #span3\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput,\n }\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'yy' : 'AM'\"\n ></span>\n </div>\n @if (!getSuperControl?.disabled) {\n <svg-icon\n class=\"input-dropdown-arrow {{ inputConfig.customClass }}\"\n [ngClass]=\"\n getSuperControl\n | inputDropdownArrowClass\n : isFocusInput\n : inputConfig\n : isTouchedInput\n : getSuperControl?.value\n \"\n [name]=\"'cai-arrow-secondary-down'\"\n ></svg-icon>\n }\n\n <!-- Input Clear -->\n @if (inputConfig | showClear) {\n <div\n class=\"input-clear {{ inputConfig.customClass }}\"\n [ngClass]=\"\n getSuperControl\n | inputClearClass\n : (isFocusInput || false)\n : inputConfig\n : false\n : false\n : ''\n : (getSuperControl?.value || '')\n \"\n [ngbTooltip]=\"\n inputConfig.incorrectInput\n ? 'Mark Incorrect'\n : inputConfig.removeInput\n ? eGeneralActions.REMOVE\n : eGeneralActions.CLEAR\n \"\n placement=\"top\"\n (click)=\"clearInput($event)\"\n >\n <svg-icon\n name=\"cai-x\"\n class=\"input-clear-x\"\n ></svg-icon>\n </div>\n }\n</div>\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div class=\"datetime-dropdown-holder\">\n <cai-custom-datetime-pickers\n [calendarType]=\"\n inputConfig.name === 'datepicker' ||\n inputConfig.name === 'datepickerBankCard'\n ? 'date'\n : 'time'\n \"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTimeInputDate\"\n (closePopover)=\"closePopover($event)\"\n ></cai-custom-datetime-pickers>\n </div>\n</ng-template>\n","export enum eStringPlaceholder {\n EMPTY = ''\n} ","export enum eAlignment {\n LEFT = 'left',\n RIGHT = 'right',\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, signal, ViewChild } from '@angular/core';\n\n// Enums\nimport { eAlignment } from '../../enums';\nimport { eGeneralActions } from '../../enums/general-actions.enum';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\nimport { Clipboard } from '@angular/cdk/clipboard';\n\n@Component({\n selector: 'cai-copy',\n templateUrl: './copy.component.html',\n styleUrl: './copy.component.scss',\n imports: [\n CommonModule,\n NgbTooltip,\n\n // Components\n SvgIconComponent,\n ],\n})\nexport class CopyComponent {\n public value = input<string>();\n public alignment = input<eAlignment>(eAlignment.RIGHT);\n public copyTooltip = input<string>();\n public copied = signal<boolean>(false);\n\n // Enums\n public eGeneralActions = eGeneralActions;\n public eAlignment = eAlignment;\n\n constructor(private clipboard: Clipboard) {}\n\n @ViewChild(NgbTooltip) tooltip!: NgbTooltip;\n\n public onCopy(event: MouseEvent) {\n event.stopPropagation();\n this.clipboard.copy(this.value() ?? '');\n this.copied.set(true);\n }\n\n public resetCopied() {\n this.copied.set(false);\n }\n}\n","@let isCopied = !!copied();\n<div\n class=\"copy-container d-flex align-items-center gap-1\"\n (mouseleave)=\"resetCopied()\"\n>\n <div\n class=\"copy-content\"\n [class]=\"{\n 'order-1': alignment() === eAlignment.LEFT,\n 'order-0': alignment() === eAlignment.RIGHT,\n }\"\n >\n <ng-content></ng-content>\n </div>\n <div\n (click)=\"onCopy($event)\"\n [ngbTooltip]=\"tooltipTemplate\"\n [container]=\"'body'\"\n [tooltipClass]=\"isCopied ? 'tooltip-bg-blue-500' : ''\"\n placement=\"bottom\"\n #tooltip=\"ngbTooltip\"\n class=\"copy-icon\"\n [class]=\"{\n 'text-black-100': !isCopied,\n 'hover:text-black-300': !isCopied,\n 'text-blue-700': isCopied,\n }\"\n >\n <svg-icon [name]=\"'cai-copy'\" class=\"icon transition\"></svg-icon>\n </div>\n</div>\n\n@let copyText = isCopied ? eGeneralActions.COPIED : copyTooltip() ??\neGeneralActions.COPY;\n<ng-template #tooltipTemplate>\n {{ copyText }}\n</ng-template>\n","export enum InputAddressLayersStringEnum {\n ADDRESS = 'Address',\n LOCALITY = 'Locality',\n}\n","export enum InputAddressTypeStringEnum {\n LONG_ADDRESS = 'longAddress',\n SHORT_ADDRESS = 'shortAddress',\n ROUTING_ADDRESS = 'RoutingAddress',\n}\n","// Angular\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n Input,\n input,\n OnDestroy,\n OnInit,\n output,\n Self,\n signal,\n ViewChild,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormsModule,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\n\n// RXJS\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n filter,\n of,\n Subject,\n switchMap,\n takeUntil,\n tap,\n} from 'rxjs';\n\n// Models\nimport { CaiInputConfig } from '../input/models';\n\n// Components\nimport { InputComponent } from '../input/input.component';\nimport { AddressData } from './models/address-data.model';\nimport { AutocompleteSearchLayer } from './models/sent-address-data.model';\nimport { InputAddressLayersStringEnum } from './enums/input-address-layers-string.enum';\nimport { AddressList } from './models/address-list.model';\nimport { InputAddressTypeStringEnum } from './enums/input-address-type-string.enum';\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n@Component({\n selector: 'cai-input-address',\n templateUrl: './input-address.component.html',\n styleUrl: './input-address.component.scss',\n imports: [\n // Modules\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // Components\n InputComponent,\n SvgIconComponent,\n ],\n})\nexport class InputAddressComponent\n implements OnInit, ControlValueAccessor, OnDestroy, OnChanges\n{\n @ViewChild(InputComponent) inputComponent!: InputComponent;\n\n private destroy$ = new Subject<void>();\n private controlSubscription$ = new Subject<void>();\n private baseConfig: CaiInputConfig = {\n type: 'text',\n dropdown: true,\n dropdownAutocomplete: true,\n search: true,\n textTransform: 'capitalize',\n icon: 'cai-address',\n optionLabel: 'name',\n optionValue: 'name',\n isAddress: true,\n };\n\n id = input<string>('');\n config = input<CaiInputConfig>({});\n type = input<string>('');\n required = input<boolean>(false);\n isInTable = input<boolean>(false);\n isFormLoaded = input<boolean>(false);\n\n @Input() public set activeAddress(value: AddressList | null) {\n if (value) {\n this._activeAddress = value;\n let isValid = true;\n if (this.searchLayers?.[0] === InputAddressLayersStringEnum.ADDRESS) {\n const address = value?.address;\n if (address) isValid = this.checkAddressValidation(address);\n }\n\n if (!value || !isValid)\n this.getSuperControl!.setErrors({ invalid: true });\n else this.getSuperControl!.setErrors(null);\n }\n }\n\n @Input() public set receivedAddressData(value: AddressData | null) {\n if (value) {\n this.currentAddressData = {\n address: value.address!,\n valid: value.address && value.longLat ? true : false,\n longLat: value.longLat,\n isParking: this.isParkingAddressSelected,\n };\n\n if (this.currentAddressData!.valid) {\n this.getSuperControl!.setErrors(null);\n }\n\n this.selectedAddress.emit(this.currentAddressData!);\n }\n }\n\n @Input() public set receivedAddressList(\n value: { addresses: string[] } | null\n ) {\n this._receivedAddressList = value;\n\n if (value?.addresses) {\n let parkingAddressesList: any = [];\n this.addressList = value.addresses.map((item: string, indx: number) => {\n const parkingAddress = this._parkingList?.length\n ? this.filterParkingByCity(item)\n : null;\n\n if (parkingAddress?.length)\n parkingAddressesList.push({\n name: item,\n id: indx,\n parkingAddress,\n });\n return {\n name: item,\n id: indx,\n };\n });\n\n this.addressList = [...parkingAddressesList, ...this.addressList];\n }\n }\n\n @Input() public set parkingList(value: any[]) {\n this._parkingList = value;\n }\n\n selectedAddress = output<any>();\n sentAddressData = output<any>();\n sentAddressValue = output<any>();\n\n public _receivedAddressList: { addresses: string[] } | null = null;\n public _activeAddress: AddressList | null = null;\n\n //Address data\n private searchLayers!: AutocompleteSearchLayer[];\n public currentAddressData: AddressData | null = null;\n\n public addressList: AddressList[] = [];\n public allowValidation: boolean = false;\n public requestSent: boolean = false;\n public closedBorder: boolean = false;\n public chosenFromDropdown: boolean = false;\n public _parkingList: any[] = [];\n public isParkingAddressSelected: boolean = false;\n\n public inputConfig = signal<CaiInputConfig>({});\n public isLoading = signal<boolean>(false);\n public isFocused = signal<boolean>(false);\n\n constructor(\n @Self() public superControl: NgControl,\n private ref: ChangeDetectorRef\n ) {\n this.superControl.valueAccessor = this;\n }\n\n writeValue(_: any): void {}\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n get getSuperControl() {\n return this.superControl?.control as FormControl;\n }\n\n ngOnInit(): void {\n this.initializeAddressInput();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isFormLoaded']?.currentValue) {\n this.initChangesListener();\n }\n }\n\n private initializeAddressInput(): void {\n if (this.type()) {\n this.checkSearchLayers(this.type());\n }\n\n this.baseConfig.required = this.required();\n\n if (this.isInTable()) {\n this.baseConfig.icon = null;\n this.baseConfig.inTable = true;\n }\n\n this.inputConfig.set({\n ...this.baseConfig,\n ...this.config(),\n });\n\n this.initChangesListener();\n }\n\n private checkSearchLayers(value: string): void {\n this.searchLayers =\n value === InputAddressTypeStringEnum.LONG_ADDRESS\n ? [InputAddressLayersStringEnum.ADDRESS]\n : value === InputAddressTypeStringEnum.SHORT_ADDRESS\n ? [InputAddressLayersStringEnum.LOCALITY]\n : [];\n\n this.baseConfig.name =\n value === InputAddressTypeStringEnum.LONG_ADDRESS\n ? 'Address, City, State Zip'\n : value === InputAddressTypeStringEnum.SHORT_ADDRESS\n ? 'County, State'\n : '';\n }\n\n private filterParkingByCity(searchString: string): any {\n const formattedSearchString = searchString.trim().replace(/\\s*,\\s*/g, ', ');\n\n const isParking = this._parkingList.filter((parking: any) => {\n const { city, stateShortName, country } = parking.address || {};\n const formattedAddress = `${city}, ${stateShortName}, ${country}`;\n if (formattedAddress === formattedSearchString)\n parking.address.isParking = true;\n return formattedAddress === formattedSearchString;\n });\n\n return isParking;\n }\n\n private checkAddressValidation(address: string): boolean {\n const streetNum = /\\d/;\n\n return streetNum.test(address) ? true : false;\n }\n\n public onBlur(): void {\n this.toggleFocus(false);\n if (this.getSuperControl?.value?.length < 3) {\n this.getSuperControl?.setValue('');\n }\n }\n\n public hideValidation() {\n return (\n this.isLoading() ||\n (this.getSuperControl?.value && this.getSuperControl?.value?.length < 3)\n );\n }\n\n public initChangesListener(): void {\n const control = this.getSuperControl;\n\n if (!control || !control.valueChanges) {\n return;\n }\n\n // Unsubscribe from previous form control subscription\n this.controlSubscription$.next();\n\n control.valueChanges\n .pipe(\n distinctUntilChanged(),\n takeUntil(this.controlSubscription$),\n takeUntil(this.destroy$),\n tap((term) => {\n if (!term) {\n this.isLoading.set(false);\n this.addressList = [];\n }\n if (this.allowValidation) {\n this.requestSent = false;\n const addressData = {\n address: {},\n valid: false,\n longLat: {},\n };\n this.selectedAddress.emit(addressData);\n }\n\n this.allowValidation = true;\n }),\n filter((term: string) => {\n if (term?.length >= 3) this.isLoading.set(true);\n return term?.length >= 3;\n }),\n debounceTime(500),\n switchMap((query: string) => {\n const params = {\n query: query,\n searchLayers: this.searchLayers,\n closedBorder: this.closedBorder,\n };\n\n this.sentAddressData.emit(params);\n\n return of(this.receivedAddressList).pipe(\n catchError((error) => {\n return of([]);\n })\n );\n }),\n catchError((error) => {\n return of(null);\n })\n )\n .subscribe({\n next: (result) => {\n let isValid = true;\n if (this.searchLayers?.[0] === InputAddressLayersStringEnum.ADDRESS) {\n const address = this._activeAddress?.address;\n if (address) isValid = this.checkAddressValidation(address);\n }\n\n if (!this._activeAddress || !isValid)\n this.getSuperControl!.setErrors({ invalid: true });\n else this.getSuperControl!.setErrors(null);\n\n this.isLoading.set(false);\n this.ref.detectChanges();\n },\n });\n }\n\n public onSelectDropdown(name: string | null): void {\n const address = this.addressList.find((item) => item.name === name);\n this._activeAddress = address\n ? { ...address, address: address?.name }\n : null;\n\n this.isParkingAddressSelected = this._activeAddress?.parkingAddress?.length\n ? true\n : false;\n\n if (address?.name) {\n if (this.searchLayers?.[0] === InputAddressLayersStringEnum.ADDRESS) {\n const isValid = this.checkAddressValidation(address.name);\n this.isLoading.set(false);\n\n if (isValid) {\n this.getAddressData(address.name);\n this.getSuperControl!.setValue(address.name);\n this.getSuperControl!.setErrors(null);\n } else {\n this.getSuperControl!.setErrors({\n invalid: true,\n });\n }\n } else {\n this.getAddressData(address.name);\n this.getSuperControl!.setValue(address.name);\n this.getSuperControl!.setErrors(null);\n }\n } else {\n this.onClearInputEvent();\n this.currentAddressData = null;\n this.addressList = [];\n }\n }\n\n public onClearInputEvent(): void {\n this.isLoading.set(false);\n this.currentAddressData = null;\n this.addressList = [];\n this.getSuperControl!.setValue('');\n this._activeAddress = null;\n this.chosenFromDropdown = false;\n if (this.config()?.required) {\n setTimeout(() => {\n this.getSuperControl!.setErrors({ required: true });\n }, 300);\n }\n const addressData = {\n address: {},\n valid: false,\n longLat: {},\n };\n this.selectedAddress.emit(addressData);\n }\n\n public getAddressData(address: string): void {\n this.requestSent = true;\n\n this.sentAddressValue.emit(address);\n }\n\n public toggleFocus(value: boolean): void {\n this.isFocused.set(value);\n }\n\n ngOnDestroy(): void {\n this.controlSubscription$.next();\n this.controlSubscription$.complete();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","@let searching = this.getSuperControl?.value?.length >= 3;\n\n<div class=\"address-input-container\">\n <cai-input\n [formControl]=\"getSuperControl\"\n [id]=\"id()\"\n [config]=\"inputConfig()\"\n [options]=\"addressList\"\n (onSelectionChange)=\"onSelectDropdown($event)\"\n [hideValidation]=\"hideValidation()\"\n [showNoResults]=\"searching\"\n (onFocused)=\"toggleFocus(true)\"\n (onBlur)=\"onBlur()\"\n ></cai-input>\n <div\n class=\"address-loader\"\n [class.loading]=\"isLoading()\"\n [class.focused]=\"isFocused()\"\n >\n <svg-icon name=\"cai-loader\" class=\"loader-icon\"></svg-icon>\n </div>\n</div>\n","/*\n * Public API Surface of carriera-intern-components\n */\nexport * from './app/utils';\nexport * from './app/components/input/models';\nexport * from './app/components/pm/pm.component';\nexport * from './app/components/input/input.component';\nexport * from './app/components/drop-zone/drop-zone.component';\nexport * from './app/components/input-datetime-picker/cai-input-datetime-picker.component';\nexport * from './app/components/input-datetime-picker/components/cai-custom-datetime-pickers/config';\nexport * from './app/components/avatar/avatar.component';\nexport * from './app/components/copy/copy.component';\nexport * from './app/components/input-address/input-address.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.CalendarDateTimePickerService","factory","i2","InputConfigNameStringEnum","i2.CalendarDateTimePickerService","i5","distinctUntilChanged"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"carriera-intern-components.mjs","sources":["../../../projects/carriera-intern-components/src/app/utils/autofill-validators.ts","../../../projects/carriera-intern-components/src/app/utils/constants/input-character-sets.constants.ts","../../../projects/carriera-intern-components/src/app/components/input/models/input.model.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/remap-pm-icons.pipe.ts","../../../projects/carriera-intern-components/src/app/components/pm/pm.component.ts","../../../projects/carriera-intern-components/src/app/components/pm/pm.component.html","../../../projects/carriera-intern-components/src/app/pipes/number-format.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/error-message.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/highlight-search.ts","../../../projects/carriera-intern-components/src/app/pipes/currency.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/filter-by-search.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/helpers/mask.helper.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/password.directive.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/number-format.directive.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/mask.directive.ts","../../../projects/carriera-intern-components/src/app/components/avatar/pipes/initials.pipe.ts","../../../projects/carriera-intern-components/src/app/components/avatar/avatar.component.ts","../../../projects/carriera-intern-components/src/app/components/avatar/avatar.component.html","../../../projects/carriera-intern-components/src/app/components/input/input.component.ts","../../../projects/carriera-intern-components/src/app/components/input/input.component.html","../../../projects/carriera-intern-components/src/app/pipes/bytes-to-human-readable.pipe.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.html","../../../projects/carriera-intern-components/src/app/services/document.service.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-dropdown-arrow-class.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-placeholder-icon.class.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-clear-class.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/show-clear.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-date-time-container-class.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/services/calendar-datetime-picker.service.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/strategy/calendar-strategy.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/utils/constants/custom-datetime-pickers.constants.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-main-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-list-preview-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/pipes/calendar-months.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-left-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-type-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-scroll-type-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/config.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/enums/input-config-name-string.enum.ts","../../../projects/carriera-intern-components/src/app/enums/general-actions.enum.ts","../../../projects/carriera-intern-components/src/app/directives/hover-svg-directives.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.html","../../../projects/carriera-intern-components/src/app/enums/string-placeholder.enum.ts","../../../projects/carriera-intern-components/src/app/enums/alignment.enum.ts","../../../projects/carriera-intern-components/src/app/components/copy/copy.component.ts","../../../projects/carriera-intern-components/src/app/components/copy/copy.component.html","../../../projects/carriera-intern-components/src/app/components/input-address/enums/input-address-layers-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-address/enums/input-address-type-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-address/input-address.component.ts","../../../projects/carriera-intern-components/src/app/components/input-address/input-address.component.html","../../../projects/carriera-intern-components/src/public-api.ts","../../../projects/carriera-intern-components/src/carriera-intern-components.ts"],"sourcesContent":["import {\n AbstractControl,\n ValidatorFn,\n Validators,\n ValidationErrors,\n} from '@angular/forms';\n\n// Autofill interface\ninterface AutofillableFormControl extends AbstractControl {\n _autofilled?: boolean;\n}\n\n// More flexible validator type to handle different AbstractControl versions\ntype FlexibleValidatorFn = (control: any) => ValidationErrors | null;\n\n/**\n * Creates a validator that ignores validation rules when the control is autofilled.\n * This can be used by components to create form controls with autofill support.\n * @param validators - Array of validators to apply when not autofilled\n * @returns A validator function that bypasses validation for autofilled controls\n */\nexport function ignoreWhenAutofilled(\n ...validators: FlexibleValidatorFn[]\n): ValidatorFn {\n const composite = Validators.compose(validators as ValidatorFn[]);\n return (ctrl: AbstractControl): ValidationErrors | null =>\n (ctrl as AutofillableFormControl)._autofilled\n ? null\n : composite\n ? composite(ctrl)\n : null;\n}\n","export const INPUT_CHARACTER_SETS = {\n DIGITS: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\n FRENCH_LETTERS: [\n 'ç',\n 'é',\n 'â',\n 'ê',\n 'î',\n 'ô',\n 'û',\n 'à',\n 'è',\n 'ì',\n 'ò',\n 'ù',\n 'ë',\n 'ï',\n 'ü',\n ],\n\n LETTERS: [\n 'a',\n 'b',\n 'c',\n 'd',\n 'e',\n 'f',\n 'g',\n 'h',\n 'i',\n 'j',\n 'k',\n 'l',\n 'm',\n 'n',\n 'o',\n 'p',\n 'q',\n 'r',\n 's',\n 't',\n 'u',\n 'v',\n 'w',\n 'x',\n 'y',\n 'z',\n ],\n\n // Special characters\n BASIC_PUNCTUATION: ['.', ',', '!', '?', ';', ':'],\n COMMON_SYMBOLS: [\n '@',\n '#',\n '$',\n '%',\n '&',\n '*',\n '+',\n '-',\n '=',\n '_',\n '|',\n '~',\n '`',\n '^',\n '<',\n '>',\n '/',\n '|',\n '~',\n '`',\n '^',\n '<',\n '>',\n '\\\\',\n ],\n BRACKETS: ['(', ')', '[', ']', '{', '}'],\n QUOTES: ['\"', \"'\", '`'],\n WHITESPACE: [' ', '\\t'],\n\n get ALPHANUMERIC() {\n return [...this.LETTERS, ...this.DIGITS];\n },\n get ALPHANUMERIC_WITH_SPACES() {\n return [...this.ALPHANUMERIC, ' '];\n },\n\n // Email specific\n EMAIL_SPECIAL: ['@', '.', '-', '_', '+'],\n get EMAIL_CHARACTERS() {\n return [...this.ALPHANUMERIC, ...this.EMAIL_SPECIAL];\n },\n\n get SPECIAL_EXCEPT_NAME_FRIENDLY() {\n const excludeChars = ['.', ',', '-', \"'\", ' '];\n return this.SPECIAL.filter((char) => !excludeChars.includes(char));\n },\n\n get NAME_CHARACTER_EXCLUSIONS() {\n return [...this.SPECIAL_EXCEPT_NAME_FRIENDLY, ...this.DIGITS];\n },\n\n get SPECIAL() {\n return [\n ...this.BASIC_PUNCTUATION,\n ...this.COMMON_SYMBOLS,\n ...this.BRACKETS,\n ...this.QUOTES,\n ];\n },\n} as const;\n","import {\n Bank,\n Broker,\n Contact,\n DepartmentContactsPair,\n Dispatch,\n DispatchBoard,\n Dispatcher,\n DropdownOption,\n LabelOption,\n Shipper,\n TrailerOption,\n TruckOption,\n Hazardous,\n State,\n Owner,\n FuelCard,\n PMOption,\n ColorOption,\n MakeOption,\n TollOption,\n TollTransponderOption,\n Franchise,\n FuelStopStore,\n} from './dropdown.model';\n\nexport interface CaiInputConfig {\n type?: 'text' | 'password' | 'number' | 'account';\n name?: string;\n required?: boolean;\n alignment?: 'left' | 'right';\n inverse?: boolean; // dark mode\n reveal?: number; // Revealed character count from the end of the password\n icon?: string | null; // icon name ex. 'cai-email'\n iconColor?: string; // color code for icons ex. #F89B2E\n dropdown?: boolean | DropdownType; // dropdown menu\n dropdownAutocomplete?: boolean; // dropdown autocomplete functionality\n fullState?: boolean; // full state dropdown functionality\n search?: boolean; // dropdown search functionality\n add?: boolean; // dropdown add new functionality\n subcontent?: string; // ex. months, years, lbs, gallons\n textTransform?: 'capitalize' | 'uppercase' | 'lowercase';\n textTransformExceptions?: string[]; // exception from text transform\n isNumberFormattingDisabled?: boolean;\n textColor?: 'positive';\n isAddress?: boolean; // address dropdown functionality\n\n isEdit?: boolean;\n\n placeholderBehavior?: 'dynamic' | 'fade' | 'static' | 'hidden';\n errorBehavior?: 'dynamic' | 'static' | 'floating';\n\n label?: string; // aria label\n mask?: string; // mask pattern ex. (000) 000-0000\n min?: number; // min value for number inputs\n max?: number; // max value for number inputs or max length for text inputs\n step?: number | 'automatic'; // step value for number inputs\n disableDecimals?: boolean; // disable decimals for number inputs\n prefix?: string; // ex. $\n withButtons?: boolean; // + - buttons\n autocomplete?: string; // autocomplete\n list?: boolean; // list view (disables validation animations and shows different initial state)\n inTable?: boolean;\n disabled?: boolean; // disabled?\n passwordRequirements?: boolean; // password requirements\n canOpenModal?: boolean; // can open modal for add new\n noSeparator?: boolean; // no separator between label and input\n\n optionValue?: string; // option value (key)\n optionLabel?: string; // option label (key)\n\n removable?: boolean;\n autofocus?: boolean;\n\n customErrors?: CustomError[]; // custom error message\n disabledCharacters?: string[]; // characters that are disabled\n enabledCharacters?: string[]; // characters that are enabled\n spacesAllowed?: number;\n}\n\nexport type CustomError = {\n name: string; // name of the error\n message: string | null; // message of the error\n};\n\nexport const DropdownTypes = [\n 'multiple',\n 'dispatch',\n 'ftl-dispatch',\n 'label',\n 'broker',\n 'contact',\n 'shipper',\n 'bank',\n 'dispatcher',\n 'truck',\n 'trailer',\n 'subcontent',\n 'hazardous',\n 'state',\n 'owner',\n 'fuelcard',\n 'pm',\n 'color',\n 'make',\n 'toll',\n 'fuel-stop-transaction',\n] as const;\n\nexport type DropdownType = (typeof DropdownTypes)[number];\n\nexport type DropdownArrays =\n | DropdownOption[]\n | LabelOption[]\n | Broker[]\n | DispatchBoard[]\n | DepartmentContactsPair[]\n | Shipper[]\n | Dispatch[]\n | Bank[]\n | Dispatcher[]\n | TruckOption[]\n | TrailerOption[]\n | Hazardous[]\n | State[]\n | Owner[]\n | FuelCard[]\n | PMOption[]\n | ColorOption[]\n | MakeOption[]\n | TollOption[]\n | Franchise[];\n\nexport type DropdownOptions =\n | DropdownOption\n | LabelOption\n | Broker\n | Contact\n | Shipper\n | Dispatch\n | Bank\n | Dispatcher\n | TruckOption\n | TrailerOption\n | Hazardous\n | State\n | Owner\n | FuelCard\n | PMOption\n | ColorOption\n | MakeOption\n | TollTransponderOption\n | FuelStopStore;\n\nexport type DropdownKeys =\n | DropdownOption[keyof DropdownOption]\n | LabelOption[keyof LabelOption]\n | Dispatch[keyof Dispatch]\n | Broker[keyof Broker]\n | Contact[keyof Contact]\n | Shipper[keyof Shipper]\n | Bank[keyof Bank]\n | Dispatcher[keyof Dispatcher]\n | TruckOption[keyof TruckOption]\n | TrailerOption[keyof TrailerOption]\n | Hazardous[keyof Hazardous]\n | State[keyof State]\n | Owner[keyof Owner]\n | FuelCard[keyof FuelCard]\n | PMOption[keyof PMOption]\n | ColorOption[keyof ColorOption]\n | MakeOption[keyof MakeOption]\n | TollTransponderOption[keyof TollTransponderOption]\n | FuelStopStore[keyof FuelStopStore];\n\nexport type DropdownGroups = Franchise;\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'remapPmIcons',\n})\nexport class RemapPmIconsPipe implements PipeTransform {\n transform(pm: string | null | undefined): string {\n if (!pm) return 'cai-pm-base';\n\n switch (pm) {\n case 'Reefer Unit':\n return 'cai-repair-reefer';\n case 'Alignment':\n return 'cai-pm-alignment';\n case 'PTO Pump':\n return 'cai-pm-pto-pump';\n case 'Engine Oil & Filter':\n return 'cai-pm-engine-oil-filter';\n case 'Air Filter':\n return 'cai-pm-air-filter';\n case 'Belts':\n return 'cai-pm-belts';\n case 'Transmission Fluid':\n return 'cai-pm-transmission-fluid';\n case 'Engine Tune-Up':\n return 'cai-pm-engine-tune-up';\n case 'Oil Pump':\n return 'cai-pm-engine-oil-filter';\n case 'AC Compressor':\n return 'cai-pm-engine-tune-up';\n case 'Battery':\n return 'cai-pm-battery';\n case 'Turbo':\n return 'cai-pm-turbo';\n case 'Radiator':\n return 'cai-pm-radiator';\n case 'Air Compressor':\n return 'cai-pm-transmission-fluid';\n case 'Fuel Pump':\n return 'cai-pm-belts';\n case 'Water Pump':\n return 'cai-pm-air-filter';\n case 'Brake Chamber':\n return 'cai-pm-brake-chamber';\n default:\n return 'cai-pm-base';\n }\n }\n}\n","import {\n Component,\n input,\n output,\n signal,\n effect,\n Optional,\n Self,\n} from '@angular/core';\n\n// Bootstrap\nimport {\n NgbPopover,\n NgbTooltip,\n NgbTooltipModule,\n} from '@ng-bootstrap/ng-bootstrap';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Models\nimport { PmItem } from '../../models/pm.model';\n\n// Modules\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\n\n// Pipes\nimport { RemapPmIconsPipe } from '../input/pipes/remap-pm-icons.pipe';\n\n@Component({\n selector: 'cai-pm',\n templateUrl: './pm.component.html',\n styleUrl: './pm.component.scss',\n imports: [\n // Components\n SvgIconComponent,\n\n // Bootstrap\n NgbPopover,\n NgbTooltipModule,\n\n // Modules\n FormsModule,\n\n // Pipes\n RemapPmIconsPipe,\n ],\n})\nexport class PmComponent implements ControlValueAccessor {\n /**\n * List of PM items passed from the parent component.\n * Used to render all available PM options.\n */\n items = input<PmItem[]>([]);\n\n /**\n * Event emitted when the \"Add new\" button is clicked.\n * The parent component can listen to this and perform appropriate actions.\n */\n onAdd = output<void>();\n\n onSelectionChange = output<PmItem | null>();\n\n /**\n * The currently selected PM item.\n * Used to track and display the selected item's title and logo.\n */\n selectedPmItem = signal<PmItem | null>(null);\n\n /**\n * Disabled state for forms integration.\n */\n disabled = signal<boolean>(false);\n\n /**\n * Holder for incoming value from writeValue to resolve against items.\n */\n private _incomingValue: PmItem | number | string | null | undefined =\n undefined;\n\n // ControlValueAccessor callbacks\n onChange: (value: number | null) => void = () => {};\n onTouched: () => void = () => {};\n\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Resolve incoming value when items or value change\n effect(() => {\n const list = this.items();\n const incoming = this._incomingValue;\n if (incoming === undefined) return;\n\n if (incoming === null) {\n this.selectedPmItem.set(null);\n return;\n }\n\n const resolved = list?.find((i) => i.id === incoming) ?? null;\n this.selectedPmItem.set(resolved);\n });\n }\n\n /**\n * Boolean signal indicating whether the PM popover is currently visible.\n * Used to apply conditional styling or behavior when the popover is shown or hidden.\n */\n showPmPopover = signal<boolean>(false);\n\n /**\n * Called when the \"Add new\" button is clicked.\n * Emits the `onAdd` event to notify the parent component.\n */\n onAddItem(): void {\n this.onAdd.emit();\n }\n\n /**\n * Opens the tooltip when hovering over a PM item.\n */\n onShowTooltip(tooltip: NgbTooltip) {\n tooltip.open();\n }\n\n /**\n * Closes the tooltip when the mouse leaves a PM item.\n */\n onHideTooltip(tooltip: NgbTooltip) {\n tooltip.close();\n }\n\n /**\n * Called when the PM popover becomes visible.\n */\n onPmShown() {\n this.showPmPopover.set(true);\n }\n\n /**\n * Called when the PM popover is hidden.\n */\n onPmHidden() {\n this.showPmPopover.set(false);\n }\n\n /**\n * Called when a PM item is clicked.\n * Sets the `selectedPmItem` with the clicked item's data.\n */\n onSelectedItem(item: PmItem) {\n this.selectedPmItem.set(item);\n this.onSelectionChange.emit(item);\n this.onChange(item.id ?? null);\n this.onTouched();\n }\n\n /**\n * Clears the selected PM item.\n * Resets id, title and logoName.\n */\n onClear() {\n this.selectedPmItem.set(null);\n this.onSelectionChange.emit(null);\n this.onChange(null);\n this.onTouched();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: number | string | null): void {\n this._incomingValue = value;\n }\n\n registerOnChange(fn: (value: number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","@let showPm = showPmPopover() === true;\n<!-- -->\n@let selectedItem = selectedPmItem(); @let isDisabled = disabled();\n<!-- -->\n\n<ng-template #pmTooltip>\n <span class=\"tooltip-text\">{{ selectedItem?.title ?? \"PM\" }}</span>\n</ng-template>\n<ng-template #pmPopover>\n <div class=\"pm-popover\">\n @if(selectedItem){\n <div class=\"clear-container\">\n <div class=\"clear\" (click)=\"onClear()\">\n <span>Clear</span>\n <svg-icon class=\"icon icon-sm\" name=\"cai-minus\"></svg-icon>\n </div>\n <div class=\"divider\"></div>\n </div>\n }\n <div class=\"add\" (click)=\"onAddItem()\">\n <span>Add new</span>\n <svg-icon class=\"icon icon-sm\" name=\"cai-plus\"></svg-icon>\n </div>\n @for (item of items(); track item.id;) {\n <div\n class=\"pm-item\"\n (click)=\"onSelectedItem(item)\"\n [class.selectedDesign]=\"selectedItem?.title === item.title\"\n >\n <div class=\"icon\">\n <svg-icon\n class=\"pm-item-icon\"\n [name]=\"item.title | remapPmIcons\"\n ></svg-icon>\n </div>\n <span class=\"pm-item-text\">{{ item.title }}</span>\n <svg-icon\n class=\"icon icon-sm checkmark-icon\"\n name=\"cai-checkmark\"\n ></svg-icon>\n </div>\n }\n </div>\n</ng-template>\n\n<div\n class=\"pm-container\"\n #buttonContainer\n [class.pm-icon-selected]=\"!!selectedItem\"\n>\n <button\n type=\"button\"\n class=\"icon-container\"\n [class.pm-focus]=\"showPm\"\n [ngbPopover]=\"pmPopover\"\n [triggers]=\"isDisabled ? '' : 'click'\"\n autoClose=\"outside inside\"\n container=\"body\"\n placement=\"bottom-left\"\n popoverClass=\"popover cai-dropdown\"\n (shown)=\"onPmShown()\"\n (hidden)=\"onPmHidden()\"\n [disabled]=\"isDisabled\"\n >\n <svg-icon\n [ngbTooltip]=\"pmTooltip\"\n (mouseenter)=\"onShowTooltip(tooltip)\"\n (mouseleave)=\"onHideTooltip(tooltip)\"\n #tooltip=\"ngbTooltip\"\n [triggers]=\"isDisabled ? '' : 'click'\"\n tooltipClass=\"custom-tooltip\"\n [positionTarget]=\"buttonContainer\"\n placement=\"bottom\"\n [name]=\"selectedItem?.title | remapPmIcons\"\n class=\"pm-icon\"\n ></svg-icon>\n </button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberFormat',\n})\nexport class NumberFormatPipe implements PipeTransform {\n transform(value: string): string {\n if (!value) return '';\n\n if (value.includes('.')) {\n const [integerPart, decimalPart] = value.split('.');\n \n // Cap decimal places to maximum 2\n const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';\n \n // Format the integer part with commas\n const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n \n // If there's a decimal part, show it (capped at 2 places)\n if (decimalPart !== undefined) {\n return `${formattedInteger}.${cappedDecimalPart}`;\n }\n \n // If user just typed a decimal point, show it\n return `${formattedInteger}.`;\n }\n\n return value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { NumberFormatPipe } from '../../../pipes/number-format.pipe';\nimport { CustomError } from '../models/input.model';\n\n@Pipe({\n name: 'errorMessage',\n})\nexport class ErrorMessagePipe implements PipeTransform {\n numberFormatPipe = new NumberFormatPipe();\n\n transform(\n errors: ValidationErrors | null | undefined,\n customErrors?: CustomError[] // custom error messages to be displayed in the input\n ): string[] {\n if (!errors) return [];\n\n // Create a map of custom errors for quick lookup\n const customErrorMap = new Map<string, string | null>();\n if (customErrors) {\n customErrors.forEach((error) => {\n customErrorMap.set(error.name, error.message);\n });\n }\n\n const defaultMessages: Record<string, (value?: any) => string> = {\n required: () => 'Required',\n minlength: (value: any) => `${value.requiredLength} Characters Min`,\n maxlength: (value: any) => `${value.requiredLength} Characters Max`,\n min: (value: any) =>\n `Min ${this.numberFormatPipe.transform(String(value.min))}`,\n max: (value: any) =>\n `Max ${this.numberFormatPipe.transform(String(value.max))}`,\n pattern: () => 'Invalid format',\n hasUppercase: () => 'Must contain at least one uppercase letter',\n hasNumber: () => 'Must contain at least one number',\n hasSymbol: () => 'Must contain at least one symbol',\n passwordDontMatch: () => \"Passwords don't match\",\n };\n\n return Object.entries(errors)\n .map(([key, value]) => {\n // Check if there's a custom error for this key\n if (customErrorMap.has(key)) {\n const customMessage = customErrorMap.get(key);\n return customMessage || '';\n }\n\n // Fall back to default message\n const getMessage = defaultMessages[key];\n return getMessage ? getMessage(value) : 'Invalid';\n })\n .filter((message): message is string => message !== null); // Remove null values\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'highlightSearch'\n})\nexport class HighlightSearchPipe implements PipeTransform {\n /**\n * Formats an option for the dropdown by highlighting the search value if it exists in the option.\n * @param option - The option to format.\n * @param searchValue - The value to search and highlight within the option.\n * @returns The formatted option.\n */\n transform(option: string, searchValue: string | undefined | null): string {\n if (!searchValue || typeof searchValue !== 'string' || searchValue.trim() === '') {\n return option;\n }\n\n const escapedSearchValue = searchValue.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&'\n );\n\n const regex = new RegExp(escapedSearchValue, 'gi');\n\n if (option.toLowerCase().includes(searchValue.toLowerCase())) {\n return option.replace(regex, '<span class=\"highlight\">$&</span>');\n }\n\n return option;\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @ngdoc pipe\n * @name currencyPipe\n * @description\n * Formats a given dollar amount into a compact string (e.g., $35.21K, $1.23M).\n *\n * Usage:\n * {{ value | currency }}\n *\n * Example:\n * {{ 35210 | currency }} // outputs: $35.21K\n * {{ 1234567 | currency }} // outputs: $1.23M\n * {{ 999 | currency }} // outputs: $999\n * {{ 1234567890 | currency }} // outputs: $1.23B\n */\n@Pipe({\n name: 'currency',\n})\nexport class CurrencyPipe implements PipeTransform {\n /**\n * Transforms a numeric value into a formatted currency string.\n *\n * @param {number | string} value The dollar amount to format. Can be a number or a string that can be parsed to a number.\n * @returns {string} The formatted currency string, or '$0.00' if the input is invalid.\n */\n transform(value: number | string): string {\n let amount: number;\n if (typeof value === 'string') {\n amount = parseFloat(value);\n } else if (typeof value === 'number') {\n amount = value;\n } else {\n console.error(\n 'Invalid input for currencyPipe: value must be a number or a string convertible to a number.'\n );\n return '$0.00';\n }\n\n if (isNaN(amount)) {\n console.error('Invalid number provided to currencyPipe.');\n return '$0.00';\n }\n\n const suffixes = ['', 'K', 'M', 'B', 'T']; // K = Thousand, M = Million, B = Billion, T = Trillion\n const absAmount = Math.abs(amount);\n\n let suffixIndex = 0;\n let divisor = 1;\n\n while (absAmount >= 1000 * divisor && suffixIndex < suffixes.length - 1) {\n divisor *= 1000;\n suffixIndex++;\n }\n\n let formattedNumber = (amount / divisor).toFixed(2);\n\n return `$${formattedNumber}${suffixes[suffixIndex]}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n Bank,\n Broker,\n CaiInputConfig,\n ColorOption,\n MakeOption,\n DepartmentContactsPair,\n Dispatch,\n DispatchBoard,\n Dispatcher,\n DropdownArrays,\n FuelCard,\n Hazardous,\n LabelOption,\n Owner,\n Shipper,\n State,\n TrailerType,\n TruckType,\n TollOption,\n Franchise,\n FuelStopStore,\n} from '../models';\n\n@Pipe({\n name: 'filterBySearch',\n})\nexport class FilterBySearchPipe implements PipeTransform {\n hasProperty<T extends object>(obj: T, prop: PropertyKey): prop is keyof T {\n return prop in obj;\n }\n\n transform(\n options: DropdownArrays,\n value: string | undefined | null,\n type: CaiInputConfig['dropdown'],\n shouldSearch?: boolean,\n foldedBoards?: number[],\n label?: string,\n openGroup?: number | null\n ): any[] {\n const optionLabel = label || 'label';\n\n if (!Array.isArray(options)) {\n return [];\n }\n\n if (!options.length) {\n return [];\n }\n\n if (typeof value !== 'string') {\n // For fuel-stop-transaction, we still need to process openGroup logic even without search\n if (type === 'fuel-stop-transaction') {\n let franchises = (options as Franchise[]) || [];\n\n // Process each franchise based on openGroup, even without search\n franchises = franchises.map((franchise) => {\n const isOpen = openGroup === franchise.id;\n\n if (!isOpen) {\n // Franchise is closed - show franchise but no stores\n const { fuelStopStores, ...rest } = franchise;\n return rest as Franchise;\n }\n\n // Franchise is open - show franchise with stores\n return franchise;\n });\n\n return franchises as Franchise[];\n }\n\n return options;\n }\n\n const searchValue = value?.trim().toLowerCase();\n\n switch (type) {\n case 'dispatch':\n case 'ftl-dispatch':\n if (!(options as DispatchBoard[]) || !(options as Dispatch[]))\n return [];\n\n // TODO: Leave only board variant once backend is fixed\n let dispatches = (options as DispatchBoard[]) || [];\n\n if (!this.hasProperty(dispatches[0], 'dispatches')) {\n dispatches = [\n {\n dispatcher: 'NOBOARDSVARIANT',\n count: options.length,\n id: 0,\n dispatches: options as Dispatch[],\n teamBoard: false,\n },\n ];\n }\n\n if (!shouldSearch) {\n return dispatches as DispatchBoard[];\n }\n\n if (searchValue) {\n dispatches = dispatches.map((board) => {\n const newBoard = { ...board };\n\n newBoard.dispatches = board.dispatches.filter((dispatch) => {\n const truckIdMatch = dispatch.truck.truckNumber\n ?.toString()\n .toLowerCase()\n .includes(searchValue);\n const trailerIdMatch = dispatch.trailer?.trailerNumber\n ?.toString()\n .toLowerCase()\n .includes(searchValue);\n\n let driverNameMatch = (\n dispatch.driver?.firstName?.toLowerCase() +\n ' ' +\n dispatch.driver?.lastName?.toLowerCase()\n ).includes(searchValue);\n\n if (dispatch.coDriver) {\n driverNameMatch = (\n dispatch.driver.firstName.toLowerCase() +\n ' & ' +\n dispatch.coDriver.firstName.toLowerCase()\n ).includes(searchValue);\n }\n\n return truckIdMatch || trailerIdMatch || driverNameMatch;\n });\n\n return newBoard;\n });\n }\n\n if (foldedBoards?.length && !searchValue) {\n dispatches = dispatches.map((board) => {\n if (foldedBoards.includes(board.id)) {\n const { dispatches, ...rest } = board;\n\n return rest as DispatchBoard;\n }\n return board;\n });\n }\n\n return dispatches as DispatchBoard[];\n case 'broker':\n const brokers = (options as Broker[]) || [];\n\n if (!shouldSearch) {\n return brokers as Broker[];\n }\n\n if (searchValue) {\n return brokers.filter((broker) =>\n (broker.businessName || '').toLowerCase().includes(searchValue)\n );\n }\n return brokers;\n case 'contact':\n const contacts =\n (options as DepartmentContactsPair[]).sort(\n (a, b) => (a.department?.id || 0) - (b.department?.id || 0)\n ) || [];\n\n if (!shouldSearch) {\n return contacts;\n }\n\n if (searchValue) {\n return contacts.map((contact) => {\n return {\n ...contact,\n contacts: contact.contacts?.filter((contact) =>\n (contact.contactName || '').toLowerCase().includes(searchValue)\n ),\n };\n });\n }\n return contacts;\n case 'shipper':\n const shippers = (options as Shipper[]) || [];\n\n if (!shouldSearch) {\n return shippers;\n }\n\n if (searchValue) {\n return shippers.filter((shipper) =>\n (shipper.businessName + ' ' + shipper.address?.address || '')\n .toLowerCase()\n .includes(searchValue)\n );\n }\n return shippers;\n case 'label':\n const labels = (options as LabelOption[]) || [];\n\n if (!shouldSearch) {\n return labels;\n }\n\n if (searchValue) {\n return labels.filter((label) =>\n label.name?.toLowerCase().includes(searchValue)\n );\n }\n return labels;\n case 'bank':\n const banks = (options as Bank[]) || [];\n\n if (!shouldSearch) {\n return banks;\n }\n\n if (searchValue) {\n return banks.filter((bank) =>\n bank.name?.toLowerCase().includes(searchValue)\n );\n }\n return banks;\n case 'dispatcher':\n const dispatcher = (options as Dispatcher[]) || [];\n\n if (!shouldSearch) {\n return dispatcher;\n }\n\n if (searchValue) {\n return dispatcher.filter((bank) =>\n bank.fullName?.toLowerCase().includes(searchValue)\n );\n }\n return dispatcher;\n case 'truck':\n const trucks = (options as TruckType[]) || [];\n\n if (!shouldSearch) {\n return trucks;\n }\n\n if (searchValue) {\n return trucks.filter((truck) =>\n (truck.name || '').toLowerCase().includes(searchValue)\n );\n }\n return trucks;\n case 'trailer':\n const trailers = (options as TrailerType[]) || [];\n\n if (!shouldSearch) {\n return trailers;\n }\n\n if (searchValue) {\n return trailers.filter((trailer) =>\n (trailer.name || '').toLowerCase().includes(searchValue)\n );\n }\n return trailers;\n case 'hazardous':\n const hazardous = (options as Hazardous[]) || [];\n\n if (!shouldSearch) {\n return hazardous;\n }\n\n if (searchValue) {\n return hazardous.filter((hazardous) =>\n hazardous.description?.toLowerCase().includes(searchValue)\n );\n }\n return hazardous;\n case 'state':\n const states = (options as State[]) || [];\n\n if (!shouldSearch) {\n return states;\n }\n\n if (searchValue) {\n return states.filter((state) =>\n (state?.stateShortName + ' ' + state?.stateName)\n ?.toLowerCase()\n .includes(searchValue)\n );\n }\n return states;\n case 'owner':\n const owners = (options as Owner[]) || [];\n\n if (!shouldSearch) {\n return owners;\n }\n\n if (searchValue) {\n return owners.filter((owner) =>\n (owner.ein?.toLowerCase() || '')\n .concat(' ', owner.name?.toLowerCase() || '')\n .includes(searchValue)\n );\n }\n return owners;\n case 'fuelcard':\n const fuelcards = (options as FuelCard[]) || [];\n\n if (!shouldSearch) {\n return fuelcards;\n }\n\n if (searchValue) {\n return fuelcards.filter((fuelcard) =>\n (fuelcard.number?.toLowerCase() || '')\n .concat(' ', fuelcard.brand?.toLowerCase() || '')\n .concat(' ', fuelcard.account?.toLowerCase() || '')\n .includes(searchValue)\n );\n }\n return fuelcards;\n case 'color':\n const colors = (options as ColorOption[]) || [];\n\n if (!shouldSearch) {\n return colors;\n }\n\n if (searchValue) {\n return colors.filter((color) =>\n color.name?.toLowerCase().includes(searchValue)\n );\n }\n return colors;\n case 'make':\n const makes = (options as MakeOption[]) || [];\n\n if (!shouldSearch) {\n return makes;\n }\n\n if (searchValue) {\n return makes.filter((make) =>\n make.name?.toLowerCase().includes(searchValue)\n );\n }\n return makes;\n case 'toll':\n const tolls = (options as TollOption[]) || [];\n\n if (!shouldSearch) {\n return tolls;\n }\n\n if (searchValue) {\n return tolls.map((toll) => {\n return {\n ...toll,\n tollTransponders: toll.tollTransponders?.filter((transponder) =>\n transponder.name?.toLowerCase().includes(searchValue)\n ),\n };\n });\n }\n return tolls;\n case 'fuel-stop-transaction':\n if (!(options as Franchise[]) || !(options as FuelStopStore[]))\n return [];\n\n let franchises = (options as Franchise[]) || [];\n\n if (!shouldSearch) {\n return franchises as Franchise[];\n }\n\n // Process each franchise: if it's the open one, show stores; if closed, hide stores\n franchises = franchises.map((franchise) => {\n const isOpen = openGroup === franchise.id;\n\n if (!isOpen) {\n // Franchise is closed - show franchise but no stores\n const { fuelStopStores, ...rest } = franchise;\n return rest as Franchise;\n }\n\n // Franchise is open - show franchise with stores\n const newFranchise = { ...franchise };\n\n // If searching and this is the open franchise, filter the stores\n if (searchValue) {\n newFranchise.fuelStopStores = franchise.fuelStopStores.filter(\n (fuelStopStore) => {\n const storeMatch = fuelStopStore.store\n ?.toString()\n .toLowerCase()\n .includes(searchValue);\n\n const city = fuelStopStore.address?.city ?? '';\n const state = fuelStopStore.address?.stateShortName ?? '';\n const zip = fuelStopStore.address?.zipCode ?? '';\n\n const cityStateZipMatch = (\n city +\n (state || zip ? ', ' : '') +\n state +\n ' ' +\n zip\n )\n ?.toLowerCase()\n .trim()\n .includes(searchValue);\n\n return storeMatch || cityStateZipMatch;\n }\n );\n }\n\n return newFranchise;\n });\n\n // If searching, filter closed franchises by businessName but always keep the open one\n if (searchValue) {\n franchises = franchises.filter((franchise) => {\n const isOpen = openGroup === franchise.id;\n // Always show open franchise, filter closed ones by businessName\n return (\n isOpen ||\n franchise.businessName?.toLowerCase().includes(searchValue)\n );\n });\n }\n\n return franchises as Franchise[];\n\n default:\n const dropdownOptions = options as any[];\n\n if (!shouldSearch) {\n return options;\n }\n\n if (searchValue) {\n return dropdownOptions.filter((option) =>\n option[optionLabel]?.toLowerCase().includes(searchValue)\n );\n }\n\n return options;\n }\n }\n}\n","export class MaskHelper {\n static extractUserInput(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '');\n }\n\n static isPlaceholder(char: string): boolean {\n return char === '0' || char === 'a' || char === '*';\n }\n\n static charMatchesPlaceholder(char: string, placeholder: string): boolean {\n if (placeholder === '0') return /^\\d$/.test(char);\n if (placeholder === 'a') return /^[a-zA-Z]$/.test(char);\n if (placeholder === '*') return /^[a-zA-Z0-9]$/.test(char);\n return false;\n }\n\n /**\n * Applies the mask to a given string of user input.\n * @param realValue The clean user input.\n * @param mask The mask pattern.\n * @returns An object with the formatted value and the final real value.\n */\n static applyMask(\n realValue: string,\n mask: string\n ): { formattedValue: string; finalRealValue: string } {\n let formatted = '';\n let realValueIndex = 0;\n let maskIndex = 0;\n let newRealValue = '';\n\n while (realValueIndex < realValue.length && maskIndex < mask.length) {\n const maskChar = mask[maskIndex];\n const realChar = realValue[realValueIndex];\n\n if (this.isPlaceholder(maskChar)) {\n if (this.charMatchesPlaceholder(realChar, maskChar)) {\n formatted += realChar;\n newRealValue += realChar;\n maskIndex++;\n realValueIndex++;\n } else {\n break;\n }\n } else {\n formatted += maskChar;\n maskIndex++;\n }\n }\n return { formattedValue: formatted, finalRealValue: newRealValue };\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { MaskHelper } from './helpers';\n\n@Directive({\n selector: '[appPassword]',\n})\nexport class PasswordDirective implements OnInit {\n /**\n * Input property to enable or disable the password masking behavior.\n */\n appPassword = input<boolean>(true);\n\n /**\n * Input property to hide or show the password\n */\n visible = input<boolean>(false);\n\n /**\n * Input property to specify the type of the password\n */\n account = input<boolean>(false);\n\n /**\n * Input property to specify how many characters from the end of the\n * password should be revealed. Defaults to 0 (fully masked).\n */\n reveal = input<number>(0);\n\n appMask = input<string>('');\n\n max = input<number | undefined>(0);\n\n /**\n * Stores the actual, unmasked password value,\n * while the input element displays a masked version.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n /**\n * Lifecycle hook called after Angular initializes the directive's data-bound properties.\n * If password masking is enabled, it sets up the initial masking.\n */\n ngOnInit(): void {\n if (this.appPassword() && this.reveal() > 0) {\n this.setupPasswordMasking();\n }\n }\n\n /**\n * Sets up the initial state for password masking.\n * It reads the initial value from the input (if any) as the `realValue`\n * and then updates the input's display to show the masked version.\n */\n private setupPasswordMasking(): void {\n const input = this.el.nativeElement;\n this.realValue = input.value || ''; // Assume initial value is unmasked or is the real one\n this.updateDisplayValue();\n }\n\n /**\n * HostListener for the 'input' event on the host element.\n * This is the core logic for synchronizing `realValue` with user input\n * on the masked field. It infers changes to `realValue`\n * based on `event.data`, cursor position, and the difference in length\n * between the input's current display value and the previous `realValue`.\n * @param event - The InputEvent object.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appPassword() || !this.reveal()) return;\n const input = this.el.nativeElement;\n let cursorPosition = input.selectionStart || 0;\n const displayValue = input.value;\n const lengthDiff = displayValue.length - this.realValue.length;\n let newRealValue = this.realValue;\n\n if (event.data && lengthDiff <= 0) {\n const deletedCount = Math.abs(lengthDiff) + event.data.length;\n const replaceStart = cursorPosition - event.data.length;\n newRealValue =\n this.realValue.slice(0, Math.max(0, replaceStart)) +\n event.data +\n this.realValue.slice(Math.max(0, replaceStart) + deletedCount);\n } else if (lengthDiff > 0) {\n const addedChars =\n event.data ||\n displayValue.slice(cursorPosition - lengthDiff, cursorPosition);\n const insertPosition = cursorPosition - addedChars.length;\n newRealValue =\n this.realValue.slice(0, Math.max(0, insertPosition)) +\n addedChars +\n this.realValue.slice(Math.max(0, insertPosition));\n } else if (lengthDiff < 0) {\n const deletedCount = Math.abs(lengthDiff);\n newRealValue =\n this.realValue.slice(0, cursorPosition) +\n this.realValue.slice(cursorPosition + deletedCount);\n }\n\n // Only enforce numeric input if account() is true\n if (this.account() && !/^\\d*$/.test(newRealValue)) {\n // Revert the input field to the previous masked value and restore cursor\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition - 1); // Move cursor back\n return;\n }\n\n if (this.max()) {\n if (newRealValue.length > this.max()!) {\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition - 1); // Move cursor back\n\n return;\n }\n }\n\n if (this.appMask() && this.appMask() !== '') {\n const { formattedValue } = MaskHelper.applyMask(\n MaskHelper.extractUserInput(newRealValue),\n this.appMask()\n );\n cursorPosition =\n cursorPosition + formattedValue.length - newRealValue.length;\n newRealValue = formattedValue;\n }\n\n this.realValue = newRealValue;\n\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition);\n this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'cut' event.\n * Prevents default cut behavior to operate on `realValue`.\n * It copies the corresponding part of `realValue` to the clipboard\n * and updates `realValue` and the display.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appPassword() || !this.reveal()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default cut action\n const cutText = this.realValue.slice(start, end); // Cut from realValue\n event.clipboardData?.setData('text/plain', cutText);\n\n this.realValue =\n this.realValue.slice(0, start) + this.realValue.slice(end);\n\n this.updateDisplayValue();\n this.setCursorPosition(start); // Set cursor to the start of the cut area\n this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'copy' event.\n * Prevents default copy behavior to ensure the unmasked `realValue` segment is copied.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appPassword() || !this.reveal()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default copy action\n const copiedText = this.realValue.slice(start, end); // Copy from realValue\n event.clipboardData?.setData('text/plain', copiedText);\n }\n }\n\n /**\n * Updates the input element's display value with a masked version of `realValue`.\n * Uses '•' for masked characters. Respects the `reveal` input to show\n * a specified number of characters from the end of the password.\n * This method is responsible for creating the visual masking.\n */\n private updateDisplayValue(): void {\n if (!this.appPassword() || !this.reveal()) return;\n if (this.visible()) {\n this.el.nativeElement.value = this.realValue;\n return;\n }\n\n const revealCount = this.reveal();\n const realLength = this.realValue.length;\n let displayValue = '';\n\n if (revealCount > 0 && realLength > revealCount) {\n const actualRevealCount = Math.min(revealCount, realLength);\n // Calculate how many characters to mask\n const maskedCharsCount = realLength - actualRevealCount;\n\n if (maskedCharsCount > 0) {\n // Get the part of the real value that should be revealed\n const revealedPart = this.realValue.slice(maskedCharsCount); // Corrected from slice(realLength - actualRevealCount)\n displayValue = '•'.repeat(maskedCharsCount) + revealedPart;\n } else {\n // If all characters are to be revealed (revealCount >= realLength)\n displayValue = this.realValue;\n }\n } else {\n // Fully mask if revealCount is 0 or realValue is lesser than revealCount\n displayValue = '•'.repeat(realLength);\n }\n\n this.el.nativeElement.value = displayValue;\n }\n\n /**\n * Sets the cursor position within the input field.\n * This is crucial after `updateDisplayValue` changes the entire input value,\n * to maintain a natural cursor behavior for the user.\n * Uses `setTimeout` to ensure the operation occurs after Angular's view update.\n * @param position - The desired cursor position.\n */\n private setCursorPosition(position: number): void {\n const input = this.el.nativeElement;\n // setTimeout ensures this runs after the current browser rendering tick\n setTimeout(() => {\n // Clamp position to be within the bounds of the current display value's length\n const currentLength = input.value.length;\n const newPosition = Math.max(0, Math.min(position, currentLength));\n input.setSelectionRange(newPosition, newPosition);\n }, 0);\n }\n\n /**\n * Dispatches a custom event named 'realValueChange' from the host element.\n * The event's `detail` property contains the unmasked `realValue`.\n * This allows parent components (like your `InputComponent`) to listen for\n * changes to the actual password.\n */\n private dispatchRealValueChange(): void {\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true, // Allows event to bubble up the DOM\n composed: true, // Allows event to cross Shadow DOM boundaries\n detail: this.realValue,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unmasked \"real\" password value.\n * @returns The real password value as a string.\n */\n getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" password value from outside the directive\n * (e.g., when the parent form control's value is changed programmatically).\n * It updates the internal `realValue` and then refreshes the masked display.\n * @param value - The new real password value to set.\n */\n setRealValue(value: string): void {\n this.realValue = value || '';\n this.updateDisplayValue();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { NumberFormatPipe } from '../../../pipes/number-format.pipe';\n\n@Directive({\n selector: '[appNumberFormat]',\n providers: [NumberFormatPipe],\n})\nexport class NumberFormatDirective implements OnInit {\n /**\n * Input property to enable or disable the number formatting.\n * Defaults to true, meaning formatting is active by default.\n */\n appNumberFormat = input<boolean>(true);\n\n /**\n *\n */\n max = input<number>();\n\n /**\n * Input property to enable or disable the number formatting.\n * Defaults to true, meaning formatting is active by default.\n */\n isNumberFormattingDisabled = input<boolean>(false);\n\n /**\n * Input property to enable or disable the number formatting.\n * Defaults to true, meaning formatting is active by default.\n */\n disableDecimals = input<boolean>(false);\n\n prefix = input<string>('');\n\n /**\n * Stores the unformatted, \"real\" numeric value of the input.\n * This is the value that should be used for calculations or form submissions,\n * as opposed to the formatted display value.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n /**\n * Lifecycle hook that is called after Angular has initialized all data-bound\n * properties of a directive.\n * If number formatting is enabled, it sets up the initial formatting.\n */\n ngOnInit(): void {\n if (this.appNumberFormat()) {\n this.setupNumberFormatting();\n }\n }\n\n /**\n * Initializes the number formatting on the input element.\n * It extracts the initial numeric value from the input's current value\n * and then updates the display with the formatted version.\n */\n private setupNumberFormatting(): void {\n const input = this.el.nativeElement;\n // Extract numeric value from whatever might be in the input initially\n this.realValue = this.extractNumericValue(input.value || '');\n this.updateDisplayValue(); // Format and display it\n }\n\n /**\n * HostListener for the 'input' event on the host element.\n * This triggers whenever the user types or pastes content into the input.\n * It extracts the numeric value from the current input, updates the\n * display with the formatted number, moves the cursor to the end,\n * and dispatches a 'realValueChange' event with the unformatted numeric value.\n * @param event - The InputEvent object.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appNumberFormat()) return; // Do nothing if formatting is disabled\n\n const input = this.el.nativeElement;\n const displayValue = input.value;\n\n this.realValue = this.extractNumericValue(displayValue);\n if (this.max()) {\n if (Number(this.realValue) > (this.max() || 0)) {\n this.realValue = this.realValue.slice(0, -1);\n }\n }\n if (this.disableDecimals()) {\n this.realValue = this.realValue.split('.')[0];\n }\n this.updateDisplayValue();\n this.setCursorToEnd(); // Important for UX after reformatting\n this.dispatchRealValueChange(); // Notify parent components of the raw value change\n }\n\n /**\n * HostListener for the 'cut' event.\n * Prevents the default cut behavior to manually handle the value change.\n * It reconstructs the value after the cut, extracts the numeric part,\n * updates the display, sets the cursor, and dispatches the real value.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default cut\n const cutText = input.value.slice(start, end);\n event.clipboardData?.setData('text', this.extractNumericValue(cutText)); // Put numeric part on clipboard\n\n // Reconstruct value without the cut part\n const newValue = input.value.slice(0, start) + input.value.slice(end);\n this.realValue = this.extractNumericValue(newValue);\n\n this.updateDisplayValue();\n this.setCursorToEnd();\n this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'copy' event.\n * Prevents the default copy behavior if there's a selection to ensure\n * that the copied text is the unformatted numeric value of the selection,\n * rather than the potentially formatted display text.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default copy\n const selectedText = input.value.slice(start, end);\n // Copy the underlying numeric value of the selection\n event.clipboardData?.setData(\n 'text',\n this.extractNumericValue(selectedText)\n );\n }\n }\n\n /**\n * HostListener for the 'keydown' event.\n * Filters key presses to allow only digits, a single decimal point,\n * and control keys (Backspace, Arrows, Tab, etc.).\n * This helps maintain a valid numeric input format before the 'input' event fires.\n * @param event - The KeyboardEvent object.\n */\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const controlKeys = [\n 'Backspace',\n 'Delete',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Tab',\n 'Enter',\n 'Escape',\n 'Home',\n 'End',\n ];\n\n // Allow control keys, and modifier key combinations (Ctrl+A, Ctrl+C, etc.)\n if (\n controlKeys.includes(event.key) ||\n event.ctrlKey ||\n event.metaKey ||\n event.altKey\n ) {\n return; // Don't prevent default for these\n }\n\n // Allow a single decimal point if not already present in the realValue\n if (\n event.key === '.' &&\n !this.realValue.includes('.') &&\n !this.disableDecimals()\n ) {\n return;\n }\n\n // Prevent non-digit keys\n if (!/^\\d$/.test(event.key)) {\n event.preventDefault();\n }\n }\n\n /**\n * Extracts a clean numeric string from a given value.\n * It removes any non-digit characters except for a single decimal point.\n * It also ensures that there's only one decimal point and limits\n * the decimal part to two digits.\n * @param value - The string value to clean.\n * @returns A string representing the extracted numeric value.\n */\n private extractNumericValue(value: string): string {\n // Remove all non-digit characters except for the decimal point\n value = value.toString();\n let cleanValue = value.replace(/[^\\d.]/g, '');\n\n // Handle multiple decimal points: keep only the first one\n const parts = cleanValue.split('.');\n if (parts.length > 1) {\n const integerPart = parts[0];\n const decimalPart = parts.slice(1).join(''); // Join back any subsequent parts\n cleanValue = `${integerPart}.${decimalPart}`;\n }\n\n // Limit decimal part to two digits\n if (cleanValue.includes('.')) {\n const [integerPart, decimalPart] = cleanValue.split('.');\n const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';\n cleanValue = `${integerPart}.${cappedDecimalPart}`;\n }\n\n return cleanValue;\n }\n\n /**\n * Updates the input element's display value with the formatted version\n * of the current `realValue`.\n * It uses the `NumberFormatPipe` for formatting.\n */\n private updateDisplayValue(): void {\n const input = this.el.nativeElement;\n let formattedValue = '';\n\n if (this.realValue === '') {\n input.value = '';\n return;\n }\n\n let [integerPart, decimalPart] = this.realValue.split('.');\n\n if (integerPart.length > 1) {\n integerPart = integerPart.replace(/^0+/, '') || '0';\n }\n\n // If number formatting is disabled, skip thousand separators and decimals\n if (this.isNumberFormattingDisabled()) {\n formattedValue = integerPart;\n\n // Still add decimal part if it exists and formatting is not disabled\n if (this.realValue.endsWith('.')) {\n formattedValue = formattedValue + '.';\n } else if (decimalPart !== undefined) {\n formattedValue = formattedValue + '.' + decimalPart;\n }\n } else {\n // Use full formatting with NumberFormatPipe\n const formattedInteger = new NumberFormatPipe().transform(integerPart);\n\n if (this.realValue.endsWith('.')) {\n formattedValue = formattedInteger + '.';\n } else if (decimalPart !== undefined) {\n formattedValue = formattedInteger + '.' + decimalPart;\n } else {\n formattedValue = formattedInteger;\n }\n }\n\n if (this.prefix()) {\n formattedValue = this.prefix() + formattedValue;\n }\n\n input.value = formattedValue;\n }\n\n /**\n * Sets the cursor position to the end of the input field.\n * This is typically called after the input value is reformatted to prevent\n * the cursor from jumping to an unexpected position.\n * Uses `setTimeout` to ensure the operation occurs after Angular's view update.\n */\n private setCursorToEnd(): void {\n const input = this.el.nativeElement;\n // setTimeout ensures this runs after the current browser rendering tick,\n // allowing the value to be fully set in the input before moving the cursor.\n setTimeout(() => {\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }, 0);\n }\n\n /**\n * Dispatches a custom event named 'realValueChange' from the host element.\n * The event's `detail` property contains the unformatted `realValue`.\n * This allows parent components or other directives to listen for changes\n * to the underlying numeric value.\n */\n private dispatchRealValueChange(): void {\n let number = Number(this.realValue) + '';\n if (this.realValue === '') number = '';\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true, // Allows event to bubble up the DOM\n composed: true, // Allows event to cross Shadow DOM boundaries\n detail: number,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unformatted \"real\" numeric value.\n * @returns The real numeric value as a string.\n */\n getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" numeric value from outside the directive.\n * It extracts the numeric part from the provided value and updates the\n * input's display with the formatted version.\n * @param value - The new value to set (can be formatted or unformatted).\n */\n setRealValue(value: string): void {\n this.realValue = this.extractNumericValue(value || '');\n this.updateDisplayValue();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { MaskHelper } from './helpers';\n\n@Directive({\n selector: '[appMask]',\n})\nexport class MaskDirective implements OnInit {\n /**\n * The mask pattern to apply.\n * Placeholders:\n * '0' - Digit (0-9)\n * 'a' - Letter (a-z, A-Z)\n * '*' - Alphanumeric (0-9, a-z, A-Z)\n * @example '(000) 000-0000' for a phone number.\n */\n appMask = input<string>('');\n\n reveal = input<number>(0);\n\n /**\n * Stores the unmasked, \"real\" value of the input, containing only\n * the characters entered by the user that fit the mask placeholders.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n ngOnInit(): void {\n if (this.appMask() && this.el.nativeElement.value) {\n this.formatValue(this.el.nativeElement.value);\n }\n }\n\n /**\n * HostListener for the 'input' event. This is the primary handler for\n * formatting the value as the user types or pastes.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appMask() || this.reveal() !== 0) return;\n this.formatValue(this.el.nativeElement.value);\n //this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'paste' event. It intercepts pasted content,\n * cleans it, and integrates it into the masked value.\n */\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent): void {\n if (!this.appMask()) return;\n //event.preventDefault();\n //const pastedData = event.clipboardData?.getData('text') || '';\n //this.formatValue(this.realValue + pastedData);\n //this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'copy' event. Ensures that copying a selection\n * from the input copies the unmasked, \"real\" value.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appMask()) return;\n const selection = this.el.nativeElement.value.substring(\n this.el.nativeElement.selectionStart || 0,\n this.el.nativeElement.selectionEnd || 0\n );\n if (selection) {\n event.preventDefault();\n const unmaskedSelection = MaskHelper.extractUserInput(selection);\n //event.clipboardData?.setData('text/plain', unmaskedSelection);\n event.clipboardData?.setData('text/plain', selection);\n }\n }\n\n /**\n * HostListener for the 'cut' event. Ensures cutting a selection removes\n * the corresponding part from the real value and reformats the input.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appMask()) return;\n const start = this.el.nativeElement.selectionStart || 0;\n const end = this.el.nativeElement.selectionEnd || 0;\n if (start !== end) {\n event.preventDefault();\n const selection = this.el.nativeElement.value.substring(start, end);\n const unmaskedSelection = MaskHelper.extractUserInput(selection);\n //event.clipboardData?.setData('text/plain', unmaskedSelection);\n event.clipboardData?.setData('text/plain', selection);\n\n const valueBefore = MaskHelper.extractUserInput(\n this.el.nativeElement.value.substring(0, start)\n );\n const valueAfter = MaskHelper.extractUserInput(\n this.el.nativeElement.value.substring(end)\n );\n this.formatValue(valueBefore + valueAfter);\n //this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'keydown' event. It validates key presses against\n * the mask pattern, preventing invalid characters from being entered.\n */\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n const mask = this.appMask();\n if (!mask) return;\n\n const controlKeys = [\n 'Backspace',\n 'Delete',\n 'ArrowLeft',\n 'ArrowRight',\n 'Tab',\n 'Enter',\n 'Escape',\n 'Home',\n 'End',\n ];\n if (controlKeys.includes(event.key) || event.metaKey || event.ctrlKey) {\n return;\n }\n\n const placeholders = mask.replace(/[^0a*]/g, '');\n if (this.realValue.length >= placeholders.length) {\n event.preventDefault();\n return;\n }\n\n const nextPlaceholder = placeholders[this.realValue.length];\n if (!MaskHelper.charMatchesPlaceholder(event.key, nextPlaceholder)) {\n event.preventDefault();\n }\n }\n\n /**\n * The core formatting logic. It takes a value, extracts the valid user\n * input, applies the mask, updates the display, and dispatches the change.\n * @param value The current value from the input field.\n */\n private formatValue(value: string): void {\n const mask = this.appMask();\n if (!mask) return;\n\n const extractedValue = MaskHelper.extractUserInput(value);\n\n const { formattedValue, finalRealValue } = MaskHelper.applyMask(\n extractedValue,\n mask\n );\n this.realValue = finalRealValue;\n\n this.el.nativeElement.value = formattedValue;\n this.setCursorToEnd();\n }\n\n private setCursorToEnd(): void {\n setTimeout(() => {\n const len = this.el.nativeElement.value.length;\n this.el.nativeElement.setSelectionRange(len, len);\n }, 0);\n }\n\n private dispatchRealValueChange(): void {\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true,\n composed: true,\n detail: this.realValue,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unmasked \"real\" value.\n * @returns The real value as a string.\n */\n public getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" value from outside the directive.\n * @param value The new value to set.\n */\n public setRealValue(value: string): void {\n if (this.appMask()) {\n this.formatValue(value || '');\n } else {\n this.el.nativeElement.value = value || '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'initials',\n})\nexport class InitialsPipe implements PipeTransform {\n transform({\n firstName,\n lastName,\n fullName,\n }: {\n firstName?: string | null;\n lastName?: string | null;\n fullName?: string | null;\n }): string {\n let initials = '';\n if (fullName) {\n initials =\n fullName.split(' ')[0].charAt(0).toUpperCase() +\n fullName.split(' ')[1].charAt(0).toUpperCase();\n } else {\n if (firstName) {\n initials += firstName.charAt(0).toUpperCase();\n }\n if (lastName) {\n initials += lastName.charAt(0).toUpperCase();\n }\n }\n return initials;\n }\n}\n","import { Component, input } from '@angular/core';\nimport { Driver, Size } from './models';\nimport { InitialsPipe } from './pipes/initials.pipe';\n\n/**\n * Represents a user avatar component.\n */\n@Component({\n selector: 'cai-avatar',\n imports: [InitialsPipe],\n templateUrl: './avatar.component.html',\n styleUrl: './avatar.component.scss',\n})\nexport class AvatarComponent {\n /**\n * The driver object containing information to display in the avatar.\n * This input is required.\n * @type {Driver}\n */\n driver = input.required<Driver>();\n\n /**\n * The size of the avatar in pixels.\n * @type {Size}\n */\n size = input<Size>(18);\n\n /**\n * Whether the avatar should be rounded or not.\n * @type {boolean}\n */\n rounded = input<boolean>(false);\n\n /**\n * Whether the owner element should be dark or light\n * @type {boolean}\n */\n inverse = input<boolean>(false);\n}\n","@let firstName = driver()?.firstName; @let lastName = driver()?.lastName; @let\nisOwner = driver()?.owner; @let color = driver()?.colorFlag?.name ??\ndriver()?.avatarColor; @let avatarUrl = driver()?.avatarFile?.url ??\ndriver()?.avatarUrl; @let fullName = driver()?.fullName;\n\n<div\n class=\"avatar\"\n [class]=\"{\n 'is-owner': isOwner,\n\n xs: size() === 18,\n sm: size() === 22,\n md: size() === 32,\n lg: size() === 74,\n xl: size() === 160,\n\n blue: color === 'Blue',\n green: color === 'Green',\n red: color === 'Red',\n yellow: color === 'Yellow',\n purple: color === 'Purple',\n gold: color === 'Gold',\n 'light-green': color === 'Light Green',\n orange: color === 'Orange',\n 'light-blue': color === 'Light Blue',\n pink: color === 'Pink',\n brown: color === 'Brown',\n gray: color === 'Gray',\n lime: color === 'Lime',\n navy: color === 'Navy',\n azure: color === 'Azure',\n magenta: color === 'Magenta',\n\n inverse: inverse(),\n rounded: rounded()\n }\"\n>\n @if( avatarUrl ){\n <img class=\"avatar-image\" [src]=\"avatarUrl\" />\n }\n <p class=\"avatar-initials\">\n {{ { firstName, lastName, fullName } | initials }}\n </p>\n</div>\n","// Angular\nimport {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n HostListener,\n input,\n OnInit,\n Optional,\n output,\n Self,\n signal,\n ViewChild,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\n\n// Pipes\nimport { ErrorMessagePipe } from './pipes/error-message.pipe';\nimport { HighlightSearchPipe } from './pipes/highlight-search';\nimport { CurrencyPipe } from '../../pipes/currency.pipe';\nimport { FilterBySearchPipe } from './pipes/filter-by-search.pipe';\nimport { RemapPmIconsPipe } from './pipes/remap-pm-icons.pipe';\n\n// Directives\nimport { PasswordDirective } from './directives/password.directive';\nimport { NumberFormatDirective } from './directives/number-format.directive';\nimport { MaskDirective } from './directives/mask.directive';\n\n// Bootstrap\nimport {\n NgbDropdownModule,\n NgbPopover,\n NgbTooltip,\n} from '@ng-bootstrap/ng-bootstrap';\n\n// Models\nimport {\n Bank,\n Broker,\n CaiInputConfig,\n Contact,\n DepartmentContactsPair,\n Dispatcher,\n DropdownOption,\n LabelColor,\n LabelOption,\n Shipper,\n Dispatch,\n DispatchBoard,\n DropdownArrays,\n DropdownOptions,\n DropdownKeys,\n TruckType,\n TrailerType,\n Hazardous,\n State,\n Owner,\n FuelCard,\n PMOption,\n MakeOption,\n ColorOption,\n TollOption,\n TollTransponderOption,\n FuelStopStore,\n Franchise,\n DropdownGroups,\n} from './models';\n\n// Components\nimport { AvatarComponent } from '../avatar/avatar.component';\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Autofill interface\ninterface AutofillableFormControl extends AbstractControl {\n _autofilled?: boolean;\n}\n\n/**\n * This component is a generic input component that can be used to create various types of inputs.\n */\n@Component({\n selector: 'cai-input',\n imports: [\n // Pipes\n ErrorMessagePipe,\n CurrencyPipe,\n HighlightSearchPipe,\n FilterBySearchPipe,\n RemapPmIconsPipe,\n // Directives\n PasswordDirective,\n NumberFormatDirective,\n MaskDirective,\n // Bootstrap\n NgbDropdownModule,\n NgbTooltip,\n NgTemplateOutlet,\n // Components\n SvgIconComponent,\n AvatarComponent,\n ],\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n})\nexport class InputComponent\n implements ControlValueAccessor, AfterViewInit, OnInit\n{\n // Refs\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n @ViewChild('containerRef') containerRef!: ElementRef<HTMLInputElement>;\n @ViewChild('dropdown') dropdown!: NgbPopover;\n @ViewChild('closeTooltip') closeTooltip!: NgbPopover;\n\n // Directive refs\n @ViewChild(PasswordDirective) PasswordDirective!: PasswordDirective;\n @ViewChild(NumberFormatDirective)\n NumberFormatDirective!: NumberFormatDirective;\n @ViewChild(MaskDirective)\n MaskDirective!: MaskDirective;\n\n // Template refs\n @ViewChild('multipleRef') multipleRef: any;\n @ViewChild('hazardousRef') hazardousRef: any;\n @ViewChild('dropdownOptionsRef') dropdownOptionsRef: any;\n @ViewChild('dispatchesRef') dispatchesRef: any;\n @ViewChild('ftlDispatchRef') ftlDispatchRef: any;\n @ViewChild('labelPickerRef') labelPickerRef: any;\n @ViewChild('brokerRef') brokerRef: any;\n @ViewChild('contactRef') contactRef: any;\n @ViewChild('shipperRef') shipperRef: any;\n @ViewChild('bankRef') bankRef: any;\n @ViewChild('dispatcherRef') dispatcherRef: any;\n @ViewChild('truckRef') truckRef: any;\n @ViewChild('trailerRef') trailerRef: any;\n @ViewChild('stateRef') stateRef: any;\n @ViewChild('ownerRef') ownerRef: any;\n @ViewChild('fuelcardRef') fuelcardRef: any;\n @ViewChild('colorRef') colorRef: any;\n @ViewChild('makeRef') makeRef: any;\n @ViewChild('tollRef') tollRef: any;\n @ViewChild('fuelStopTransactionRef') fuelStopTransactionRef: any;\n\n @ViewChild('pmRef') pmRef: any;\n @ViewChild('selectedPmRef') selectedPmRef: any;\n\n @ViewChild('selectedOwnerRef') selectedOwnerRef: any;\n @ViewChild('selectedHazardousRef') selectedHazardousRef: any;\n @ViewChild('selectedDispatchRef') selectedDispatchRef: any;\n @ViewChild('selectedLabelRef') selectedLabelRef: any;\n @ViewChild('selectedBrokerRef') selectedBrokerRef: any;\n @ViewChild('selectedContactRef') selectedContactRef: any;\n @ViewChild('selectedShipperRef') selectedShipperRef: any;\n @ViewChild('selectedBankRef') selectedBankRef: any;\n @ViewChild('selectedDispatcherRef') selectedDispatcherRef: any;\n @ViewChild('selectedTruckRef') selectedTruckRef: any;\n @ViewChild('selectedTrailerRef') selectedTrailerRef: any;\n @ViewChild('selectedStateRef') selectedStateRef: any;\n @ViewChild('selectedFuelcardRef') selectedFuelcardRef: any;\n @ViewChild('selectedColorRef') selectedColorRef: any;\n @ViewChild('selectedMakeRef') selectedMakeRef: any;\n @ViewChild('selectedTollRef') selectedTollRef: any;\n\n // Inputs\n\n /**\n * Defines the unique identifier for the input element.\n * It is provided by the parent component as an Angular `input()` signal.\n */\n id = input<string>('');\n\n /**\n * Configuration object for the input's behavior and appearance.\n * It is provided by the parent component as an Angular `input()` signal.\n - `type`: HTML input type (`'text'`, `'password'`, `'account'`, `'number'`).\n - `name`: The HTML `name` attribute.\n - `required`: If `true`, the input is required for form submission.\n - `alignment`: Text alignment within the input (`'left'` or `'right'`).\n - `inverse`: If `true`, renders the input in a dark mode style.\n - `reveal`: For password inputs, the number of characters to reveal from the end.\n - `icon`: Name of an icon to display (e.g., `'cai-email'`).\n - `iconColor`: Color of the displayed icon (e.g., `'#FF0000'`).\n - `dropdown`: If `true`, the input is associated with a dropdown menu, can also have `'dispatch'`, `'ftl-dispatch'`, `'broker'`, `'contact'`, `'shipper'`, `'dispatcher'`, `'truck'`, `'trailer'`, `'bank'`, `'label'`, `'state'`, `'owner'`, `'fuelcard'`, `'pm'`, or `'subcontent'` variants.\n - `options`: An array of options for the dropdown can be of type `DropdownOption[]` | `LabelOption[]` | `DispatchBoard[]` | `Broker[]` | `DepartmentContactsPair[]` | `Shipper[]` | `Bank[]` | `Dispatcher[]` | `TruckOption[]` | `TrailerOption[]` | `Hazardous[]` | `State[]` | `Owner[]` | `FuelCard[]` | `PMOption[]`.\n - `labelColors`: An array of label colors for the label picker.\n - `search`: Enables search within the dropdown.\n - `add`: Enables 'add new' functionality in the dropdown.\n - `placeholderBehavior`: Defines placeholder animation (`'dynamic'` , `'fade'`, `'static'`).\n - `errorBehavior`: Defines error animation (`'static'`, `'dynamic'`, `'floating'`).\n - `label`: An `aria-label` for accessibility.\n - `list`: If `true`, the input has no validation, no background and no separators for icons\n - `inTable`: If `true`, has in-table styles\n - `mask`: A pattern string for input masking (e.g., `'(000) 000-0000'`).\n - `min`: Minimum value for number inputs.\n - `max`: Maximum value for number inputs (e.g., `999` meaning 3 characters) or maximum length for text inputs in characters.\n - `textTransform`: Text transformation for text inputs (`'capitalize'`, `'uppercase'`, `'lowercase'`).\n - `textColor`: Text color for text inputs (`'positive'`).\n - `step`: Step value for number inputs. Can also be `automatic` for automatic step calculation.\n - `withButtons`: If `true`, adds increment/decrement buttons for number inputs.\n - `autocomplete`: The HTML `autocomplete` attribute.\n - `disabled`: If `true`, the input is disabled (for use without reactive form).\n - `passwordRequirements`: If `true`, shows password requirements for password inputs.\n - `optionValue`: The key of the option to use in the formControl for the selected option in the dropdown.\n - `optionLabel`: The key of the option to use as the label in the dropdown.\n - `subContent`: An optional slot for additional content to be displayed next to the content the user is entering. (ex. lbs, months, etc.)\n - `removable`: If `true`, displays `cai-delete` icon over clear button.\n - `autofocus`: If `true`, the input will be focused when the component is initialized.\n - `canOpenModal`: If `true`, the input can open a modal for adding new options.\n - `customErrors`: An array of custom error messages to be displayed in the input.\n - `isNumberFormattingDisabled`: If `true`, the input will not be formatted as a number.\n */\n config = input<CaiInputConfig>({});\n\n /**\n * Input property to hold the dropdown options.\n */\n options = input<DropdownArrays>([]);\n\n preselectedOptions = input<DropdownArrays | null>(null);\n\n /**\n * Input property to hold the label colors for the label picker.\n */\n labelColors = input<LabelColor[]>();\n\n /**\n * Input property to hide the validation.\n */\n hideValidation = input<boolean>(false);\n\n /**\n * Input property to show the no results message.\n */\n showNoResults = input<boolean>(true);\n\n /**\n * Preselected dropdown option\n */\n preselectedUnit = input<string | null>(null);\n\n // Signals\n\n openGroup = signal<number | null>(null);\n\n closing = signal<boolean>(false);\n\n /**\n * Internal signal to track the disabled state of the input.\n */\n disabled = signal<boolean>(false);\n\n /**\n * Holds the internal, unmasked, and unformatted value of the input.\n */\n value = signal<string>('');\n\n /**\n * Tracks the visibility state for inputs of `type='password' and 'account'`.\n */\n visible = signal<boolean>(false);\n\n /**\n * A signal that holds the locally added options.\n */\n localOptions = signal(this.options());\n\n /**\n * A signal that holds the currently selected option from the dropdown.\n */\n selectedOption = signal<DropdownOptions | null>(null);\n\n /**\n * A signal that holds the currently selected options from the dropdown.\n */\n multipleSelectedOptions = signal<DropdownOptions[]>([]);\n\n /**\n * A signal that indicates whether the input is focused.\n */\n focused = signal<boolean>(false);\n\n /**\n * A signal that indicates whether the input is hovered.\n */\n hovered = signal<boolean>(false);\n\n /**\n * A signal that indicates whether a new option is being added.\n */\n isAdding = signal<boolean>(false);\n\n /**\n * A signal that tracks whether the field has been autofilled.\n */\n isAutofilled = signal<boolean>(false);\n\n // Label picker signals\n\n /**\n * A signal that holds the currently selected color from the label picker.\n */\n selectedColor = signal<LabelColor>({});\n\n isPickingColor = signal<boolean>(false);\n\n // Dispatch board signals\n\n /**\n * A signal that holds the currently selected dispatch board from the dispatch board picker.\n */\n\n foldedBoards = signal<number[]>([]);\n\n randomAutocomplete = signal<string>(this.randomizeAutocomplete());\n\n // Computed signals\n\n /**\n * A computed signal that indicates whether the placeholder selected option should be shown.\n */\n hasText = computed<boolean>(() => {\n return Boolean(\n this.value() ||\n (this.selectedOption() && this.config().dropdown !== 'subcontent') ||\n this.isAdding() ||\n this.isPickingColor() ||\n this.isAutofilled() ||\n !!this.multipleSelectedOptions().length\n );\n });\n\n /**\n * A signal that holds the container width to prevent ExpressionChangedAfterItHasBeenCheckedError.\n */\n containerWidth = signal<number>(0);\n\n /**\n * A computed signal that dynamically calculates the step value for number inputs.\n */\n step = computed(() => {\n const numericValue = parseFloat(this.value() || '0');\n const value = numericValue || 0;\n if (this.config().step === 'automatic') {\n if (value < 20000) return 1000;\n else if (value < 50000) return 5000;\n else if (value < 100000) return 10000;\n else return 20000;\n } else if (this.config().step) return this.config().step as number;\n else {\n return 1;\n }\n });\n\n combinedOptions = computed(() => {\n if (!this.options()) return [];\n if (!this.localOptions()) return this.options();\n return [...this.options(), ...this.localOptions()] as DropdownArrays;\n });\n\n // Dispatch board\n\n dispatchCount = computed<number>(() => {\n if (!(this.options() as DispatchBoard[])) return 0;\n return (this.options() as DispatchBoard[])!.reduce(\n (acc, board) => acc + board.count,\n 0\n );\n });\n\n // Outputs\n onBlur = output();\n onFocused = output();\n\n onValueChange = output<string | number | null>();\n\n /**\n * An output signal that emits the value of the added option.\n */\n onOptionAdded = output<string | LabelOption>();\n\n /**\n * An output signal that emits when the user clicks on the \"ADD NEW\" button in the dropdown.\n */\n onAdd = output();\n\n /**\n * An output signal that emits the `optionValue` or `id` of the changed dropdown option.\n */\n onSelectionChange = output<DropdownKeys | null>();\n onSelectedObject = output<DropdownOptions | null>();\n onSelectedGroup = output<DropdownGroups | null>();\n\n /**\n * An output signal that emits when the user clicks on the \"CLEAR\" button.\n */\n onClear = output();\n\n /**\n * An output signal that emits when the user clicks on the \"AUTOFILL\" button.\n */\n onAutofill = output();\n\n /**\n * Constructor for the InputComponent.\n * It injects NgControl to integrate with Angular's forms API.\n * If NgControl is present, it sets this component as the value accessor\n * for the form control.\n * @param ngControl - Optional NgControl instance for form integration.\n * @param cdr - ChangeDetectorRef for manual change detection.\n */\n constructor(\n @Optional() @Self() public ngControl: NgControl | null,\n private cdr: ChangeDetectorRef\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Handles autofill detection from Chrome's autofill animation.\n * Marks the control as autofilled and updates validity.\n */\n onAutofilled(): void {\n if (!this.config().autocomplete) {\n return;\n }\n\n this.onAutofill.emit();\n\n const ctrl = this.ngControl?.control as AutofillableFormControl;\n if (!ctrl) return;\n\n ctrl._autofilled = true;\n this.isAutofilled.set(true);\n ctrl.setErrors(null);\n ctrl.markAsDirty();\n ctrl.markAsTouched();\n ctrl.updateValueAndValidity({ emitEvent: false });\n this.cdr.detectChanges();\n }\n\n /**\n * Clears the autofill flag when user manually edits the field.\n * Re-enables normal validation.\n */\n clearAutofillFlag(): void {\n const ctrl = this.ngControl?.control as AutofillableFormControl;\n if (ctrl?._autofilled) {\n ctrl._autofilled = false;\n this.isAutofilled.set(false);\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n }\n\n ngOnInit(): void {\n const optionLabel = this.config().optionLabel;\n\n if (\n this.preselectedUnit() &&\n this.options() &&\n this.config().dropdown === 'subcontent'\n ) {\n const option = (this.options() as DropdownOption[])!.find((option) => {\n if (optionLabel && this.hasProperty(option, optionLabel)) {\n return (\n option[optionLabel]?.toString().toLowerCase() ===\n this.preselectedUnit()?.toString().toLowerCase()\n );\n } else {\n return (\n option['label']?.toString().toLowerCase() ===\n this.preselectedUnit()?.toString().toLowerCase()\n );\n }\n });\n if (option) {\n this.selectedOption.set(option);\n }\n }\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.updateContainerWidth();\n if (this.config().autofocus) {\n this.focus();\n }\n\n // Set up autofill detection via animation events\n if (\n this.config().autocomplete &&\n this.config().autocomplete !== 'off' &&\n this.inputRef?.nativeElement\n ) {\n this.setupAutofillDetection();\n }\n }, 0);\n }\n\n /**\n * Sets up autofill detection by checking for Chrome's -webkit-autofill CSS pseudo-class\n */\n private setupAutofillDetection(): void {\n if (!this.inputRef?.nativeElement) return;\n\n const inputElement = this.inputRef.nativeElement;\n\n // Check for autofill using CSS pseudo-class detection\n const checkForAutofill = () => {\n if (this.isAutofilled()) return;\n\n // Check if the element matches the -webkit-autofill pseudo-class\n const isAutofilled =\n inputElement.matches(':-webkit-autofill') ||\n inputElement.matches(':-webkit-autofill:hover') ||\n inputElement.matches(':-webkit-autofill:focus') ||\n inputElement.matches(':-webkit-autofill:active');\n\n if (isAutofilled) {\n this.onAutofilled();\n }\n };\n\n // Periodic checks for autofill\n setTimeout(checkForAutofill, 200);\n setTimeout(checkForAutofill, 500);\n setTimeout(checkForAutofill, 1000);\n }\n\n /**\n * Updates the container width signal to prevent ExpressionChangedAfterItHasBeenCheckedError\n */\n private updateContainerWidth(): void {\n if (this.containerRef?.nativeElement) {\n this.containerWidth.set(this.containerRef.nativeElement.offsetWidth);\n }\n }\n\n /**\n * Handles the native 'input' event from the HTMLInputElement.\n * Updates the component's internal value and notifies Angular forms\n * about the change.\n * @param event - The input event object.\n */\n onInput(event: Event): void {\n // Clear autofill flag when user manually types\n this.clearAutofillFlag();\n\n const inputElement = event.target as HTMLInputElement;\n const inputEvent = event as InputEvent;\n const inputData = inputEvent.data;\n const max = this.config().max;\n\n // Handle inputs normally for all inputs other than password and number\n if (\n ((this.config().type === 'password' ||\n this.config().type === 'account') &&\n this.config().reveal) ||\n this.config().type === 'number' //||\n //!!this.config().mask\n ) {\n return;\n }\n\n if (\n inputData &&\n (this.config().disabledCharacters?.length ||\n this.config().enabledCharacters?.length ||\n this.config().spacesAllowed !== undefined)\n ) {\n let filteredData = inputData;\n\n if (this.config().disabledCharacters?.length) {\n filteredData = Array.from(filteredData)\n .filter(\n (char) =>\n !this.config().disabledCharacters?.includes(char?.toLowerCase())\n )\n .join('');\n }\n\n if (this.config().enabledCharacters?.length) {\n filteredData = Array.from(filteredData)\n .filter((char) =>\n this.config().enabledCharacters?.includes(char?.toLowerCase())\n )\n .join('');\n }\n\n if (this.config().spacesAllowed !== undefined) {\n const cursorPosition = inputElement.selectionStart || 0;\n const beforeCursor = inputElement.value.substring(\n 0,\n cursorPosition - inputData.length\n );\n const afterCursor = inputElement.value.substring(cursorPosition);\n\n // First, handle space validation (leading spaces and double spaces)\n let processedData = '';\n for (let i = 0; i < filteredData.length; i++) {\n const char = filteredData[i];\n const fullValueSoFar = beforeCursor + processedData;\n\n if (char === ' ') {\n if (fullValueSoFar.length === 0) {\n continue;\n }\n\n if (fullValueSoFar.endsWith(' ')) {\n continue;\n }\n }\n\n processedData += char;\n }\n\n const fullValue = beforeCursor + processedData + afterCursor;\n const currentSpaceCount = (fullValue.match(/ /g) || []).length;\n\n // Then apply space count limit\n if (currentSpaceCount > this.config().spacesAllowed!) {\n const spacesInProcessedData = (processedData.match(/ /g) || [])\n .length;\n const currentSpacesWithoutProcessed =\n currentSpaceCount - spacesInProcessedData;\n const allowedSpacesInProcessed = Math.max(\n 0,\n this.config().spacesAllowed! - currentSpacesWithoutProcessed\n );\n\n if (allowedSpacesInProcessed === 0) {\n processedData = processedData.replace(/ /g, '');\n } else if (spacesInProcessedData > allowedSpacesInProcessed) {\n const spacesToRemove =\n spacesInProcessedData - allowedSpacesInProcessed;\n let removedCount = 0;\n processedData = Array.from(processedData)\n .filter((char) => {\n if (char === ' ' && removedCount < spacesToRemove) {\n removedCount++;\n return false;\n }\n return true;\n })\n .join('');\n }\n }\n\n filteredData = processedData;\n }\n\n if (filteredData !== inputData) {\n const cursorPosition = inputElement.selectionStart || 0;\n const beforeCursor = inputElement.value.substring(\n 0,\n cursorPosition - inputData.length\n );\n const afterCursor = inputElement.value.substring(cursorPosition);\n inputElement.value = beforeCursor + filteredData + afterCursor;\n\n const newCursorPosition = beforeCursor.length + filteredData.length;\n inputElement.setSelectionRange(newCursorPosition, newCursorPosition);\n }\n }\n\n if (max && inputElement.value.length > max) {\n inputElement.value = inputElement.value.slice(0, max);\n }\n\n if (this.config().textTransform) {\n switch (this.config().textTransform) {\n case 'capitalize':\n let words = inputElement.value.split(' ');\n inputElement.value = words\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n break;\n case 'uppercase':\n inputElement.value = inputElement.value\n .split('')\n .map((letter) => {\n if (this.config().textTransformExceptions?.includes(letter)) {\n return letter.toLowerCase();\n }\n return letter.toUpperCase();\n })\n .join('');\n break;\n case 'lowercase':\n inputElement.value = inputElement.value.toLowerCase();\n break;\n }\n }\n\n this.value.set(inputElement.value);\n\n if (this.config().search && !this.config().dropdownAutocomplete) {\n return;\n }\n\n this.dispatchOnChange(this.value());\n }\n\n /**\n * Listens for a custom 'realValueChange' event.\n * This event is expected to be emitted by child directives (PasswordDirective, NumberFormatDirective)\n * when their internal \"real\" value changes, allowing the parent input component\n * to stay in sync.\n * @param event - A CustomEvent containing the new real value in `event.detail`.\n */\n @HostListener('realValueChange', ['$event'])\n onRealValueChange(event: CustomEvent): void {\n this.value.set(event.detail);\n this.dispatchOnChange(event.detail);\n }\n\n // ControlValueAccessor methods\n onChange = (_: any) => {};\n onTouched = () => {};\n\n /**\n * Dispatches the onChange event with the provided value.\n * This method wraps the onChange call to provide a centralized way to handle value changes.\n * @param value - The value to pass to onChange\n */\n dispatchOnChange(value: any): void {\n if (value === undefined || value === null || value === '') {\n this.onChange(null);\n this.onValueChange.emit(null);\n } else {\n this.onChange(value);\n this.onValueChange.emit(value);\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /**\n * Writes a new value to the element. (ControlValueAccessor)\n */\n writeValue(value: any): void {\n if (value && this.config().textTransform && typeof value === 'string') {\n switch (this.config().textTransform) {\n case 'capitalize':\n let words = value.split(' ');\n value = words\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n break;\n case 'uppercase':\n value = value\n .split('')\n .map((letter) => {\n if (this.config().textTransformExceptions?.includes(letter)) {\n return letter.toLowerCase();\n }\n return letter.toUpperCase();\n })\n .join('');\n break;\n case 'lowercase':\n value = value.toLowerCase();\n break;\n }\n }\n this.value.set(value);\n\n const optionValue = this.config().optionValue;\n\n setTimeout(() => {\n if (value || value === 0) {\n this.onTouched();\n } else {\n this.selectedOption.set(null);\n this.setValue();\n return;\n }\n\n if (\n !(this.config().dropdown && !this.config().dropdownAutocomplete) ||\n this.config().dropdown === 'subcontent'\n ) {\n this.setValue();\n }\n\n if (this.config().dropdownAutocomplete) {\n return;\n }\n\n if (!this.options()) {\n return;\n }\n\n if (!this.options().length) {\n return;\n }\n\n const options = !!this.preselectedOptions()?.length\n ? [...this.options(), ...this.preselectedOptions()!]\n : this.options();\n\n switch (this.config().dropdown) {\n case 'dispatch':\n case 'ftl-dispatch':\n // TODO: Leave only board variant once backend is fixed\n if (this.hasProperty(options[0], 'dispatches')) {\n for (const board of (options as DispatchBoard[])!) {\n const dispatch = board.dispatches.find((dispatch) => {\n if (optionValue && this.hasProperty(dispatch, optionValue)) {\n return (\n dispatch[optionValue]?.toString() === value?.toString()\n );\n } else {\n return dispatch.id?.toString() === value?.toString();\n }\n });\n if (dispatch) {\n this.selectedOption.set(dispatch);\n this.value.set('');\n } else {\n this.value.set('');\n }\n }\n } else {\n const dispatch = (options as Dispatch[])!.find((dispatch) => {\n if (optionValue && this.hasProperty(dispatch, optionValue)) {\n return dispatch[optionValue]?.toString() === value?.toString();\n } else {\n return dispatch.id?.toString() === value?.toString();\n }\n });\n if (dispatch) {\n this.selectedOption.set(dispatch);\n this.value.set('');\n } else {\n this.value.set('');\n }\n }\n break;\n case 'label':\n const label = (options as LabelOption[])!.find((label) => {\n if (optionValue && this.hasProperty(label, optionValue)) {\n return label[optionValue]?.toString() === value?.toString();\n } else {\n return label.id?.toString() === value?.toString();\n }\n });\n if (label) {\n this.selectedOption.set(label);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'broker':\n const broker = (options as Broker[])!.find((broker) => {\n if (optionValue && this.hasProperty(broker, optionValue)) {\n return broker[optionValue]?.toString() === value?.toString();\n } else {\n return broker.id?.toString() === value?.toString();\n }\n });\n if (broker) {\n this.selectedOption.set(broker);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'contact':\n for (const departmentContactsPair of options as DepartmentContactsPair[]) {\n const contact = departmentContactsPair.contacts?.find((contact) => {\n if (optionValue && this.hasProperty(contact, optionValue)) {\n return contact[optionValue]?.toString() === value?.toString();\n } else {\n return contact.id?.toString() === value?.toString();\n }\n });\n if (contact) {\n this.selectedOption.set(contact);\n this.value.set('');\n } else {\n this.value.set('');\n }\n }\n break;\n case 'shipper':\n const shipper = (options as Shipper[])!.find((shipper) => {\n if (optionValue && this.hasProperty(shipper, optionValue)) {\n return shipper[optionValue]?.toString() === value?.toString();\n } else {\n return shipper.id?.toString() === value?.toString();\n }\n });\n if (shipper) {\n this.selectedOption.set(shipper);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'bank':\n const bank = (options as Bank[])!.find((bank) => {\n if (optionValue && this.hasProperty(bank, optionValue)) {\n return bank[optionValue]?.toString() === value?.toString();\n } else {\n return bank.id?.toString() === value?.toString();\n }\n });\n if (bank) {\n this.selectedOption.set(bank);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n\n case 'dispatcher':\n const dispatcher = (options as Dispatcher[])!.find((dispatcher) => {\n if (optionValue && this.hasProperty(dispatcher, optionValue)) {\n return dispatcher[optionValue]?.toString() === value?.toString();\n } else {\n return dispatcher.id?.toString() === value?.toString();\n }\n });\n if (dispatcher) {\n this.selectedOption.set(dispatcher);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'truck':\n const truck = (options as TruckType[])!.find((truck) => {\n if (optionValue && this.hasProperty(truck, optionValue)) {\n return truck[optionValue]?.toString() === value?.toString();\n } else {\n return truck.id?.toString() === value?.toString();\n }\n });\n if (truck) {\n this.selectedOption.set(truck);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'trailer':\n const trailer = (options as TrailerType[])!.find((trailer) => {\n if (optionValue && this.hasProperty(trailer, optionValue)) {\n return trailer[optionValue]?.toString() === value?.toString();\n } else {\n return trailer.id?.toString() === value?.toString();\n }\n });\n if (trailer) {\n this.selectedOption.set(trailer);\n this.value.set('');\n }\n break;\n case 'hazardous':\n const hazardous = (options as Hazardous[])!.find((hazardous) => {\n if (optionValue && this.hasProperty(hazardous, optionValue)) {\n return hazardous[optionValue]?.toString() === value?.toString();\n } else {\n return hazardous.id?.toString() === value?.toString();\n }\n });\n if (hazardous) {\n this.selectedOption.set(hazardous);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'owner':\n const owner = (options as Owner[])!.find((owner) => {\n if (optionValue && this.hasProperty(owner, optionValue)) {\n return owner[optionValue]?.toString() === value?.toString();\n } else {\n return owner.id?.toString() === value?.toString();\n }\n });\n if (owner) {\n this.selectedOption.set(owner);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'state':\n const state = (options as State[])!.find((state) => {\n if (optionValue && this.hasProperty(state, optionValue)) {\n return state[optionValue]?.toString() === value?.toString();\n } else {\n return state.id?.toString() === value?.toString();\n }\n });\n if (state) {\n this.selectedOption.set(state);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'fuelcard':\n const fuelcard = (options as FuelCard[])!.find((fuelcard) => {\n if (optionValue && this.hasProperty(fuelcard, optionValue)) {\n return fuelcard[optionValue]?.toString() === value?.toString();\n } else {\n return fuelcard.id?.toString() === value?.toString();\n }\n });\n if (fuelcard) {\n this.selectedOption.set(fuelcard);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'multiple':\n const multipleOptions = (options as DropdownOption[])!.filter(\n (option) => {\n if (optionValue && this.hasProperty(option, optionValue)) {\n return value.includes(option[optionValue]);\n } else {\n return value.includes(option.id);\n }\n }\n );\n\n if (!!multipleOptions.length) {\n this.multipleSelectedOptions.set(multipleOptions);\n this.value.set('');\n } else {\n this.value.set('');\n }\n\n break;\n case 'pm':\n const pm = (options as PMOption[])!.find((pm) => {\n if (optionValue && this.hasProperty(pm, optionValue)) {\n return pm[optionValue]?.toString() === value?.toString();\n } else {\n return pm.id?.toString() === value?.toString();\n }\n });\n if (pm) {\n this.selectedOption.set(pm);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'make':\n const make = (options as MakeOption[])!.find((make) => {\n if (optionValue && this.hasProperty(make, optionValue)) {\n return make[optionValue]?.toString() === value?.toString();\n } else {\n return make.id?.toString() === value?.toString();\n }\n });\n if (make) {\n this.selectedOption.set(make);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'toll':\n (options as TollOption[]).forEach((toll) => {\n const transponder = toll.tollTransponders?.find((transponder) => {\n if (optionValue && this.hasProperty(transponder, optionValue)) {\n return (\n transponder[optionValue]?.toString() === value?.toString()\n );\n } else {\n return transponder.id?.toString() === value?.toString();\n }\n });\n if (transponder) {\n this.selectedOption.set(transponder);\n this.value.set('');\n } else {\n this.value.set('');\n }\n });\n\n break;\n case 'color':\n const color = (options as ColorOption[])!.find((color) => {\n if (optionValue && this.hasProperty(color, optionValue)) {\n return color[optionValue]?.toString() === value?.toString();\n } else {\n return color.id?.toString() === value?.toString();\n }\n });\n if (color) {\n this.selectedOption.set(color);\n this.value.set('');\n } else {\n this.value.set('');\n }\n break;\n case 'subcontent':\n break;\n case true:\n const option = (options as DropdownOption[])!.find((option) => {\n if (optionValue && this.hasProperty(option, optionValue)) {\n return option[optionValue]?.toString() === value?.toString();\n } else {\n return option.id?.toString() === value?.toString();\n }\n });\n if (option) {\n if (!this.config().dropdownAutocomplete) {\n this.selectedOption.set(option);\n }\n if (\n (this.config().search && !this.config().dropdownAutocomplete) ||\n this.config().add\n ) {\n this.value.set('');\n } else {\n this.value.set(option[this.config().optionLabel || 'label']);\n }\n } else {\n this.value.set('');\n }\n break;\n default:\n break;\n }\n });\n }\n\n /**\n * Increments the value of a number input by the current step.\n */\n increment(event: MouseEvent): void {\n const max = this.config().max;\n if (max && Number(this.value()) + this.step() > max) {\n this.value.set(String(max));\n } else {\n this.value.update((v) =>\n String(\n (parseFloat(v) ? parseFloat(v) : this.config().min || 0) + this.step()\n )\n );\n }\n this.dispatchOnChange(this.value());\n this.setValue();\n this.focus(event);\n }\n\n /**\n * Decrements the value of a number input by the current step.\n */\n decrement(event: MouseEvent): void {\n const min = this.config().min;\n if (min && Number(this.value()) - this.step() < min) {\n this.value.set(String(min));\n } else {\n this.value.update((v) => {\n const currentValue = parseFloat(v) ? parseFloat(v) : 0;\n const nextValue = currentValue - this.step();\n return String(nextValue <= 0 ? 0 : nextValue);\n });\n }\n this.dispatchOnChange(this.value());\n this.setValue();\n this.focus(event);\n }\n\n /**\n * Toggles the visibility of the password input.\n * @param event - The MouseEvent that triggered the toggle.\n */\n toggleVisibility(event: MouseEvent): void {\n if (this.config().type !== 'password' && this.config().type !== 'account') {\n return;\n }\n\n this.focus(event); // Ensure input remains focused after toggle\n this.visible.update((v) => !v);\n setTimeout(() => this.setValue(), 0);\n }\n\n /**\n * Sets the value in the actual HTML input element or updates the\n * \"real\" value in the associated directive.\n */\n setValue(): void {\n if (!this.inputRef || !this.inputRef.nativeElement) {\n return;\n }\n\n let type =\n !!this.config().mask && !this.config().reveal\n ? 'masked'\n : this.config().type;\n\n if ((type === 'password' || type === 'account') && !this.config().reveal) {\n type = 'text';\n }\n\n switch (type) {\n case 'password':\n if (this.PasswordDirective) {\n this.PasswordDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'account':\n if (this.PasswordDirective) {\n this.PasswordDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'number':\n if (this.NumberFormatDirective) {\n this.NumberFormatDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'masked':\n if (this.MaskDirective) {\n this.MaskDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n default:\n this.inputRef.nativeElement.value = this.value();\n break;\n }\n }\n\n /**\n * Focuses the input element.\n * Prevents the default action of the mouse event to avoid unintended behaviors\n * like double focus or focus loss.\n * @param event - The MouseEvent that initiated the focus action.\n */\n focus(event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (this.inputRef && this.inputRef.nativeElement) {\n this.inputRef.nativeElement.focus();\n }\n }\n\n /**\n * Called when the input element receives focus (focus event).\n */\n onFocus(event: FocusEvent): void {\n this.onFocused.emit();\n this.updateContainerWidth();\n this.focused.set(true);\n if (\n !this.config().add &&\n !(this.config().dropdown === 'dispatch') &&\n !this.config().search\n )\n return;\n if (this.isAdding()) return;\n\n if (this.config().search && !this.config().dropdownAutocomplete) {\n this.value.set('');\n this.inputRef.nativeElement.value = this.value();\n }\n }\n\n /**\n * Called when the input element loses focus (blur event).\n */\n dispatchOnBlur(): void {\n this.onBlur.emit();\n this.onTouched();\n this.closeDropdown();\n this.focused.set(false);\n\n if (\n !this.config().add &&\n !(this.config().dropdown === 'dispatch') &&\n !this.config().search\n )\n return;\n if (this.isAdding()) return;\n\n setTimeout(() => {\n if (!this.config().dropdownAutocomplete) {\n this.inputRef.nativeElement.value = '';\n }\n }, 0);\n\n setTimeout(() => {\n if (!this.config().dropdownAutocomplete) {\n this.value.set('');\n }\n }, 200);\n }\n\n toggleHovered(value: boolean): void {\n this.hovered.set(value);\n }\n\n /**\n * Resets the input field's value to an empty string.\n */\n reset(): void {\n if (this.isAdding()) this.isAdding.set(false);\n\n if (this.config().dropdown === 'multiple') {\n this.multipleSelectedOptions.set([]);\n }\n this.value.set('');\n this.dispatchOnChange(''); // Notify form control of the change\n this.setValue(); // Update the actual input element\n\n this.onClear.emit();\n this.selectedOption.set(null);\n this.onSelectionChange.emit(null);\n this.onSelectedObject.emit(null);\n\n this.closeTooltip.close();\n\n this.closeDropdown();\n }\n\n closeDropdown(addNew?: boolean): void {\n if (!addNew) {\n this.closing.set(true);\n\n setTimeout(() => {\n this.dropdown.close();\n this.closing.set(false);\n }, 200);\n } else {\n this.dropdown.close();\n this.closing.set(false);\n }\n }\n\n /**\n * Returns the reference to the dropdown element based on the dropdown type.\n */\n getDropdownRef() {\n if (!this.config().dropdown) return null;\n switch (this.config().dropdown) {\n case 'dispatch':\n return this.dispatchesRef;\n case 'ftl-dispatch':\n return this.ftlDispatchRef;\n case 'label':\n return this.labelPickerRef;\n case 'broker':\n return this.brokerRef;\n case 'contact':\n return this.contactRef;\n case 'shipper':\n return this.shipperRef;\n case 'bank':\n return this.bankRef;\n case 'dispatcher':\n return this.dispatcherRef;\n case 'trailer':\n return this.trailerRef;\n case 'truck':\n return this.truckRef;\n case 'hazardous':\n return this.hazardousRef;\n case 'state':\n return this.stateRef;\n case 'owner':\n return this.ownerRef;\n case 'fuelcard':\n return this.fuelcardRef;\n case 'pm':\n return this.pmRef;\n case 'multiple':\n return this.multipleRef;\n case 'make':\n return this.makeRef;\n case 'toll':\n return this.tollRef;\n case 'color':\n return this.colorRef;\n case 'fuel-stop-transaction':\n return this.fuelStopTransactionRef;\n case 'subcontent':\n default:\n return this.dropdownOptionsRef;\n }\n }\n\n /**\n * Returns the reference to the selected element based on the dropdown type.\n */\n getSelectedRef() {\n switch (this.config().dropdown) {\n case 'dispatch':\n case 'ftl-dispatch':\n return this.selectedDispatchRef;\n case 'label':\n return this.selectedLabelRef;\n case 'broker':\n return this.selectedBrokerRef;\n case 'contact':\n return this.selectedContactRef;\n case 'shipper':\n return this.selectedShipperRef;\n case 'bank':\n return this.selectedBankRef;\n case 'dispatcher':\n return this.selectedDispatcherRef;\n case 'trailer':\n return this.selectedTrailerRef;\n case 'truck':\n return this.selectedTruckRef;\n case 'hazardous':\n return this.selectedHazardousRef;\n case 'state':\n return this.selectedStateRef;\n case 'owner':\n return this.selectedOwnerRef;\n case 'fuelcard':\n return this.selectedFuelcardRef;\n case 'pm':\n return this.selectedPmRef;\n case 'make':\n return this.selectedMakeRef;\n case 'toll':\n return this.selectedTollRef;\n case 'color':\n return this.selectedColorRef;\n default:\n return;\n }\n }\n\n randomizeAutocomplete(): string {\n return `${Math.random().toString(36).substring(2, 15)}`;\n }\n\n /**\n * Type guard that checks if a given property exists on an object.\n * @param obj The object to check.\n * @param prop The property to check for.\n * @returns `true` if `prop` exists on `obj`, `false` otherwise.\n */\n hasProperty<T extends object>(obj: T, prop: PropertyKey): prop is keyof T {\n return prop in obj;\n }\n\n /**\n * Handles when an option is selected from the dropdown.\n * @param option - The selected option.\n * @param event - The MouseEvent that initiated the selection action.\n */\n handleOption(option: DropdownOptions, event?: MouseEvent) {\n const optionValue = this.config().optionValue;\n\n if (optionValue && this.hasProperty(option, optionValue)) {\n if (\n this.config().dropdown !== 'subcontent' &&\n this.config().dropdown !== 'multiple'\n ) {\n this.dispatchOnChange(option[optionValue]);\n }\n if (this.config().dropdown === 'multiple') {\n if (\n this.multipleSelectedOptions().some(\n (selectedOption) => selectedOption.id === option.id\n )\n ) {\n this.multipleSelectedOptions.update((options) =>\n options.filter((selectedOption) => selectedOption.id !== option.id)\n );\n } else {\n this.multipleSelectedOptions.update((options) => [\n ...options,\n option,\n ]);\n }\n\n this.dispatchOnChange([\n ...this.multipleSelectedOptions().map(\n (option) => option[optionValue]\n ),\n ]);\n }\n this.onSelectionChange.emit(option[optionValue]);\n this.onSelectedObject.emit(option);\n } else {\n if (\n this.config().dropdown !== 'subcontent' &&\n this.config().dropdown !== 'multiple'\n ) {\n this.dispatchOnChange(option.id);\n }\n if (this.config().dropdown === 'multiple') {\n if (\n this.multipleSelectedOptions().some(\n (selectedOption) => selectedOption.id === option.id\n )\n ) {\n this.multipleSelectedOptions.update((options) =>\n options.filter((selectedOption) => selectedOption.id !== option.id)\n );\n } else {\n this.multipleSelectedOptions.update((options) => [\n ...options,\n option,\n ]);\n }\n\n this.dispatchOnChange([\n ...this.multipleSelectedOptions().map((option) => option.id),\n ]);\n }\n this.onSelectionChange.emit(option.id);\n this.onSelectedObject.emit(option);\n }\n\n if (\n this.config().dropdown !== 'multiple' &&\n !this.config().dropdownAutocomplete\n ) {\n this.selectedOption.set(option);\n }\n\n if (this.config().dropdown === 'subcontent') {\n this.closeDropdown();\n this.focus(event);\n this.setValue();\n\n return;\n }\n\n if (typeof this.config().dropdown === 'string') {\n this.value.set('');\n } else {\n if (!this.config().dropdownAutocomplete) {\n this.selectedOption.set(option as DropdownOption);\n }\n if (\n (this.config().search && !this.config().dropdownAutocomplete) ||\n this.config().add\n ) {\n this.value.set('');\n } else {\n this.value.set(\n (option as DropdownOption)[this.config().optionLabel || 'label']\n );\n }\n }\n\n this.setValue();\n this.closeDropdown();\n }\n\n isSelectedOption(option: DropdownOptions) {\n if (this.config().dropdown === 'multiple') {\n return this.multipleSelectedOptions().some(\n (selectedOption) => selectedOption.id === option.id\n );\n }\n return this.selectedOption()?.id === option.id;\n }\n\n /**\n * Adds a new option to the dropdown.\n * @param option - The option to add.\n */\n addOption() {\n if (!this.inputRef.nativeElement.value) {\n this.isAdding.set(false);\n this.reset();\n }\n\n if (this.config().isEdit) {\n this.onOptionAdded.emit(this.inputRef.nativeElement.value);\n this.reset();\n return;\n }\n\n // Label picker add option logic\n if (this.config().dropdown === 'label') {\n let labels = [...this.options(), ...this.localOptions()] as LabelOption[];\n let id = labels.length + 1;\n while (labels.find((label) => label.id === id)) {\n id++;\n }\n const label: LabelOption = {\n id: id,\n name: this.inputRef.nativeElement.value,\n color: this.selectedColor().name,\n colorId: this.selectedColor().id,\n code: this.selectedColor().code,\n hoverCode: this.selectedColor().hoverCode,\n };\n\n this.localOptions.update((labels) => [\n ...(labels as LabelOption[]),\n label as LabelOption,\n ]);\n this.isAdding.set(false);\n\n this.value.set('');\n this.dispatchOnChange(label.id);\n this.setValue();\n\n this.selectedOption.set(label);\n this.onOptionAdded.emit(label);\n return;\n }\n\n const option = this.inputRef.nativeElement.value;\n\n this.isAdding.set(false);\n\n this.setValue();\n this.onOptionAdded.emit(option);\n }\n\n /**\n * Handles when the user clicks on the \"ADD NEW\" button in the dropdown.\n * It sets the `isAdding` signal to `true`, closes the dropdown, and focuses the input.\n * @param event - The MouseEvent that initiated the action.\n */\n handleAddingOption(event?: MouseEvent) {\n this.onAdd.emit();\n\n if (!this.config().add) return;\n if (\n this.config().canOpenModal ||\n (typeof this.config().dropdown === 'string' &&\n this.config().dropdown !== 'label' &&\n this.config().dropdown !== 'pm')\n ) {\n this.closeDropdown(true);\n return;\n }\n // Color picker logic for label input\n if (this.config().dropdown === 'label') {\n if (this.isPickingColor()) {\n this.isAdding.set(true);\n this.isPickingColor.set(false);\n this.closeDropdown();\n if (event) this.focus(event);\n return;\n }\n this.isPickingColor.set(true);\n if (event) this.focus(event);\n this.dropdown.open();\n this.value.set('');\n this.setValue();\n return;\n }\n\n this.isAdding.set(true);\n this.closeDropdown();\n if (event) this.focus(event);\n }\n\n // Dispatch modal\n\n fold(boardId: number, event: MouseEvent, group?: DropdownGroups) {\n this.focus(event);\n\n if (group) {\n this.onSelectedGroup.emit(group);\n }\n\n if (this.config().dropdown === 'fuel-stop-transaction') {\n if (this.openGroup() === boardId) {\n this.openGroup.set(null);\n return;\n }\n this.openGroup.set(boardId);\n\n return;\n }\n if (this.foldedBoards().includes(boardId)) {\n this.foldedBoards.update((boards) =>\n boards.filter((id) => id !== boardId)\n );\n return;\n }\n this.foldedBoards.update((boards) => [...boards, boardId]);\n }\n\n // Label picker\n\n handleSelectColor(color: LabelColor, event?: MouseEvent) {\n this.value.set('');\n this.setValue();\n this.selectedColor.set(color);\n this.handleAddingOption(event);\n }\n\n // Broker modal\n\n getBrokerProgress(broker: Broker, disable?: boolean) {\n let activePercentageOfPaid;\n let status;\n let availableCredit = broker.availableCredit || 0;\n let creditLimit = broker.creditLimit || 0;\n if (broker.availableCredit === 0) {\n activePercentageOfPaid = 100;\n status = disable ? 'disable' : 'high';\n return { activePercentageOfPaid, status };\n } else {\n activePercentageOfPaid = (+availableCredit / +creditLimit) * 100;\n }\n\n if (activePercentageOfPaid >= 0 && activePercentageOfPaid < 30) {\n status = disable ? 'disable' : 'low';\n } else if (activePercentageOfPaid > 30 && activePercentageOfPaid < 60) {\n status = disable ? 'disable' : 'medium';\n } else if (activePercentageOfPaid > 60 && activePercentageOfPaid <= 100) {\n status = disable ? 'disable' : 'high';\n } else {\n status = null;\n }\n\n return { activePercentageOfPaid, status };\n }\n\n // Casting methods for template\n\n castAsDispatch(value: unknown): Dispatch | null {\n return value as Dispatch;\n }\n\n castAsLabelOption(value: unknown): LabelOption | null {\n return value as LabelOption;\n }\n\n castAsBroker(value: unknown): Broker | null {\n return value as Broker;\n }\n\n castAsContact(value: unknown): Contact | null {\n return value as Contact;\n }\n\n castAsShipper(value: unknown): Shipper | null {\n return value as Shipper;\n }\n\n castAsBank(value: unknown): Bank | null {\n return value as Bank;\n }\n\n castAsDispatcher(value: unknown): Dispatcher | null {\n return value as Dispatcher;\n }\n\n castAsDropdownOption(value: unknown): DropdownOption | null {\n return value as DropdownOption;\n }\n\n castAsTruckOption(value: unknown): TruckType | null {\n return value as TruckType;\n }\n\n castAsTrailerOption(value: unknown): TrailerType | null {\n return value as TrailerType;\n }\n\n castAsHazardous(value: unknown): Hazardous | null {\n return value as Hazardous;\n }\n\n castAsState(value: unknown): State | null {\n return value as State;\n }\n\n castAsOwner(value: unknown): Owner | null {\n return value as Owner;\n }\n\n castAsFuelCard(value: unknown): FuelCard | null {\n return value as FuelCard;\n }\n\n castAsPMOption(value: unknown): PMOption | null {\n return value as PMOption;\n }\n\n castAsColorOption(value: unknown): ColorOption | null {\n return value as ColorOption;\n }\n\n castAsMake(value: unknown): MakeOption | null {\n return value as MakeOption;\n }\n\n castAsTollOption(value: unknown): TollOption | null {\n return value as TollOption;\n }\n\n castAsTollTransponderOption(value: unknown): TollTransponderOption | null {\n return value as TollTransponderOption;\n }\n\n castAsFuelStopStore(value: unknown): FuelStopStore | null {\n return value as FuelStopStore;\n }\n\n castAsFranchise(value: unknown): Franchise | null {\n return value as Franchise;\n }\n}\n","<!-- #region Variables -->\n@let valid = (ngControl?.valid && (ngControl?.touched || ngControl?.dirty) &&\n!isAdding());\n<!---->\n@let invalid = ngControl?.invalid && (ngControl?.touched || ngControl?.dirty) &&\n!isAdding(); @let type = config().type;\n<!---->\n@let icon = config().icon;\n<!---->\n@let alignment = config().alignment;\n<!---->\n@let inverse = config().inverse;\n<!---->\n@let name = config().name;\n<!---->\n@let required = config().required;\n<!---->\n@let reveal = config().reveal;\n<!---->\n@let password = type === 'password' || type === 'account';\n<!---->\n@let number = type === 'number';\n<!---->\n@let ariaLabel = config().label;\n<!---->\n@let hasDropdown = config().dropdown;\n<!---->\n@let add = config().add;\n<!---->\n@let search = config().search;\n<!---->\n@let placeholderBehavior = config().placeholderBehavior;\n<!---->\n@let errorBehavior = config().errorBehavior;\n<!---->\n@let mask = this.config().mask;\n<!---->\n@let autocomplete = this.config().autocomplete;\n<!---->\n@let withButtons = this.config().withButtons;\n<!---->\n@let iconColor = this.config().iconColor;\n<!---->\n@let list = this.config().list;\n<!---->\n@let passwordRequirements = this.config().passwordRequirements;\n<!---->\n@let dropdownType = this.config().dropdown;\n<!---->\n@let dispatch = config().dropdown === 'dispatch';\n<!---->\n@let ftlDispatch = config().dropdown === 'ftl-dispatch';\n<!---->\n@let labelPicker = this.config().dropdown === 'label';\n<!---->\n@let broker = this.config().dropdown === 'broker';\n<!---->\n@let contact = this.config().dropdown === 'contact';\n<!---->\n@let shipper = this.config().dropdown === 'shipper';\n<!---->\n@let subcontent = this.config().subcontent || (this.config().dropdown ===\n'subcontent' && selectedOption() &&\ncastAsDropdownOption(selectedOption())![this.config().optionLabel || \"label\"]);\n<!---->\n@let bank = this.config().dropdown === 'bank';\n<!---->\n@let state = this.config().dropdown === 'state';\n<!---->\n@let optionLabel = this.config().optionLabel || 'label';\n<!---->\n@let dispatcher = this.config().dropdown === 'dispatcher';\n<!---->\n@let trailer = this.config().dropdown === 'trailer';\n<!---->\n@let truck = this.config().dropdown === 'truck';\n<!---->\n@let hazardous = this.config().dropdown === 'hazardous';\n<!---->\n@let removable = this.config().removable;\n<!---->\n@let inTable = this.config().inTable;\n<!---->\n@let textColor = this.config().textColor;\n<!-- -->\n@let dropdownSubcontent = this.config().dropdown === 'subcontent';\n<!---->\n@let isNumberFormattingDisabled = this.config().isNumberFormattingDisabled;\n<!---->\n@let owner = this.config().dropdown === 'owner';\n<!---->\n@let fuelcard = this.config().dropdown === 'fuelcard';\n<!---->\n@let multiple = this.config().dropdown === 'multiple';\n<!---->\n@let pm = this.config().dropdown === 'pm';\n<!---->\n@let color = this.config().dropdown === 'color';\n<!---->\n@let make = this.config().dropdown === 'make';\n<!---->\n@let toll = this.config().dropdown === 'toll';\n<!---->\n@let noSeparator = this.config().noSeparator;\n<!---->\n@let dropdownAutocomplete = this.config().dropdownAutocomplete;\n<!---->\n@let isAddress = this.config().isAddress;\n<!---->\n<!-- dropdowns -->\n@let dropdownOptions = (combinedOptions() | filterBySearch: value() :\nthis.config().dropdown : search: this.foldedBoards() : optionLabel :\nopenGroup()) || [];\n<!-- -->\n@let isEdit = this.config().isEdit;\n<!---->\n@let disableDecimals = this.config().disableDecimals;\n<!-- #endregion -->\n\n<!-- #region Multiple selection -->\n@if(config().dropdown === 'multiple' && !!multipleSelectedOptions().length){\n<div\n (mousedown)=\"focus($event)\"\n (mouseenter)=\"toggleHovered(true)\"\n (mouseleave)=\"toggleHovered(false)\"\n class=\"multiple-container\"\n [class]=\"{\n 'focused': focused(),\n 'hovered': hovered(),\n}\"\n>\n <label class=\"multiple-label\">{{ name }}</label>\n\n @for(option of multipleSelectedOptions(); track $index){\n <div class=\"multiple-selected\">\n <p>{{ castAsDropdownOption(option)![optionLabel || \"label\"] }}</p>\n <button\n type=\"button\"\n class=\"multiple-remove-button bg-icon\"\n (click)=\"handleOption(option)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Remove\"\n [placement]=\"'top'\"\n tooltipClass=\"tooltip input-tooltip\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n [container]=\"'body'\"\n >\n <svg-icon name=\"cai-cancel\" class=\"multiple-remove-icon\"></svg-icon>\n </button>\n </div>\n }\n</div>\n}\n<!-- #endregion -->\n\n<div\n class=\"app-input-container\"\n [class]=\"{\n 'has-text': hasText(),\n 'is-empty': !hasText(),\n 'hovered': hovered() && multiple,\n 'has-error': invalid && !list && !isEdit && !hideValidation(),\n 'has-valid': valid && !list && !isEdit && !hideValidation(),\n 'has-icon': icon,\n 'has-password': password,\n 'has-visible': password && visible(),\n 'has-number': number && withButtons,\n 'has-right': alignment === 'right',\n inverse: inverse,\n 'has-dropdown': hasDropdown && !dropdownAutocomplete,\n 'is-adding': (add && isAdding()) || isEdit,\n 'has-ftl-dispatch': ftlDispatch,\n 'has-dispatch': dispatch,\n 'fade-placeholder': placeholderBehavior === 'fade' || inTable,\n 'static-placeholder': placeholderBehavior === 'static',\n 'floating-error': errorBehavior === 'floating' || inTable,\n 'static-error': errorBehavior === 'static',\n 'has-selected': selectedOption(),\n 'list-view': list,\n 'has-end-item': broker || contact || dispatch || ftlDispatch || shipper,\n removable: removable,\n 'in-table': inTable,\n 'text-color-positive': textColor === 'positive',\n 'has-multiple-dropdown': multiple,\n 'is-address': isAddress,\n 'has-subcontent': subcontent,\n }\"\n ngbDropdown\n [autoClose]=\"false\"\n #dropdown=\"ngbDropdown\"\n dropdownClass=\"cai-dropdown\"\n #containerRef\n [ngbTooltip]=\"errorTooltip\"\n [container]=\"'body'\"\n [placement]=\"'bottom'\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip \"\n (mouseenter)=\"multiple && toggleHovered(true)\"\n (mouseleave)=\"multiple && toggleHovered(false)\"\n>\n @if (config().icon && !password && !withButtons) {\n <div\n class=\"icon-container\"\n (mousedown)=\"focus($event)\"\n [class]=\"{\n 'colored-icon': iconColor\n }\"\n [style.--icon-color]=\"iconColor || ''\"\n >\n @if(hasDropdown && placeholderBehavior === 'static'){\n <div class=\"separator separator-static-dropdown\"></div>\n }\n <svg-icon class=\"icon\" name=\"{{ icon }}\"></svg-icon>\n @if(!noSeparator){\n <div class=\"separator\"></div>\n }\n </div>\n } @if (password){\n <div class=\"icon-container\" (mousedown)=\"toggleVisibility($event)\">\n <div\n class=\"password-icons\"\n [ngbTooltip]=\"passwordTooltip\"\n [container]=\"'body'\"\n tooltipClass=\"tooltip input-tooltip\"\n [autoClose]=\"true\"\n [placement]=\"'top'\"\n >\n <svg-icon class=\"icon password-key\" name=\"cai-password-key\"></svg-icon>\n <svg-icon\n class=\"icon password-shown\"\n name=\"cai-password-shown\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-hidden\"\n name=\"cai-password-hidden\"\n ></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [type]=\"password && !reveal ? (visible() ? 'text' : 'password') : 'text'\"\n [required]=\"required\"\n [disabled]=\"disabled() || this.config().disabled\"\n (input)=\"onInput($event)\"\n (blur)=\"dispatchOnBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.name]=\"autocomplete ? autocomplete : randomAutocomplete()\"\n placeholder=\"\"\n [autocomplete]=\"autocomplete ? autocomplete : randomAutocomplete()\"\n #inputRef\n [appPassword]=\"password\"\n [appMask]=\"mask || ''\"\n [reveal]=\"reveal || 0\"\n [account]=\"type === 'account'\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"number\"\n [isNumberFormattingDisabled]=\"isNumberFormattingDisabled || false\"\n [disableDecimals]=\"disableDecimals || false\"\n [prefix]=\"this.config().prefix || ''\"\n [max]=\"this.config().max\"\n (focus)=\"\n !isAdding() && (hasDropdown || passwordRequirements) && dropdown.open();\n onFocus($event)\n \"\n (click)=\"!isAdding() && hasDropdown && dropdown.open()\"\n />\n @if(!(multiple && !!multipleSelectedOptions().length) && placeholderBehavior\n !== 'hidden'){\n <label class=\"app-input-label\">\n @if(dispatch || ftlDispatch){\n <p class=\"truck-item app-input-name\">Truck</p>\n <p class=\"trailer-item\">Trailer</p>\n <p>Driver</p>\n <p class=\"sub-label\">Rate</p>\n } @else if(broker){\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Credit</p>\n }@else if(contact){\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Phone</p>\n }@else if(shipper){\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Address</p>\n } @else if(owner){\n <p class=\"owner-ein app-input-name\">EIN</p>\n <p class=\"app-input-name\">Company Name</p>\n } @else if(fuelcard){\n <p class=\"fuelcard-number app-input-name\">Card No.</p>\n <p class=\"fuelcard-brand app-input-name\">Provider</p>\n <p class=\"app-input-name\">Nickname</p>\n } @else {\n <span class=\"app-input-name\">{{ name }}</span>\n } </label\n >} @if(number && withButtons) {\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <div\n ngbTooltip=\"Add\"\n tooltipClass=\"tooltip input-tooltip\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n (mousedown)=\"increment($event)\"\n >\n <svg-icon name=\"cai-plus\" class=\"bg-icon plus-icon\"></svg-icon>\n </div>\n <div\n ngbTooltip=\"Remove\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n tooltipClass=\"tooltip input-tooltip\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n (mousedown)=\"decrement($event)\"\n >\n <svg-icon name=\"cai-minus\" class=\"bg-icon minus-icon\"></svg-icon>\n </div>\n </div>\n </div>\n } @if(!inTable){ @if(!hasDropdown){\n <svg-icon\n name=\"cai-checkmark\"\n class=\"app-input-icon positive-icon\"\n ></svg-icon>\n <svg-icon\n name=\"cai-status-warning\"\n class=\"app-input-icon warning-icon\"\n ></svg-icon>\n } @if (invalid && (ngControl?.errors | errorMessage:\n config().customErrors)[0]) {\n <div class=\"app-input-error\">\n {{ (ngControl?.errors | errorMessage : config().customErrors)[0] }}\n </div>\n } }\n\n <!-- Accept button -->\n @if((add && isAdding()) || isEdit){\n <button\n type=\"button\"\n class=\"app-input-icon button-icon accept-button\"\n (click)=\"addOption()\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Accept\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n tooltipClass=\"tooltip input-tooltip\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n >\n <svg-icon class=\"bg-icon\" name=\"cai-checkmark\"></svg-icon>\n </button>\n }\n\n <!-- Cancel button -->\n <button\n type=\"button\"\n class=\"app-input-icon button-icon cancel-button\"\n (click)=\"reset()\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"{{ hasText() && (isAdding() || isEdit) ? 'Cancel' : 'Delete' }}\"\n [openDelay]=\"600\"\n tooltipClass=\"tooltip input-tooltip\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n >\n <svg-icon\n class=\"bg-icon\"\n name=\"{{ removable ? 'cai-delete' : 'cai-cancel' }}\"\n ></svg-icon>\n </button>\n\n <div class=\"dropdown-anchor\" ngbDropdownAnchor></div>\n <!-- Dropdown menu -->\n @if(hasDropdown) { @let maxHeight = ((dropdownOptions.length ||\n (showNoResults() ? 1 : 0)) + (add ? 1 : 0)) * 30 + 4; @let animateDropdown =\n dropdownType !== 'toll' && dropdownType !== 'fuel-stop-transaction' &&\n dropdownType !== 'dispatch' && dropdownType !== 'ftl-dispatch' && dropdownType\n !== 'contact';\n <div\n class=\"dropdown-menu\"\n ngbDropdownMenu\n [style.width.px]=\"containerWidth()\"\n [class]=\"{\n 'hide-dropdown': dropdownAutocomplete && !dropdownOptions.length && !(showNoResults() && value()),\n 'animate-dropdown': animateDropdown,\n }\"\n [class.closing]=\"closing()\"\n [style.--max-height]=\"maxHeight > 244 ? '244px' : maxHeight + 'px'\"\n >\n @if(add && !dispatch && !ftlDispatch){\n <button\n class=\"dropdown-item add-new\"\n (mousedown)=\"handleAddingOption($event)\"\n >\n <p>ADD NEW</p>\n <svg-icon name=\"cai-plus\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n <ng-container *ngTemplateOutlet=\"getDropdownRef()\"></ng-container>\n </div>\n\n @if(!dropdownAutocomplete){\n <div class=\"dropdown-icon-container\" (mousedown)=\"focus($event)\">\n <svg-icon\n name=\"cai-arrow-secondary-down\"\n class=\"dropdown-icon icon\"\n ></svg-icon>\n </div>\n } @let specialDropdown = dispatch || ftlDispatch || broker || labelPicker ||\n contact || shipper || bank || dispatcher || truck || trailer || hazardous ||\n state || owner || fuelcard || pm || color || make || toll;\n <!-- Placeholder -->\n @if(specialDropdown){\n <ng-container *ngTemplateOutlet=\"getSelectedRef()\"></ng-container>\n } @else if ((add || search) && !inputRef.value && !this.isAdding() &&\n !dropdownSubcontent ){\n <div class=\"dropdown-selected\">\n @if(placeholderBehavior === 'static'){\n <p class=\"selected-label-hidden\">{{ name + (required ? \" *\" : \"\") }}</p>\n <p class=\"selected-text\">\n {{\n selectedOption() &&\n castAsDropdownOption(selectedOption())![optionLabel || \"label\"]\n }}\n </p>\n } @else { @if(selectedOption() &&\n castAsDropdownOption(selectedOption())![optionLabel || \"label\"] ===\n \"Hazardous\"){\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n castAsDropdownOption(selectedOption())![optionLabel || \"label\"]\n }}\n </p>\n } @else {\n {{\n selectedOption() &&\n castAsDropdownOption(selectedOption())![optionLabel || \"label\"]\n }}\n } }\n </div>\n } } @else if(isEdit && !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ name }}</p>\n </div>\n } @if(passwordRequirements){\n <div\n class=\"dropdown-menu password-requirement\"\n ngbDropdownMenu\n [style.width.px]=\"containerWidth()\"\n [class.closing]=\"closing()\"\n >\n <ng-container *ngTemplateOutlet=\"passwordRequirementsRef\"></ng-container>\n </div>\n } @if(subcontent){\n <p class=\"subcontent\">\n @if(!(alignment === 'right')){\n <span class=\"subcontent-hide\">{{ inputRef.value }} </span>\n }\n {{ subcontent }}\n </p>\n }\n</div>\n\n<!-- #region Templates -->\n\n<!-- #region Password requirements -->\n<ng-template #passwordRequirementsRef>\n <p>Password Requirement</p>\n <ul>\n <li>\n <svg-icon\n [name]=\"\n !this.ngControl?.errors?.['minlength'] && this.value()\n ? 'cai-checkmark'\n : 'cai-cancel'\n \"\n class=\"icon\"\n ></svg-icon\n ><span>Minimum 8 characters</span>\n </li>\n <li>\n <svg-icon\n class=\"icon\"\n [name]=\"\n !this.ngControl?.errors?.['hasNumber'] && this.value() ? 'cai-checkmark' : 'cai-cancel'\n \"\n ></svg-icon\n ><span>One number</span>\n </li>\n <li>\n <svg-icon\n class=\"icon\"\n [name]=\"\n !this.ngControl?.errors?.['hasSymbol'] && this.value() ? 'cai-checkmark' : 'cai-cancel'\n \"\n ></svg-icon\n ><span>One symbol</span>\n </li>\n <li>\n <svg-icon\n class=\"icon\"\n [name]=\"\n !this.ngControl?.errors?.['hasUppercase'] && this.value()\n ? 'cai-checkmark'\n : 'cai-cancel'\n \"\n ></svg-icon\n ><span>One upper-case letter</span>\n </li>\n </ul>\n</ng-template>\n<!-- #endregion -->\n\n<!-- Standard dropdown -->\n<ng-template #dropdownOptionsRef>\n @if(dropdownOptions.length){ @for(option of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ option.id }}\"\n (mousedown)=\"handleOption(option, $event)\"\n [class]=\"{\n 'selected': castAsDropdownOption(selectedOption())?.id === option.id,\n }\"\n >\n @if(option[optionLabel] === \"Hazardous\"){\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n }\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (option[optionLabel] | highlightSearch : value())\n : option[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #multipleRef>\n @if(dropdownOptions.length){ @for(option of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ option.id }}\"\n (mousedown)=\"handleOption(option, $event)\"\n [class]=\"{\n 'selected': isSelectedOption(option),\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (option[optionLabel] | highlightSearch : value())\n : option[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #bankRef>\n @if(dropdownOptions.length){ @for(bank of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ bank.id }}\"\n (mousedown)=\"handleOption(bank)\"\n [class]=\"{\n 'selected': castAsBank(selectedOption())?.id === bank.id,\n }\"\n >\n @if(bank.logoName){\n <svg-icon class=\"full-icon\" [name]=\"bank.logoName.slice(0, -4)\"></svg-icon>\n }@else{\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"search ? (bank.name | highlightSearch : value()) : bank.name\"\n ></p>\n\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #makeRef>\n @if(dropdownOptions.length){ @for(make of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ make.id }}\"\n (mousedown)=\"handleOption(make)\"\n [class]=\"{\n 'selected': castAsMake(selectedOption())?.id === make.id,\n }\"\n >\n @if(make.logoName){\n <svg-icon class=\"full-icon\" [name]=\"make.logoName.slice(0, -4)\"></svg-icon>\n }@else{\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"search ? (make.name | highlightSearch : value()) : make.name\"\n ></p>\n\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Broker -->\n<ng-template #brokerRef>\n @if(dropdownOptions.length){ @for(broker of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"broker-{{ broker.id }}\"\n (mousedown)=\"!(broker.dnu || broker.ban) && handleOption(broker)\"\n [class]=\"{\n selected: castAsBroker(selectedOption())?.id === broker.id,\n banned: broker.dnu || broker.ban,\n dnu: broker.dnu\n }\"\n >\n @if(broker.dnu || broker.ban){\n <svg-icon name=\"cai-minus\" class=\"round-icon\"></svg-icon>\n } @else if((broker.availableCredit || 0) < 0){\n <svg-icon name=\"cai-status-warning-lite\" class=\"icon fraud\"></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (broker.businessName || '' | highlightSearch : value())\n : broker.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n @if(!broker.creditLimit){\n <p>Unlimited</p>\n } @else {\n <p>{{ broker.availableCredit || 0 | currency }}</p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n getBrokerProgress(broker, broker.dnu || broker.ban)\n .activePercentageOfPaid + '%'\n \"\n [class]=\"getBrokerProgress(broker, broker.dnu || broker.ban).status\"\n ></div>\n }\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ broker.loadsCount }} | {{ broker.availableCredit || 0 | currency }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Contact dropdown -->\n<ng-template #contactRef>\n @if(dropdownOptions.length){ @for(departmentContactsPair of dropdownOptions;\n track $index ){ @for(contact of departmentContactsPair.contacts; track\n $index){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"contact-{{ contact.id }}\"\n (mousedown)=\"handleOption(contact)\"\n [class]=\"{\n selected: castAsContact(selectedOption())?.id === contact.id,\n }\"\n >\n <p\n [innerHTML]=\"\n search\n ? (contact.contactName || '' | highlightSearch : value())\n : contact.contactName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p>{{ departmentContactsPair.department?.name }}</p>\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ contact.phone }}\n </p>\n </div>\n </div>\n </button>\n } } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Owner dropdown -->\n<ng-template #ownerRef>\n @if(dropdownOptions.length){ @for(owner of dropdownOptions; track $index ){\n @let ownerOption = castAsOwner(owner);\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"owner-{{ ownerOption?.id }}\"\n (mousedown)=\"handleOption(ownerOption!)\"\n [class]=\"{\n selected: castAsOwner(selectedOption())?.id === ownerOption?.id,\n }\"\n >\n <p\n class=\"owner-ein\"\n [innerHTML]=\"\n search\n ? (ownerOption?.ein || '' | highlightSearch : value())\n : ownerOption?.ein\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (ownerOption?.name || '' | highlightSearch : value())\n : ownerOption?.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Fuelcard dropdown -->\n<ng-template #fuelcardRef>\n @if(dropdownOptions.length){ @for(fuelcard of dropdownOptions; track $index ){\n @let fuelcardOption = castAsFuelCard(fuelcard);\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"fuelcard-{{ fuelcardOption?.id }}\"\n (mousedown)=\"handleOption(fuelcardOption!)\"\n [class]=\"{\n selected: castAsFuelCard(selectedOption())?.id === fuelcardOption?.id,\n }\"\n >\n <p\n class=\"fuelcard-number\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.number || '' | highlightSearch : value())\n : fuelcardOption?.number\n \"\n ></p>\n <p\n class=\"fuelcard-brand\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.brand || '' | highlightSearch : value())\n : fuelcardOption?.brand\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (fuelcardOption?.account || '' | highlightSearch : value())\n : fuelcardOption?.account\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Shipper dropdown -->\n<ng-template #shipperRef>\n @if(dropdownOptions.length){ @for(shipper of dropdownOptions; track $index ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"shipper-{{ shipper.id }}\"\n (mousedown)=\"handleOption(shipper)\"\n [class]=\"{\n selected: castAsShipper(selectedOption())?.id === shipper.id,\n }\"\n >\n <p\n [innerHTML]=\"\n search\n ? (shipper.businessName || '' | highlightSearch : value())\n : shipper.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p\n [innerHTML]=\"\n search\n ? (shipper.address?.address || '' | highlightSearch : value())\n : shipper.address?.address\n \"\n ></p>\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ shipper.pickupCount }} Pickup |\n {{ shipper.deliveryCount }} Delivery\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatch dropdown -->\n<ng-template #dispatchesRef>\n @if(dropdownOptions.length){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (mousedown)=\"reset()\"\n [class]=\"{\n 'selected': !selectedOption(),\n }\"\n >\n <p>Unassigned</p>\n <div class=\"unassigned-ltl\">\n <p>{{ dispatchCount() || 0 }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </button>\n @for(dispatchBoard of dropdownOptions; track dispatchBoard.id){\n @if(dispatchBoard.count > 0){ @if(dispatchBoard.dispatcher !==\n \"NOBOARDSVARIANT\"){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (mousedown)=\"fold(dispatchBoard.id, $event)\"\n [class]=\"{\n 'unfolded': dispatchBoard.dispatches?.length || 0 > 0,\n }\"\n >\n <p>\n {{ dispatchBoard.teamBoard ? \"Team Board\" : dispatchBoard.dispatcher }}\n </p>\n <p class=\"counter\">{{ dispatchBoard.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon></button\n >} @for(dispatch of dispatchBoard.dispatches; track dispatch.id ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (mousedown)=\"handleOption(dispatch)\"\n [class]=\"{\n 'selected': castAsDispatch(selectedOption())?.id === dispatch.id,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [style.--truck-color]=\"dispatch.truck.color?.code || ''\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"dispatch.truck.truckNumber | highlightSearch : value()\"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if(dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"dispatch.trailer.trailerNumber | highlightSearch : value()\"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if(dispatch.coDriver){\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' & ' + dispatch.coDriver.firstName\n | highlightSearch : value()\n \"\n ></p>\n } @else{\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch : value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base dispatch-ltl\">\n <p>{{ dispatch.dispatcherId }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n } } } }@else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- ftl dispatch dropdown -->\n<ng-template #ftlDispatchRef>\n @if(dropdownOptions.length){ @for(dispatchBoard of dropdownOptions; track\n dispatchBoard.id){ @if(dispatchBoard.count > 0){ @if(dispatchBoard.dispatcher\n !== \"NOBOARDSVARIANT\"){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (mousedown)=\"fold(dispatchBoard.id, $event)\"\n [class]=\"{\n 'unfolded': dispatchBoard.dispatches?.length || 0 > 0,\n }\"\n >\n <p>\n {{ dispatchBoard.teamBoard ? \"Team Board\" : dispatchBoard.dispatcher }}\n </p>\n <p class=\"counter\">{{ dispatchBoard.count }}</p>\n <svg-icon name=\"cai-arrow-primary-up\" class=\"group-icon icon\"></svg-icon>\n </button>\n } @for(dispatch of dispatchBoard.dispatches; track dispatch.id ){\n <button\n class=\"dropdown-item\"\n (mousedown)=\"handleOption(dispatch)\"\n [class]=\"{\n 'selected': castAsDispatch(selectedOption())?.id === dispatch.id,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [style.--truck-color]=\"dispatch.truck.color?.code || ''\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"dispatch.truck.truckNumber | highlightSearch : value()\"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if(dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"dispatch.trailer.trailerNumber | highlightSearch : value()\"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if(dispatch.coDriver){\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' & ' + dispatch.coDriver.firstName\n | highlightSearch : value()\n \"\n ></p>\n } @else{\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch : value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @if(dispatch.status?.statusString){\n <div\n class=\"dispatch-status\"\n [class]=\"\n 'status-' +\n dispatch.status?.statusString\n ?.toLowerCase()\n ?.replaceAll(' ', '')\n ?.replaceAll('.', '')\n \"\n >\n @if(dispatch.status?.statusString?.toLowerCase() === \"repair\"){\n <p class=\"status-block blue\">D</p>\n <p class=\"status-block green\">L</p>\n }\n {{ dispatch.status?.statusString }}\n @if(dispatch.status?.statusString?.toLowerCase() === \"repair\"){\n <p class=\"status-block green\">P</p>\n <p class=\"status-block orange\">D</p>\n } @if(dispatch.status?.statusCheckInNumber){\n <p class=\"status-block\">\n {{ dispatch.status?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">{{ dispatch.driver.status }}</p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n } } } }@else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #tollRef>\n @if(dropdownOptions.length){ @for(toll of dropdownOptions; track $index){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n [class]=\"{\n 'unfolded': toll.tollTransponders?.length || 0 > 0,\n }\"\n >\n <p>\n {{ toll.groupName }}\n </p>\n </button>\n @let tollTransponders = toll.tollTransponders || []; @for(tollTransponder of\n tollTransponders; track tollTransponder.id ){\n <button\n class=\"dropdown-item\"\n (mousedown)=\"handleOption(tollTransponder)\"\n [class]=\"{\n 'selected': castAsTollTransponderOption(selectedOption())?.id === tollTransponder.id,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (tollTransponder.name || '' | highlightSearch : value())\n : tollTransponder.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Label dropdown -->\n<ng-template #labelPickerRef>\n @if(dropdownOptions.length && !isPickingColor()){ @for(label of\n dropdownOptions; track label.id ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item label-item\"\n (mousedown)=\"handleOption(label)\"\n [class]=\"{\n 'selected': castAsLabelOption(selectedOption())?.id === label.id,\n }\"\n >\n <svg-icon\n name=\"cai-label\"\n class=\"icon label-color\"\n [style.--label-color]=\"label.code\"\n [style.--label-hover-color]=\"label.hoverCode\"\n ></svg-icon>\n <p\n [innerHTML]=\"\n search ? (label.name || '' | highlightSearch : value()) : label.name\n \"\n ></p>\n <p class=\"dropdown-item-count\">{{ label.count || 0 }}</p>\n </button>\n } } @else if(isPickingColor()){ @for(color of labelColors(); track color.id){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item label-item\"\n (mousedown)=\"handleSelectColor(color, $event)\"\n [class]=\"{\n 'selected': selectedColor().id === color.id,\n }\"\n >\n <svg-icon\n name=\"cai-label\"\n class=\"icon label-color\"\n [style.--label-color]=\"color.code\"\n [style.--label-hover-color]=\"color.hoverCode\"\n ></svg-icon>\n <p\n [innerHTML]=\"\n search ? (color.name || '' | highlightSearch : value()) : color.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatcher dropdown -->\n\n<ng-template #dispatcherRef>\n @if(dropdownOptions.length){ @for(dispatcher of dropdownOptions; track $index\n ){ @let dispatcherOption = castAsDispatcher(dispatcher)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dispatcherOption.id }}\"\n (mousedown)=\"handleOption(dispatcherOption)\"\n [class]=\"{\n 'selected': castAsDispatcher(selectedOption())?.id === dispatcherOption.id,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n }\"\n [rounded]=\"true\"\n ></cai-avatar>\n <p\n [innerHTML]=\"\n search\n ? (dispatcherOption.fullName || '' | highlightSearch : value())\n : dispatcherOption.fullName\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #truckRef>\n @if(dropdownOptions.length){ @for(truck of dropdownOptions; track $index ){\n @let truckOption = castAsTruckOption(truck)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOption.id }}\"\n (mousedown)=\"handleOption(truckOption)\"\n [class]=\"{\n 'selected': castAsTruckOption(selectedOption())?.id === truckOption.id,\n }\"\n >\n <p\n [innerHTML]=\"\n search\n ? (truckOption.name || '' | highlightSearch : value())\n : truckOption.name\n \"\n ></p>\n <svg-icon\n class=\"truck-trailer-option\"\n [name]=\"truckOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #trailerRef>\n @if(dropdownOptions.length){ @for(truck of dropdownOptions; track $index ){\n @let trailerOption = castAsTrailerOption(truck)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ trailerOption.id }}\"\n (mousedown)=\"handleOption(trailerOption)\"\n [class]=\"{\n 'selected': castAsTrailerOption(selectedOption())?.id === trailerOption.id,\n }\"\n >\n <p\n [innerHTML]=\"\n search\n ? (trailerOption.name || '' | highlightSearch : value())\n : trailerOption.name\n \"\n ></p>\n\n <svg-icon\n class=\"truck-trailer-option\"\n [name]=\"trailerOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Hazardous dropdown -->\n<ng-template #hazardousRef>\n @if(dropdownOptions.length){ @for(hazardous of dropdownOptions; track $index\n ){ @let hazardousOption = castAsHazardous(hazardous)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ hazardousOption.id }}\"\n (mousedown)=\"handleOption(hazardousOption)\"\n [class]=\"{ 'selected': castAsHazardous(selectedOption())?.id === hazardousOption.id, }\"\n >\n <svg-icon [name]=\"hazardousOption.logoName?.slice(0, -4)\"></svg-icon>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (hazardousOption.description || '' | highlightSearch : value())\n : hazardousOption.description\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #pmRef>\n @if(dropdownOptions.length){ @for(pm of dropdownOptions; track $index ){ @let\n pmOption = castAsPMOption(pm)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ pmOption.id }}\"\n (mousedown)=\"handleOption(pmOption)\"\n [class]=\"{ 'selected': castAsPMOption(selectedOption())?.id === pmOption.id, }\"\n >\n <svg-icon class=\"icon\" [name]=\"pmOption.title | remapPmIcons\"></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (pmOption.title || '' | highlightSearch : value())\n : pmOption.title\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #colorRef>\n @if(dropdownOptions.length){ @for(color of dropdownOptions; track $index ){\n @let colorOption = castAsColorOption(color)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ colorOption.id }}\"\n (mousedown)=\"handleOption(colorOption)\"\n [class]=\"{ 'selected': castAsColorOption(selectedOption())?.id === colorOption.id, }\"\n >\n <svg-icon\n class=\"icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (colorOption.name || '' | highlightSearch : value())\n : colorOption.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #stateRef>\n @if(dropdownOptions.length){ @for(state of dropdownOptions; track $index ){\n @let stateOption = castAsState(state)!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ stateOption.id }}\"\n (mousedown)=\"handleOption(stateOption)\"\n [class]=\"{ 'selected': castAsState(selectedOption())?.id === stateOption.id, }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (stateOption.stateShortName +\n ' ' +\n (config().fullState ? ' (' + stateOption?.stateName + ')' : '') ||\n '' | highlightSearch : value())\n : stateOption.stateShortName +\n ' ' +\n (config().fullState ? ' (' + stateOption?.stateName + ')' : '')\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #fuelStopTransactionRef>\n @if(dropdownOptions.length){ @for(franchise of dropdownOptions; track\n franchise.id){ @let franchiseOption = castAsFranchise(franchise)!;\n @if(!!franchiseOption?.count){\n <div\n class=\"dropdown-group\"\n [class]=\"{\n 'active': openGroup() === franchiseOption.id,\n }\"\n [style.--max-height]=\"\n openGroup() === franchiseOption.id\n ? 30 * ((franchiseOption.fuelStopStores?.length || 0) + 1) + 'px'\n : '26px'\n \"\n >\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (mousedown)=\"fold(franchiseOption.id, $event, franchiseOption)\"\n [class]=\"{\n 'unfolded': openGroup() === franchiseOption.id,\n }\"\n >\n <p\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch : value()\n \"\n ></p>\n <p class=\"counter\">{{ franchiseOption.count }}</p>\n <svg-icon name=\"cai-arrow-primary-up\" class=\"group-icon icon\"></svg-icon>\n </button>\n @if(openGroup() === franchiseOption.id){\n @if(franchiseOption.fuelStopStores?.length || 0 > 0){ @for(fuelStopStore of\n franchiseOption.fuelStopStores; track fuelStopStore.id ){\n <button\n tabindex=\"-1\"\n class=\"dropdown-item fuel-stop-transaction-store\"\n (mousedown)=\"handleOption(fuelStopStore)\"\n >\n <p\n [innerHTML]=\"fuelStopStore?.store ?? '' | highlightSearch : value()\"\n ></p>\n @let city = fuelStopStore?.address?.city ?? \"\"; @let state =\n fuelStopStore?.address?.stateShortName ?? \"\"; @let zip =\n fuelStopStore?.address?.zipCode ?? \"\";\n <p\n class=\"fuel-stop-transaction-store-address\"\n [innerHTML]=\"\n city + (state || zip ? ', ' : '') + state + ' ' + zip\n | highlightSearch : value()\n \"\n ></p>\n </button>\n } } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }}\n </div>\n } @else {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (mousedown)=\"handleOption(franchiseOption)\"\n >\n <p\n class=\"fuel-stop-transaction-nostore\"\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch : value()\n \"\n ></p>\n </button>\n } } }@else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- #endregion -->\n\n<!-- #region Selected options -->\n\n<!-- selected dispatch -->\n<ng-template #selectedDispatchRef>\n @let dispatchOption = castAsDispatch(selectedOption()); @if(dispatchOption &&\n !inputRef.value && !isPickingColor() && !isAdding()){\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"dispatchOption!.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ dispatchOption!.truck.truckNumber }}\n </p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if(dispatchOption!.trailer){\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"\n castAsDispatch(\n selectedOption()\n )!.trailer?.trailerType?.logoName?.slice(0, -4)\n \"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ dispatchOption!.trailer?.trailerNumber }}\n </p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if(dispatchOption!.coDriver){\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" & \" +\n dispatchOption!.coDriver?.firstName\n }}\n </p>\n } @else{\n <cai-avatar [driver]=\"dispatchOption!.driver\" [size]=\"18\"></cai-avatar>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" \" +\n dispatchOption!.driver.lastName\n }}\n </p>\n }\n </div>\n <p class=\"selected-end-item\">\n {{ dispatchOption!.payType }}\n </p>\n </div>\n } @else { @if(!inputRef.value && this.config().dropdown == 'dispatch'){\n <p class=\"dropdown-selected\">Unassigned</p>\n } }\n</ng-template>\n\n<!-- selected label -->\n<ng-template #selectedLabelRef>\n @let labelOption = castAsLabelOption(selectedOption()); @if(labelOption &&\n !inputRef.value && !isPickingColor() && !isAdding()){\n <div class=\"dropdown-selected label-item\">\n <svg-icon\n name=\"cai-label\"\n class=\"icon label-color\"\n [style.--label-color]=\"labelOption!.code\"\n [style.--label-hover-color]=\"labelOption!.hoverCode\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ labelOption!.name }}</p>\n </div>\n } @else if(isPickingColor() && !inputRef.value){\n <div class=\"dropdown-selected label-item\">\n <svg-icon name=\"cai-label\" class=\"icon\"></svg-icon>\n <p>Label Color</p>\n </div>\n } @else if(isAdding() && !inputRef.value){\n <div class=\"dropdown-selected label-item\">\n <svg-icon\n name=\"cai-label\"\n class=\"icon label-color\"\n [style.--label-color]=\"selectedColor()!.code\"\n [style.--label-hover-color]=\"selectedColor()!.hoverCode\"\n ></svg-icon>\n <p>Label Name</p>\n </div>\n }\n</ng-template>\n\n<!-- selected broker -->\n<ng-template #selectedBrokerRef>\n @let brokerOption = castAsBroker(selectedOption()); @if(brokerOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n @if((brokerOption!.availableCredit || 0) < 0){\n <svg-icon name=\"cai-status-warning-lite\" class=\"icon fraud\"></svg-icon>\n }\n <p class=\"dropdown-selected-content\">{{ brokerOption!.businessName }}</p>\n <div class=\"selected-end-item\">\n @if(!brokerOption!.creditLimit){\n <p>Unlimited</p>\n } @else {\n <p>\n {{ brokerOption!.availableCredit || 0 | currency }}\n </p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n getBrokerProgress(\n brokerOption!,\n brokerOption!.dnu || brokerOption!.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n getBrokerProgress(\n brokerOption!,\n brokerOption!.dnu || brokerOption!.ban\n ).status\n \"\n ></div>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedContactRef>\n @let contactOption = castAsContact(selectedOption()); @if(contactOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ contactOption?.contactName }}</p>\n <div class=\"selected-end-item\">\n <p>{{ contactOption?.phone }}</p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedShipperRef>\n @let shipperOption = castAsShipper(selectedOption()); @if(shipperOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ shipperOption?.businessName }}</p>\n <div class=\"selected-end-item\">\n <p>{{ shipperOption?.address?.address }}</p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedOwnerRef>\n @let ownerOption = castAsOwner(selectedOption()); @if(ownerOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content owner-ein\">{{ ownerOption?.ein }}</p>\n <p class=\"dropdown-selected-content\">{{ ownerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedFuelcardRef>\n @let fuelcardOption = castAsFuelCard(selectedOption()); @if(fuelcardOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content fuelcard-number\">\n {{ fuelcardOption?.number }}\n </p>\n <p class=\"dropdown-selected-content fuelcard-brand\">\n {{ fuelcardOption?.brand }}\n </p>\n <p class=\"dropdown-selected-content\">\n {{ fuelcardOption?.account }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedBankRef>\n @let bankOption = castAsBank(selectedOption()); @if(bankOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n @if(bankOption?.logoName){\n <svg-icon\n class=\"option-icon\"\n [name]=\"bankOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n }@else {\n <p class=\"dropdown-selected-content\">{{ bankOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedMakeRef>\n @let makeOption = castAsMake(selectedOption()); @if(makeOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n @if(makeOption?.logoName){\n <svg-icon\n class=\"option-icon\"\n [name]=\"makeOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n }@else {\n <p class=\"dropdown-selected-content\">{{ makeOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedStateRef>\n @let stateOption = castAsState(selectedOption()); @if(stateOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ stateOption?.stateShortName }}\n {{ config().fullState ? \" (\" + stateOption?.stateName + \")\" : \"\" }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDispatcherRef>\n @let dispatcherOption = castAsDispatcher(selectedOption());\n @if(dispatcherOption && !inputRef.value){\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n }\"\n [rounded]=\"true\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ dispatcherOption?.fullName }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckRef>\n @let truckOption = castAsTruckOption(selectedOption()); @if(truckOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"truckOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p>{{ truckOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTrailerRef>\n @let trailerOption = castAsTrailerOption(selectedOption()); @if(trailerOption\n && !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"trailerOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p>{{ trailerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedHazardousRef>\n @let hazardousOption = castAsHazardous(selectedOption()); @if(hazardousOption\n && !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"hazard-icon\"\n [name]=\"hazardousOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content dropdown-selected-hazardous\">\n {{ hazardousOption?.description }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedPmRef>\n @let pmOption = castAsPMOption(selectedOption()); @if(pmOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"pmOption?.title | remapPmIcons\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ pmOption?.title }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedColorRef>\n @let colorOption = castAsColorOption(selectedOption()); @if(colorOption &&\n !inputRef.value){\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ colorOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTollRef>\n @let tollOption = castAsTollTransponderOption(selectedOption());\n @if(tollOption && !inputRef.value){\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">\n {{ tollOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #passwordTooltip>\n {{ visible() ? \"Hide\" : \"Show\" }}\n</ng-template>\n\n<ng-template #errorTooltip>\n @if((errorBehavior === \"floating\" || (errorBehavior === \"static\" && hasText())\n || inTable) && invalid && !dropdown.isOpen()){\n {{ (ngControl?.errors | errorMessage : config().customErrors)[0] }} }\n</ng-template>\n\n<!-- #endregion -->\n","// src/app/bytes-to-human-readable.pipe.ts\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'bytesToHumanReadable',\n})\nexport class BytesToHumanReadablePipe implements PipeTransform {\n transform(bytes: number | null | undefined, precision: number = 2): string {\n if (bytes === null || bytes === undefined || isNaN(bytes)) {\n return '';\n }\n\n if (bytes === 0) {\n return '0 Bytes';\n }\n\n const units = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n\n const unitIndex = Math.min(i, units.length - 1);\n\n const value = bytes / Math.pow(1024, unitIndex);\n\n const formattedValue = parseFloat(value.toFixed(precision));\n\n return `${formattedValue} ${units[unitIndex]}`;\n }\n}","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n input,\n OnChanges,\n OnInit,\n Output,\n output,\n signal,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//Components\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n//Models\nimport { AppFile } from '../../models/appFile.model';\n\n//Pipes\nimport { BytesToHumanReadablePipe } from '../../pipes/bytes-to-human-readable.pipe';\n\n//Bootstrap\nimport {\n NgbPopover,\n NgbPopoverModule,\n NgbTooltipModule,\n} from '@ng-bootstrap/ng-bootstrap';\n\n//Modules\nimport { NgModule } from '@angular/core';\nimport { InputComponent } from '../input/input.component';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n/**\n * This component displays a preview of a document, including its name, size,\n * and provides actions to delete, download, and tag the document.\n */\n@Component({\n selector: 'cai-document-preview',\n imports: [\n //Components\n SvgIconComponent,\n InputComponent,\n\n //Forms\n ReactiveFormsModule,\n\n //Pipes\n BytesToHumanReadablePipe,\n //Bootstrap\n NgbPopoverModule,\n NgbTooltipModule,\n ],\n templateUrl: './document-preview.component.html',\n styleUrl: './document-preview.component.scss',\n})\nexport class DocumentPreviewComponent implements OnChanges, OnInit {\n @Input() coverMinimalMode: boolean = false;\n\n isCrop = signal<boolean>(false);\n\n constructor() { }\n\n ngOnInit(): void {\n if (!this.coverMinimalMode) {\n this.isCrop.set(false);\n } else {\n this.isCrop.set(true);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['coverMinimalMode']) {\n this.isCrop.set(true);\n }\n }\n\n @Input() noTagOption: boolean = false;\n showInput = signal<boolean>(false);\n\n inputFormControl = new FormControl();\n\n showFileNameInput() {\n if (this.inputFormControl.dirty)\n this.inputFormControl.setValue(this.file().fileName);\n this.showInput.set(true);\n }\n\n hideFileNameInput() {\n setTimeout(() => {\n this.showInput.set(false);\n }, 300);\n }\n\n handleEdit(event: any) {\n this.file().fileName = event;\n console.log(this.file().fileName);\n console.log(\"control\", this.inputFormControl.value);\n this.hideFileNameInput();\n\n }\n\n /**\n * Signal that controls whether the delete modal is visible.Used to confirm the file deletion.\n */\n showDeleteModal = signal<boolean>(false);\n\n /**\n * Boolean flag indicating whether the tag popover is visible.Used to apply conditional styling or behavior.\n */\n showTag: boolean = false;\n\n /**\n * Currently selected tag for the document.\n */\n selectedTag: string = '';\n\n /**\n * The application file to be displayed in the preview. This is a required input.\n * @type {InputSignal<AppFile>}\n */\n file = input.required<AppFile>();\n /**\n * /**\n * The view mode in whic the file is displayed. This is a required input.\n * @type {InputSignal<string>}\n */\n viewMode = input.required<string>();\n /**\n * An output event that emits the file name when the delete action is triggered.\n * @type {OutputEmitterRef<string>}\n */\n onDelete = output<string>();\n\n /**\n * An output event that emits the file name when the download action is triggered.\n * @type {OutputEmitterRef<string>}\n */\n onDownload = output<string>();\n\n /**\n * Handles the delete action. Emits the `fileName` of the current `file` via the `onDelete` output.\n */\n handleDelete() {\n this.showDeleteModal.set(true);\n }\n\n /**\n * Cancels the delete operation and hides the confirmation modal.\n */\n cancelDelete() {\n this.showDeleteModal.set(false);\n }\n\n /**\n * Confirms the deletion and emits the `onDelete` event.\n */\n confirmDelete() {\n this.onDelete.emit(this.file().fileName);\n this.showDeleteModal.set(false);\n }\n\n /**\n * Handles the download action. Emits the `fileName` of the current `file` via the `onDownload` output.\n */\n handleDownload() {\n this.onDownload.emit(this.file().fileName);\n }\n\n /**\n * Callback triggered when the tag popover is shown. Used to update internal state.\n */\n onTagShown() {\n this.showTag = true;\n }\n\n /**\n * Callback triggered when the tag popover is hidden. Used to update internal state.\n */\n onTagHidden() {\n this.showTag = false;\n }\n\n /**\n * List of available tags for labeling the document. These are selectable within the tag popover.\n */\n tags: string[] = [\n 'Article of Incorporation',\n 'IFTA Licence',\n 'EIN',\n 'W9',\n 'Setup Packet',\n 'MC Certificate',\n 'Other',\n ];\n\n /**\n * Emits when a tag is selected or removed for the file.\n * Contains the file name and the selected tag.\n * @type {OutputEmitterRef<{ fileName: string; tag: string }>}\n */\n onTagChange = output<{ fileName: string; tag: string }>();\n\n /**\n * Selects a tag and emits the `onTagChange` output.\n * @param newTag The newly selected tag string.\n */\n getTag(newTag: string) {\n this.selectedTag = newTag;\n this.onTagChange.emit({ fileName: this.file().fileName, tag: newTag });\n }\n\n /**\n * Removes the currently selected tag. Does not emit an event — must be called manually.\n */\n removeTag() {\n this.selectedTag = '';\n }\n\n /**\n * Placeholder for handling document sharing. Currently logs the file name to the console.\n */\n handleShare() {\n console.log(this.file().fileName);\n }\n}\n","@let fileType = file().type; @let fileSize\n= file().size; @let pdf = fileType === 'pdf'; @let video = ['avi', 'mp4',\n'mov'].includes(fileType); @let image = ['jpg', 'png', 'jpeg',\n'gif'].includes(fileType); @let pageCount = file().pageCount; @let\nimagePreviewUrl = file().imagePreviewUrl; @let showTagModal = showTag === true;\n@let selected = this.selectedTag !== \"\"; @let largeView = viewMode() ===\n\"large\"; @let coverMode = isCrop() === true; @let noTag = noTagOption == true;\n<div\n #document\n class=\"document\"\n [class.noTouch]=\"showDeleteModal()\"\n [class.buttonsVisibility]=\"showTagModal\"\n [class.large-view]=\"largeView\"\n [class.croppedVariant]=\"coverMode\"\n>\n <div class=\"document-image-container\">\n <img [src]=\"imagePreviewUrl\" class=\"document-image\" />\n <div class=\"badge-tag-container\">\n @if(!selected){\n <div class=\"badges\">\n <p class=\"tag\">No Tag</p>\n </div>\n } @if(selected) {\n <div class=\"badges\">\n <p class=\"tag\">{{ selectedTag }}</p>\n </div>\n }\n <div class=\"badges\" [class.bottomTags]=\"largeView\">\n <p\n class=\"badge file-type\"\n [class]=\"{\n pdf: pdf,\n video: video,\n image: image\n }\"\n >\n {{ fileType }}\n </p>\n <p class=\"badge page-count\">\n @if(pdf && pageCount) {\n <span>{{ pageCount }} p.</span>\n }\n <span class=\"file-size\"> {{ fileSize | bytesToHumanReadable }}</span>\n </p>\n </div>\n </div>\n <div class=\"delete-modal\">\n <div class=\"delete-header\">\n <span class=\"delete-header-text\"\n >Are you sure you want to delete this file?</span\n >\n </div>\n <div class=\"modal-buttons\">\n <button class=\"delete-button\" (click)=\"confirmDelete()\">Delete</button>\n <button class=\"cancel-button\" (click)=\"cancelDelete()\">Cancel</button>\n </div>\n </div>\n </div>\n <div class=\"document-name\" (click)=\"showFileNameInput()\">\n @if(!showInput()){\n <p class=\"file-name\">{{ file().fileName }}</p>\n } @if(showInput()){\n <div class=\"input\">\n <cai-input\n [formControl]=\"inputFormControl\"\n [config]=\"{\n type: 'text',\n name: 'File Name Example',\n isEdit: true,\n autofocus: true,\n placeholderBehavior: 'hidden',\n }\"\n (onBlur)=\"hideFileNameInput()\"\n (onClear)=\"hideFileNameInput()\"\n (onOptionAdded)=\"handleEdit($event)\"\n ></cai-input>\n </div>\n }\n </div>\n <div class=\"document-actions\" [class.noTagOption]=\"noTag\">\n @if(!largeView){\n <div class=\"document-actions-container label\">\n <button\n class=\"document-actions-button\"\n [class.tagIcon]=\"showTagModal\"\n [ngbPopover]=\"tagPopover\"\n popoverClass=\"tagPopover\"\n positionTarget=\"document\"\n autoClose=\"outside inside\"\n container=\"body\"\n [openDelay]=\"20\"\n (shown)=\"onTagShown()\"\n (hidden)=\"onTagHidden()\"\n placement=\"right-top left-top\"\n >\n <svg-icon\n name=\"cai-label\"\n ngbTooltip=\"Tag\"\n placement=\"top\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n tooltipClass=\"tooltip\"\n positionTarget=\"document\"\n class=\"icon\"\n ></svg-icon>\n </button>\n </div>\n\n <div class=\"document-actions-container\">\n <button\n class=\"document-actions-button download\"\n (click)=\"handleDownload()\"\n >\n <svg-icon\n name=\"cai-download\"\n ngbTooltip=\"Download\"\n placement=\"top\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n tooltipClass=\"tooltip\"\n positionTarget=\"document\"\n class=\"icon\"\n ></svg-icon>\n </button>\n <button class=\"document-actions-button\" (click)=\"handleDelete()\">\n <svg-icon\n name=\"cai-delete\"\n ngbTooltip=\"Delete\"\n placement=\"top\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n tooltipClass=\"tooltip-delete\"\n positionTarget=\"document\"\n class=\"icon\"\n ></svg-icon>\n </button>\n </div>\n } @if(largeView) {\n <div #buttonsContainer class=\"document-actions-container label\">\n <button\n class=\"document-actions-button\"\n [class.tagIcon]=\"showTagModal\"\n [ngbPopover]=\"tagPopover\"\n popoverClass=\"tagPopover\"\n autoClose=\"outside inside\"\n container=\"body\"\n [positionTarget]=\"buttonsContainer\"\n [openDelay]=\"20\"\n (shown)=\"onTagShown()\"\n (hidden)=\"onTagHidden()\"\n placement=\"right-top left-top\"\n >\n <svg-icon name=\"cai-label\" class=\"icon\"></svg-icon>\n </button>\n <button class=\"document-actions-button share\" (click)=\"handleShare()\">\n <svg-icon name=\"cai-share\" class=\"icon\"></svg-icon>\n </button>\n <button\n class=\"document-actions-button download\"\n (click)=\"handleDownload()\"\n >\n <svg-icon name=\"cai-download\" class=\"icon\"></svg-icon>\n </button>\n <button class=\"document-actions-button delete\" (click)=\"handleDelete()\">\n <svg-icon name=\"cai-delete\" class=\"icon\"></svg-icon>\n </button>\n </div>\n }\n </div>\n\n <ng-template #tagPopover>\n <div class=\"tag-popover\">\n <div class=\"dropdown-list\">\n @if(selectedTag){\n <div class=\"tag-header\" (click)=\"removeTag()\">\n <div class=\"header\">\n <span class=\"tag-header-text\">REMOVE TAG</span>\n <svg-icon name=\"cai-minus\" class=\"minus-icon\"></svg-icon>\n </div>\n <div class=\"divider\"></div>\n </div>\n }\n <div class=\"tag-list\">\n @for (tag of tags; track $index) {\n <div\n class=\"tag-item\"\n (click)=\"getTag(tag)\"\n [class.selectedDesign]=\"selectedTag === tag\"\n >\n <span class=\"tag-text\">{{ tag }}</span>\n <svg-icon name=\"cai-checkmark\" class=\"checkmark-icon\"></svg-icon>\n </div>\n }\n </div>\n </div>\n </div>\n </ng-template>\n</div>\n","import { Injectable } from '@angular/core';\nimport * as pdfjsLib from 'pdfjs-dist';\nimport { FileExtension } from '../models/appFile.model';\n\npdfjsLib.GlobalWorkerOptions.workerSrc = '/pdfjs/pdf.worker.min.mjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DocumentService {\n /**\n * Generates a data URL thumbnail for a given file.\n * Handles PDFs, videos, and images.\n * @param file The file to generate a thumbnail for.\n * @returns A promise that resolves to a data URL string for the thumbnail.\n */\n async generateThumbnail(file: File): Promise<string> {\n const extension: FileExtension = file.name\n .split('.')\n .pop()\n ?.toLowerCase() as FileExtension;\n\n switch (extension) {\n case 'pdf':\n try {\n return await this.generatePdfThumbnail(file);\n } catch (error) {\n console.error('Error generating PDF thumbnail:', error);\n return '/assets/exampledoc.png';\n }\n case 'mp4':\n case 'mov':\n case 'avi':\n try {\n return await this.generateVideoThumbnail(file);\n } catch (error) {\n console.error('Error generating video thumbnail:', error);\n return '/assets/truck.png';\n }\n case 'jpg':\n case 'jpeg':\n case 'png':\n case 'gif':\n return URL.createObjectURL(file);\n default:\n return '/assets/exampledoc.png';\n }\n }\n\n private generatePdfThumbnail(file: Blob): Promise<string> {\n const fileReader = new FileReader();\n return new Promise<string>((resolve, reject) => {\n fileReader.onload = async () => {\n const typedArray = new Uint8Array(fileReader.result as ArrayBuffer);\n try {\n const pdf = await pdfjsLib.getDocument(typedArray).promise;\n const page = await pdf.getPage(1);\n const viewport = page.getViewport({ scale: 1 });\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n const desiredWidth = 280;\n const scale = desiredWidth / viewport.width;\n const scaledViewport = page.getViewport({ scale });\n canvas.height = scaledViewport.height;\n canvas.width = scaledViewport.width;\n\n if (!context) {\n return reject('Could not get canvas context');\n }\n\n await page.render({\n canvas,\n canvasContext: context,\n viewport: scaledViewport,\n }).promise;\n resolve(canvas.toDataURL('image/png'));\n } catch (error) {\n reject(error);\n }\n };\n fileReader.onerror = () => reject(fileReader.error);\n fileReader.readAsArrayBuffer(file);\n });\n }\n\n private generateVideoThumbnail(file: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n video.autoplay = true;\n video.muted = true;\n video.src = URL.createObjectURL(file);\n\n video.onloadeddata = () => {\n video.currentTime = Math.min(0.1, video.duration / 2);\n };\n\n video.onseeked = () => {\n const desiredWidth = 280;\n const scale = desiredWidth / video.videoWidth;\n canvas.width = desiredWidth;\n canvas.height = video.videoHeight * scale;\n\n if (context) {\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\n video.pause();\n URL.revokeObjectURL(video.src);\n resolve(canvas.toDataURL('image/png'));\n } else {\n reject('Could not get canvas context for video thumbnail');\n }\n };\n\n video.onerror = (e) => {\n URL.revokeObjectURL(video.src);\n reject('Error loading video for thumbnail: ' + e);\n };\n });\n }\n\n /**\n * Reads a PDF file and returns the total number of pages.\n *\n * @param file The PDF Blob or File.\n * @returns A promise that resolves to the page count (number).\n * @throws If the file is not a valid PDF or an error occurs during processing.\n */\n async getPdfPageCount(file: Blob): Promise<number> {\n const fileReader = new FileReader();\n\n return new Promise<number>((resolve, reject) => {\n fileReader.onload = async () => {\n const typedArray = new Uint8Array(fileReader.result as ArrayBuffer);\n try {\n const pdf = await pdfjsLib.getDocument(typedArray).promise;\n resolve(pdf.numPages);\n } catch (error) {\n console.error('Error getting PDF page count:', error);\n reject(new Error('Failed to load PDF or get page count.'));\n }\n };\n fileReader.onerror = () => {\n reject(new Error('FileReader error during PDF page count operation.'));\n };\n fileReader.readAsArrayBuffer(file);\n });\n }\n}\n","import {\n Component,\n ElementRef,\n signal,\n ViewChild,\n inject,\n computed,\n input,\n Output,\n EventEmitter,\n effect,\n} from '@angular/core';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { DocumentPreviewComponent } from '../document-preview/document-preview.component';\nimport { AppFile, FileExtension } from '../../models/appFile.model';\nimport {\n ImageCropperComponent,\n ImageCroppedEvent,\n LoadedImage,\n ImageTransform,\n} from 'ngx-image-cropper';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { AvatarComponent } from '../avatar/avatar.component';\nimport { Driver } from '../avatar/models';\nimport { DocumentService } from '../../services/document.service';\nimport { FileResponse } from './models/file.response';\nimport { FormGroup } from '@angular/forms';\n/**\n * A component that provides a user interface for file uploading via\n * drag-and-drop or a file input dialog. It displays previews of the\n * selected files in a carousel.\n */\n@Component({\n selector: 'cai-drop-zone',\n imports: [\n SvgIconComponent,\n DocumentPreviewComponent,\n ImageCropperComponent,\n AvatarComponent,\n ],\n templateUrl: './drop-zone.component.html',\n styleUrl: './drop-zone.component.scss',\n})\nexport class DropZoneComponent {\n // Signals\n public zoomValue = signal<number>(5.8);\n public smallView = signal<boolean>(false);\n public cropHeight = signal<number>(0);\n public cropWidth = signal<number>(0);\n private initialFilesProcessed = signal(false);\n public driver = signal<Driver>({\n id: 0,\n firstName: '',\n lastName: '',\n avatarFile: null,\n avatarColor: 'Blue',\n });\n\n public transform: ImageTransform = {\n scale: this.zoomValue(),\n };\n\n public imageChangedEvent: Event | null = null;\n public croppedImage: SafeUrl | null = '';\n public showCropper = signal<boolean>(false);\n public isCropperReady = signal<boolean>(false);\n public originalImageWidth: number = 0;\n public originalImageHeight: number = 0;\n public base64Image: string = '';\n public deletedDocs = signal<number[]>([]);\n\n // Inputs\n public crop = input<boolean>(false);\n public size = input<string>();\n public rounded = input<boolean>(false);\n public files = input<FileResponse[]>([]);\n public deletedFileIds = input<number[]>([]);\n public maxCountFiles = input<number>(1);\n\n /**\n * A input that holds an FormGroup object that is used to update the form validity when the crop mode is closed.\n */\n\n public parentForm = input<FormGroup | null>(null);\n\n /**\n * A signal that holds an array of `AppFile` objects representing the files\n * that have been selected or dropped by the user.\n \n */\n variant = input<string>('document');\n\n /**\n * Injects the DocumentService for file processing tasks like\n * thumbnail generation and PDF page counting.\n * @private\n */\n private documentService = inject(DocumentService);\n\n /**\n * An array of file extensions that should be excluded from the supported list.\n * @defaultValue `[]` (an empty array)\n * @type {FileExtension[]}\n */\n excludedFileTypes = input<FileExtension[]>([]);\n\n /**\n * The base array of all file extensions that are generally allowed.\n * Supported file types will be derived from this list, after excluding\n * any types specified in `excludedFileTypes`.\n *\n * @defaultValue `['avi', 'mov', 'mp4', 'pdf', 'gif', 'png', 'jpg', 'jpeg']`\n * @type {FileExtension[]}\n */\n fileTypes = input<FileExtension[]>([\n 'pdf',\n 'png',\n 'jpg',\n 'jpeg',\n 'gif',\n 'avi',\n 'mov',\n 'mp4',\n ]);\n\n public coverUrl: string = '';\n public profileUrl: string = '';\n public logoUrl: string = '';\n\n @Output() onDeletedFileIds = new EventEmitter<number[]>();\n @Output() docsChange = new EventEmitter<AppFile[]>();\n\n @ViewChild('inputRange') inputRange!: ElementRef<HTMLInputElement>;\n\n constructor(private sanitizer: DomSanitizer) {\n effect(() => {\n const files = this.files();\n\n if (!this.initialFilesProcessed() && files?.length) {\n this.populateDocs(files);\n this.initialFilesProcessed.set(true);\n }\n });\n }\n\n ngOnInit() {\n this.cropDimensions();\n }\n\n ngAfterViewInit() {}\n\n emitDocs() {\n this.docsChange.emit(this.docs());\n }\n\n populateDocs(currentFiles: FileResponse[]) {\n if (currentFiles?.length) {\n this.docs.set(\n currentFiles.map((file) => {\n if ((file as AppFile).imagePreviewUrl) return file as AppFile;\n return {\n fileName: file.fileName || '',\n baseName: file.fileName || '',\n fileId: file.fileId || 0,\n type:\n (file.fileName\n ?.split('.')\n .pop()\n ?.toLowerCase() as FileExtension) || 'pdf',\n size: file.fileSize || 0,\n imagePreviewUrl: file.url || '',\n file: null,\n pageCount: undefined,\n tag: file.tags?.[0] || '',\n };\n })\n );\n }\n\n if (this.crop()) {\n this.base64Image = currentFiles[0].url || '';\n this.submitCrop(true);\n }\n\n this.deletedDocs.set(this.deletedFileIds() ?? []);\n }\n\n updateRangeBackground(input: HTMLInputElement) {\n if (!input) return;\n const min = Number(input.min);\n const max = Number(input.max);\n var value;\n value = ((this.zoomValue() - min) / (max - min)) * 100;\n input.style.background = `linear-gradient(to right, #6692f1 0%, #6692f1 ${value}%, #eeeeee ${value}%, #eeeeee 100%)`;\n }\n\n cropDimensions() {\n const variant = this.variant();\n const rounded = this.rounded();\n let width = 0;\n let height = 0;\n switch (variant) {\n case 'profile':\n if (rounded) {\n width = 178;\n height = 178;\n } else {\n width = 160;\n height = 178;\n }\n break;\n case 'logo':\n width = 628;\n height = 214;\n break;\n case 'cover':\n width = 267;\n height = 178;\n break;\n }\n\n this.cropWidth.set(width);\n this.cropHeight.set(height);\n }\n\n ratioHelper(): number {\n const width = this.cropWidth();\n const height = this.cropHeight();\n\n return width && height ? width / height : 1;\n }\n\n onZoomChange(event: Event) {\n const input = event.target as HTMLInputElement;\n const zoom = Number(input.value);\n this.zoomValue.set(zoom);\n\n this.transform = {\n scale: zoom,\n };\n this.updateRangeBackground(event.target as HTMLInputElement);\n }\n\n fileChangeEvent(event: Event): void {\n this.imageChangedEvent = event;\n this.isCropperReady.set(false);\n const target = event.target as HTMLInputElement;\n const file = target.files?.[0];\n\n this.zoomValue.set(5.8);\n this.transform = { scale: this.zoomValue() };\n\n const fileExtension = file?.name.split('.').pop()?.toLowerCase();\n const isSupportedImage =\n file &&\n file.type.startsWith('image/') &&\n fileExtension &&\n this.supportedFileTypes().includes(fileExtension as FileExtension);\n if (isSupportedImage && this.crop()) {\n this.setInvalid();\n this.showCropper.set(true);\n } else {\n this.showCropper.set(false);\n }\n\n this.zoomValue.set(5.8);\n }\n\n imageCropped(event: ImageCroppedEvent) {\n if (event.objectUrl) {\n this.croppedImage = this.sanitizer.bypassSecurityTrustUrl(\n event.objectUrl\n );\n } else {\n this.base64Image = (event.base64 as string).replace(\n 'data:image/png;base64,',\n ''\n );\n this.croppedImage = null;\n }\n }\n\n imageLoaded(image: LoadedImage) {}\n\n cropperReady() {\n this.isCropperReady.set(true);\n if (this.inputRange?.nativeElement) {\n this.updateRangeBackground(this.inputRange.nativeElement);\n }\n }\n\n loadImageFailed() {\n // show message\n }\n\n onTransformChange(event: ImageTransform) {\n const scale = event?.scale as number;\n this.zoomValue.set(scale);\n }\n\n cancelCrop() {\n this.clearInvalid();\n this.showCropper.set(false);\n }\n submitCrop(initial: boolean = false) {\n const newPreviewUrl = this.base64Image as string;\n\n const lastIndex = this.docs().length - 1;\n\n if (lastIndex >= 0) {\n const updatedDocs = [...this.docs()];\n const lastDoc = { ...updatedDocs[lastIndex] };\n lastDoc.imagePreviewUrl = newPreviewUrl;\n updatedDocs[lastIndex] = lastDoc;\n\n this.docs.set(updatedDocs);\n this.clearInvalid();\n\n this.showCropper.set(false);\n }\n\n if (this.variant() === 'profile' && this.base64Image) {\n this.profileUrl = initial\n ? this.base64Image\n : `data:image/png;base64,${this.base64Image}`;\n }\n if (this.variant() === 'cover' && this.base64Image) {\n this.coverUrl = initial\n ? this.base64Image\n : `data:image/png;base64,${this.base64Image}`;\n if (this.size() === '480px' && this.coverUrl) {\n this.smallView.set(true);\n }\n }\n if (this.variant() === 'logo' && this.base64Image) {\n this.logoUrl = initial\n ? this.base64Image\n : `data:image/png;base64,${this.base64Image}`;\n }\n this.cropDimensions();\n if (!initial) this.emitDocs();\n }\n\n /**\n * A computed signal that derives the list of currently supported file extensions.\n * It filters the base `fileTypes` array, removing any extensions present\n * in the `excludedFileTypes` input.\n */\n supportedFileTypes = computed(() => {\n const excluded = this.excludedFileTypes();\n const types = this.fileTypes();\n\n if (!excluded || excluded.length === 0) {\n return types;\n }\n\n return types.filter((type) => !excluded.includes(type));\n });\n\n /**\n * A signal that holds an array of `AppFile` objects representing the files\n * that have been selected or dropped by the user.\n */\n docs = signal<AppFile[]>([]);\n\n /**\n * A signal that acts as a boolean flag. It is set to `true` when the user\n * attempts to upload a file with an unsupported extension.\n */\n unsupported = signal(false);\n\n /**\n * Handles the 'change' event from the hidden file input. It extracts the\n * selected files and passes them to the `processFiles` method.\n * @param event The `Event` object from the file input element.\n */\n onInput(event: Event) {\n const target = event.target as HTMLInputElement;\n const files = target.files as FileList;\n this.processFiles(files);\n }\n\n /**\n * Handles the 'drop' event on the component. It prevents the browser's\n * default file handling, extracts the dropped files, and passes them to\n * the `processFiles` method.\n * @param event The `DragEvent` object containing the dropped files.\n */\n onDrop(event: DragEvent) {\n event.preventDefault();\n const files = event.dataTransfer?.files as FileList;\n this.processFiles(files);\n }\n\n /**\n * Asynchronously processes a list of files. For each file, it validates\n * the extension against `supportedFileTypes`. If valid, it generates a\n * thumbnail, counts pages for PDFs, creates an `AppFile` object, and adds\n * it to the `docs` signal. If any file is unsupported, the `unsupported`\n * flag is set.\n * @param files The `FileList` object to be processed.\n */\n async processFiles(files: FileList) {\n this.unsupported.set(false);\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const fileExtension = file.name.split('.').pop()?.toLowerCase();\n\n if (\n !fileExtension ||\n !this.supportedFileTypes().includes(fileExtension as FileExtension)\n ) {\n this.unsupported.set(true);\n continue;\n }\n\n let pageCount: number | undefined;\n\n if (fileExtension === 'pdf') {\n try {\n pageCount = await this.documentService.getPdfPageCount(file);\n } catch (error) {\n console.error(`Failed to get page count for ${file.name}:`, error);\n }\n }\n\n const imagePreviewUrl = await this.documentService.generateThumbnail(\n file\n );\n\n const filePreview: AppFile = {\n fileName: file.name,\n baseName: file.name.split('.').slice(0, -1).join('.'),\n type: fileExtension as FileExtension,\n size: file.size,\n imagePreviewUrl: imagePreviewUrl,\n file: file,\n pageCount: pageCount,\n tag: '',\n };\n\n if (['profile', 'cover', 'logo'].includes(this.variant())) {\n this.docs.set([filePreview]);\n } else {\n this.docs.update((docs) => [...docs, filePreview]);\n }\n\n if (!this.crop()) this.emitDocs();\n\n const visibleCount = this.size() === '480px' ? 2 : 3;\n const total = this.docs().length;\n\n if (total > visibleCount) {\n this.carouselIndex.set(total - visibleCount);\n } else {\n this.carouselIndex.set(0);\n }\n\n if (total === this.maxCountFiles() && this.variant() === 'document') {\n this.inputRef.nativeElement.disabled = true;\n }\n }\n }\n\n /**\n * Handles the download action for a specific file.\n * Note: This is a placeholder and currently only logs the file name.\n * @param fileName The name of the file to be downloaded.\n */\n handleDownload(fileName: string) {\n const fileToDownload = this.docs().find((doc) => doc.fileName === fileName);\n\n if (!fileToDownload || !fileToDownload.file) {\n console.error('File not found or is null');\n return;\n }\n\n const file = fileToDownload.file;\n const url = URL.createObjectURL(file);\n\n const a = document.createElement('a');\n a.href = url;\n a.download = fileToDownload.fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n URL.revokeObjectURL(url);\n }\n\n /**\n * A ViewChild reference to the native `<input type='file'>` element.\n * Used to programmatically trigger the file selection dialog.\n */\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n\n /**\n * Resets the component's state after an unsupported file type error\n * by setting the `unsupported` signal to `false`.\n */\n cancel() {\n this.unsupported.set(false);\n }\n\n /**\n * Programmatically triggers a click on the hidden file input element,\n * which opens the system's file selection dialog.\n */\n handleClickToAdd() {\n this.inputRef.nativeElement.click();\n }\n\n /**\n * Deletes a file from the preview list. It filters the `docs` array to\n * remove the specified file and adjusts the carousel position.\n * @param fileName The name of the file to be deleted.\n */\n handleDelete(fileName: string) {\n this.carouselLeft();\n\n const fileIdToDelete = this.docs().find(\n (doc) => doc.fileName === fileName\n )?.fileId;\n\n if (fileIdToDelete) {\n this.deletedDocs.set([...this.deletedDocs(), fileIdToDelete]);\n\n this.onDeletedFileIds.emit(this.deletedDocs());\n }\n\n this.docs.set(this.docs().filter((doc) => doc.fileName !== fileName));\n this.emitDocs();\n\n if (this.docs().length === 0) {\n this.unsupported.set(false);\n }\n\n if (this.docs().length < this.maxCountFiles()) {\n this.inputRef.nativeElement.disabled = false;\n }\n\n this.coverUrl = '';\n this.smallView.set(false);\n }\n\n // Carousel logic\n\n /**\n * A signal that stores the current index for the file preview carousel.\n * This determines which part of the carousel is visible.\n */\n carouselIndex = signal(0);\n\n /**\n * A computed signal that calculates the CSS `translateX` value for the\n * carousel container. This creates the sliding effect based on the\n * `carouselIndex`.\n */\n carouselTransform = computed(() => {\n const offset = (148 + 6) * this.carouselIndex() * -1; // 148px width + 6px gap\n return `translateX(${offset}px)`;\n });\n\n /**\n * Navigates the carousel one step to the left by decrementing the\n * `carouselIndex`. The index will not go below 0.\n */\n carouselLeft() {\n this.carouselIndex.update((i) => Math.max(0, i - 1));\n }\n\n /**\n * Navigates the carousel one step to the right by incrementing the\n * `carouselIndex`. The index will not exceed the maximum possible value\n * based on the number of documents.\n */\n carouselRight() {\n const visibleCount = this.size() === '480px' ? 2 : 3;\n const maxIndex = Math.max(0, this.docs().length - visibleCount);\n this.carouselIndex.update((i) => Math.min(maxIndex, i + 1));\n }\n\n handleTagChange(event: { fileName: string; tag: string }) {\n this.docs().forEach((doc) => {\n if (doc.fileName === event.fileName) doc.tag = event.tag;\n });\n }\n\n setInvalid() {\n this.parentForm()?.setErrors({ childInvalid: true });\n }\n\n clearInvalid() {\n const { childInvalid, ...rest } = this.parentForm()?.errors ?? {};\n const next = Object.keys(rest).length ? rest : null;\n this.parentForm()?.setErrors(next);\n this.parentForm()?.updateValueAndValidity({\n emitEvent: true,\n onlySelf: true,\n });\n\n // Clear the input value to allow the same file to be selected again\n if (this.inputRef?.nativeElement) {\n this.inputRef.nativeElement.value = '';\n }\n }\n}\n","@let docCount = docs().length; @let cropFile = crop() === true; @let showCrop =\nshowCropper() === true; @let documentVariant = variant() === \"document\"; @let\nvideoVariant = variant() === \"video\"; @let profileVariant = variant() ===\n\"profile\"; @let coverVariant = variant() === \"cover\"; @let logoVariant =\nvariant() === \"logo\"; @let roundedBorder = rounded() === true; @let coverPreview\n= coverUrl !== \"\"; @let profilePreview = profileUrl !== \"\"; @let logoPreview =\nlogoUrl !== \"\"; @let smallSize = size() === \"480px\"; @let countFiles =\nthis.maxCountFiles();\n\n<div\n class=\"container\"\n [class]=\"{\n smallContainer: smallSize,\n largeContainer: !smallSize,\n logoVar: logoVariant,\n hasCropper: isCropperReady()\n }\"\n>\n @if(coverVariant && coverPreview){\n <cai-document-preview\n class=\"cover-container\"\n [file]=\"{\n fileName: 'cover.png',\n imagePreviewUrl: coverUrl,\n type: 'png',\n size: 0,\n file: null,\n baseName: 'cover',\n pageCount: undefined,\n tag: ''\n }\"\n viewMode=\"small\"\n [coverMinimalMode]=\"true\"\n (onDelete)=\"handleDelete('cover.png')\"\n ></cai-document-preview>\n } @if (profileVariant) { @if(!profilePreview) {\n <div>\n <cai-avatar\n [driver]=\"driver()\"\n [size]=\"160\"\n [rounded]=\"rounded()\"\n ></cai-avatar>\n </div>\n } @else if(profilePreview) {\n <div class=\"profile-container\">\n <img\n [class]=\"{\n 'profile-rounded-image': rounded(),\n 'profile-square-image': !rounded()\n }\"\n [src]=\"profileUrl\"\n />\n </div>\n } }\n <!--Image Cropper-->\n @if(cropFile && showCrop){ @if (!isCropperReady()) {\n <div class=\"cropper-loader\">\n <div class=\"spinner\"></div>\n </div>\n }\n <div class=\"cropper-overlay\">\n <image-cropper\n #cropper\n class=\"img-cropper\"\n [output]=\"'base64'\"\n [class.logoBorder]=\"logoVariant\"\n [roundCropper]=\"roundedBorder ? true : false\"\n [hideResizeSquares]=\"true\"\n [allowMoveImage]=\"true\"\n [transform]=\"transform\"\n (transformChange)=\"onTransformChange($event)\"\n format=\"png\"\n [aspectRatio]=\"ratioHelper()\"\n [resizeToWidth]=\"cropWidth()\"\n [resizeToHeight]=\"cropHeight()\"\n [containWithinAspectRatio]=\"true\"\n [imageChangedEvent]=\"imageChangedEvent\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded($event)\"\n (cropperReady)=\"cropperReady()\"\n (loadImageFailed)=\"loadImageFailed()\"\n ></image-cropper>\n @if(isCropperReady()){\n <div class=\"lower-part\">\n <div class=\"range\">\n <input\n #inputRange\n type=\"range\"\n class=\"custom-range\"\n min=\"1\"\n max=\"10\"\n step=\"0.1\"\n [value]=\"zoomValue()\"\n (input)=\"onZoomChange($event)\"\n />\n </div>\n <div class=\"cropper-buttons\">\n <button class=\"cancel-button\" (click)=\"cancelCrop()\">Cancel</button>\n <button class=\"submit-button\" (click)=\"submitCrop()\">Submit</button>\n </div>\n </div>\n }\n </div>\n }\n <!-- Carousel -->\n @if(docCount > 0 && (documentVariant || videoVariant)) {\n <div class=\"docs\">\n <div class=\"doc-container\" [style.transform]=\"carouselTransform()\">\n @for (doc of docs(); track $index) {\n <cai-document-preview\n class=\"doc\"\n [file]=\"doc\"\n (onDelete)=\"handleDelete($event)\"\n (onDownload)=\"handleDownload($event)\"\n (onTagChange)=\"handleTagChange($event)\"\n viewMode=\"small\"\n ></cai-document-preview>\n }\n </div>\n @if((docCount >= 3 && !smallSize) || (docCount >= 2 && smallSize) ) {\n <button class=\"carousel-button carousel-left\" (click)=\"carouselLeft()\">\n <svg-icon name=\"cai-arrow-secondary-left\" class=\"arrow\"></svg-icon>\n </button>\n <button class=\"carousel-button carousel-right\" (click)=\"carouselRight()\">\n <svg-icon name=\"cai-arrow-secondary-right\" class=\"arrow\"></svg-icon>\n </button>\n }\n </div>\n }\n\n <!-- Drop Zone -->\n <div\n class=\"drop-zone-container\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"$event.preventDefault()\"\n [class]=\"{\n 'more-docs': docCount >= 3 && !smallSize,\n 'small-more-docs': docCount >= 2 && smallSize,\n 'max-reached-drop-design': countFiles === this.docs().length && variant() === 'document',\n 'max-reached-more-doc-sm':\n countFiles === this.docs().length &&\n variant() === 'document' &&\n docCount >= 2 && smallSize,\n 'max-reached-more-doc-lg':\n countFiles === this.docs().length &&\n variant() === 'document' &&\n docCount >= 3 && !smallSize,\n\n unsupported: unsupported(),\n smallView: this.smallView()\n }\"\n >\n <!-- Drop Zone -->\n <div class=\"drop-zone\" (click)=\"handleClickToAdd()\">\n @if(logoVariant && logoPreview){\n <div class=\"logo-container\">\n <img class=\"logo-image\" [src]=\"logoUrl\" />\n </div>\n } @if(coverVariant || logoVariant){\n <svg-icon\n name=\"cai-illustration-drop-zone-cover\"\n class=\"illustration\"\n ></svg-icon>\n } @if(profileVariant){\n <svg-icon\n name=\"cai-illustration-drop-zone-profile\"\n class=\"illustration\"\n ></svg-icon>\n } @if(documentVariant){\n <svg-icon\n name=\"cai-illustration-drop-zone\"\n class=\"illustration\"\n ></svg-icon>\n } @if(videoVariant){\n <svg-icon\n name=\"cai-illustration-drop-zone-video\"\n class=\"illustration\"\n ></svg-icon>\n } @if(countFiles === this.docs().length && this.variant() === \"document\")\n {\n <div class=\"drop-zone-text\">\n <p class=\"heading\">\n <span class=\"line\">MAX COUNT</span>\n <span class=\"line\">REACHED</span>\n </p>\n <p class=\"subtext\">\n <span class=\"line\">{{ countFiles }} FILES </span>\n <span class=\"line\">IMPORTED</span>\n </p>\n </div>\n\n } @else{\n <div class=\"drop-zone-text\">\n <p class=\"heading\">\n DRAG FILES @if (docCount < 1) { <span>HERE</span>\n }\n </p>\n @if(!coverPreview && !profilePreview){\n <p class=\"subtext\">OR CLICK TO ADD</p>\n } @if(coverPreview || profilePreview){\n <p class=\"subtext\">OR CLICK TO REPLACE</p>\n }\n </div>\n }\n\n <input\n type=\"file\"\n aria-hidden=\"true\"\n multiple\n class=\"drop-zone-input\"\n #inputRef\n (input)=\"onInput($event)\"\n (change)=\"fileChangeEvent($event)\"\n />\n </div>\n\n <!-- Drop Zone Error -->\n <div class=\"drop-zone-error\">\n <div class=\"drop-zone-text\">\n <p class=\"heading invalid\">INVALID FILE TYPE</p>\n <p class=\"subtext\">SUPPORTED FORMATS</p>\n </div>\n <div class=\"file-types\">\n @for (type of supportedFileTypes(); track $index) {\n <p\n class=\"badge\"\n [class]=\"{\n pdf: type === 'pdf',\n video: ['avi', 'mp4', 'mov'].includes(type),\n image: ['jpg', 'png', 'jpeg', 'gif'].includes(type)\n }\"\n >\n {{ type }}\n </p>\n }\n </div>\n <button class=\"cancel-button\">\n <svg-icon name=\"cai-cancel\" (click)=\"cancel()\"></svg-icon>\n </button>\n </div>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { ICaInput } from '../components/cai-custom-datetime-pickers/config';\n\n@Pipe({\n name: 'inputDropdownArrowClass',\n standalone: true,\n})\nexport class InputDropdownArrowClassPipe implements PipeTransform {\n transform(\n getSuperControl: AbstractControl<any, any> | null,\n isFocusInput: boolean,\n inputConfig: ICaInput,\n isTouchedInput: boolean,\n value: string\n ): { [key: string]: boolean | undefined } {\n return {\n focus: isFocusInput,\n 'valid-focus-in':\n (!inputConfig.dropdownLabel &&\n (getSuperControl?.value || inputConfig.placeholder) &&\n getSuperControl?.valid &&\n isFocusInput &&\n !inputConfig.isDisabled &&\n !inputConfig.isInvalidSearchInDropdown) ||\n ((inputConfig.dropdownImageInput?.url ||\n inputConfig.dropdownImageInput?.nameInitialsInsteadUrl ||\n inputConfig.placeholder) &&\n isFocusInput &&\n !inputConfig.isInvalidSearchInDropdown &&\n !inputConfig.isDisabled),\n 'valid-focus-out':\n (getSuperControl?.value &&\n getSuperControl?.valid &&\n !isFocusInput &&\n !inputConfig.isDisabled) ||\n (!inputConfig.dropdownImageInput?.withText &&\n inputConfig.dropdownImageInput?.url &&\n !isFocusInput &&\n !inputConfig.isDisabled),\n 'invalid-focus-in':\n (getSuperControl?.value &&\n getSuperControl?.invalid &&\n isFocusInput &&\n !inputConfig.isDisabled) ||\n (isFocusInput &&\n getSuperControl?.value &&\n inputConfig.isInvalidSearchInDropdown &&\n inputConfig.isDropdown &&\n !inputConfig.blackInput &&\n !inputConfig.mergeDropdownBodyWithInput &&\n !inputConfig.isDisabled),\n 'invalid-focus-out':\n !getSuperControl?.value &&\n getSuperControl?.invalid &&\n (isTouchedInput || getSuperControl?.touched) &&\n !isFocusInput &&\n !inputConfig.isDisabled,\n 'invalid-search-in-dropdown-focus-in':\n inputConfig.isInvalidSearchInDropdown &&\n inputConfig.isDropdown &&\n isFocusInput &&\n getSuperControl?.value &&\n getSuperControl?.invalid &&\n !inputConfig.isDisabled,\n };\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { AbstractControl } from \"@angular/forms\";\nimport { ICaInput } from \"../components/cai-custom-datetime-pickers/config\";\n\n@Pipe({\n name: \"inputPlaceholderIconClass\",\n standalone: true,\n})\nexport class InputPlaceholderIconClassPipe implements PipeTransform {\n transform(\n getSuperControl: AbstractControl<any, any> | null,\n isFocusInput: boolean,\n inputConfig: ICaInput,\n selectedDropdownLabelColor: any | null,\n isTouchedInput: boolean,\n isEditInput: boolean,\n value: string\n ): { [key: string]: boolean | undefined } {\n return {\n \"inactive-empty\": !getSuperControl?.value && inputConfig.isDisabled,\n \"inactive-filled\": getSuperControl?.value && inputConfig.isDisabled,\n \"default-svg-color\":\n !(inputConfig.dropdownLabel && isFocusInput) &&\n !(inputConfig.dropdownLabel && selectedDropdownLabelColor),\n focus: isFocusInput && !inputConfig.dropdownLabel,\n \"valid-focus-in\":\n getSuperControl?.value &&\n getSuperControl?.valid &&\n isFocusInput &&\n !selectedDropdownLabelColor &&\n !inputConfig.dropdownLabel &&\n !inputConfig.blackInput &&\n !inputConfig.commands?.active &&\n !inputConfig.isDisabled,\n \"valid-focus-out\":\n getSuperControl?.value &&\n getSuperControl?.valid &&\n !isFocusInput &&\n !selectedDropdownLabelColor &&\n !inputConfig.dropdownLabel &&\n !inputConfig.isDisabled,\n \"valid-focus-out-dropdown-label\":\n getSuperControl?.value &&\n getSuperControl?.valid &&\n !isFocusInput &&\n selectedDropdownLabelColor &&\n inputConfig.dropdownLabel &&\n !inputConfig.isDisabled,\n \"invalid-focus-in\":\n getSuperControl?.value &&\n getSuperControl?.invalid &&\n isFocusInput &&\n !selectedDropdownLabelColor &&\n !inputConfig.dropdownLabel &&\n !inputConfig.blackInput &&\n !inputConfig.isDisabled,\n \"invalid-focus-out\":\n getSuperControl?.invalid &&\n !isFocusInput &&\n !selectedDropdownLabelColor &&\n !inputConfig.dropdownLabel &&\n (isTouchedInput || getSuperControl?.touched) &&\n !inputConfig.isDisabled,\n hidden: inputConfig.type === \"password\" && getSuperControl?.value,\n 'cursor-pointer': isEditInput\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\n// confis\nimport { ICaInput } from '../components/cai-custom-datetime-pickers/config';\n\nexport enum DropdownTemplateTypeEnum {\n PAYROLL_TRUCKS = 'payroll-trucks'\n}\n\n@Pipe({\n name: 'inputClearClass',\n standalone: true\n})\nexport class InputClearClassPipe implements PipeTransform {\n transform(\n getSuperControl: AbstractControl<any, any> | null,\n isFocusInput: boolean,\n inputConfig: ICaInput,\n incorrectValue: boolean,\n selectedDropdownLabelColor: boolean,\n template: string,\n value: string\n ): { [key: string]: boolean | undefined } {\n return {\n focus:\n isFocusInput &&\n getSuperControl?.value &&\n !(inputConfig.blackInput && inputConfig.isDropdown),\n 'valid-focus-in':\n (getSuperControl?.value &&\n getSuperControl?.valid &&\n isFocusInput &&\n !inputConfig.customClass?.includes('repair-shop-open-hour') &&\n !inputConfig.blackInput &&\n !inputConfig.dropdownImageInput?.url &&\n !inputConfig.isInvalidSearchInDropdown &&\n !inputConfig.mergeDropdownBodyWithInput &&\n !inputConfig.isDisabled) ||\n (inputConfig.multipleInputValues?.options.length &&\n isFocusInput &&\n !inputConfig.isInvalidSearchInDropdown &&\n !inputConfig.blackInput &&\n !inputConfig.mergeDropdownBodyWithInput &&\n !inputConfig.isDisabled &&\n !inputConfig.dropdownLabel &&\n template === DropdownTemplateTypeEnum.PAYROLL_TRUCKS),\n 'valid-focus-out':\n getSuperControl?.value &&\n getSuperControl?.valid &&\n !isFocusInput &&\n !inputConfig.customClass?.includes('repair-shop-open-hour') &&\n !inputConfig.blackInput &&\n !inputConfig.isDisabled,\n 'invalid-focus-in':\n (getSuperControl?.value &&\n getSuperControl?.invalid &&\n isFocusInput &&\n !inputConfig.mergeDropdownBodyWithInput &&\n !inputConfig.blackInput &&\n !inputConfig.isDisabled) ||\n (inputConfig.isInvalidSearchInDropdown &&\n inputConfig.isDropdown &&\n isFocusInput &&\n getSuperControl?.value &&\n !inputConfig.mergeDropdownBodyWithInput &&\n !inputConfig.blackInput &&\n !inputConfig.isDisabled),\n 'invalid-focus-out':\n getSuperControl?.value &&\n getSuperControl?.invalid &&\n !isFocusInput &&\n !inputConfig.isDropdown &&\n !inputConfig.blackInput &&\n !(\n !inputConfig.dropdownImageInput?.withText &&\n inputConfig.dropdownImageInput?.url\n ) &&\n !inputConfig.isDisabled,\n 'incorrect-input': inputConfig.incorrectInput && getSuperControl?.value,\n 'incorrect-input-on':\n inputConfig.incorrectInput && getSuperControl?.value && incorrectValue,\n hidden:\n getSuperControl?.value && isFocusInput && inputConfig.dropdownLabel,\n 'dropdown-on':\n (getSuperControl?.value &&\n inputConfig.isDropdown &&\n !inputConfig.isDisabled &&\n !inputConfig.blackInput &&\n !inputConfig.multiSelectDropdownActive &&\n !inputConfig.mergeDropdownBodyWithInput) ||\n (inputConfig.dropdownImageInput?.url &&\n !inputConfig.isDisabled &&\n !inputConfig.blackInput &&\n !inputConfig.multiSelectDropdownActive &&\n !inputConfig.mergeDropdownBodyWithInput) ||\n (!inputConfig.blackInput && selectedDropdownLabelColor) ||\n (inputConfig.dropdownImageInput?.url &&\n !inputConfig.blackInput &&\n !inputConfig.mergeDropdownBodyWithInput) ||\n template === DropdownTemplateTypeEnum.PAYROLL_TRUCKS,\n 'trash-can-svg': inputConfig.removeInput,\n };\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { ICaInput } from \"../components/cai-custom-datetime-pickers/config\";\n\n@Pipe({\n name: \"showClear\",\n standalone: true\n})\nexport class ShowClearPipe implements PipeTransform {\n transform(inputConfig: ICaInput, disabled?: boolean): boolean | undefined {\n const isDisabled = disabled || inputConfig.isDisabled;\n return (\n (!inputConfig.hideClear &&\n (!isDisabled || inputConfig.removeInput) &&\n !inputConfig.customClass?.includes(\"details-pages\") &&\n !inputConfig.commands?.active &&\n !inputConfig?.loadingSpinner?.isLoading) ||\n inputConfig.incorrectInput\n );\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { ICaInput } from '../components/cai-custom-datetime-pickers/config';\n\n@Pipe({\n name: 'inputDateTimeContainerClass',\n standalone: true,\n})\nexport class InputDateTimeContainerClassPipe implements PipeTransform {\n transform(\n getSuperControl: AbstractControl<any, any> | null,\n isFocusInput: boolean,\n inputConfig: ICaInput,\n value: string,\n isDisabledInput?: boolean,\n invalid?: boolean,\n isTouchedInput?: boolean,\n ): { [key: string]: boolean | undefined | null | string } {\n\n const isDisabled = isDisabledInput ?? inputConfig.isDisabled;\n return {\n 'datetime-transparent': inputConfig.transparentInput,\n //'datetime-custom-empty-hover': !isFocusInput,\n 'datetime-custom-empty-focus': isFocusInput && !isTouchedInput && !value,\n 'datetime-custom-filled-hover':\n value && !isFocusInput && !inputConfig.dropdownLabel,\n 'datetime-invalid-filled-focus-out':\n value &&\n invalid &&\n //isTouchedInput &&\n !isFocusInput &&\n !inputConfig.blackInput &&\n !isDisabled,\n 'datetime-invalid-empty-focus-out':\n !value &&\n invalid &&\n isTouchedInput &&\n !isFocusInput &&\n !inputConfig.blackInput &&\n !isDisabled &&\n !inputConfig.dropdownLabel,\n 'datetime-invalid-focus-in':\n invalid &&\n isFocusInput &&\n !inputConfig.blackInput &&\n !isDisabled,\n 'datetime-valid-focus-in':\n value &&\n !invalid &&\n isFocusInput &&\n !isDisabled,\n 'datetime-valid-focus-out':\n value &&\n !invalid &&\n !isFocusInput &&\n !inputConfig.blackInput &&\n !inputConfig.isDisabled,\n 'datetime-inactive-empty': isDisabled && !value,\n 'datetime-inactive-filled': isDisabled && value,\n 'datetime-input-remove-trash-can': inputConfig.removeInput,\n 'datetime-input-remove-background': inputConfig.isInputBackgroundRemoved,\n 'datetime-input-blue-text': inputConfig.isBlueText,\n 'datetime-required-label-table': inputConfig.requiredLabel,\n };\n }\n}","import { distinctUntilChanged } from \"rxjs/operators\";\nimport { Subject } from \"rxjs\";\nimport { Injectable } from \"@angular/core\";\n\n// models\nimport { ScrollChange } from \"../models/scroll-change.model\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class CalendarDateTimePickerService {\n public index$ = new Subject<ScrollChange>();\n public indexAuto$ = new Subject<number>();\n public scrollToDate = new Subject<string>();\n public dateChanged = new Subject<any>();\n public selectedIndex = 0;\n scrolledIndexChange = this.index$.pipe(distinctUntilChanged());\n scrollToAutoIndex = this.indexAuto$.pipe(distinctUntilChanged());\n private scrolledScroll!: string;\n\n constructor() {}\n\n public set setAutoIndex(number: number) {\n this.selectedIndex = number;\n this.indexAuto$.next(number);\n }\n\n public set scrolledScrollItem(name: string) {\n this.scrolledScroll = name;\n }\n\n public get selectedScroll() {\n return this.scrolledScroll;\n }\n}\n","import {\n CdkVirtualScrollViewport,\n VirtualScrollStrategy,\n} from '@angular/cdk/scrolling';\nimport { Inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\n// services\nimport { CalendarDateTimePickerService } from '../services/calendar-datetime-picker.service';\n\nexport const STARTING_YEAR = new Date().getFullYear() - 90;\n\nexport const RANGE = 100 * 12;\n\nconst BUFFER = 500;\n\n@Injectable()\nexport class CalendarStrategy implements VirtualScrollStrategy {\n constructor(\n private calendarService: CalendarDateTimePickerService,\n @Inject(String) private startedHeight: number,\n @Inject(String) private FULL_SIZE: number,\n @Inject(String) private SCROLL_TYPE: string\n ) {}\n\n private index$ = new Subject<any>();\n scrolledIndexChange = this.index$.pipe(distinctUntilChanged());\n private viewport?: CdkVirtualScrollViewport;\n\n public attach(viewport: CdkVirtualScrollViewport): void {\n this.viewport = viewport;\n this.viewport.setTotalContentSize(this.startedHeight);\n this.updateRenderedRange(this.viewport);\n }\n\n public updateScrollHeights(height: number): void {\n this.viewport?.setTotalContentSize(height);\n this.updateRenderedRange(this.viewport);\n }\n\n public detach(): void {\n this.index$.complete();\n this.viewport = undefined;\n }\n\n public onContentScrolled(): void {\n if (this.viewport) this.updateRenderedRange(this.viewport);\n }\n\n /** These do not matter for this case */\n public onDataLengthChanged(): void {}\n\n public onContentRendered(): void {}\n\n public onRenderedOffsetChanged(): void {}\n\n public scrollToIndex(index: number, behavior: ScrollBehavior): void {\n if (this.viewport)\n this.viewport.scrollToOffset(this.getOffsetForIndex(index), behavior);\n }\n\n public scrollToOffset(offset: number, behavior: ScrollBehavior): void {\n if (this.viewport) this.viewport.scrollToOffset(offset, behavior);\n }\n\n public getOffsetForIndex(index: number): number {\n return this.FULL_SIZE * index;\n }\n\n private getIndexForOffset(offset: number): number {\n return Math.round(offset / this.FULL_SIZE);\n }\n private updateRenderedRange(viewport?: CdkVirtualScrollViewport): void {\n if (!viewport) return;\n\n const offset = viewport.measureScrollOffset();\n\n const { start, end } = viewport.getRenderedRange();\n const viewportSize = 230;\n\n const dataLength = viewport.getDataLength();\n\n const newRange = { start, end };\n const firstVisibleIndex = this.getIndexForOffset(offset);\n\n const startOffsetIndex = this.FULL_SIZE * start;\n\n const startBuffer = offset - startOffsetIndex;\n if (startBuffer < BUFFER && start !== 0) {\n newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER * 2));\n newRange.end = Math.min(\n dataLength,\n this.getIndexForOffset(offset + viewportSize + BUFFER)\n );\n } else {\n const endBuffer = this.FULL_SIZE * end - offset - viewportSize;\n\n if (endBuffer < BUFFER && end !== dataLength) {\n newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER));\n newRange.end = Math.min(\n dataLength,\n this.getIndexForOffset(offset + viewportSize + BUFFER * 2)\n );\n }\n }\n\n viewport.setRenderedRange(newRange);\n viewport.setRenderedContentOffset(this.getOffsetForIndex(newRange.start));\n\n // Used for update of 2nd scroll that is listening\n if (this.calendarService.selectedScroll === this.SCROLL_TYPE)\n this.index$.next({\n indx: firstVisibleIndex,\n scrollOffset: offset,\n cycleSize: this.FULL_SIZE,\n type: this.SCROLL_TYPE,\n });\n }\n}\n","export class CustomDatetimePickersConstants {\n public static readonly timeMinutes = ['00', '15', '30', '45'];\n public static readonly timeMinutesGapFive = [\n '00',\n '05',\n '10',\n '15',\n '20',\n '25',\n '30',\n '35',\n '40',\n '45',\n '50',\n '55',\n ];\n public static readonly monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n public static readonly hourTimes = [\n 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,\n 11,\n ];\n public static readonly defaultScrollTypes = {\n pmAmScroll: 0,\n minutesScroll: 0,\n hourScroll: 8,\n monthScroll: 0,\n dayScroll: 0,\n yearScroll: 0,\n };\n public static readonly timeOfDay = ['AM', 'PM'];\n public static readonly defaultSelectedTime = '12:00 AM';\n public static readonly defaultOutputTypeTime = ['hh', ':', 'mm', ' ', 'AM'];\n public static readonly defaultOutputTypeDate = ['MM', '/', 'DD', '/', 'YY'];\n public static readonly dayOfWeekLetters = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'cai-custom-datetime-picker-calendar-days',\n templateUrl: './cai-custom-datetime-pickers-calendar-days.component.html',\n styleUrls: ['./cai-custom-datetime-pickers-calendar-days.component.scss'],\n imports: [CommonModule, FormsModule]\n})\nexport class CaCustomDateTimePickersCalendarDaysComponent implements OnInit {\n @Input() dateTime!: Date;\n @Input() year!: number;\n @Input() selectedMonth!: string;\n @Input() index!: number;\n @Input() activeMonth!: boolean;\n @Output() selectDay = new EventEmitter();\n public currentYear: number = new Date().getFullYear();\n public currentMonth: number = new Date().getMonth();\n public currentDay: number = new Date().getDate();\n public selectedMonthFromInput!: number;\n public selectedYearFromInput!: number;\n public days: ReadonlyArray<string | number> = [];\n public selectedDay: number = -1;\n public selMonth: number = -1;\n public selectedYear: number = -1;\n\n @Input()\n set month(month: Date) {\n this.selectedMonthFromInput = parseInt(\n ('0' + month.getMonth() + 1).slice(-2)\n );\n this.selectedYearFromInput = month.getFullYear();\n const fillerCount = month.getDay();\n const lastDay = new Date(month.getFullYear(), month.getMonth() + 1, 0);\n const daysCount = lastDay.getDate();\n\n this.days = [\n ...Array.from({ length: fillerCount }).map(() => ''),\n ...Array.from({ length: daysCount }).map((_, i) => i + 1),\n ];\n }\n\n constructor() { }\n\n ngOnInit(): void {\n this.setSelectedDate();\n }\n\n public chooseDay(day: number | string): void {\n this.selectDay.emit({ index: this.index, day });\n }\n\n private setSelectedDate(): void {\n this.selectedDay = parseInt(('0' + this.dateTime.getDate()).slice(-2));\n this.selMonth = parseInt(\n ('0' + this.dateTime.getMonth() + 1).slice(-2)\n );\n this.selectedYear = this.dateTime.getFullYear();\n }\n}","<div class=\"calendar_days\">\n @for (day of days; let indx = $index; track indx) {\n <div\n (click)=\"day && chooseDay(day)\"\n [ngClass]=\"{\n 'selected_day ta-font-bold':\n day === selectedDay &&\n selectedMonthFromInput === selMonth &&\n selectedYearFromInput === selectedYear,\n }\"\n [class.empty_day]=\"!day\"\n [class.day_in_current_month]=\"activeMonth\"\n [class.current_day]=\"\n day === currentDay &&\n year === currentYear &&\n selectedMonth === currentMonth.toString()\n \"\n class=\"calendar_day ta-font-medium\"\n >\n <span>{{ day }}</span>\n </div>\n }\n</div>\n","export enum CalendarMainStringEnum {\n FULL_SIZE = 182,\n CYCLE_HEIGHT = 100 * (12 * FULL_SIZE) + 50,\n CYCLE_HEIGHT_BY_MONTHS = 100 * FULL_SIZE + 65,\n}\n","export enum CalendarStringEnum {\n AUTO = 'auto',\n LEFT = 'left',\n LIST_PREVIEW = 'listPreview',\n MAIN = 'main'\n}\n","export enum CalendarListPreviewStringEnum {\n FULL_LIST = 'full_list',\n MONTH_LIST = 'month_list',\n}","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n OnDestroy,\n forwardRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\n\n// modules\nimport {\n ScrollingModule,\n VIRTUAL_SCROLL_STRATEGY,\n} from '@angular/cdk/scrolling';\n\n// moment\nimport moment from 'moment';\n\n// services\nimport { CalendarDateTimePickerService } from '../../services/calendar-datetime-picker.service';\n\n// components\nimport { CaCustomDateTimePickersCalendarDaysComponent } from '../cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component';\n\n// strategy\nimport {\n CalendarStrategy,\n STARTING_YEAR,\n} from '../../strategy/calendar-strategy';\n\n// enums\nimport { CalendarMainStringEnum } from '../../enums/calendar-main-string.enum';\nimport { CalendarStringEnum } from '../../enums/calendar-string.enum';\nimport { CalendarListPreviewStringEnum } from '../../enums/calendar-list-preview-string.enum';\nimport { CustomDatetimePickersConstants } from '../../utils/constants/custom-datetime-pickers.constants';\n\nfunction factory(dir: CaCustomDateTimePickerCalendarDatesMainComponent) {\n return dir.scrollStrategy;\n}\n\n@Component({\n selector: 'cai-custom-datetime-pickers--calendar-dates-main',\n templateUrl: './cai-custom-datetime-pickers-calendar-dates-main.component.html',\n styleUrls: [\n './cai-custom-datetime-pickers-calendar-dates-main.component.scss',\n ],\n imports: [\n CommonModule,\n FormsModule,\n ScrollingModule,\n CaCustomDateTimePickersCalendarDaysComponent,\n ],\n providers: [\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n useFactory: factory,\n deps: [\n forwardRef(() => CaCustomDateTimePickerCalendarDatesMainComponent),\n ],\n },\n ]\n})\nexport class CaCustomDateTimePickerCalendarDatesMainComponent\n implements OnInit, OnDestroy {\n @Input() months!: Date[];\n @Input() dateTime!: Date;\n @Input() currentIndex!: number;\n @Input() currentYearIndex!: number;\n @Input() activeIndex!: number;\n @Input() monthYearsIndx!: string[];\n\n public _listPreview!: string;\n @Input() set listPreview(value: string) {\n this._listPreview = value;\n this.scrollStrategy.updateScrollHeights(\n value === CalendarListPreviewStringEnum.MONTH_LIST\n ? CalendarMainStringEnum.CYCLE_HEIGHT_BY_MONTHS\n : CalendarMainStringEnum.CYCLE_HEIGHT\n );\n }\n @Input() isMonthAndYearOnly!: boolean;\n @Output() setListPreviewToFull: EventEmitter<number> = new EventEmitter();\n @Output() setAutoIndex: EventEmitter<number> = new EventEmitter();\n\n public scrollStrategy!: CalendarStrategy;\n\n private destroy$ = new Subject<void>();\n\n public monthNames = CustomDatetimePickersConstants.monthNames;\n\n public selectedYear!: number;\n public selectedYearFromInput!: number;\n public selMonth!: number;\n public selectedMonth!: string;\n private activeMonth = 0;\n\n constructor(private calendarService: CalendarDateTimePickerService) {\n this.scrollStrategy = new CalendarStrategy(\n this.calendarService,\n CalendarMainStringEnum.CYCLE_HEIGHT,\n CalendarMainStringEnum.FULL_SIZE,\n CalendarStringEnum.MAIN\n );\n }\n\n ngOnInit(): void {\n this.initScrollListeners();\n }\n\n public initScrollListeners(): void {\n this.selMonth = this.dateTime.getMonth();\n this.selectedYearFromInput = this.dateTime.getFullYear();\n //this.selectedYearFromInput = this.months.getFullYear();\n\n this.calendarService.scrollToAutoIndex\n .pipe(takeUntil(this.destroy$))\n .subscribe((indx) => {\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n indx,\n CalendarStringEnum.AUTO\n );\n });\n });\n\n this.calendarService.scrolledIndexChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n if (\n res.type !== CalendarStringEnum.MAIN &&\n this.calendarService.selectedScroll !==\n CalendarStringEnum.MAIN\n ) {\n const sizeTimes =\n CalendarMainStringEnum.FULL_SIZE / res.cycleSize;\n const newScrollSize = Math.ceil(\n sizeTimes * res.scrollOffset\n );\n this.scrollStrategy.scrollToOffset(\n newScrollSize,\n CalendarStringEnum.AUTO\n );\n }\n });\n\n this.calendarService.scrollToDate\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n setTimeout(() => {\n if (res) {\n const indx = this.findIndexInMonth(res);\n this.scrollStrategy.scrollToIndex(\n indx,\n CalendarStringEnum.AUTO\n );\n } else {\n this.scrollStrategy.scrollToIndex(\n this.currentIndex,\n CalendarStringEnum.AUTO\n );\n }\n }, 200);\n });\n\n if (this.isMonthAndYearOnly) {\n setTimeout(() => {\n this.scrollStrategy.updateScrollHeights(\n CalendarMainStringEnum.CYCLE_HEIGHT_BY_MONTHS\n );\n\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n this.currentYearIndex,\n CalendarStringEnum.AUTO\n );\n }, 200);\n }, 200);\n }\n }\n\n public findIndexInMonth(date: string): number {\n const selectedDate = new Date(date);\n const indexMonth = (selectedDate.getFullYear() - STARTING_YEAR) * 12;\n const indx = indexMonth + selectedDate.getMonth();\n return indx;\n }\n\n public onMonthChange(data: any): void {\n if (this.months[data.indx]) {\n this.selectedYear = this.months[data.indx].getFullYear();\n this.selectedMonth =\n this.monthNames[this.months[data.indx].getMonth()];\n this.activeMonth = data.indx;\n this.calendarService.index$.next(data);\n }\n }\n\n public getMonth(index: number): string {\n return CustomDatetimePickersConstants.monthNames[index];\n }\n\n public mouseOverSetItem() {\n this.calendarService.scrolledScrollItem = CalendarStringEnum.MAIN;\n }\n\n public setCalendarListPreview(num: number, index: number): void {\n this.selMonth = num;\n\n if (this.isMonthAndYearOnly) {\n this.setAutoIndex.emit(num);\n\n const selectedMonth = this.months[index];\n const new_date = moment(\n new Date(selectedMonth.getFullYear(), num + 1, 0)\n ).format();\n this.calendarService.dateChanged.next(new_date);\n } else {\n this.setListPreviewToFull.emit(num);\n }\n }\n\n public selectDay(data: { day: number; index: number }): void {\n const selectedMonth = this.months[data.index];\n const new_date = moment(\n new Date(\n selectedMonth.getFullYear(),\n selectedMonth.getMonth(),\n data.day\n )\n ).format();\n this.calendarService.dateChanged.next(new_date);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div (mouseover)=\"mouseOverSetItem()\">\n <cdk-virtual-scroll-viewport #monthsScrollRef (scrolledIndexChange)=\"onMonthChange($event)\"\n style=\"height: 200px; width: 100%; margin: 0\">\n <ng-container *cdkVirtualFor=\"\n let month of months;\n let indx = index;\n templateCacheSize: 10\n \">\n <div class=\"calendar_indicator ta-font-bold\" [class.full_calendar]=\"_listPreview === 'full_list'\"\n [class.current_year]=\"\n isMonthAndYearOnly\n ? selectedYearFromInput === month.getFullYear()\n : selectedYearFromInput === month.getFullYear() &&\n selMonth === month.getMonth()\n \">\n @if (_listPreview === 'full_list') {\n <span>{{ getMonth(month.getMonth()) }} </span>\n }\n {{ month.getFullYear() }}\n </div>\n @if (_listPreview === 'full_list') {\n <div>\n <cai-custom-datetime-picker-calendar-days (selectDay)=\"selectDay($event)\" [index]=\"indx\" [month]=\"month\"\n [selectedMonth]=\"month.getMonth().toString()\" [year]=\"selectedYear\" [dateTime]=\"dateTime\"\n [activeMonth]=\"\n selectedYearFromInput === month.getFullYear() &&\n selMonth === month.getMonth()\n \"></cai-custom-datetime-picker-calendar-days>\n </div>\n }\n @if (_listPreview === 'month_list') {\n <div>\n <div class=\"month_list\" [class.current_year]=\"\n selectedYearFromInput === month.getFullYear()\n \">\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(0, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 0 === selMonth,\n }\">\n JAN\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(1, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 1 === selMonth,\n }\">\n FEB\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(2, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 2 === selMonth,\n }\">\n MAR\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(3, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 3 === selMonth,\n }\">\n APR\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(4, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 4 === selMonth,\n }\">\n MAY\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(5, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 5 === selMonth,\n }\">\n JUN\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(6, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 6 === selMonth,\n }\">\n JUL\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(7, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 7 === selMonth,\n }\">\n AUG\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(8, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 8 === selMonth,\n }\">\n SEP\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(9, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 9 === selMonth,\n }\">\n OCT\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(10, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 10 === selMonth,\n }\">\n NOV\n </div>\n <div class=\"month_list_item ta-font-medium\" (click)=\"setCalendarListPreview(11, indx)\" [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput ===\n month.getFullYear() && 11 === selMonth,\n }\">\n DEC\n </div>\n </div>\n </div>\n }\n </ng-container>\n </cdk-virtual-scroll-viewport>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\nimport { CustomDatetimePickersConstants } from '../utils/constants/custom-datetime-pickers.constants';\nimport { CalendarListPreviewStringEnum } from '../enums/calendar-list-preview-string.enum';\n\n@Pipe({\n name: 'calendarmonths',\n standalone: true,\n})\nexport class CalendarMonthsPipe implements PipeTransform {\n private MONTHS = CustomDatetimePickersConstants.monthNames;\n\n constructor() {}\n\n transform(index: Date, listPreview: string): string {\n if (\n this.MONTHS[index.getMonth()] === 'January' ||\n listPreview === CalendarListPreviewStringEnum.MONTH_LIST\n )\n return `<span class=\"left-year-show\">${index.getFullYear()}</span>`;\n\n return this.MONTHS[index.getMonth()].slice(0, 3);\n }\n}","export enum CalendarLeftStringEnum {\n FULL_SIZE = 22,\n CYCLE_HEIGHT = 100 * (12 * FULL_SIZE) + 265,\n CYCLE_HEIGHT_BY_MONTHS = 100 * FULL_SIZE + 265,\n}\n","import { Component, forwardRef, Input, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { Subject, takeUntil } from 'rxjs';\n\n// services\nimport { CalendarDateTimePickerService } from '../../services/calendar-datetime-picker.service';\n\n// modules\nimport {\n ScrollingModule,\n VIRTUAL_SCROLL_STRATEGY,\n} from '@angular/cdk/scrolling';\n\n// pipes\nimport { CalendarMonthsPipe } from '../../pipes/calendar-months.pipe';\n\n// strategy\nimport {\n CalendarStrategy,\n STARTING_YEAR,\n} from '../../strategy/calendar-strategy';\n\n// enums\nimport { CalendarLeftStringEnum } from '../../enums/calendar-left-string.enum';\nimport { CalendarListPreviewStringEnum } from '../../enums/calendar-list-preview-string.enum';\nimport { CalendarStringEnum } from '../../enums/calendar-string.enum';\n\nfunction factory(dir: CaCustomDateTimePickersCalendarLeftComponent) {\n return dir.scrollStrategy;\n}\n\n@Component({\n selector: 'cai-custom-datetime-pickers-calendar-left',\n templateUrl: './cai-custom-datetime-pickers-calendar-left.component.html',\n styleUrls: ['./cai-custom-datetime-pickers-calendar-left.component.scss'],\n imports: [CommonModule, FormsModule, ScrollingModule, CalendarMonthsPipe],\n providers: [\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n useFactory: factory,\n deps: [\n forwardRef(() => CaCustomDateTimePickersCalendarLeftComponent),\n ],\n },\n ]\n})\nexport class CaCustomDateTimePickersCalendarLeftComponent\n implements OnInit, OnDestroy\n{\n @Input() months!: Date[];\n @Input() currentIndex!: number;\n @Input() isMonthAndYearOnly: boolean = false;\n\n public _listPreview!: string;\n @Input() set listPreview(value: string) {\n this._listPreview = value;\n this.scrollStrategy.updateScrollHeights(\n value === CalendarListPreviewStringEnum.MONTH_LIST\n ? CalendarLeftStringEnum.CYCLE_HEIGHT_BY_MONTHS\n : CalendarLeftStringEnum.CYCLE_HEIGHT\n );\n }\n\n public _currentYearIndex: number = 0;\n @Input() set currentYearIndex(value: number) {\n this._currentYearIndex = value;\n if (this.isMonthAndYearOnly && this._currentYearIndex)\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n this._currentYearIndex,\n CalendarStringEnum.AUTO\n );\n }, 200);\n }\n\n public _activeIndex: number = 0;\n @Input() set activeIndex(value: number) {\n this._activeIndex = value;\n if (!this.isMonthAndYearOnly && this._activeIndex)\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n this._activeIndex,\n CalendarStringEnum.AUTO\n );\n }, 200);\n }\n public isHovered!: boolean;\n private isFirstCall: boolean = true;\n\n private destroy$ = new Subject<void>();\n\n constructor(private calendarService: CalendarDateTimePickerService) {\n this.scrollStrategy = new CalendarStrategy(\n this.calendarService,\n CalendarLeftStringEnum.CYCLE_HEIGHT,\n CalendarLeftStringEnum.FULL_SIZE,\n CalendarStringEnum.LEFT\n );\n }\n\n scrollStrategy!: CalendarStrategy;\n\n ngOnInit(): void {\n this.initScrollListeners();\n }\n\n public initScrollListeners(): void {\n this.calendarService.scrollToAutoIndex\n .pipe(takeUntil(this.destroy$))\n .subscribe((indx) => {\n this.scrollStrategy.scrollToIndex(\n indx,\n CalendarStringEnum.AUTO\n );\n });\n\n this.calendarService.scrolledIndexChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n if (\n res.type != CalendarStringEnum.LEFT &&\n this.calendarService.selectedScroll !=\n CalendarStringEnum.LEFT\n ) {\n const sizeTimes =\n CalendarLeftStringEnum.FULL_SIZE / res.cycleSize;\n const newScrollSize = sizeTimes * res.scrollOffset;\n this.scrollStrategy.scrollToOffset(\n newScrollSize,\n CalendarStringEnum.AUTO\n );\n }\n });\n\n this.calendarService.scrollToDate\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n setTimeout(() => {\n if (res) {\n const indx = this.findIndexInMonth(res);\n this.scrollStrategy.scrollToIndex(\n indx,\n CalendarStringEnum.AUTO\n );\n } else\n this.scrollStrategy.scrollToIndex(\n this.currentIndex,\n CalendarStringEnum.AUTO\n );\n });\n });\n\n if (this.isMonthAndYearOnly) {\n setTimeout(() => {\n if (this.isFirstCall) {\n this.scrollStrategy.updateScrollHeights(\n CalendarLeftStringEnum.CYCLE_HEIGHT_BY_MONTHS\n );\n\n this.scrollStrategy.scrollToIndex(\n this._currentYearIndex,\n CalendarStringEnum.AUTO\n );\n\n this.isFirstCall = false;\n }\n }, 200);\n }\n }\n\n public findIndexInMonth(date: string): number {\n const selectedDate = new Date(date);\n const indexMonth = (selectedDate.getFullYear() - STARTING_YEAR) * 12;\n const indx = indexMonth + selectedDate.getMonth();\n return indx;\n }\n\n public onScrollChanged(data: any): void {\n this.calendarService.index$.next(data);\n }\n\n public selectMonth(indx: number): void {\n this.scrollStrategy.scrollToIndex(indx, CalendarStringEnum.AUTO);\n }\n\n public mouseOverSetItem(): void {\n this.calendarService.scrolledScrollItem = CalendarStringEnum.LEFT;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}","<div (mouseover)=\"mouseOverSetItem()\">\n <cdk-virtual-scroll-viewport\n #leftSideRef\n (scrolledIndexChange)=\"onScrollChanged($event)\"\n style=\"height: 290px; width: 100%; margin: 0\"\n >\n <ng-container\n *cdkVirtualFor=\"\n let month of months;\n let indx = index;\n templateCacheSize: 10\n \"\n >\n <div\n (click)=\"selectMonth(indx)\"\n class=\"month-year-item ta-font-medium\"\n [ngClass]=\"{\n 'current_month_year ta-font-bold': isMonthAndYearOnly\n ? indx === _currentYearIndex\n : indx === _activeIndex,\n }\"\n [innerHTML]=\"month | calendarmonths: _listPreview\"\n ></div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n</div>\n","import {\n Component,\n Input,\n OnInit,\n Output,\n EventEmitter,\n OnDestroy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { Subject, Subscription, takeUntil } from 'rxjs';\n\n// moment\nimport moment from 'moment';\n\n// services\nimport { CalendarDateTimePickerService } from '../../services/calendar-datetime-picker.service';\n\n// constants\nimport { RANGE, STARTING_YEAR } from '../../strategy/calendar-strategy';\nimport { CustomDatetimePickersConstants } from '../../utils/constants/custom-datetime-pickers.constants';\n\n// components\nimport { CaCustomDateTimePickerCalendarDatesMainComponent } from '../cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component';\nimport { CaCustomDateTimePickersCalendarLeftComponent } from '../cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component';\n\n// enums\nimport { CalendarListPreviewStringEnum } from '../../enums/calendar-list-preview-string.enum';\n\n@Component({\n selector: 'cai-custom-datetime-pickers-date-calendars',\n templateUrl: './cai-custom-datetime-pickers-date-calendars.component.html',\n styleUrls: ['./cai-custom-datetime-pickers-date-calendars.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n CaCustomDateTimePickerCalendarDatesMainComponent,\n CaCustomDateTimePickersCalendarLeftComponent,\n ]\n})\nexport class CaCustomDateTimePickersDateCalendarsComponent\n implements OnInit, OnDestroy\n{\n @Input() listPreview!: string;\n @Input() dateTime!: Date;\n @Input() isMonthAndYearOnly: boolean = false;\n @Output() setListPreviewValue = new EventEmitter();\n\n private currentYear: number = new Date().getFullYear();\n private currentMonth: number = new Date().getMonth();\n private activeMonth: number = 0;\n private subscription?: Subscription;\n private destroy$ = new Subject<void>();\n private monthNames: string[] = CustomDatetimePickersConstants.monthNames;\n public dayOfWeekLetters: string[] =\n CustomDatetimePickersConstants.dayOfWeekLetters;\n\n public activeIndex: number = 0;\n public currentIndex!: number;\n public currentYearIndex!: number;\n public monthYearsIndx: string[] = [];\n public months: Date[] = Array.from({ length: RANGE }, (_, i) => {\n const year = STARTING_YEAR + Math.floor(i / 12);\n const month = i % 12;\n if (year === this.currentYear && month === this.currentMonth) {\n this.currentIndex = i;\n this.activeIndex = i;\n }\n const sendDate = new Date(year, month, 1);\n this.monthYearsIndx.push(moment(sendDate).format('MM/DD/YY'));\n return sendDate;\n });\n\n public justYears: Date[] = Array.from({ length: 100 }, (_, i) => {\n const year = STARTING_YEAR + i;\n if (year === this.currentYear) this.currentYearIndex = i;\n\n return new Date(STARTING_YEAR + i, 1, 1);\n });\n\n public selectedYear!: number;\n public selectedMonth!: string;\n\n constructor(private calendarService: CalendarDateTimePickerService) {}\n\n ngOnInit(): void {\n this.initInitalState();\n this.initScrollListener();\n }\n\n public initScrollListener(): void {\n this.calendarService.scrolledIndexChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((res: { indx: number }) => {\n this.activeIndex = res.indx;\n this.onMonthChange(res.indx);\n });\n }\n\n public initInitalState(): void {\n this.selectedMonth = this.monthNames[this.dateTime.getMonth()];\n this.selectedYear = this.dateTime.getFullYear();\n\n if (this.calendarService.selectedIndex)\n this.activeIndex = this.calendarService.selectedIndex;\n\n if (this.isMonthAndYearOnly)\n this.currentYearIndex = this.justYears.findIndex(\n (year) => year.getFullYear() === this.selectedYear\n );\n }\n\n public onMonthChange(month: number): void {\n this.listPreview === CalendarListPreviewStringEnum.FULL_LIST\n ? (this.selectedYear = this.months[month].getFullYear())\n : (this.selectedYear = this.justYears[month].getFullYear());\n\n this.selectedMonth = this.monthNames[this.months[month].getMonth()];\n this.activeMonth = month;\n }\n\n public getMonth(index: number): string {\n return CustomDatetimePickersConstants.monthNames[index];\n }\n\n public setListPreview(): void {\n if (this.listPreview === CalendarListPreviewStringEnum.FULL_LIST) {\n this.setListPreviewValue.emit(\n CalendarListPreviewStringEnum.MONTH_LIST\n );\n this.calendarService.setAutoIndex = Math.floor(\n this.activeIndex / 12\n );\n }\n }\n\n public setListPreviewToFull(num: number): void {\n this.setListPreviewValue.emit(CalendarListPreviewStringEnum.FULL_LIST);\n this.setAutoIndex(num);\n }\n\n public setAutoIndex(num: number): void {\n this.calendarService.setAutoIndex = this.activeIndex * 12 + num;\n }\n\n public selectCurrentDay(): void {\n const new_date = moment(new Date()).format();\n this.calendarService.dateChanged.next(new_date);\n this.setListPreviewValue.emit(CalendarListPreviewStringEnum.FULL_LIST);\n }\n\n ngOnDestroy() {\n if (this.subscription) this.subscription.unsubscribe();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div class=\"d-flex\">\n <div class=\"month-years-size\">\n <div class=\"calendar_border\"></div>\n <cai-custom-datetime-pickers-calendar-left\n [currentIndex]=\"currentIndex\"\n [currentYearIndex]=\"currentYearIndex\"\n [activeIndex]=\"activeIndex\"\n [months]=\"listPreview === 'full_list' ? months : justYears\"\n [listPreview]=\"listPreview\"\n [isMonthAndYearOnly]=\"isMonthAndYearOnly\"\n >\n </cai-custom-datetime-pickers-calendar-left>\n </div>\n <div class=\"full-calendars-list\">\n <div class=\"full_list\">\n <div class=\"calendar_view\">\n <div class=\"calendar_view_head\">\n <div class=\"month_name ta-font-bold\">\n <span (click)=\"setListPreview()\" class=\"year_hold\">\n @if (listPreview === 'full_list') {\n <span>{{ selectedMonth }}</span>\n }\n {{ selectedYear }}\n </span>\n </div>\n <div\n class=\"today ta-font-bold\"\n (click)=\"selectCurrentDay()\"\n >\n Today\n </div>\n </div>\n <div class=\"calendars_list_view\">\n <div\n class=\"calendar_month_days\"\n [class.hideVisibility]=\"listPreview != 'full_list'\"\n >\n @for (\n dayLetter of dayOfWeekLetters;\n let indx = $index;\n track indx\n ) {\n <div class=\"cal_day ta-font-bold\">\n {{ dayLetter }}\n </div>\n }\n </div>\n <cai-custom-datetime-pickers--calendar-dates-main\n [currentIndex]=\"currentIndex\"\n [currentYearIndex]=\"currentYearIndex\"\n [activeIndex]=\"activeIndex\"\n [monthYearsIndx]=\"monthYearsIndx\"\n [months]=\"\n listPreview === 'full_list' ? months : justYears\n \"\n [listPreview]=\"listPreview\"\n [dateTime]=\"dateTime\"\n [isMonthAndYearOnly]=\"isMonthAndYearOnly\"\n (setListPreviewToFull)=\"setListPreviewToFull($event)\"\n (setAutoIndex)=\"setAutoIndex($event)\"\n ></cai-custom-datetime-pickers--calendar-dates-main>\n </div>\n </div>\n </div>\n </div>\n</div>\n","export enum CalendarTypeStringEnum {\n TIME = 'time',\n}\n","export enum CalendarScrollTypeStringEnum {\n HOURS_SCROLL = 'hourScroll',\n PM_AM_SCROLL = 'pmAmScroll',\n}","export enum InputConfigNameStringEnum {\n DATE_PICKER = 'datepicker',\n TIME_PICKER = 'timepicker',\n DATE_PICKER_BANK_CARD = 'datepickerBankCard',\n INPUT_DROPDOWN_BANK_NAME = 'Input Dropdown Bank Name',\n ADDRESS = 'Address'\n } ","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef,\n OnDestroy,\n AfterViewInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n// moment\nimport moment from 'moment';\n\n// services\nimport { CalendarDateTimePickerService } from './services/calendar-datetime-picker.service';\n\n// components\nimport { CaCustomDateTimePickersDateCalendarsComponent } from './components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component';\n\n// constants\nimport { CustomDatetimePickersConstants } from './utils/constants/custom-datetime-pickers.constants';\n\n// models\nimport { ScrollType } from './models/scroll-type.model';\n\n// enums\nimport { CalendarTypeStringEnum } from './enums/calendar-type-string.enum';\nimport { CalendarListPreviewStringEnum } from './enums/calendar-list-preview-string.enum';\nimport { CalendarScrollTypeStringEnum } from './enums/calendar-scroll-type-string.enum';\nimport { ICaInput } from './config';\nimport { InputConfigNameStringEnum } from './enums/config.enum';\n\n@Component({\n selector: 'cai-custom-datetime-pickers',\n templateUrl: './cai-custom-datetime-pickers.component.html',\n styleUrls: ['./cai-custom-datetime-pickers.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n CaCustomDateTimePickersDateCalendarsComponent\n ]\n})\nexport class CaCustomDatetimePickersComponent\n implements OnInit, OnDestroy, AfterViewInit {\n @Input() dateTime!: Date;\n @ViewChild('ref', { read: ViewContainerRef }) ref!: ViewContainerRef;\n public _inputConfig!: ICaInput;\n @Input() set inputConfig(config: ICaInput) {\n this._inputConfig = config;\n if (\n this._inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n )\n this.listPreview = CalendarListPreviewStringEnum.MONTH_LIST;\n\n if (this._inputConfig.minutesGapFive)\n this.timeMinutes =\n CustomDatetimePickersConstants.timeMinutesGapFive;\n else this.timeMinutes = CustomDatetimePickersConstants.timeMinutes;\n }\n\n @Output() closePopover: EventEmitter<Date> = new EventEmitter();\n\n @ViewChild(CaCustomDateTimePickersDateCalendarsComponent)\n dateCalendar!: CaCustomDateTimePickersDateCalendarsComponent;\n @ViewChild('pmAmScroll') pmAmScroll!: ElementRef;\n @ViewChild('minutesScroll') minutesScroll!: ElementRef;\n @ViewChild('hourScroll') hourScroll!: ElementRef;\n\n public selectedDateTime!: string;\n public calendarMainType!: string;\n public outputType!: (string | number)[];\n public currentYear: number = new Date().getFullYear();\n public currentMonth: number = new Date().getMonth();\n public currentDay: number = new Date().getDate();\n public listPreview: string = CalendarListPreviewStringEnum.FULL_LIST;\n public timeMinutes!: string[];\n public monthArray: number[] = new Array(12)\n .fill(0)\n .map((_, indx) => indx + 1);\n public monthDayList: number[] = new Array(31)\n .fill(0)\n .map((_, indx) => indx + 1);\n public yearsList: (string | number)[] = new Array(100)\n .fill(0)\n .map((_, idx) => (idx < 10 ? '0' + idx : idx));\n public scrollTimer!: ReturnType<typeof setTimeout> | number;\n public hoveredItem!: string | null;\n public isInputFocus!: boolean;\n public monthNames: string[] = CustomDatetimePickersConstants.monthNames;\n public hourTimes: number[] = CustomDatetimePickersConstants.hourTimes;\n public scrollTypes: ScrollType =\n CustomDatetimePickersConstants.defaultScrollTypes;\n public selectedTime: string =\n CustomDatetimePickersConstants.defaultSelectedTime;\n public timeOfDay: string[] = CustomDatetimePickersConstants.timeOfDay;\n\n public previousRangeSide!: boolean;\n\n constructor(private calendarService: CalendarDateTimePickerService) { }\n\n @Input()\n set calendarType(calendarType: string) {\n this.calendarMainType = calendarType;\n if (calendarType === CalendarTypeStringEnum.TIME)\n this.outputType =\n CustomDatetimePickersConstants.defaultOutputTypeTime;\n else\n this.outputType =\n CustomDatetimePickersConstants.defaultOutputTypeDate;\n }\n\n @Input()\n set placeholder(placeholder: string) {\n this.selectedDateTime = placeholder;\n }\n\n ngOnInit(): void {\n this.initDateChangedListener();\n }\n\n ngAfterViewInit(): void {\n this.setTimeValue();\n this.changeOpened();\n }\n\n public initDateChangedListener(): void {\n this.calendarService.dateChanged.subscribe((date) => {\n if (this.calendarMainType !== CalendarTypeStringEnum.TIME) {\n this.outputType[0] = date[0];\n this.outputType[2] = date[1];\n this.outputType[4] = date[2];\n this.selectedDateTime = this.createStringFromOutput();\n }\n });\n }\n\n public setTimeValue() {\n const dateInputArray = moment(this.dateTime)\n .format('h/mm/A')\n .split('/');\n\n console.log(dateInputArray, 'this.inputConfig');\n\n setTimeout(() => {\n this.scrollTypes.hourScroll = this.hourTimes.indexOf(\n parseInt(dateInputArray[0])\n );\n this.scrollTypes.minutesScroll = this.timeMinutes.indexOf(\n dateInputArray[1]\n );\n\n this.scrollTypes.pmAmScroll = dateInputArray[2] === 'AM' ? 0 : 1;\n });\n }\n\n public setListPreview(value: string): void {\n this.listPreview = value;\n }\n\n public inputInFocus(): void {\n this.isInputFocus = true;\n }\n\n public inputBlur(): void {\n this.isInputFocus = false;\n }\n\n public changeOpened(): void {\n // this.isInputFocus = e;\n // if (e) {\n if (this.calendarMainType === CalendarTypeStringEnum.TIME) {\n setTimeout(() => {\n this.hourScroll.nativeElement.scrollTop =\n this.scrollTypes.hourScroll * 22;\n this.minutesScroll.nativeElement.scrollTop =\n this.scrollTypes.minutesScroll * 22;\n this.pmAmScroll.nativeElement.scrollTop =\n this.scrollTypes.pmAmScroll * 22;\n });\n } else {\n let test = `${this.dateTime.getMonth() + 1\n }/${this.dateTime.getDate()}/${this.dateTime.getFullYear()}`;\n\n this.calendarService.scrollToDate.next(\n `${this.dateTime.getMonth() + 1\n }/${this.dateTime.getDate()}/${this.dateTime.getFullYear()}`\n );\n }\n }\n\n public setTime(): void {\n this.outputType[0] = this.hourTimes[this.scrollTypes.hourScroll];\n this.outputType[2] = this.timeMinutes[this.scrollTypes.minutesScroll];\n this.outputType[4] = this.timeOfDay[this.scrollTypes.pmAmScroll];\n\n this.selectedDateTime = this.createStringFromOutput();\n\n let currentDate = moment().format('MM/DD/YYYY');\n\n // this.calendarService.dateChanged.next(\n // new Date(currentDate + ' ' + this.selectedDateTime)\n // );\n\n this.closePopover.emit(new Date(currentDate + ' ' + this.selectedDateTime));\n }\n\n public setDefaultTime(): void {\n let currentDate = moment().format('MM/DD/YYYY');\n //this.calendarService.dateChanged.next(new Date(currentDate + ' 08:00'));\n\n this.closePopover.emit(new Date(currentDate + ' 08:00'));\n }\n\n public closePopup(): void {\n this.closePopover.emit();\n }\n\n public createStringFromOutput(): string {\n return this.outputType.join('');\n }\n\n public onScroll(\n event: Event,\n type: keyof ScrollType,\n index: number | null = null\n ): void {\n\n const scrolFromTop = Math.floor(\n (event.target as HTMLElement).scrollTop\n );\n const scrollIndex =\n index === null ? Math.floor(scrolFromTop / 22) : index;\n const scrollRemaining = scrolFromTop % 22;\n clearInterval(this.scrollTimer);\n this.scrollTimer = setTimeout(() => {\n if (scrollRemaining < 11 && index === null) {\n (event.target as HTMLElement).scrollTop = scrollIndex * 22;\n this.scrollTypes[type] = scrollIndex;\n } else if (index !== null) {\n (<HTMLElement>(\n (<HTMLElement>event.target).parentNode\n )).scrollTop = scrollIndex * 22;\n this.scrollTypes[type] = scrollIndex;\n } else {\n (event.target as HTMLElement).scrollTop =\n (scrollIndex + 1) * 22;\n this.scrollTypes[type] = scrollIndex + 1;\n }\n\n this.checkForScrolledType(type);\n }, 200);\n }\n\n public checkForScrolledType(type: string): void {\n if (type === CalendarScrollTypeStringEnum.HOURS_SCROLL) {\n if (this.scrollTypes[type] >= 12) {\n this.pmAmScroll.nativeElement.scrollTop = 22;\n this.scrollTypes.pmAmScroll = 1;\n } else {\n this.pmAmScroll.nativeElement.scrollTop = 0;\n this.scrollTypes.pmAmScroll = 0;\n }\n }\n\n if (type === CalendarScrollTypeStringEnum.PM_AM_SCROLL) {\n if (this.scrollTypes[type] === 0) {\n if (this.scrollTypes.hourScroll >= 12) {\n this.hourScroll.nativeElement.scrollTop =\n (this.scrollTypes.hourScroll - 12) * 22;\n this.scrollTypes.hourScroll = Math.floor(\n this.scrollTypes.hourScroll - 12\n );\n }\n } else {\n if (this.scrollTypes.hourScroll < 12) {\n this.hourScroll.nativeElement.scrollTop =\n (this.scrollTypes.hourScroll + 12) * 22;\n this.scrollTypes.hourScroll = Math.floor(\n this.scrollTypes.hourScroll + 12\n );\n }\n }\n }\n\n this.selectedTime = this.timeMinutes[this.scrollTypes.minutesScroll] ? `${this.hourTimes[this.scrollTypes.hourScroll]}:${this.timeMinutes[this.scrollTypes.minutesScroll]\n } ${this.timeOfDay[this.scrollTypes.pmAmScroll]}` : '';\n }\n\n ngOnDestroy() {\n this.listPreview = CalendarListPreviewStringEnum.FULL_LIST;\n }\n}","<div class=\"temp_inp_holder\">\n <div>\n <div class=\"pickers_holder dark_picker\">\n @if (calendarMainType === 'date') {\n <div class=\"date_picker\">\n <cai-custom-datetime-pickers-date-calendars [listPreview]=\"listPreview\" [dateTime]=\"dateTime\"\n [isMonthAndYearOnly]=\"\n _inputConfig.name === 'datepickerBankCard'\n \"\n (setListPreviewValue)=\"setListPreview($event)\"></cai-custom-datetime-pickers-date-calendars>\n </div>\n }\n @if (calendarMainType === 'time') {\n <div class=\"time_picker\">\n <div class=\"time_picker_head d-flex\">\n <div class=\"selected_time ta-font-bold\">\n {{ selectedTime || (dateTime | date : 'hh:mm aa') }}\n </div>\n <div class=\"sel_now ta-font-bold\" (click)=\"setDefaultTime()\">\n Default\n </div>\n </div>\n <div class=\"time_picker_body\">\n <div class=\"picker_body_head\">\n <div class=\"ta-font-bold\" [class.active]=\"hoveredItem === 'hours'\">\n Hour\n </div>\n <div class=\"ta-font-bold\" [class.active]=\"hoveredItem === 'minutes'\">\n Minute\n </div>\n <div class=\"ta-font-bold\" [class.active]=\"hoveredItem === 'times'\">\n AM/PM\n </div>\n </div>\n <div class=\"picker_body\">\n <div #hourScroll (mouseout)=\"hoveredItem = null\" (mouseover)=\"hoveredItem = 'hours'\"\n (scroll)=\"onScroll($event, 'hourScroll')\" class=\"scroll_pickers\">\n @for (\n hour of hourTimes;\n let indx = $index;\n track indx\n ) {\n <div class=\"scroll_item ta-font-medium\" [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.hourScroll === indx,\n }\" (click)=\"\n onScroll($event, 'hourScroll', indx)\n \">\n {{ hour }}\n </div>\n }\n </div>\n <div #minutesScroll (mouseout)=\"hoveredItem = null\" (mouseover)=\"hoveredItem = 'minutes'\"\n (scroll)=\"onScroll($event, 'minutesScroll')\" class=\"scroll_pickers\">\n @for (\n minutes of timeMinutes;\n let indx = $index;\n track indx\n ) {\n <div class=\"scroll_item ta-font-medium\" [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.minutesScroll ===\n indx,\n }\" (click)=\"\n onScroll(\n $event,\n 'minutesScroll',\n indx\n )\n \">\n {{ minutes }}\n </div>\n }\n </div>\n <div #pmAmScroll (mouseout)=\"hoveredItem = null\" (mouseover)=\"hoveredItem = 'times'\"\n (scroll)=\"onScroll($event, 'pmAmScroll')\" class=\"scroll_pickers\">\n @for (\n when of timeOfDay;\n let indx = $index;\n track indx\n ) {\n <div class=\"scroll_item ta-font-medium\" [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.pmAmScroll === indx,\n }\" (click)=\"\n onScroll($event, 'pmAmScroll', indx)\n \">\n {{ when }}\n </div>\n }\n </div>\n <div class=\"picker_line\">\n <span class=\"border_line\"></span>\n <span class=\"border_line line_2\"></span>\n </div>\n </div>\n <div class=\"picker_buttons\">\n <div (click)=\"closePopup()\" class=\"pick_button ta-font-bold\">\n Cancel\n </div>\n <div (click)=\"setTime()\" class=\"pick_button set_button ta-font-bold\">\n Set\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>","export enum InputConfigNameStringEnum {\n DATE_PICKER = 'datepicker',\n TIME_PICKER = 'timepicker',\n DATE_PICKER_BANK_CARD = 'datepickerBankCard',\n INPUT_DROPDOWN_BANK_NAME = 'Input Dropdown Bank Name',\n ADDRESS = 'Address'\n}","export enum eGeneralActions {\n ADD = 'Add',\n ADD_LOWERCASE = 'add',\n ADD_NEW_ITEM = 'Add New Item',\n UPDATE = 'Update',\n UPDATE_LOWERCASE = 'update',\n DELETE = 'Delete',\n DELETE_LOWERCASE = 'delete',\n EDIT = 'Edit',\n EDIT_LOWERCASE = 'edit',\n EDIT_UPPERCASE = 'EDIT',\n\n SAVE = 'Save',\n SAVE_LOWERCASE = 'save',\n CANCEL = 'Cancel',\n CANCEL_LOWERCASE = 'cancel',\n ENTER = 'Enter',\n ESCAPE = 'Escape',\n CONFIRM = 'Confirm',\n CONFIRM_LOWERCASE = 'confirm',\n SET = 'Set',\n SET_LOWERCASE = 'set',\n REMOVE = 'Remove',\n REMOVE_LOWERCASE = 'remove',\n\n SELECT = 'Select',\n SELECT_LOWERCASE = 'select',\n SEARCH = 'Search',\n SEARCH_LOWERCASE = 'search',\n\n SELECT_ALL = 'Select All',\n SELECT_REMAINING = 'Select Remaining',\n CLEAR_SELECTED = 'Clear Selected',\n\n ACTIVATE = 'Activate',\n ACTIVATE_LOWERCASE = 'activate',\n DEACTIVATE = 'deactivate',\n DEACTIVATE_LOWERCASE = 'deactivate',\n\n CLOSE = 'Close',\n CLOSE_LOWERCASE = 'close',\n CLOSE_UPPERCASE = 'CLOSE',\n OPEN = 'Open',\n OPEN_LOWERCASE = 'open',\n\n NEXT = 'Next',\n NEXT_LOWERCASE = 'next',\n PREVIOUS = 'Previous',\n PREVIOUS_LOWERCASE = 'previous',\n\n CLEAR = 'Clear',\n CLEAR_LOWERCASE = 'clear',\n CLEAR_ALL = 'Clear All',\n\n SHOW_MORE = 'show more',\n\n OPEN_MODAL = 'open-modal',\n\n EXPAND = 'Expand',\n EXPAND_LOWERCASE = 'expand',\n EXPAND_UPPERCASE = 'EXPAND',\n\n COLLAPSE = 'Collapse',\n COLLAPSE_LOWERCASE = 'collapse',\n COLLAPSE_UPPERCASE = 'COLLAPSE',\n\n SORT_BY = 'Sort By',\n\n COPY = 'Copy',\n COPIED = 'Copied',\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n Renderer2,\n} from \"@angular/core\";\n\n@Directive({\n selector: \"[appHoverSvg]\",\n standalone: true,\n})\nexport class HoverSvgDirective {\n @Input() set fill(value: string | null | undefined) {\n if (value) {\n this._fill = value;\n\n this.renderer2.setStyle(this.elRef.nativeElement, \"fill\", this._fill);\n }\n }\n\n @Input() set fillHover(value: string | null | undefined) {\n if (value) {\n this._fillHover = value;\n }\n }\n\n public _fill: string = \"\";\n public _fillHover: string = \"\";\n\n constructor(\n private elRef: ElementRef,\n private renderer2: Renderer2\n ) {}\n\n @HostListener(\"mouseover\")\n onMouseOver() {\n this.renderer2.setStyle(\n this.elRef.nativeElement,\n \"fill\",\n this._fillHover ? this._fillHover : this._fill\n );\n }\n\n @HostListener(\"mouseleave\")\n onMouseLeave() {\n this.renderer2.setStyle(this.elRef.nativeElement, \"fill\", this._fill);\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n// Imports\nimport moment from 'moment';\nimport { NgbModule, NgbPopover } from '@ng-bootstrap/ng-bootstrap';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AngularSvgIconModule } from 'angular-svg-icon';\n\n// Pipe\nimport { InputDropdownArrowClassPipe } from './pipes/input-dropdown-arrow-class.pipe';\nimport { InputPlaceholderIconClassPipe } from './pipes/input-placeholder-icon.class.pipe';\nimport { InputClearClassPipe } from './pipes/input-clear-class.pipe';\nimport { ShowClearPipe } from './pipes/show-clear.pipe';\nimport { InputDateTimeContainerClassPipe } from './pipes/input-date-time-container-class.pipe';\n\n// Components\nimport { CaCustomDatetimePickersComponent } from './components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component';\n\n// Enums\nimport { InputConfigNameStringEnum } from './enums/input-config-name-string.enum';\nimport { eGeneralActions } from '../../enums/general-actions.enum';\n\n// Services\nimport { CalendarDateTimePickerService } from './components/cai-custom-datetime-pickers/services/calendar-datetime-picker.service';\n\n// Directives\nimport { HoverSvgDirective } from '../../directives';\n\n// Models\nimport { ICaInput } from './components/cai-custom-datetime-pickers/config';\n\n// Types\nexport type InputChangeValue = string | number | Date;\n\n@Component({\n selector: 'cai-input-datetime-picker',\n templateUrl: './cai-input-datetime-picker.component.html',\n styleUrls: [\n './cai-input-datetime-picker.component.scss'\n ],\n imports: [\n // modules\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n AngularSvgIconModule,\n NgbModule,\n // components\n CaCustomDatetimePickersComponent,\n // pipes\n InputDateTimeContainerClassPipe,\n InputPlaceholderIconClassPipe,\n InputDropdownArrowClassPipe,\n InputClearClassPipe,\n ShowClearPipe,\n // Directives\n HoverSvgDirective,\n ],\n providers: [CalendarDateTimePickerService],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CaiInputDatetimePickerComponent\n implements AfterViewInit, ControlValueAccessor, OnDestroy {\n @Input() inputConfig!: ICaInput;\n @Input() formFormat?: string;\n\n @Output('clear') clearInputEvent: EventEmitter<boolean> =\n new EventEmitter<boolean>();\n @Output('blurInput') blurInputEvent: EventEmitter<boolean> =\n new EventEmitter<boolean>();\n\n @ViewChild('dateTimePopover') dateTimePopover!: NgbPopover;\n @ViewChild(\"t2\") t2!: NgbPopover;\n\n\n public showDateInput: boolean = false;\n public dateTimeInputDate: Date = new Date();\n public dateTimeIntDate: Date = new Date();\n public selectionInput: number = -1;\n\n // Timers\n private dateTimeMainTimer!: ReturnType<typeof setTimeout> | number;\n private focusBlur!: ReturnType<typeof setTimeout> | number;\n private timeoutCleaner!: ReturnType<typeof setTimeout> | number;\n\n // Component properties\n public eGeneralActions = eGeneralActions;\n public isTouchedInput: boolean = false;\n public isFocusInput: boolean = false;\n public preventBlur: boolean = false;\n public valueAfterWriteValue!: string;\n // Date\n public newInputChanged: boolean = false;\n\n // Outputs\n @Output() selectLastOneForSelectionEmitter = new EventEmitter<boolean>();\n @Output() selectLastOneAfterMouseUpEmitter = new EventEmitter<boolean>();\n @Output() onDatePasteEmitter = new EventEmitter<ClipboardEvent>();\n @Output() onFocusEmitter = new EventEmitter<FocusEvent>();\n @Output() changeSelectionEmmiter = new EventEmitter<{\n e: KeyboardEvent;\n noPreventDefault: boolean;\n }>();\n @Output() setSelectionEmmiter = new EventEmitter<{\n preventDefault: () => void;\n stopPropagation: () => void;\n target: any;\n }>();\n\n // View Children\n @ViewChild('span1', { static: true }) span1!: ElementRef;\n @ViewChild('span2', { static: true }) span2!: ElementRef;\n @ViewChild('span3', { static: true }) span3!: ElementRef;\n @ViewChild('holder1', { static: true }) holder1!: ElementRef;\n\n // Private\n private destroy$: Subject<void> = new Subject<void>();\n\n constructor(\n @Self() public superControl: NgControl,\n private calendarService: CalendarDateTimePickerService\n ) {\n this.superControl.valueAccessor = this;\n }\n\n ngOnInit(): void { }\n\n // Control Value Accessor\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public onChange(_: InputChangeValue): void { }\n\n public onTouched = (): void => { };\n\n public writeValue(obj: InputChangeValue): void {\n if (obj) this.setTimeDateInput(obj, true);\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public blurInput(): void {\n this.isFocusInput = false;\n }\n\n public ngAfterViewInit(): void {\n if (this.valueAfterWriteValue) {\n this.setTimeDateInput(this.valueAfterWriteValue);\n } else {\n this.setTimePickerTime();\n }\n\n this.calendarService.dateChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe((date) => {\n if (!this.inputConfig.isDisabled) {\n this.setTimeDateInput(date);\n this.t2.close();\n }\n });\n }\n\n get getSuperControl() {\n return this.superControl.control;\n }\n\n // 05/05/2025\n public onDatePaste(event: ClipboardEvent): void {\n event.preventDefault();\n\n const pasteText = event.clipboardData?.getData('text') as string;\n const pastedDate = new Date(pasteText);\n if (!isNaN(pastedDate.getTime())) {\n this.setTimeDateInput(pastedDate);\n this.selectSpanByTabIndex(this.selectionInput);\n }\n }\n\n changeSelection(e: any, noPreventDefault = false): void {\n\n e.preventDefault();\n e.stopPropagation();\n const isCtrlV = (e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'v';\n\n if (isCtrlV) {\n // Allow paste\n return;\n }\n\n if (\n e.keyCode == 37 ||\n e.keyCode == 38 ||\n e.keyCode == 39 ||\n e.keyCode == 40 ||\n e.keyCode == 8 ||\n e.keyCode == 9 ||\n e.keyCode == 46 ||\n (this.selectionInput == 3 && this.inputConfig.name === 'timepicker')\n ) {\n !e.noPrevent && e.preventDefault();\n if (e.keyCode == 37) {\n this.selectionInput = this.selectionInput <= 0 ? 0 : this.selectionInput - 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n } else if (e.keyCode == 39 || e.keyCode == 9) {\n if (\n ((this.inputConfig.name === 'datepickerBankCard' &&\n this.selectionInput != 1) ||\n (this.inputConfig.name !== 'datepickerBankCard' &&\n this.selectionInput != 2)) &&\n !e.shiftKey\n ) {\n this.selectionInput = this.selectionInput + 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n } else if (e.keyCode == 9 && !e.shiftKey) {\n let allInputs = document.querySelectorAll(\n 'input.input-control'\n ) as NodeListOf<HTMLInputElement>;\n [...(allInputs as any)].map((item, indx) => {\n // if (\n // item ===\n // this.caInputComponent.inputElement.nativeElement\n // ) {\n // if (allInputs[indx + 1]) {\n // allInputs[indx + 1].focus();\n // } else {\n // this.blurOnDateTime();\n // }\n // this.selectionInput = -1;\n // return;\n // }\n });\n } else if (\n e.shiftKey &&\n e.keyCode == 9 &&\n this.selectionInput != 0\n ) {\n if (this.selectionInput == -1) {\n this.selectionInput = 3;\n }\n this.selectionInput = this.selectionInput - 1;\n this.selectSpanByTabIndex(this.selectionInput);\n } else if (\n e.shiftKey &&\n e.keyCode == 9 &&\n this.selectionInput == 0\n ) {\n let allInputs = document.querySelectorAll('input');\n [...(allInputs as any)].map((item, indx) => {\n // if (\n // item ===\n // this.caInputComponent.inputElement.nativeElement\n // ) {\n // if (allInputs[indx - 1]) {\n // allInputs[indx - 1].focus();\n // }\n // this.selectionInput = -1;\n // return;\n // }\n });\n }\n } else if (e.keyCode == 38) {\n this.setDateTimeModel('up');\n } else if (e.keyCode == 40) {\n this.setDateTimeModel('down');\n } else if (e.keyCode == 8 || e.keyCode == 46) {\n this.handleKeyboardInputs(e, true);\n }\n } else if (!this.isNumber(e)) {\n if (!noPreventDefault) {\n e.preventDefault();\n }\n } else {\n if (!noPreventDefault) {\n e.preventDefault();\n }\n if (this.selectionInput == -1) {\n this.selectionInput = 0;\n }\n\n this.handleKeyboardInputs(e);\n }\n }\n\n public changeSelectionTwo(\n event: KeyboardEvent,\n noPreventDefault = false\n ): void {\n if (!noPreventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const isNavigationKey = this.isNavigationKey(event);\n const isSpecialTimePickerKey =\n this.selectionInput === 3 &&\n this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER;\n\n if (isNavigationKey || isSpecialTimePickerKey) {\n event.preventDefault();\n this.handleNavigationKey(event);\n } else if (!this.isNumber(event)) {\n if (!noPreventDefault) event.preventDefault();\n else {\n if (!noPreventDefault) event.preventDefault();\n\n if (this.selectionInput === -1) this.selectionInput = 0;\n this.handleKeyboardInputs(event);\n }\n }\n }\n\n private isNumber(evt: KeyboardEvent): boolean {\n evt = evt ? evt : (window.event as KeyboardEvent);\n let charCode = evt.which ? evt.which : evt.keyCode;\n return (\n (charCode >= 48 && charCode <= 57) ||\n (charCode >= 96 && charCode <= 105)\n );\n }\n\n private isNavigationKey(e: KeyboardEvent): boolean {\n const navigationKeys = [37, 38, 39, 40, 8, 9, 46]; // Arrow keys, Backspace, Tab, Delete\n return navigationKeys.includes(e.keyCode);\n }\n\n public onFocus(event?: FocusEvent): void {\n this.onFocusEmitter.emit(event);\n }\n\n public closePopover(date: Date): void {\n if (date) {\n this.setTimeDateInput(date);\n }\n this.t2?.close();\n }\n\n public handleFocusInput(e: Event) {\n const event = e as FocusEvent;\n\n if (!this.inputConfig.isDisabled) {\n clearTimeout(this.dateTimeMainTimer);\n clearTimeout(this.focusBlur);\n this.showDateInput = true;\n if (\n (this.selectionInput === -1 &&\n (event?.target as HTMLElement)?.nodeName === 'INPUT') ||\n (event?.relatedTarget as HTMLElement)?.nodeName === 'INPUT' ||\n event?.relatedTarget === null\n ) {\n this.preventBlur = true;\n this.holder1.nativeElement.focus();\n this.setSpanSelection(this.holder1.nativeElement);\n this.selectionInput = -1;\n }\n\n this.t2.toggle();\n }\n }\n\n public setSpanSelection(element: Node): void {\n let range: Range;\n let selection: Selection | null;\n\n if (window.getSelection && document.createRange) {\n selection = window.getSelection();\n range = document.createRange();\n range.selectNodeContents(element);\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n }\n\n public setSelection(event: {\n preventDefault: () => void;\n stopPropagation: () => void;\n target: any;\n }): void {\n const element = event.target;\n\n const selectionInput = parseInt(element.getAttribute('tabindex'));\n\n const currentSelection = window.getSelection();\n\n if (currentSelection && currentSelection.toString().length > 10) {\n this.holder1.nativeElement.focus();\n this.selectionInput = 0;\n this.setSpanSelection(this.holder1.nativeElement);\n clearTimeout(this.dateTimeMainTimer);\n clearTimeout(this.focusBlur);\n return;\n }\n\n clearTimeout(this.dateTimeMainTimer);\n if (element.classList.contains('main')) {\n this.selectionInput = selectionInput;\n this.setSpanSelection(element);\n } else {\n if (this.selectionInput === -1) {\n this.holder1.nativeElement.focus();\n this.selectionInput = 0;\n this.setSpanSelection(this.span1.nativeElement);\n } else {\n event.preventDefault();\n this.selectSpanByTabIndex(this.selectionInput);\n }\n }\n }\n\n // BLUR ON INPUT\n public blurOnDateTime(): void {\n clearTimeout(this.dateTimeMainTimer);\n this.dateTimeMainTimer = setTimeout(() => {\n if (\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER\n ) {\n if (\n !isNaN(this.span1?.nativeElement.innerHTML) &&\n !isNaN(this.span2?.nativeElement.innerHTML) &&\n !isNaN(this.span3?.nativeElement.innerHTML)\n ) {\n if (\n this.inputConfig.isFutureDateDisabled &&\n moment(this.dateTimeInputDate).isAfter(moment())\n )\n this.superControl.control?.setErrors({\n invalid: true,\n });\n // don't accept future dates\n else {\n if (\n this.inputConfig.expiredDateInvalid &&\n moment(this.dateTimeInputDate).isBefore(moment())\n ) {\n this.superControl.control?.setErrors({\n invalid: true,\n }); // don't accept expired dates\n } else {\n this.calendarService.dateChanged.next(\n this.dateTimeInputDate\n );\n }\n }\n } else {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'dd';\n this.span3.nativeElement.innerHTML = 'yy';\n this.dateTimeInputDate = new Date();\n this.showDateInput = false;\n }\n } else if (\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n if (\n !isNaN(this.span1.nativeElement.innerHTML) &&\n !isNaN(this.span2.nativeElement.innerHTML)\n ) {\n if (\n this.inputConfig.expiredDateInvalid &&\n moment(this.dateTimeInputDate).isBefore(moment())\n ) {\n this.superControl.control?.setErrors({ invalid: true }); // don't accept expired dates\n } else {\n this.calendarService.dateChanged.next(\n this.dateTimeInputDate\n );\n }\n } else {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'yy';\n this.dateTimeInputDate = new Date();\n this.showDateInput = false;\n }\n } else {\n if (\n !isNaN(this.span1.nativeElement.innerHTML) &&\n !isNaN(this.span2.nativeElement.innerHTML)\n ) {\n this.calendarService.dateChanged.next(\n this.dateTimeInputDate\n );\n } else {\n this.span1.nativeElement.innerHTML = 'HH';\n this.span2.nativeElement.innerHTML = 'MM';\n this.setTimePickerTime();\n this.showDateInput = false;\n }\n }\n\n // Clear the timer reference after it's executed\n this.dateTimeMainTimer = 0;\n this.selectionInput = -1;\n this.newInputChanged = true;\n }, 100);\n }\n\n public onPopoverShown(): void {\n this.showDateInput = true;\n this.isFocusInput = true;\n\n clearTimeout(this.dateTimeMainTimer);\n clearTimeout(this.focusBlur);\n this.holder1.nativeElement.focus();\n this.selectionInput = -1;\n this.setSpanSelection(this.holder1.nativeElement);\n }\n\n public onPopoverHidden(): void {\n this.blurOnDateTime();\n }\n\n public setTimeDateInput(date: InputChangeValue, hasValue?: boolean): void {\n let text, dateFormat, timeFormat;\n if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {\n text = moment(new Date(date)).format('MM/DD/YY');\n dateFormat = text.split('/');\n } else if (\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n text = moment(new Date(date)).format('MM/DD/YY');\n dateFormat = text.split('/');\n } else {\n \n date =\n date instanceof Date\n ? date\n : new Date(moment().format('MM/DD/YYYY') + ' ' + date);\n text = moment(new Date(date)).format('HH:mm');\n\n timeFormat = moment(new Date(date)).format('hh/mm/A');\n dateFormat = timeFormat.split('/');\n }\n\n if (this.formFormat) {\n const newFormFormat = moment(new Date(date)).format(\n this.formFormat\n );\n this.valueAfterWriteValue = newFormFormat;\n text = newFormFormat;\n }\n\n if (!hasValue) {\n this.onChange(text);\n // Mark as touched when user changes the value\n this.markAsTouched();\n }\n this.setIsFocusInput(false);\n\n // HAS TO BE IN TIMEOUT BECAUSE OF ANGULAR STACK\n setTimeout(() => {\n if (this.span1) this.span1.nativeElement.innerHTML = dateFormat[0];\n\n if (this.span2)\n if (\n this.inputConfig.name !==\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n this.span2.nativeElement.innerHTML = dateFormat[1];\n this.span3.nativeElement.innerHTML = dateFormat[2];\n } else {\n this.span2.nativeElement.innerHTML = dateFormat[2];\n }\n }, 0);\n\n if (date) {\n this.dateTimeInputDate = new Date(date);\n }\n this.showDateInput = true;\n }\n\n private markAsTouched(): void {\n if (this.getSuperControl && !this.getSuperControl.touched) {\n this.onTouched();\n }\n }\n\n public handleKeyboardInputs(e: KeyboardEvent, isRestart?: boolean): void {\n const spanOneValue: number | undefined =\n isNaN(this.span1.nativeElement.innerHTML) || this.newInputChanged\n ? undefined\n : parseInt(this.span1.nativeElement.innerHTML);\n const span2Value: number | undefined =\n isNaN(this.span2.nativeElement.innerHTML) || this.newInputChanged\n ? undefined\n : parseInt(this.span2.nativeElement.innerHTML);\n\n let span3Value: string | number | undefined;\n\n if (\n this.inputConfig.name !==\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n span3Value =\n isNaN(this.span3.nativeElement.innerHTML) ||\n this.newInputChanged\n ? ''\n : parseInt(this.span3.nativeElement.innerHTML);\n }\n\n this.newInputChanged = false;\n if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {\n if (this.selectionInput === 0) {\n if (isRestart) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n } else if (spanOneValue !== undefined) {\n let final_value = parseInt(`${spanOneValue}${e.key}`);\n if (final_value > 12) {\n this.span1.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(\n parseInt(\n this.span1.nativeElement.innerHTML +\n parseInt(e.key)\n ) - 1\n )\n );\n\n if (!final_value)\n this.span1.nativeElement.innerHTML = 'mm';\n else\n this.span1.nativeElement.innerHTML = (\n this.span1.nativeElement.innerHTML +\n parseInt(e.key)\n ).slice(-2);\n\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n this.markAsTouched();\n }\n } else {\n if (parseInt(e.key))\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(e.key) - 1)\n );\n\n const final_value = ('0' + parseInt(e.key)).slice(-2);\n\n this.span1.nativeElement.innerHTML = final_value;\n\n if (parseInt(`1${e.key}`) > 12) {\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n }\n this.markAsTouched();\n }\n } else if (this.selectionInput === 1) {\n if (isRestart) {\n this.span2.nativeElement.innerHTML = 'dd';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n } else if (span2Value !== undefined) {\n let final_value = parseInt(`${span2Value}${e.key}`);\n if (final_value > 31) {\n this.span2.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n this.markAsTouched();\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(\n parseInt(\n this.span2.nativeElement.innerHTML +\n parseInt(e.key)\n )\n )\n );\n\n if (!final_value) {\n this.span2.nativeElement.innerHTML = 'dd';\n } else {\n this.span2.nativeElement.innerHTML = (\n this.span2.nativeElement.innerHTML +\n parseInt(e.key)\n ).slice(-2);\n }\n\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n }\n } else {\n if (parseInt(e.key))\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(parseInt(e.key))\n );\n\n this.span2.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n\n if (parseInt(`1${e.key}`) > 31) {\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.selectSpanByTabIndex(1);\n }\n this.markAsTouched();\n }\n } else {\n if (isRestart) {\n this.span3.nativeElement.innerHTML = 'yy';\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else if (!span3Value || span3Value.toString().length === 2) {\n this.span3.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(\n parseInt(`200${parseInt(e.key)}`)\n )\n );\n\n this.selectSpanByTabIndex(2);\n } else {\n const finalYear = parseInt(\n this.span3.nativeElement.innerHTML + parseInt(e.key)\n );\n\n const finalShowYear =\n finalYear > 31\n ? parseInt(`19${finalYear}`)\n : parseInt(`20${finalYear}`);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(finalShowYear)\n );\n\n this.span3.nativeElement.innerHTML = (\n this.span3.nativeElement.innerHTML + parseInt(e.key)\n ).slice(-2);\n this.selectSpanByTabIndex(2);\n this.markAsTouched();\n }\n }\n } else if (\n this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER &&\n !this.inputConfig.preventTyping\n ) {\n // Handle time picker keyboard input\n if (this.selectionInput === 0) {\n // Hours input\n if (isRestart) {\n this.span1.nativeElement.innerHTML = 'HH';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n } else if (spanOneValue !== undefined) {\n let final_value = parseInt(`${spanOneValue}${e.key}`);\n if (final_value > 12) {\n this.span1.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n // Convert 12-hour to 24-hour for internal storage\n const currentHour = this.dateTimeInputDate.getHours();\n const isPM = currentHour >= 12;\n const newHour = isPM ? final_value + 12 : final_value;\n\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(newHour)\n );\n\n if (!final_value)\n this.span1.nativeElement.innerHTML = 'HH';\n else\n this.span1.nativeElement.innerHTML = (\n this.span1.nativeElement.innerHTML +\n parseInt(e.key)\n ).slice(-2);\n\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n this.markAsTouched();\n }\n } else {\n if (parseInt(e.key) >= 1 && parseInt(e.key) <= 9) {\n // Convert 12-hour to 24-hour for internal storage\n const currentHour = this.dateTimeInputDate.getHours();\n const isPM = currentHour >= 12;\n const newHour = isPM ? parseInt(e.key) + 12 : parseInt(e.key);\n\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(newHour)\n );\n\n const final_value = ('0' + parseInt(e.key)).slice(-2);\n this.span1.nativeElement.innerHTML = final_value;\n\n if (parseInt(`1${e.key}`) > 12) {\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n }\n this.markAsTouched();\n }\n }\n } else if (this.selectionInput === 1) {\n // Minutes input\n if (isRestart) {\n this.span2.nativeElement.innerHTML = 'MM';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n } else if (span2Value !== undefined) {\n let final_value = parseInt(`${span2Value}${e.key}`);\n if (final_value > 59) {\n this.span2.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMinutes(final_value)\n );\n\n if (!final_value) {\n this.span2.nativeElement.innerHTML = 'MM';\n } else {\n this.span2.nativeElement.innerHTML = (\n this.span2.nativeElement.innerHTML +\n parseInt(e.key)\n ).slice(-2);\n }\n\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n this.markAsTouched();\n }\n } else {\n if (parseInt(e.key) <= 5) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMinutes(parseInt(e.key))\n );\n\n this.span2.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n\n if (parseInt(`1${e.key}`) > 59) {\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.selectSpanByTabIndex(1);\n }\n this.markAsTouched();\n }\n }\n } else if (this.selectionInput === 2) {\n // AM/PM input\n if (isRestart) {\n this.span3.nativeElement.innerHTML = 'AM';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n } else {\n const currentHour = this.dateTimeInputDate.getHours();\n const isPM = e.key.toLowerCase() === 'p';\n\n if (isPM && currentHour < 12) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(currentHour + 12)\n );\n this.span3.nativeElement.innerHTML = 'PM';\n } else if (!isPM && currentHour >= 12) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(currentHour - 12)\n );\n this.span3.nativeElement.innerHTML = 'AM';\n }\n\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n this.markAsTouched();\n }\n }\n } else if (\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n if (!this.selectionInput) {\n if (isRestart) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n } else if (spanOneValue) {\n const final_value = parseInt(`${spanOneValue}${e.key}`);\n if (final_value > 12) {\n this.span1.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(\n parseInt(\n this.span1.nativeElement.innerHTML +\n parseInt(e.key)\n ) - 1\n )\n );\n\n if (!final_value) {\n this.span1.nativeElement.innerHTML = 'mm';\n } else {\n this.span1.nativeElement.innerHTML = (\n this.span1.nativeElement.innerHTML +\n parseInt(e.key)\n ).slice(-2);\n }\n\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n }\n } else {\n if (parseInt(e.key))\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(e.key) - 1)\n );\n\n const final_value = ('0' + parseInt(e.key)).slice(-2);\n\n this.span1.nativeElement.innerHTML = final_value;\n\n if (parseInt(`1${e.key}`) > 12) {\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else this.selectSpanByTabIndex(0);\n }\n } else {\n if (isRestart) {\n this.span2.nativeElement.innerHTML = 'yy';\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else if (!span2Value || span2Value.toString().length === 2) {\n this.span2.nativeElement.innerHTML = (\n '0' + parseInt(e.key)\n ).slice(-2);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(\n parseInt(`200${parseInt(e.key)}`)\n )\n );\n\n this.selectSpanByTabIndex(1);\n } else {\n const finalYear = parseInt(\n this.span2.nativeElement.innerHTML + parseInt(e.key)\n );\n\n const finalShowYear =\n finalYear > 31\n ? parseInt(`19${finalYear}`)\n : parseInt(`20${finalYear}`);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(finalShowYear)\n );\n\n this.span2.nativeElement.innerHTML = (\n this.span2.nativeElement.innerHTML + parseInt(e.key)\n ).slice(-2);\n this.selectSpanByTabIndex(1);\n }\n }\n }\n }\n\n selectSpanByTabIndex(indx: number, changeTab?: boolean): void {\n switch (indx) {\n case 0:\n this.setSpanSelection(this.span1.nativeElement);\n break;\n case 1:\n this.setSpanSelection(this.span2.nativeElement);\n break;\n case 2:\n this.setSpanSelection(this.span3.nativeElement);\n break;\n default:\n this.setSpanSelection(this.holder1.nativeElement);\n }\n\n // Ensure the holder1 element stays focused\n this.holder1.nativeElement.focus();\n\n if (changeTab) this.newInputChanged = true;\n }\n\n private handleNavigationKey(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case 37: // Left arrow\n this.moveSelectionLeft();\n break;\n case 39: // Right arrow\n case 9: // Tab\n this.moveSelectionRightOrTab(event);\n break;\n case 38: // Up arrow\n this.setDateTimeModel('up');\n break;\n case 40: // Down arrow\n this.setDateTimeModel('down');\n break;\n case 8: // Backspace\n case 46: // Delete\n this.handleKeyboardInputs(event, true);\n break;\n }\n }\n\n private handleDatePickerInput(isUp: boolean, isDatePicker: boolean): void {\n if (this.selectionInput === 0) this.updateMonth(isUp);\n else if (this.selectionInput === 1) this.updateDate(isUp, isDatePicker);\n else this.updateYear(isUp, isDatePicker);\n }\n\n private setDateTimeModel(direction: string): void {\n if (this.selectionInput === -1) this.selectionInput = 0;\n\n const isUp = direction === 'up';\n const isDatePicker =\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER;\n const isBankCardPicker =\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;\n\n if (isDatePicker || isBankCardPicker)\n this.handleDatePickerInput(isUp, isDatePicker);\n else this.handleTimePickerInput(isUp);\n }\n\n private moveSelectionRightOrTab(e: KeyboardEvent): void {\n const isDatepickerBankCard =\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;\n const maxIndex = isDatepickerBankCard ? 1 : 2;\n\n if (this.selectionInput < maxIndex && !e.shiftKey) {\n this.selectionInput += 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n } else if (e.keyCode === 9 && !e.shiftKey) {\n this.focusNextInput();\n } else if (e.shiftKey && e.keyCode === 9) {\n this.focusPreviousInput();\n }\n }\n\n private focusPreviousInput(): void {\n const allInputs = Array.from(\n document.querySelectorAll('input.input-control')\n ) as HTMLInputElement[];\n\n const currentIndex = -1;\n\n // allInputs.findIndex(\n // (input) =>\n // input === this.caInputComponent.inputElement.nativeElement\n // );\n\n if (currentIndex === -1) this.selectionInput = 3;\n else if (currentIndex === 0) this.selectionInput = 0;\n else {\n this.selectionInput -= 1;\n this.selectSpanByTabIndex(this.selectionInput);\n }\n\n if (currentIndex > 0) allInputs[currentIndex - 1].focus();\n\n this.selectionInput = -1;\n }\n\n private focusNextInput(): void {\n const allInputs = Array.from(\n document.querySelectorAll('input.input-control')\n ) as HTMLInputElement[];\n const currentIndex = 0;\n\n // allInputs.findIndex(\n // (input) =>\n // input === this.caInputComponent.inputElement.nativeElement\n // );\n\n if (allInputs[currentIndex + 1]) allInputs[currentIndex + 1].focus();\n else {\n this.setIsFocusInput(false);\n this.blurOnDateTime();\n }\n\n this.selectionInput = -1;\n }\n\n public setIsFocusInput(value: boolean): void {\n this.isFocusInput = value;\n }\n\n private moveSelectionLeft(): void {\n if (this.selectionInput > 0) {\n this.selectionInput -= 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n }\n }\n\n private updateMonth(isUp: boolean): void {\n const monthDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(\n this.dateTimeInputDate.getMonth() + monthDelta\n )\n );\n\n this.span1.nativeElement.innerHTML = this.padValue(\n this.dateTimeInputDate.getMonth() + 1\n );\n this.setSpanSelection(this.span1.nativeElement);\n }\n\n private updateDate(isUp: boolean, isDatePicker: boolean): void {\n const dateDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(\n this.dateTimeInputDate.getDate() + dateDelta\n )\n );\n\n const spanElement = isDatePicker\n ? this.span2.nativeElement\n : this.span1.nativeElement;\n spanElement.innerHTML = this.padValue(this.dateTimeInputDate.getDate());\n this.setSpanSelection(spanElement);\n }\n\n private updateYear(isUp: boolean, isDatePicker: boolean): void {\n const yearDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(\n this.dateTimeInputDate.getFullYear() + yearDelta\n )\n );\n\n const spanElement = isDatePicker\n ? this.span3.nativeElement\n : this.span2.nativeElement;\n spanElement.innerHTML = this.dateTimeInputDate\n .getFullYear()\n .toString()\n .slice(-2);\n this.setSpanSelection(spanElement);\n }\n\n private padValue(value: number): string {\n return ('0' + value).slice(-2);\n }\n\n private handleTimePickerInput(isUp: boolean): void {\n if (this.selectionInput === 0) this.updateHours(isUp);\n else if (this.selectionInput === 1) this.updateMinutes(isUp);\n else this.toggleAMPM();\n }\n\n private updateHours(isUp: boolean): void {\n const hoursDelta = isUp ? 1 : -1;\n let selectedHours = this.dateTimeInputDate.getHours() + hoursDelta;\n\n // Handle 12-hour format with AM/PM\n if (selectedHours === 0) selectedHours = 12; // 12 AM\n if (selectedHours === -1) selectedHours = 11; // 11 PM\n if (selectedHours === 13) selectedHours = 1; // 1 PM\n if (selectedHours === 25) selectedHours = 1; // 1 AM\n\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(selectedHours)\n );\n\n // Display 12-hour format\n const displayHour = selectedHours > 12 ? selectedHours - 12 : selectedHours;\n this.span1.nativeElement.innerHTML = this.padValue(displayHour);\n this.setSpanSelection(this.span1.nativeElement);\n\n this.span3.nativeElement.innerHTML =\n selectedHours >= 12 ? 'PM' : 'AM';\n\n this.markAsTouched();\n }\n\n private updateMinutes(isUp: boolean): void {\n const minutesDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMinutes(\n this.dateTimeInputDate.getMinutes() + minutesDelta\n )\n );\n\n this.span2.nativeElement.innerHTML = this.padValue(\n this.dateTimeInputDate.getMinutes()\n );\n this.setSpanSelection(this.span2.nativeElement);\n\n this.markAsTouched();\n }\n\n private toggleAMPM(): void {\n this.span3.nativeElement.innerHTML =\n this.span3.nativeElement.innerHTML === 'AM' ? 'PM' : 'AM';\n\n const hoursToAdd =\n this.span3.nativeElement.innerHTML === 'AM' ? -12 : 12;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(\n this.dateTimeInputDate.getHours() + hoursToAdd\n )\n );\n\n this.setSpanSelection(this.span3.nativeElement);\n\n this.markAsTouched();\n }\n\n public clearInput(event: Event): void {\n this.clearInputEvent.emit(true);\n this.onChange('');\n this.dateTimeInputDate = new Date();\n this.dateTimeIntDate = new Date();\n this.showDateInput = false;\n this.resetDateTimeInputs();\n this.markAsTouched();\n }\n\n public onBlurInput(event: any): void {\n this.blurInputEvent.emit(event);\n // Datepicker\n this.focusBlur = setTimeout(() => {\n this.blurOnDateTime();\n }, 100);\n }\n\n public resetDateTimeInputs(): void {\n if (this.span1)\n if (\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER\n ) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'dd';\n this.span3.nativeElement.innerHTML = 'yy';\n } else if (\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'yy';\n } else if (\n this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER\n ) {\n this.span1.nativeElement.innerHTML = 'HH';\n this.span2.nativeElement.innerHTML = 'MM';\n this.span3.nativeElement.innerHTML = 'AM';\n }\n\n this.setTimePickerTime();\n this.newInputChanged = true;\n this.setIsFocusInput(false);\n this.showDateInput = false;\n }\n\n public setTimePickerTime(): void {\n if (this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER)\n this.dateTimeInputDate = new Date(\n moment().format('MM/DD/YYYY') +\n (this.inputConfig?.isFromDate ? ' 12:15' : ' 12:00')\n );\n }\n\n public ngOnDestroy() {\n // Clear all timers\n if (this.dateTimeMainTimer) {\n clearTimeout(this.dateTimeMainTimer);\n }\n if (this.focusBlur) {\n clearTimeout(this.focusBlur);\n }\n if (this.timeoutCleaner) {\n clearTimeout(this.timeoutCleaner);\n }\n\n // Complete the destroy subject to unsubscribe from all observables\n this.destroy$.next();\n this.destroy$.complete();\n }\n}","<div\n class=\"datetime-picker-main-holder datetime-input-custom-group datetimeclass\"\n [ngClass]=\"\n getSuperControl\n | inputDateTimeContainerClass\n : isFocusInput\n : inputConfig\n : getSuperControl?.value\n : getSuperControl?.disabled\n : getSuperControl?.invalid\n : getSuperControl?.touched\n \"\n>\n <div\n #t2=\"ngbPopover\"\n [ngbPopover]=\"dateTimePopover\"\n [placement]=\"['bottom-start', 'top-start']\"\n [popoverClass]=\"'datetimepopovermain'\"\n [autoClose]=\"'outside'\"\n [container]=\"'body'\"\n class=\"datetime-input-icon {{ inputConfig.customClass }}\"\n ngbTooltip\n position=\"bottom\"\n (shown)=\"onPopoverShown()\"\n (hidden)=\"onPopoverHidden()\"\n [ngClass]=\"\n getSuperControl\n | inputPlaceholderIconClass\n : (isFocusInput || false)\n : inputConfig\n : null\n : (isTouchedInput || false)\n : false\n : (getSuperControl?.value || '')\n \"\n [ngStyle]=\"{ opacity: inputConfig.isIconHidden ? '0' : {} }\"\n >\n @if (inputConfig.placeholderIcon) {\n <svg-icon\n appHoverSvg\n [stretch]=\"true\"\n [fill]=\"inputConfig.dropdownLabel ? '#b7b7b7' : null\"\n [name]=\"inputConfig.placeholderIcon === 'date' ? 'cai-date' : 'cai-time'\"\n ></svg-icon>\n } @else {\n <div style=\"height: 26px\"></div>\n }\n </div>\n\n <div\n #holder1\n class=\"date_time_holder input-control\"\n [class.active]=\"showDateInput\"\n tabindex=\"1\"\n (paste)=\"onDatePaste($event)\"\n (keydown)=\"changeSelection($event)\"\n (blur)=\"blurInput()\"\n [ngStyle]=\"{\n 'padding-left': inputConfig.isIconHidden ? '2px' : '27px',\n }\"\n >\n <span\n #span1\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput,\n }\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'mm' : 'HH'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ':'\"\n ></div>\n </span>\n <span\n #span2\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput,\n }\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'dd' : 'MM'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ' '\"\n ></div>\n </span>\n <span\n #span3\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput,\n }\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'yy' : 'AM'\"\n ></span>\n </div>\n @if (!getSuperControl?.disabled) {\n <svg-icon\n class=\"input-dropdown-arrow {{ inputConfig.customClass }}\"\n [ngClass]=\"\n getSuperControl\n | inputDropdownArrowClass\n : isFocusInput\n : inputConfig\n : isTouchedInput\n : getSuperControl?.value\n \"\n [name]=\"'cai-arrow-secondary-down'\"\n ></svg-icon>\n }\n\n <!-- Input Clear -->\n @if (inputConfig | showClear) {\n <div\n class=\"input-clear {{ inputConfig.customClass }}\"\n [ngClass]=\"\n getSuperControl\n | inputClearClass\n : (isFocusInput || false)\n : inputConfig\n : false\n : false\n : ''\n : (getSuperControl?.value || '')\n \"\n [ngbTooltip]=\"\n inputConfig.incorrectInput\n ? 'Mark Incorrect'\n : inputConfig.removeInput\n ? eGeneralActions.REMOVE\n : eGeneralActions.CLEAR\n \"\n placement=\"top\"\n (click)=\"clearInput($event)\"\n >\n <svg-icon\n name=\"cai-x\"\n class=\"input-clear-x\"\n ></svg-icon>\n </div>\n }\n</div>\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div class=\"datetime-dropdown-holder\">\n <cai-custom-datetime-pickers\n [calendarType]=\"\n inputConfig.name === 'datepicker' ||\n inputConfig.name === 'datepickerBankCard'\n ? 'date'\n : 'time'\n \"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTimeInputDate\"\n (closePopover)=\"closePopover($event)\"\n ></cai-custom-datetime-pickers>\n </div>\n</ng-template>\n","export enum eStringPlaceholder {\n EMPTY = ''\n} ","export enum eAlignment {\n LEFT = 'left',\n RIGHT = 'right',\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, signal, ViewChild } from '@angular/core';\n\n// Enums\nimport { eAlignment } from '../../enums';\nimport { eGeneralActions } from '../../enums/general-actions.enum';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\nimport { Clipboard } from '@angular/cdk/clipboard';\n\n@Component({\n selector: 'cai-copy',\n templateUrl: './copy.component.html',\n styleUrl: './copy.component.scss',\n imports: [\n CommonModule,\n NgbTooltip,\n\n // Components\n SvgIconComponent,\n ],\n})\nexport class CopyComponent {\n public value = input<string>();\n public alignment = input<eAlignment>(eAlignment.RIGHT);\n public copyTooltip = input<string>();\n public copied = signal<boolean>(false);\n\n // Enums\n public eGeneralActions = eGeneralActions;\n public eAlignment = eAlignment;\n\n constructor(private clipboard: Clipboard) {}\n\n @ViewChild(NgbTooltip) tooltip!: NgbTooltip;\n\n public onCopy(event: MouseEvent) {\n event.stopPropagation();\n this.clipboard.copy(this.value() ?? '');\n this.copied.set(true);\n }\n\n public resetCopied() {\n this.copied.set(false);\n }\n}\n","@let isCopied = !!copied();\n<div\n class=\"copy-container d-flex align-items-center gap-1\"\n (mouseleave)=\"resetCopied()\"\n>\n <div\n class=\"copy-content\"\n [class]=\"{\n 'order-1': alignment() === eAlignment.LEFT,\n 'order-0': alignment() === eAlignment.RIGHT,\n }\"\n >\n <ng-content></ng-content>\n </div>\n <div\n (click)=\"onCopy($event)\"\n [ngbTooltip]=\"tooltipTemplate\"\n [container]=\"'body'\"\n [tooltipClass]=\"isCopied ? 'tooltip-bg-blue-500' : ''\"\n placement=\"bottom\"\n #tooltip=\"ngbTooltip\"\n class=\"copy-icon\"\n [class]=\"{\n 'text-black-100': !isCopied,\n 'hover:text-black-300': !isCopied,\n 'text-blue-700': isCopied,\n }\"\n >\n <svg-icon [name]=\"'cai-copy'\" class=\"icon transition\"></svg-icon>\n </div>\n</div>\n\n@let copyText = isCopied ? eGeneralActions.COPIED : copyTooltip() ??\neGeneralActions.COPY;\n<ng-template #tooltipTemplate>\n {{ copyText }}\n</ng-template>\n","export enum InputAddressLayersStringEnum {\n ADDRESS = 'Address',\n LOCALITY = 'Locality',\n}\n","export enum InputAddressTypeStringEnum {\n LONG_ADDRESS = 'longAddress',\n SHORT_ADDRESS = 'shortAddress',\n ROUTING_ADDRESS = 'RoutingAddress',\n}\n","// Angular\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n Input,\n input,\n OnDestroy,\n OnInit,\n output,\n Self,\n signal,\n ViewChild,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormsModule,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\n\n// RXJS\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n filter,\n of,\n Subject,\n switchMap,\n takeUntil,\n tap,\n} from 'rxjs';\n\n// Models\nimport { CaiInputConfig } from '../input/models';\n\n// Components\nimport { InputComponent } from '../input/input.component';\nimport { AddressData } from './models/address-data.model';\nimport { AutocompleteSearchLayer } from './models/sent-address-data.model';\nimport { InputAddressLayersStringEnum } from './enums/input-address-layers-string.enum';\nimport { AddressList } from './models/address-list.model';\nimport { InputAddressTypeStringEnum } from './enums/input-address-type-string.enum';\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n@Component({\n selector: 'cai-input-address',\n templateUrl: './input-address.component.html',\n styleUrl: './input-address.component.scss',\n imports: [\n // Modules\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // Components\n InputComponent,\n SvgIconComponent,\n ],\n})\nexport class InputAddressComponent\n implements OnInit, ControlValueAccessor, OnDestroy, OnChanges\n{\n @ViewChild(InputComponent) inputComponent!: InputComponent;\n\n private destroy$ = new Subject<void>();\n private controlSubscription$ = new Subject<void>();\n private baseConfig: CaiInputConfig = {\n type: 'text',\n dropdown: true,\n dropdownAutocomplete: true,\n search: true,\n textTransform: 'capitalize',\n icon: 'cai-address',\n optionLabel: 'name',\n optionValue: 'name',\n isAddress: true,\n };\n\n id = input<string>('');\n config = input<CaiInputConfig>({});\n type = input<string>('');\n required = input<boolean>(false);\n isInTable = input<boolean>(false);\n isFormLoaded = input<boolean>(false);\n\n @Input() public set activeAddress(value: AddressList | null) {\n if (value) {\n this._activeAddress = value;\n let isValid = true;\n if (this.searchLayers?.[0] === InputAddressLayersStringEnum.ADDRESS) {\n const address = value?.address;\n if (address) isValid = this.checkAddressValidation(address);\n }\n\n if (!value || !isValid)\n this.getSuperControl!.setErrors({ invalid: true });\n else this.getSuperControl!.setErrors(null);\n }\n }\n\n @Input() public set receivedAddressData(value: AddressData | null) {\n if (value) {\n this.currentAddressData = {\n address: value.address!,\n valid: value.address && value.longLat ? true : false,\n longLat: value.longLat,\n isParking: this.isParkingAddressSelected,\n };\n\n if (this.currentAddressData!.valid) {\n this.getSuperControl!.setErrors(null);\n }\n\n this.selectedAddress.emit(this.currentAddressData!);\n }\n }\n\n @Input() public set receivedAddressList(\n value: { addresses: string[] } | null\n ) {\n this._receivedAddressList = value;\n\n if (value?.addresses) {\n let parkingAddressesList: any = [];\n this.addressList = value.addresses.map((item: string, indx: number) => {\n const parkingAddress = this._parkingList?.length\n ? this.filterParkingByCity(item)\n : null;\n\n if (parkingAddress?.length)\n parkingAddressesList.push({\n name: item,\n id: indx,\n parkingAddress,\n });\n return {\n name: item,\n id: indx,\n };\n });\n\n this.addressList = [...parkingAddressesList, ...this.addressList];\n }\n }\n\n @Input() public set parkingList(value: any[]) {\n this._parkingList = value;\n }\n\n selectedAddress = output<any>();\n sentAddressData = output<any>();\n sentAddressValue = output<any>();\n\n public _receivedAddressList: { addresses: string[] } | null = null;\n public _activeAddress: AddressList | null = null;\n\n //Address data\n private searchLayers!: AutocompleteSearchLayer[];\n public currentAddressData: AddressData | null = null;\n\n public addressList: AddressList[] = [];\n public allowValidation: boolean = false;\n public requestSent: boolean = false;\n public closedBorder: boolean = false;\n public chosenFromDropdown: boolean = false;\n public _parkingList: any[] = [];\n public isParkingAddressSelected: boolean = false;\n\n public inputConfig = signal<CaiInputConfig>({});\n public isLoading = signal<boolean>(false);\n public isFocused = signal<boolean>(false);\n\n constructor(\n @Self() public superControl: NgControl,\n private ref: ChangeDetectorRef\n ) {\n this.superControl.valueAccessor = this;\n }\n\n writeValue(_: any): void {}\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n get getSuperControl() {\n return this.superControl?.control as FormControl;\n }\n\n ngOnInit(): void {\n this.initializeAddressInput();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isFormLoaded']?.currentValue) {\n this.initChangesListener();\n }\n }\n\n private initializeAddressInput(): void {\n if (this.type()) {\n this.checkSearchLayers(this.type());\n }\n\n this.baseConfig.required = this.required();\n\n if (this.isInTable()) {\n this.baseConfig.icon = null;\n this.baseConfig.inTable = true;\n }\n\n this.inputConfig.set({\n ...this.baseConfig,\n ...this.config(),\n });\n\n this.initChangesListener();\n }\n\n private checkSearchLayers(value: string): void {\n this.searchLayers =\n value === InputAddressTypeStringEnum.LONG_ADDRESS\n ? [InputAddressLayersStringEnum.ADDRESS]\n : value === InputAddressTypeStringEnum.SHORT_ADDRESS\n ? [InputAddressLayersStringEnum.LOCALITY]\n : [];\n\n this.baseConfig.name =\n value === InputAddressTypeStringEnum.LONG_ADDRESS\n ? 'Address, City, State Zip'\n : value === InputAddressTypeStringEnum.SHORT_ADDRESS\n ? 'County, State'\n : '';\n }\n\n private filterParkingByCity(searchString: string): any {\n const formattedSearchString = searchString.trim().replace(/\\s*,\\s*/g, ', ');\n\n const isParking = this._parkingList.filter((parking: any) => {\n const { city, stateShortName, country } = parking.address || {};\n const formattedAddress = `${city}, ${stateShortName}, ${country}`;\n if (formattedAddress === formattedSearchString)\n parking.address.isParking = true;\n return formattedAddress === formattedSearchString;\n });\n\n return isParking;\n }\n\n private checkAddressValidation(address: string): boolean {\n const streetNum = /\\d/;\n\n return streetNum.test(address) ? true : false;\n }\n\n public onBlur(): void {\n this.toggleFocus(false);\n if (this.getSuperControl?.value?.length < 3) {\n this.getSuperControl?.setValue('');\n }\n }\n\n public hideValidation() {\n return (\n this.isLoading() ||\n (this.getSuperControl?.value && this.getSuperControl?.value?.length < 3)\n );\n }\n\n public initChangesListener(): void {\n const control = this.getSuperControl;\n\n if (!control || !control.valueChanges) {\n return;\n }\n\n // Unsubscribe from previous form control subscription\n this.controlSubscription$.next();\n\n control.valueChanges\n .pipe(\n distinctUntilChanged(),\n takeUntil(this.controlSubscription$),\n takeUntil(this.destroy$),\n tap((term) => {\n if (!term) {\n this.isLoading.set(false);\n this.addressList = [];\n }\n if (this.allowValidation) {\n this.requestSent = false;\n const addressData = {\n address: {},\n valid: false,\n longLat: {},\n };\n this.selectedAddress.emit(addressData);\n }\n\n this.allowValidation = true;\n }),\n filter((term: string) => {\n if (term?.length >= 3) this.isLoading.set(true);\n return term?.length >= 3;\n }),\n debounceTime(500),\n switchMap((query: string) => {\n const params = {\n query: query,\n searchLayers: this.searchLayers,\n closedBorder: this.closedBorder,\n };\n\n this.sentAddressData.emit(params);\n\n return of(this.receivedAddressList).pipe(\n catchError((error) => {\n return of([]);\n })\n );\n }),\n catchError((error) => {\n return of(null);\n })\n )\n .subscribe({\n next: (result) => {\n let isValid = true;\n if (this.searchLayers?.[0] === InputAddressLayersStringEnum.ADDRESS) {\n const address = this._activeAddress?.address;\n if (address) isValid = this.checkAddressValidation(address);\n }\n\n if (!this._activeAddress || !isValid)\n this.getSuperControl!.setErrors({ invalid: true });\n else this.getSuperControl!.setErrors(null);\n\n this.isLoading.set(false);\n this.ref.detectChanges();\n },\n });\n }\n\n public onSelectDropdown(name: string | null): void {\n const address = this.addressList.find((item) => item.name === name);\n this._activeAddress = address\n ? { ...address, address: address?.name }\n : null;\n\n this.isParkingAddressSelected = this._activeAddress?.parkingAddress?.length\n ? true\n : false;\n\n if (address?.name) {\n if (this.searchLayers?.[0] === InputAddressLayersStringEnum.ADDRESS) {\n const isValid = this.checkAddressValidation(address.name);\n this.isLoading.set(false);\n\n if (isValid) {\n this.getAddressData(address.name);\n this.getSuperControl!.setValue(address.name);\n this.getSuperControl!.setErrors(null);\n } else {\n this.getSuperControl!.setErrors({\n invalid: true,\n });\n }\n } else {\n this.getAddressData(address.name);\n this.getSuperControl!.setValue(address.name);\n this.getSuperControl!.setErrors(null);\n }\n } else {\n this.onClearInputEvent();\n this.currentAddressData = null;\n this.addressList = [];\n }\n }\n\n public onClearInputEvent(): void {\n this.isLoading.set(false);\n this.currentAddressData = null;\n this.addressList = [];\n this.getSuperControl!.setValue('');\n this._activeAddress = null;\n this.chosenFromDropdown = false;\n if (this.config()?.required) {\n setTimeout(() => {\n this.getSuperControl!.setErrors({ required: true });\n }, 300);\n }\n const addressData = {\n address: {},\n valid: false,\n longLat: {},\n };\n this.selectedAddress.emit(addressData);\n }\n\n public getAddressData(address: string): void {\n this.requestSent = true;\n\n this.sentAddressValue.emit(address);\n }\n\n public toggleFocus(value: boolean): void {\n this.isFocused.set(value);\n }\n\n ngOnDestroy(): void {\n this.controlSubscription$.next();\n this.controlSubscription$.complete();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","@let searching = this.getSuperControl?.value?.length >= 3;\n\n<div class=\"address-input-container\">\n <cai-input\n [formControl]=\"getSuperControl\"\n [id]=\"id()\"\n [config]=\"inputConfig()\"\n [options]=\"addressList\"\n (onSelectionChange)=\"onSelectDropdown($event)\"\n [hideValidation]=\"hideValidation()\"\n [showNoResults]=\"searching\"\n (onFocused)=\"toggleFocus(true)\"\n (onBlur)=\"onBlur()\"\n ></cai-input>\n <div\n class=\"address-loader\"\n [class.loading]=\"isLoading()\"\n [class.focused]=\"isFocused()\"\n >\n <svg-icon name=\"cai-loader\" class=\"loader-icon\"></svg-icon>\n </div>\n</div>\n","/*\n * Public API Surface of carriera-intern-components\n */\nexport * from './app/utils';\nexport * from './app/components/input/models';\nexport * from './app/components/pm/pm.component';\nexport * from './app/components/input/input.component';\nexport * from './app/components/drop-zone/drop-zone.component';\nexport * from './app/components/input-datetime-picker/cai-input-datetime-picker.component';\nexport * from './app/components/input-datetime-picker/components/cai-custom-datetime-pickers/config';\nexport * from './app/components/avatar/avatar.component';\nexport * from './app/components/copy/copy.component';\nexport * from './app/components/input-address/input-address.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.CalendarDateTimePickerService","factory","i2","InputConfigNameStringEnum","i2.CalendarDateTimePickerService","i5","distinctUntilChanged"],"mappings":"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"}
|