{"version":3,"file":"index.mjs","sources":["../../../../../../projects/components/widgets/input/epoch/time/src/time.props.ts","../../../../../../projects/components/widgets/input/epoch/time/src/time.component.ts","../../../../../../projects/components/widgets/input/epoch/time/src/time.component.html","../../../../../../projects/components/widgets/input/epoch/time/src/index.ts"],"sourcesContent":["import {FormWidgetType} from '@wm/core';\n\nimport {PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget} from '@wm/components/base';\n\nexport const timeProps = new Map(\n    [\n        ['autofocus', PROP_BOOLEAN],\n        ['class', PROP_STRING],\n        ['dataentrymode', {value: 'default', ...PROP_STRING}],\n        ['datavaluesource', PROP_ANY],\n        ['datavalue', PROP_STRING],\n        ['disabled', PROP_BOOLEAN],\n        ['hint', PROP_STRING],\n        ['arialabel', PROP_STRING],\n        ['hourstep', {value: 1, ...PROP_NUMBER}],\n        ['maxtime', PROP_STRING],\n        ['mintime', PROP_STRING],\n        ['minutestep', {value: 15, ...PROP_NUMBER}],\n        ['name', PROP_STRING],\n        ['outputformat', {value: 'HH:mm:ss', ...PROP_STRING}],\n        ['placeholder', {value: 'Select time', ...PROP_STRING}],\n        ['readonly', PROP_BOOLEAN],\n        ['required', PROP_BOOLEAN],\n        ['shortcutkey', PROP_STRING],\n        ['show', {value: true, ...PROP_BOOLEAN}],\n        ['showdropdownon', {value: 'default', ...PROP_STRING}],\n        ['showcustompicker', { value: false, ...PROP_BOOLEAN }],\n        ['secondsstep', {value: 1, ...PROP_NUMBER}],\n        ['tabindex', {value: 0, ...PROP_NUMBER}],\n        ['timepattern', PROP_STRING],\n        ['timestamp', PROP_STRING],\n        ['showampmbuttons',{ value: false, ...PROP_BOOLEAN }]\n    ]\n);\n\nexport const registerProps = () => {\n    register(\n        'wm-time',\n        timeProps\n    );\n    registerFormWidget(\n        FormWidgetType.TIME,\n        new Map(timeProps)\n    );\n};\n","import {FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {DateTimePickerComponent} from '@wm/components/input/epoch/date-time-picker';\nimport {CommonModule} from '@angular/common';\nimport {Component, Inject, Injector, NgZone, OnDestroy, Optional} from '@angular/core';\nimport {TimepickerConfig, TimepickerModule} from 'ngx-bootstrap/timepicker';\nimport {\n    $appDigest,\n    AbstractI18nService,\n    addClass,\n    addEventListenerOnElement,\n    adjustContainerPosition,\n    App,\n    AppDefaults,\n    EVENT_LIFE,\n    FormWidgetType,\n    getDisplayDateTimeFormat,\n    getFormattedDate,\n    getMomentLocaleObject,\n    getNativeDateObject\n} from '@wm/core';\nimport {provideAs, provideAsWidgetRef, styler} from '@wm/components/base';\n\nimport {BaseDateTimeComponent, getTimepickerConfig} from '@wm/components/input/epoch/base-date-time';\nimport {registerProps} from './time.props';\nimport {forEach, get, includes} from \"lodash-es\";\nimport {BsDropdownModule} from \"ngx-bootstrap/dropdown\";\nimport * as momentLib from 'moment';\n\ndeclare const $;\nconst moment = momentLib.default || window['moment'];\n\nconst CURRENT_TIME = 'CURRENT_TIME';\nconst DEFAULT_CLS = 'input-group app-timeinput';\nconst WIDGET_CONFIG = { widgetType: 'wm-time', hostClass: DEFAULT_CLS };\n\n@Component({\n    standalone: true,\n    imports: [FormsModule, DateTimePickerComponent, BsDropdownModule, TimepickerModule,CommonModule],\n    selector: '[wmTime]',\n    templateUrl: './time.component.html',\n    providers: [\n        provideAs(TimeComponent, NG_VALUE_ACCESSOR, true),\n        provideAs(TimeComponent, NG_VALIDATORS, true),\n        provideAsWidgetRef(TimeComponent),\n        { provide: TimepickerConfig, deps: [AbstractI18nService], useFactory: getTimepickerConfig }\n    ]\n})\nexport class TimeComponent extends BaseDateTimeComponent implements OnDestroy {\n    static initializeProps = registerProps();\n    /**\n     * This property sets the display pattern of the time selected\n     */\n    timepattern: string;\n\n    /**\n     * This property sets the output format for the selected time datavalue\n     */\n    outputformat: string;\n\n    public showdropdownon: string;\n    public mintime;\n    public maxtime;\n    public hint: string;\n    public arialabel: string;\n\n    private deregisterEventListener;\n    private app: App;\n    private displayInputElem: HTMLElement;\n\n    get timestamp() {\n        return this.bsTimeValue ? this.bsTimeValue.valueOf() : undefined;\n    }\n\n    // @ts-ignore\n    get datavalue(): any {\n        if (this.isCurrentTime && !this.bsTimeValue) {\n            return CURRENT_TIME;\n        }\n        return getFormattedDate(this.datePipe, this.bsTimeValue, this.outputformat, this.timeZone, null, null, this) || '';\n    }\n\n    /**Todo[Shubham]: needs to be redefined\n     * This property sets the default value for the time selection\n     */\n    // @ts-ignore\n    set datavalue(newVal: any) {\n        if (newVal) {\n            if (newVal === CURRENT_TIME) {\n                this.isCurrentTime = true;\n                this.setTimeInterval();\n            } else {\n                this.clearTimeInterval();\n                this.bsTimeValue = getNativeDateObject(newVal, { pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput });\n                this.isCurrentTime = false;\n                this.mintimeMaxtimeValidation();\n            }\n        } else {\n            this.bsTimeValue = undefined;\n            this.clearTimeInterval();\n            this.isCurrentTime = false;\n        }\n        this.invokeOnChange(this.datavalue);\n        $appDigest();\n    }\n\n    get displayValue() {\n        const display = getFormattedDate(this.datePipe, this.bsTimeValue, this.timepattern, this.timeZone, null, null, this) || '';\n        return this.safeReplaceMeridians(display);\n    }\n\n    get nativeDisplayValue() {\n        return getFormattedDate(this.datePipe, this.bsTimeValue, 'HH:mm:ss', this.timeZone, null, null, this) || '';\n    }\n\n    /* Internal property to have a flag to check the given datavalue is of Current time*/\n    public isCurrentTime: boolean;\n\n    private timeinterval: any;\n\n    /**\n     * This is an internal property used to map it to the widget\n     */\n    private minTime: Date;\n\n    /**\n     * This is an internal property used to map it to the widget\n     */\n    private maxTime: Date;\n\n    /**\n     * This is an internal property used to toggle the timepicker dropdown\n     */\n    public status = { isopen: false };\n\n    /**\n     * This is an internal property used to map the main model to the time widget\n     */\n    private bsTimeValue: Date;\n\n    constructor(\n        inj: Injector,\n        private ngZone: NgZone,\n        private appDefaults: AppDefaults,\n        app: App,\n        @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any\n    ) {\n        super(inj, WIDGET_CONFIG, explicitContext);\n\n        styler(this.nativeElement, this);\n        /**\n         * Destroy the timer once the date widget is gone\n         */\n        this.registerDestroyListener(() => this.clearTimeInterval());\n\n        this.timepattern = this.appDefaults.timeFormat || getDisplayDateTimeFormat(FormWidgetType.TIME);\n        this.updateFormat('timepattern');\n        this.app = app;\n    }\n\n    onPropertyChange(key: string, nv: any, ov?: any) {\n        const isPristine=this.formControl?.pristine;\n        if (key === 'tabindex') {\n            return;\n        }\n        if (key === 'timepattern') {\n            this.updateFormat('timepattern');\n        }\n        if (key === 'mintime') {\n            this.minTime = getNativeDateObject(nv, { pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput }); // TODO it is supposed to be time conversion, not to the day\n            this.mintimeMaxtimeValidation();\n        } else if (key === 'maxtime') {\n            this.maxTime = getNativeDateObject(nv, { pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput });\n            this.mintimeMaxtimeValidation();\n        } else {\n            super.onPropertyChange(key, nv, ov);\n        }\n        if((key === 'mintime'||key === 'maxtime') && isPristine) {\n            this.formControl?.control?.markAsPristine()\n        }\n    }\n\n    setValidateType(min, max, val) {\n        if (this.timeNotInRange) {\n            if (val < min) {\n                (this as any).validateType = 'mintime';\n            } else if (val > max) {\n                (this as any).validateType = 'maxtime';\n            }\n        }\n    }\n\n    /**\n     * This is an internal method used to validate mintime and maxtime\n     */\n    private mintimeMaxtimeValidation() {\n        this.timeNotInRange = this.minTime && this.maxTime && (this.bsTimeValue < this.minTime || this.bsTimeValue > this.maxTime);\n        this.setValidateType(this.minTime, this.maxTime, this.bsTimeValue);\n        this.invokeOnChange(this.datavalue, undefined, false);\n    }\n\n    /**\n     * This is an internal method used to toggle the dropdown of the time widget\n     */\n    public toggleDropdown($event, skipFocus: boolean = false): void {\n        if (this.loadNativeDateInput) {\n            //Fixes click event getting triggred twice in Mobile devices.\n            if (!skipFocus) {\n                this.onDateTimeInputFocus();\n            }\n            return;\n        }\n        if ($event.type === 'click') {\n            this.invokeEventCallback('click', { $event: $event });\n            //this.focusOnInputEl();\n        }\n        if ($event.target && $($event.target).is('input') && !(this.isDropDownDisplayEnabledOnInput(this.showdropdownon))) {\n            return;\n        }\n        this.ngZone.run(() => {\n            this.status.isopen = !this.status.isopen;\n        });\n        this.addBodyClickListener(this.status.isopen);\n    }\n\n    /**\n     * This is an internal method used to Prevent time picker close while changing time value\n     */\n    private preventTpClose($event) {\n        $event.stopImmediatePropagation();\n        const parentEl = $(this.nativeElement).closest('.app-composite-widget.caption-floating');\n        if (parentEl.length > 0) {\n            this.app.notify('captionPositionAnimate', { displayVal: this.displayValue, nativeEl: parentEl });\n        }\n    }\n\n    private addBodyClickListener(skipListener) {\n        if (!skipListener) {\n            return;\n        }\n        const bodyElement = document.querySelector('body');\n        setTimeout(() => {\n            const dropdownElement = $(bodyElement).find('>bs-dropdown-container .dropdown-menu').get(0);\n            this.deregisterEventListener = addEventListenerOnElement(bodyElement, dropdownElement, this.nativeElement, 'click', this.isDropDownDisplayEnabledOnInput(this.showdropdownon), () => {\n                this.status.isopen = false;\n            }, EVENT_LIFE.ONCE, true);\n        }, 350);\n    }\n\n    /**\n     * This is an internal method triggered when pressing key on the time input\n     */\n    public onDisplayKeydown(event) {\n        if (this.isDropDownDisplayEnabledOnInput(this.showdropdownon)) {\n            event.stopPropagation();\n            if (event.key === 'Enter' || event.key === 'ArrowDown') {\n                event.preventDefault();\n                this.toggleDropdown(event);\n            } else {\n                this.hideTimepickerDropdown();\n            }\n        } else {\n            this.hideTimepickerDropdown();\n        }\n    }\n\n    /**\n     * This is an internal method triggered when the time input changes\n     */\n    onDisplayTimeChange($event) {\n        const newVal = getNativeDateObject($event.target.value?.replace(this.am, this.meridians[0])?.replace(this.pm, this.meridians[1]), { meridians: this.meridians, pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput });\n        // time pattern validation\n        // if invalid pattern is entered, device is showing an error.\n        if (!this.formatValidation(newVal, $event.target.value)) {\n            return;\n        }\n        this.invalidDateTimeFormat = false;\n        this.onTimeChange(newVal);\n    }\n\n    onInputBlur($event) {\n        if (!$($event.relatedTarget).hasClass('bs-timepicker-field')) {\n            this.invokeOnTouched();\n            this.invokeEventCallback('blur', { $event });\n        }\n    }\n\n    /**\n     * This is an internal method used to execute the on time change functionality\n     */\n    private onTimeChange(newVal, isNativePicker?: boolean) {\n        let timeValue,\n            timeInputValue,\n            minTimeMeridian,\n            maxTimeMeridian;\n        // For nativePicker, newVal is event, get the dateobject from the event.\n        if (isNativePicker) {\n            newVal = getNativeDateObject(newVal.target.value, { pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput });\n        }\n        if (newVal) {\n            // if the newVal is valid but not in the given range then highlight the input field\n            this.timeNotInRange = this.minTime && this.maxTime && (newVal < this.minTime || newVal > this.maxTime);\n            this.setValidateType(this.minTime, this.maxTime, newVal);\n            if(!this.timeNotInRange) {\n                this.bsTimeValue = newVal;\n            }\n        } // sometimes library is not returning the correct value when the min and max time are given, displaying the datavalue based on the value given by the user\n        else if (this.bsTimePicker && this.bsTimePicker.min && this.bsTimePicker.max) {\n            minTimeMeridian = moment(new Date(this.bsTimePicker.min)).format('A');\n            maxTimeMeridian = moment(new Date(this.bsTimePicker.max)).format('A');\n            timeValue = this.bsTimePicker.hours + ':' + (this.bsTimePicker.minutes || 0) + ':' + (this.bsTimePicker.seconds || 0) + (this.bsTimePicker.showMeridian ? (' ' + minTimeMeridian) : '');\n            timeInputValue = getNativeDateObject(timeValue, { pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput });\n            this.bsTimePicker.meridian = minTimeMeridian?.replace(this.meridians[0], this.am)?.replace(this.meridians[1], this.pm);\n            this.timeNotInRange =  this.bsTimePicker.min > timeInputValue || this.bsTimePicker.max < timeInputValue;\n\n            if (this.timeNotInRange || this.invalidDateTimeFormat) {\n                this.bsTimeValue = this.getPrevDataValue();\n                setTimeout(() => {\n                    const timeStr = getFormattedDate(this.datePipe, timeValue, this.timepattern, this.timeZone, null, null, this) || '';\n                    $(this.nativeElement).find('.display-input').val(this.safeReplaceMeridians(timeStr));\n                });\n            }\n            this.setValidateType(this.bsTimePicker.min, this.bsTimePicker.max, timeInputValue);\n            if (!this.timeNotInRange) {\n                this.bsTimeValue = timeInputValue;\n            }\n        }\n        // Update UI display if value hasn't changed\n        if (!this.timeNotInRange && this.datavalue === this.getPrevDataValue()) {\n            const displayTime = getFormattedDate(this.datePipe, this.datavalue, this.timepattern, this.timeZone, null, null, this) || '';\n            $(this.nativeElement).find('.display-input').val(this.safeReplaceMeridians(displayTime));\n        }\n        this.invokeOnTouched();\n        this.invokeOnChange(this.datavalue, {}, true);\n    }\n\n    /**\n     * This is an internal method used to maintain a time interval to update the time model when the data value is set to CURRENT_TIME\n     */\n    private setTimeInterval() {\n        if (this.timeinterval) {\n            return;\n        }\n        this.timeinterval = setInterval(() => {\n            const now = this.timeZone ? getMomentLocaleObject(this.timeZone) : new Date();\n            now.setSeconds(now.getSeconds() + 1);\n            this.datavalue = CURRENT_TIME;\n            this.onTimeChange(now);\n        }, 1000);\n    }\n\n    /**\n     * This is an internal method used to clear the time interval created\n     */\n    private clearTimeInterval() {\n        if (this.timeinterval) {\n            clearInterval(this.timeinterval);\n            this.timeinterval = null;\n        }\n    }\n\n    /**\n     * This function sets the value isOpen/isTimeOpen (i.e when datepicker popup is closed) based on widget type(i.e  DateTime, Time)\n     * @param val - isOpen/isTimeOpen is set based on the timepicker popup is open/closed\n     */\n    private setIsTimeOpen(val: boolean) {\n        this.status.isopen = val;\n    }\n\n    // Change event is registered from the template, Prevent the framework from registering one more event\n    protected handleEvent(node: HTMLElement, eventName: string, eventCallback: Function, locals: any) {\n        if (!includes(['blur', 'focus', 'change', 'click'], eventName)) {\n            super.handleEvent(node, eventName, eventCallback, locals);\n        }\n    }\n\n    public hideTimepickerDropdown() {\n        this.invokeOnTouched();\n        this.status.isopen = false;\n        if (this.deregisterEventListener) {\n            this.deregisterEventListener();\n        }\n        this.removeKeyupListener();\n        const parentEl = $(this.nativeElement).closest('.app-composite-widget.caption-floating');\n        if (parentEl.length > 0) {\n            this.app.notify('captionPositionAnimate', { displayVal: this.displayValue, nativeEl: parentEl });\n        }\n        this.blurDateInput(true);\n    }\n\n    private isValid(event) {\n        if (!event) {\n            const enteredDate = $(this.nativeElement).find('input').val()?.replace(this.am, this.meridians[0])?.replace(this.pm, this.meridians[1]);\n            const newVal = getNativeDateObject(enteredDate, { meridians: this.meridians, pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput });\n            if (!this.formatValidation(newVal, enteredDate)) {\n                return;\n            }\n        }\n    }\n    /**\n     * This is an internal method to add css class for dropdown while opening the time dropdown\n     */\n    public onShown() {\n        const tpElements = document.querySelectorAll('timepicker');\n        forEach(tpElements, element => {\n            addClass(element.parentElement as HTMLElement, 'app-datetime', true);\n        });\n        if (this.bsDropdown && (this.timeNotInRange || this.invalidDateTimeFormat)) {\n            this.bsTimeValue = null;\n        }\n        this.focusTimePickerPopover(this);\n        this.bindTimePickerKeyboardEvents();\n        adjustContainerPosition($('bs-dropdown-container'), this.nativeElement, this.bsDropdown._dropdown, $('bs-dropdown-container .dropdown-menu'));\n    }\n\n    public assignModel() {\n        if (!this.displayInputElem) {\n            this.displayInputElem = this.getMobileInput();\n        }\n        (this.displayInputElem as any).value = get(this, 'nativeDisplayValue');\n    }\n}\n","<div dropdown [isOpen]=\"status.isopen\" (onShown)=\"onShown()\" (onHidden)=\"hideTimepickerDropdown()\" [container]=\"'body'\" style=\"display: inherit\">\n  <input [attr.aria-label]=\"arialabel\" class=\"form-control app-textbox display-input\"\n    focus-target\n    [tabindex]=\"tabindex\"\n    [name]=\"name\"\n    type=\"text\"\n    role=\"timer\"\n    [value]=\"displayValue\"\n    [disabled]=\"disabled || readonly || isCurrentTime\"\n    [autofocus]=\"autofocus\"\n    [attr.placeholder]=\"placeholder\"\n    [attr.accesskey]=\"shortcutkey\"\n    [attr.aria-atomic]=\"isCurrentTime ? 'true' : 'false'\"\n    [required]=\"required\"\n    [readOnly]=\"isReadOnly\"\n    (click)=\"toggleDropdown($event, true)\"\n    (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n    (blur)=\"onInputBlur($event)\"\n    (change)=\"onDisplayTimeChange($event)\"\n    (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event)\">\n  <span class=\"input-group-btn dropdown-toggle\">\n    <button type=\"button\" class=\"btn btn-default btn-date\" [tabindex]=\"tabindex\" [disabled]=\"disabled || readonly || isCurrentTime\" aria-label=\"Select time\" aria-haspopup=\"true\" aria-expanded=\"false\" (click)=\"toggleDropdown($event, false)\"><i aria-hidden=\"true\" class=\"app-icon wm-sl-l sl-time\"></i></button>\n  </span>\n  <div *dropdownMenu class=\"dropdown-menu\" (click)=\"preventTpClose($event)\">\n    <timepicker class=\"model-holder\"\n      [showMeridian]=\"ismeridian\"\n      [readonlyInput]=\"isDisabled\"\n      [(ngModel)]=\"bsTimeValue\"\n      [ngModelOptions]=\"{standalone: true}\"\n      [disabled]=\"disabled || readonly || isCurrentTime\"\n      [min]=\"minTime\"\n      [max]=\"maxTime\"\n      [hourStep]=\"hourstep\"\n      [minuteStep]=\"minutestep\"\n      [secondsStep]=\"secondsstep\"\n      [mousewheel]=\"true\"\n      [arrowkeys]=\"true\"\n      (isValid)=\"isValid($event)\"\n      [showSeconds]=\"showseconds\" (ngModelChange)=\"onTimeChange($event)\"\n      [ngClass]=\"{ 'showbuttons': showampmbuttons }\"></timepicker>\n      @if (ismeridian && showampmbuttons) {\n          <div class=\"ampm-toggle text-center\">\n              <button class=\"meridian-btn mb-1\" [ngClass]=\"{ 'active btn-secondary': getPeriod() === 'AM' }\" (click)=\"setPeriod('AM')\">{{appLocale.LABEL_AM ||\"AM\"}}</button><br>\n              <button class=\"meridian-btn\" [ngClass]=\"{ 'active btn-secondary': getPeriod() === 'PM' }\" (click)=\"setPeriod('PM')\">{{appLocale.LABEL_PM ||\"PM\"}}</button>\n          </div>\n      }\n  </div>\n</div>\n@if (loadNativeDateInput) {\n  <wm-datetimepicker\n    dateTimePicker\n    mode=\"TIME\"\n    [minTime]=\"minTime\"\n    [maxTime]=\"maxTime\"\n    [placement]=\"modal\"\n    [displayFormat]=\"timepattern\"\n    [value]=\"bsTimeValue\"\n    (change)=\"onTimeChange($event)\">\n  </wm-datetimepicker>\n  <div class=\"mobile-input mobile-datepicker-container\"\n    tabindex=\"1000000\"\n    (click)=\"!(disabled || readonly) && showDatePickerModal(bsTimeValue)\"\n    [attr.aria-label]=\"displayValue ? 'Change time  ' + displayValue : arialabel || 'Select time'\"\n    (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event); assignModel()\"\n    (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n    role=\"button\">\n  </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}