@period-year-norway/ngx-bootstrap
Version:
1 lines • 62.1 kB
Source Map (JSON)
{"version":3,"file":"period-year-norway-ngx-bootstrap-timepicker.mjs","sources":["../../../../src/timepicker/reducer/timepicker.actions.ts","../../../../src/timepicker/timepicker.utils.ts","../../../../src/timepicker/timepicker-controls.util.ts","../../../../src/timepicker/timepicker.config.ts","../../../../src/timepicker/reducer/timepicker.reducer.ts","../../../../src/timepicker/reducer/timepicker.store.ts","../../../../src/timepicker/timepicker.component.ts","../../../../src/timepicker/timepicker.component.html","../../../../src/timepicker/timepicker.module.ts","../../../../src/timepicker/period-year-norway-ngx-bootstrap-timepicker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Action } from '@period-year-norway/ngx-bootstrap/mini-ngrx';\r\nimport {\r\n TimeChangeEvent,\r\n TimepickerComponentState,\r\n Time\r\n} from '../timepicker.models';\r\n\r\n@Injectable({providedIn: 'platform'})\r\nexport class TimepickerActions {\r\n static readonly WRITE_VALUE = '[timepicker] write value from ng model';\r\n static readonly CHANGE_HOURS = '[timepicker] change hours';\r\n static readonly CHANGE_MINUTES = '[timepicker] change minutes';\r\n static readonly CHANGE_SECONDS = '[timepicker] change seconds';\r\n static readonly SET_TIME_UNIT = '[timepicker] set time unit';\r\n static readonly UPDATE_CONTROLS = '[timepicker] update controls';\r\n\r\n writeValue(value?: Date | string) {\r\n return {\r\n type: TimepickerActions.WRITE_VALUE,\r\n payload: value\r\n };\r\n }\r\n\r\n changeHours(event: TimeChangeEvent) {\r\n return {\r\n type: TimepickerActions.CHANGE_HOURS,\r\n payload: event\r\n };\r\n }\r\n\r\n changeMinutes(event: TimeChangeEvent) {\r\n return {\r\n type: TimepickerActions.CHANGE_MINUTES,\r\n payload: event\r\n };\r\n }\r\n\r\n changeSeconds(event: TimeChangeEvent): Action {\r\n return {\r\n type: TimepickerActions.CHANGE_SECONDS,\r\n payload: event\r\n };\r\n }\r\n\r\n setTime(value: Time): Action {\r\n return {\r\n type: TimepickerActions.SET_TIME_UNIT,\r\n payload: value\r\n };\r\n }\r\n\r\n updateControls(value: TimepickerComponentState): Action {\r\n return {\r\n type: TimepickerActions.UPDATE_CONTROLS,\r\n payload: value\r\n };\r\n }\r\n}\r\n","import { Time, TimepickerComponentState } from './timepicker.models';\r\n\r\nconst dex = 10;\r\nconst hoursPerDay = 24;\r\nconst hoursPerDayHalf = 12;\r\nconst minutesPerHour = 60;\r\nconst secondsPerMinute = 60;\r\n\r\nexport function isValidDate(value?: string | Date): boolean {\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n if (value instanceof Date && isNaN(value.getHours())) {\r\n return false;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return isValidDate(new Date(value));\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function isValidLimit(controls: TimepickerComponentState, newDate: Date): boolean {\r\n if (controls.min && newDate < controls.min) {\r\n return false;\r\n }\r\n\r\n if (controls.max && newDate > controls.max) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function toNumber(value?: string | number): number {\r\n if (typeof value === 'undefined') {\r\n return NaN;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return value;\r\n }\r\n\r\n return parseInt(value, dex);\r\n}\r\n\r\nexport function isNumber(value: string | number): value is number {\r\n return !isNaN(toNumber(value));\r\n}\r\n\r\nexport function parseHours(\r\n value?: string | number,\r\n isPM = false\r\n): number {\r\n const hour = toNumber(value);\r\n if (\r\n isNaN(hour) ||\r\n hour < 0 ||\r\n hour > (isPM ? hoursPerDayHalf : hoursPerDay)\r\n ) {\r\n return NaN;\r\n }\r\n\r\n return hour;\r\n}\r\n\r\nexport function parseMinutes(value?: string | number): number {\r\n const minute = toNumber(value);\r\n if (isNaN(minute) || minute < 0 || minute > minutesPerHour) {\r\n return NaN;\r\n }\r\n\r\n return minute;\r\n}\r\n\r\nexport function parseSeconds(value?: string | number): number {\r\n const seconds = toNumber(value);\r\n if (isNaN(seconds) || seconds < 0 || seconds > secondsPerMinute) {\r\n return NaN;\r\n }\r\n\r\n return seconds;\r\n}\r\n\r\nexport function parseTime(value?: string | Date): Date | undefined {\r\n if (typeof value === 'string') {\r\n return new Date(value);\r\n }\r\n\r\n return value;\r\n}\r\n\r\nexport function changeTime(value?: Date, diff?: Time): Date {\r\n if (!value) {\r\n return changeTime(createDate(new Date(), 0, 0, 0), diff);\r\n }\r\n\r\n if (!diff) {\r\n return value;\r\n }\r\n\r\n let hour = value.getHours();\r\n let minutes = value.getMinutes();\r\n let seconds = value.getSeconds();\r\n\r\n if (diff.hour) {\r\n hour = hour + toNumber(diff.hour);\r\n }\r\n\r\n if (diff.minute) {\r\n minutes = minutes + toNumber(diff.minute);\r\n }\r\n\r\n if (diff.seconds) {\r\n seconds = seconds + toNumber(diff.seconds);\r\n }\r\n\r\n return createDate(value, hour, minutes, seconds);\r\n}\r\n\r\nexport function setTime(value: Date | undefined, opts: Time): Date | undefined {\r\n let hour = parseHours(opts.hour);\r\n const minute = parseMinutes(opts.minute);\r\n const seconds = parseSeconds(opts.seconds) || 0;\r\n\r\n if (opts.isPM && hour !== 12) {\r\n hour += hoursPerDayHalf;\r\n }\r\n\r\n if (!value) {\r\n if (!isNaN(hour) && !isNaN(minute)) {\r\n return createDate(new Date(), hour, minute, seconds);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n if (isNaN(hour) || isNaN(minute)) {\r\n return value;\r\n }\r\n\r\n return createDate(value, hour, minute, seconds);\r\n}\r\n\r\nexport function createDate(\r\n value: Date,\r\n hours: number,\r\n minutes: number,\r\n seconds: number\r\n): Date {\r\n const newValue = new Date(\r\n value.getFullYear(),\r\n value.getMonth(),\r\n value.getDate(),\r\n hours,\r\n minutes,\r\n seconds,\r\n value.getMilliseconds()\r\n );\r\n // #3139 ensure date part remains unchanged\r\n newValue.setFullYear(value.getFullYear());\r\n newValue.setMonth(value.getMonth());\r\n newValue.setDate(value.getDate());\r\n\r\n return newValue;\r\n}\r\n\r\nexport function padNumber(value: number): string {\r\n const _value = value.toString();\r\n if (_value.length > 1) {\r\n return _value;\r\n }\r\n\r\n return `0${_value}`;\r\n}\r\n\r\nexport function isHourInputValid(hours: string, isPM: boolean): boolean {\r\n return !isNaN(parseHours(hours, isPM));\r\n}\r\n\r\nexport function isMinuteInputValid(minutes: string): boolean {\r\n return !isNaN(parseMinutes(minutes));\r\n}\r\n\r\nexport function isSecondInputValid(seconds: string): boolean {\r\n return !isNaN(parseSeconds(seconds));\r\n}\r\n\r\nexport function isInputLimitValid(diff: Time, max?: Date, min?: Date): boolean {\r\n const newDate = setTime(new Date(), diff);\r\n\r\n if (!newDate) {\r\n return false;\r\n }\r\n\r\n if (max && newDate > max) {\r\n return false;\r\n }\r\n\r\n if (min && newDate < min) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function isOneOfDatesEmpty(hours: string, minutes: string, seconds: string): boolean {\r\n return hours.length === 0 || minutes.length === 0 || seconds.length === 0;\r\n}\r\n\r\nexport function isInputValid(\r\n hours: string,\r\n minutes = '0',\r\n seconds = '0',\r\n isPM: boolean\r\n): boolean {\r\n return isHourInputValid(hours, isPM)\r\n && isMinuteInputValid(minutes)\r\n && isSecondInputValid(seconds);\r\n}\r\n","import { changeTime } from './timepicker.utils';\r\nimport {\r\n TimeChangeEvent,\r\n TimepickerComponentState,\r\n TimepickerControls\r\n} from './timepicker.models';\r\n\r\nexport function canChangeValue(\r\n state: TimepickerComponentState,\r\n event?: TimeChangeEvent\r\n): boolean {\r\n if (state.readonlyInput || state.disabled) {\r\n return false;\r\n }\r\n\r\n if (event) {\r\n if (event.source === 'wheel' && !state.mousewheel) {\r\n return false;\r\n }\r\n\r\n if (event.source === 'key' && !state.arrowkeys) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function canChangeHours(\r\n event: TimeChangeEvent,\r\n controls: TimepickerControls\r\n): boolean {\r\n if (!event.step) {\r\n return false;\r\n }\r\n\r\n if (event.step > 0 && !controls.canIncrementHours) {\r\n return false;\r\n }\r\n\r\n if (event.step < 0 && !controls.canDecrementHours) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function canChangeMinutes(\r\n event: TimeChangeEvent,\r\n controls: TimepickerControls\r\n): boolean {\r\n if (!event.step) {\r\n return false;\r\n }\r\n if (event.step > 0 && !controls.canIncrementMinutes) {\r\n return false;\r\n }\r\n if (event.step < 0 && !controls.canDecrementMinutes) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function canChangeSeconds(\r\n event: TimeChangeEvent,\r\n controls: TimepickerControls\r\n): boolean {\r\n if (!event.step) {\r\n return false;\r\n }\r\n if (event.step > 0 && !controls.canIncrementSeconds) {\r\n return false;\r\n }\r\n if (event.step < 0 && !controls.canDecrementSeconds) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function getControlsValue(\r\n state: TimepickerComponentState\r\n): TimepickerComponentState {\r\n const {\r\n hourStep,\r\n minuteStep,\r\n secondsStep,\r\n readonlyInput,\r\n disabled,\r\n mousewheel,\r\n arrowkeys,\r\n showSpinners,\r\n showMeridian,\r\n showSeconds,\r\n meridians,\r\n min,\r\n max\r\n } = state;\r\n\r\n return {\r\n hourStep,\r\n minuteStep,\r\n secondsStep,\r\n readonlyInput,\r\n disabled,\r\n mousewheel,\r\n arrowkeys,\r\n showSpinners,\r\n showMeridian,\r\n showSeconds,\r\n meridians,\r\n min,\r\n max\r\n };\r\n}\r\n\r\nexport function timepickerControls(value: Date | undefined, state: TimepickerComponentState): TimepickerControls {\r\n const hoursPerDay = 24;\r\n const hoursPerDayHalf = 12;\r\n const { min, max, hourStep, minuteStep, secondsStep, showSeconds } = state;\r\n const res: TimepickerControls = {\r\n canIncrementHours: true,\r\n canIncrementMinutes: true,\r\n canIncrementSeconds: true,\r\n\r\n canDecrementHours: true,\r\n canDecrementMinutes: true,\r\n canDecrementSeconds: true,\r\n\r\n canToggleMeridian: true\r\n };\r\n\r\n if (!value) {\r\n return res;\r\n }\r\n\r\n // compare dates\r\n if (max) {\r\n const _newHour = changeTime(value, { hour: hourStep });\r\n res.canIncrementHours = max > _newHour && (value.getHours() + hourStep) < hoursPerDay;\r\n\r\n if (!res.canIncrementHours) {\r\n const _newMinutes = changeTime(value, { minute: minuteStep });\r\n res.canIncrementMinutes = showSeconds\r\n ? max > _newMinutes\r\n : max >= _newMinutes;\r\n }\r\n\r\n if (!res.canIncrementMinutes) {\r\n const _newSeconds = changeTime(value, { seconds: secondsStep });\r\n res.canIncrementSeconds = max >= _newSeconds;\r\n }\r\n\r\n if (value.getHours() < hoursPerDayHalf) {\r\n res.canToggleMeridian = changeTime(value, { hour: hoursPerDayHalf }) < max;\r\n }\r\n }\r\n\r\n if (min) {\r\n const _newHour = changeTime(value, { hour: -hourStep });\r\n res.canDecrementHours = min < _newHour;\r\n\r\n if (!res.canDecrementHours) {\r\n const _newMinutes = changeTime(value, { minute: -minuteStep });\r\n res.canDecrementMinutes = showSeconds\r\n ? min < _newMinutes\r\n : min <= _newMinutes;\r\n }\r\n\r\n if (!res.canDecrementMinutes) {\r\n const _newSeconds = changeTime(value, { seconds: -secondsStep });\r\n res.canDecrementSeconds = min <= _newSeconds;\r\n }\r\n\r\n if (value.getHours() >= hoursPerDayHalf) {\r\n res.canToggleMeridian = changeTime(value, { hour: -hoursPerDayHalf }) > min;\r\n }\r\n }\r\n\r\n return res;\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n/** Provides default configuration values for timepicker */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TimepickerConfig {\r\n /** hours change step */\r\n hourStep = 1;\r\n /** minutes change step */\r\n minuteStep = 5;\r\n /** seconds changes step */\r\n secondsStep = 10;\r\n /** if true works in 12H mode and displays AM/PM. If false works in 24H mode and hides AM/PM */\r\n showMeridian = true;\r\n /** meridian labels based on locale */\r\n meridians = ['AM', 'PM'];\r\n /** if true hours and minutes fields will be readonly */\r\n readonlyInput = false;\r\n /** if true hours and minutes fields will be disabled */\r\n disabled = false;\r\n /** if true emptyTime is not marked as invalid */\r\n allowEmptyTime = false;\r\n /** if true scroll inside hours and minutes inputs will change time */\r\n mousewheel = true;\r\n /** if true the values of hours and minutes can be changed using the up/down arrow keys on the keyboard */\r\n arrowkeys = true;\r\n /** if true spinner arrows above and below the inputs will be shown */\r\n showSpinners = true;\r\n /** show seconds in timepicker */\r\n showSeconds = false;\r\n /** show minutes in timepicker */\r\n showMinutes = true;\r\n /** minimum time user can select */\r\n min?: Date;\r\n /** maximum time user can select */\r\n max?: Date;\r\n /** placeholder for hours field in timepicker */\r\n hoursPlaceholder = 'HH';\r\n /** placeholder for minutes field in timepicker */\r\n minutesPlaceholder = 'MM';\r\n /** placeholder for seconds field in timepicker */\r\n secondsPlaceholder = 'SS';\r\n /** hours aria label */\r\n ariaLabelHours = 'hours';\r\n /** minutes aria label */\r\n ariaLabelMinutes = 'minutes';\r\n /** seconds aria label */\r\n ariaLabelSeconds = 'seconds';\r\n}\r\n","import { Action } from '@period-year-norway/ngx-bootstrap/mini-ngrx';\r\nimport {\r\n canChangeHours,\r\n canChangeMinutes,\r\n canChangeSeconds,\r\n canChangeValue,\r\n timepickerControls\r\n} from '../timepicker-controls.util';\r\nimport { TimepickerConfig } from '../timepicker.config';\r\nimport {\r\n TimepickerComponentState,\r\n TimepickerControls\r\n} from '../timepicker.models';\r\nimport { changeTime, setTime, isValidLimit } from '../timepicker.utils';\r\nimport { TimepickerActions } from './timepicker.actions';\r\n\r\nexport interface TimepickerState {\r\n value?: Date;\r\n config: TimepickerComponentState;\r\n controls: TimepickerControls;\r\n}\r\n\r\nexport const initialState: TimepickerState = {\r\n value: void 0,\r\n config: new TimepickerConfig(),\r\n controls: {\r\n canIncrementHours: true,\r\n canIncrementMinutes: true,\r\n canIncrementSeconds: true,\r\n\r\n canDecrementHours: true,\r\n canDecrementMinutes: true,\r\n canDecrementSeconds: true,\r\n\r\n canToggleMeridian: true\r\n }\r\n};\r\n\r\nexport function timepickerReducer(state = initialState, action: Action) {\r\n switch (action.type) {\r\n case TimepickerActions.WRITE_VALUE: {\r\n return Object.assign({}, state, { value: action.payload });\r\n }\r\n\r\n case TimepickerActions.CHANGE_HOURS: {\r\n if (\r\n !canChangeValue(state.config, action.payload) ||\r\n !canChangeHours(action.payload, state.controls)\r\n ) {\r\n return state;\r\n }\r\n\r\n const _newTime = changeTime(state.value, { hour: action.payload.step });\r\n\r\n if ((state.config.max || state.config.min) && !isValidLimit(state.config, _newTime)) {\r\n return state;\r\n }\r\n\r\n return Object.assign({}, state, { value: _newTime });\r\n }\r\n\r\n case TimepickerActions.CHANGE_MINUTES: {\r\n if (\r\n !canChangeValue(state.config, action.payload) ||\r\n !canChangeMinutes(action.payload, state.controls)\r\n ) {\r\n return state;\r\n }\r\n\r\n const _newTime = changeTime(state.value, { minute: action.payload.step });\r\n\r\n if ((state.config.max || state.config.min) && !isValidLimit(state.config, _newTime)) {\r\n return state;\r\n }\r\n\r\n return Object.assign({}, state, { value: _newTime });\r\n }\r\n\r\n case TimepickerActions.CHANGE_SECONDS: {\r\n if (\r\n !canChangeValue(state.config, action.payload) ||\r\n !canChangeSeconds(action.payload, state.controls)\r\n ) {\r\n return state;\r\n }\r\n\r\n const _newTime = changeTime(state.value, {\r\n seconds: action.payload.step\r\n });\r\n\r\n if ((state.config.max || state.config.min) && !isValidLimit(state.config, _newTime)) {\r\n return state;\r\n }\r\n\r\n return Object.assign({}, state, { value: _newTime });\r\n }\r\n\r\n case TimepickerActions.SET_TIME_UNIT: {\r\n if (!canChangeValue(state.config)) {\r\n return state;\r\n }\r\n\r\n const _newTime = setTime(state.value, action.payload);\r\n\r\n return Object.assign({}, state, { value: _newTime });\r\n }\r\n\r\n case TimepickerActions.UPDATE_CONTROLS: {\r\n const _newControlsState = timepickerControls(state.value, action.payload);\r\n const _newState: TimepickerState = {\r\n value: state.value,\r\n config: action.payload,\r\n controls: _newControlsState\r\n };\r\n\r\n if (state.config.showMeridian !== _newState.config.showMeridian) {\r\n if (state.value) {\r\n _newState.value = new Date(state.value);\r\n }\r\n }\r\n\r\n return Object.assign({}, state, _newState);\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n timepickerReducer,\r\n TimepickerState,\r\n initialState\r\n} from './timepicker.reducer';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\nimport { Action, MiniStore, MiniState } from '@period-year-norway/ngx-bootstrap/mini-ngrx';\r\n\r\n@Injectable({providedIn: 'platform'})\r\nexport class TimepickerStore extends MiniStore<TimepickerState> {\r\n constructor() {\r\n const _dispatcher = new BehaviorSubject<Action>({\r\n type: '[mini-ngrx] dispatcher init'\r\n });\r\n const state = new MiniState<TimepickerState>(\r\n initialState,\r\n _dispatcher,\r\n timepickerReducer\r\n );\r\n super(_dispatcher, timepickerReducer, state);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\n\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { ControlValueAccessorModel } from './models';\r\n\r\nimport { TimepickerActions } from './reducer/timepicker.actions';\r\nimport { TimepickerStore } from './reducer/timepicker.store';\r\nimport { getControlsValue } from './timepicker-controls.util';\r\nimport { TimepickerConfig } from './timepicker.config';\r\n\r\nimport { TimeChangeSource, TimepickerComponentState, TimepickerControls } from './timepicker.models';\r\n\r\nimport {\r\n isHourInputValid,\r\n isInputLimitValid,\r\n isInputValid,\r\n isMinuteInputValid,\r\n isOneOfDatesEmpty,\r\n isSecondInputValid,\r\n isValidDate,\r\n padNumber,\r\n parseTime\r\n} from './timepicker.utils';\r\n\r\nexport const TIMEPICKER_CONTROL_VALUE_ACCESSOR: ControlValueAccessorModel = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TimepickerComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\n selector: 'timepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TIMEPICKER_CONTROL_VALUE_ACCESSOR, TimepickerStore],\n templateUrl: './timepicker.component.html',\n styles: [`\r\n .bs-chevron {\r\n border-style: solid;\r\n display: block;\r\n width: 9px;\r\n height: 9px;\r\n position: relative;\r\n border-width: 3px 0px 0 3px;\r\n }\r\n\r\n .bs-chevron-up {\r\n -webkit-transform: rotate(45deg);\r\n transform: rotate(45deg);\r\n top: 2px;\r\n }\r\n\r\n .bs-chevron-down {\r\n -webkit-transform: rotate(-135deg);\r\n transform: rotate(-135deg);\r\n top: -2px;\r\n }\r\n\r\n .bs-timepicker-field {\r\n width: 65px;\r\n padding: .375rem .55rem;\r\n }\r\n `],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\r\nexport class TimepickerComponent\r\n implements ControlValueAccessor,\r\n TimepickerComponentState,\r\n TimepickerControls,\r\n OnChanges,\r\n OnDestroy {\r\n /** hours change step */\r\n @Input() hourStep = 1;\r\n /** minutes change step */\r\n @Input() minuteStep = 5;\r\n /** seconds change step */\r\n @Input() secondsStep = 10;\r\n /** if true hours and minutes fields will be readonly */\r\n @Input() readonlyInput = false;\r\n /** if true hours and minutes fields will be disabled */\r\n @Input() disabled = false;\r\n /** if true scroll inside hours and minutes inputs will change time */\r\n @Input() mousewheel = true;\r\n /** if true the values of hours and minutes can be changed using the up/down arrow keys on the keyboard */\r\n @Input() arrowkeys = true;\r\n /** if true spinner arrows above and below the inputs will be shown */\r\n @Input() showSpinners = true;\r\n /** if true meridian button will be shown */\r\n @Input() showMeridian = true;\r\n /** show minutes in timepicker */\r\n @Input() showMinutes = true;\r\n /** show seconds in timepicker */\r\n @Input() showSeconds = false;\r\n /** meridian labels based on locale */\r\n @Input() meridians: string[] = ['AM', 'PM'];\r\n /** minimum time user can select */\r\n @Input() min?: Date;\r\n /** maximum time user can select */\r\n @Input() max?: Date;\r\n /** placeholder for hours field in timepicker */\r\n @Input() hoursPlaceholder = 'HH';\r\n /** placeholder for minutes field in timepicker */\r\n @Input() minutesPlaceholder = 'MM';\r\n /** placeholder for seconds field in timepicker */\r\n @Input() secondsPlaceholder = 'SS';\r\n /** emits true if value is a valid date */\r\n @Output() isValid = new EventEmitter<boolean>();\r\n /** emits value of meridian*/\r\n @Output() meridianChange = new EventEmitter<string>();\r\n // ui variables\r\n hours = '';\r\n minutes = '';\r\n seconds = '';\r\n meridian = '';\r\n // min\\max validation for input fields\r\n invalidHours = false;\r\n invalidMinutes = false;\r\n invalidSeconds = false;\r\n // aria-label variables\r\n labelHours = 'hours';\r\n labelMinutes = 'minutes';\r\n labelSeconds = 'seconds';\r\n // time picker controls state\r\n canIncrementHours = true;\r\n canIncrementMinutes = true;\r\n canIncrementSeconds = true;\r\n canDecrementHours = true;\r\n canDecrementMinutes = true;\r\n canDecrementSeconds = true;\r\n canToggleMeridian = true;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange = Function.prototype;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onTouched = Function.prototype;\r\n\r\n config: TimepickerConfig;\r\n\r\n // control value accessor methods\r\n timepickerSub?: Subscription;\r\n constructor(\r\n _config: TimepickerConfig,\r\n private _cd: ChangeDetectorRef,\r\n private _store: TimepickerStore,\r\n private _timepickerActions: TimepickerActions\r\n ) {\r\n this.config = _config;\r\n Object.assign(this, this.config);\r\n this.timepickerSub = _store.select(state => state.value)\r\n .subscribe((value: Date | undefined) => {\r\n // update UI values if date changed\r\n this._renderTime(value);\r\n this.onChange(value);\r\n\r\n this._store.dispatch(\r\n this._timepickerActions.updateControls(getControlsValue(this))\r\n );\r\n });\r\n\r\n _store.select(state => state.controls)\r\n .subscribe((controlsState: TimepickerControls) => {\r\n const isTimepickerInputValid = isInputValid(this.hours, this.minutes, this.seconds, this.isPM());\r\n const isValid = this.config.allowEmptyTime?\r\n this.isOneOfDatesIsEmpty() || isTimepickerInputValid\r\n : isTimepickerInputValid;\r\n this.isValid.emit(isValid);\r\n Object.assign(this, controlsState);\r\n _cd.markForCheck();\r\n });\r\n }\r\n\r\n /** @deprecated - please use `isEditable` instead */\r\n get isSpinnersVisible(): boolean {\r\n return this.showSpinners && !this.readonlyInput;\r\n }\r\n\r\n get isEditable(): boolean {\r\n return !(this.readonlyInput || this.disabled);\r\n }\r\n\r\n resetValidation(): void {\r\n this.invalidHours = false;\r\n this.invalidMinutes = false;\r\n this.invalidSeconds = false;\r\n }\r\n\r\n isPM(): boolean {\r\n return this.showMeridian && this.meridian === this.meridians[1];\r\n }\r\n\r\n prevDef($event: Event) {\r\n $event.preventDefault();\r\n }\r\n\r\n wheelSign($event: WheelEventInit): number {\r\n return Math.sign($event.deltaY || 0) * -1;\r\n }\r\n\r\n ngOnChanges(): void {\r\n this._store.dispatch(\r\n this._timepickerActions.updateControls(getControlsValue(this))\r\n );\r\n }\r\n\r\n changeHours(step: number, source: TimeChangeSource = ''): void {\r\n this.resetValidation();\r\n this._store.dispatch(this._timepickerActions.changeHours({ step, source }));\r\n }\r\n\r\n changeMinutes(step: number, source: TimeChangeSource = ''): void {\r\n this.resetValidation();\r\n this._store.dispatch(\r\n this._timepickerActions.changeMinutes({ step, source })\r\n );\r\n }\r\n\r\n changeSeconds(step: number, source: TimeChangeSource = ''): void {\r\n this.resetValidation();\r\n this._store.dispatch(\r\n this._timepickerActions.changeSeconds({ step, source })\r\n );\r\n }\r\n\r\n updateHours(target?: Partial<EventTarget> | null): void {\r\n this.resetValidation();\r\n this.hours = (target as HTMLInputElement).value;\r\n\r\n const isTimepickerInputValid = isHourInputValid(this.hours, this.isPM()) && this.isValidLimit();\r\n const isValid = this.config.allowEmptyTime ?\r\n this.isOneOfDatesIsEmpty() || isTimepickerInputValid\r\n : isTimepickerInputValid;\r\n\r\n if (!isValid) {\r\n this.invalidHours = true;\r\n this.isValid.emit(false);\r\n this.onChange(null);\r\n\r\n return;\r\n }\r\n\r\n this._updateTime();\r\n }\r\n\r\n updateMinutes(target: Partial<EventTarget> | null) {\r\n this.resetValidation();\r\n this.minutes = (target as HTMLInputElement).value;\r\n\r\n const isTimepickerInputValid = isMinuteInputValid(this.minutes) && this.isValidLimit();\r\n const isValid = this.config.allowEmptyTime ?\r\n this.isOneOfDatesIsEmpty() || isTimepickerInputValid\r\n : isTimepickerInputValid;\r\n\r\n if (!isValid) {\r\n this.invalidMinutes = true;\r\n this.isValid.emit(false);\r\n this.onChange(null);\r\n\r\n return;\r\n }\r\n\r\n this._updateTime();\r\n }\r\n\r\n updateSeconds(target: Partial<EventTarget> | null) {\r\n this.resetValidation();\r\n this.seconds = (target as HTMLInputElement).value;\r\n\r\n const isTimepickerInputValid = isSecondInputValid(this.seconds) && this.isValidLimit();\r\n const isValid = this.config.allowEmptyTime ?\r\n this.isOneOfDatesIsEmpty() || isTimepickerInputValid\r\n : isTimepickerInputValid;\r\n\r\n if (!isValid) {\r\n this.invalidSeconds = true;\r\n this.isValid.emit(false);\r\n this.onChange(null);\r\n\r\n return;\r\n }\r\n\r\n this._updateTime();\r\n }\r\n\r\n isValidLimit(): boolean {\r\n return isInputLimitValid({\r\n hour: this.hours,\r\n minute: this.minutes,\r\n seconds: this.seconds,\r\n isPM: this.isPM()\r\n }, this.max, this.min);\r\n }\r\n\r\n isOneOfDatesIsEmpty(): boolean {\r\n return isOneOfDatesEmpty(\r\n this.hours,\r\n this.minutes,\r\n this.seconds);\r\n }\r\n\r\n _updateTime() {\r\n const _seconds = this.showSeconds ? this.seconds : void 0;\r\n const _minutes = this.showMinutes ? this.minutes : void 0;\r\n const isTimepickerInputValid = isInputValid(this.hours, _minutes, _seconds, this.isPM());\r\n const isValid = this.config.allowEmptyTime ?\r\n this.isOneOfDatesIsEmpty() || isTimepickerInputValid\r\n : isTimepickerInputValid;\r\n if (!isValid) {\r\n this.isValid.emit(false);\r\n this.onChange(null);\r\n\r\n return;\r\n }\r\n\r\n this._store.dispatch(\r\n this._timepickerActions.setTime({\r\n hour: this.hours,\r\n minute: this.minutes,\r\n seconds: this.seconds,\r\n isPM: this.isPM()\r\n })\r\n );\r\n }\r\n\r\n toggleMeridian(): void {\r\n if (!this.showMeridian || !this.isEditable) {\r\n return;\r\n }\r\n\r\n const _hoursPerDayHalf = 12;\r\n this._store.dispatch(\r\n this._timepickerActions.changeHours({\r\n step: _hoursPerDayHalf,\r\n source: ''\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Write a new value to the element.\r\n */\r\n writeValue(obj?: string | Date): void {\r\n if (isValidDate(obj)) {\r\n this.resetValidation();\r\n this._store.dispatch(this._timepickerActions.writeValue(parseTime(obj)));\r\n } else if (obj == null) {\r\n this._store.dispatch(this._timepickerActions.writeValue());\r\n }\r\n }\r\n\r\n /**\r\n * Set the function to be called when the control receives a change event.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n registerOnChange(fn: (_: any) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n /**\r\n * Set the function to be called when the control receives a touch event.\r\n */\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n /**\r\n * This function is called when the control status changes to or from \"disabled\".\r\n * Depending on the value, it will enable or disable the appropriate DOM element.\r\n *\r\n * @param isDisabled\r\n */\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this._cd.markForCheck();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.timepickerSub?.unsubscribe();\r\n }\r\n\r\n private _renderTime(value?: string | Date): void {\r\n if (!value || !isValidDate(value)) {\r\n this.hours = '';\r\n this.minutes = '';\r\n this.seconds = '';\r\n this.meridian = this.meridians[0];\r\n this.meridianChange.emit(this.meridian);\r\n return;\r\n }\r\n\r\n const _value = parseTime(value);\r\n if (!_value) {\r\n return;\r\n }\r\n\r\n const _hoursPerDayHalf = 12;\r\n let _hours = _value.getHours();\r\n\r\n if (this.showMeridian) {\r\n this.meridian = this.meridians[_hours >= _hoursPerDayHalf ? 1 : 0];\r\n this.meridianChange.emit(this.meridian);\r\n _hours = _hours % _hoursPerDayHalf;\r\n // should be 12 PM, not 00 PM\r\n if (_hours === 0) {\r\n _hours = _hoursPerDayHalf;\r\n }\r\n }\r\n\r\n this.hours = padNumber(_hours);\r\n this.minutes = padNumber(_value.getMinutes());\r\n this.seconds = padNumber(_value.getUTCSeconds());\r\n }\r\n}\r\n","<table>\r\n <tbody>\r\n <tr class=\"text-center\" [hidden]=\"!showSpinners\">\r\n <!-- increment hours button-->\r\n <td>\r\n <a class=\"btn btn-link\" [class.disabled]=\"!canIncrementHours || !isEditable\"\r\n (click)=\"changeHours(hourStep)\"\r\n ><span class=\"bs-chevron bs-chevron-up\"></span></a>\r\n </td>\r\n <!-- divider -->\r\n <td *ngIf=\"showMinutes\"> </td>\r\n <!-- increment minutes button -->\r\n <td *ngIf=\"showMinutes\">\r\n <a class=\"btn btn-link\" [class.disabled]=\"!canIncrementMinutes || !isEditable\"\r\n (click)=\"changeMinutes(minuteStep)\"\r\n ><span class=\"bs-chevron bs-chevron-up\"></span></a>\r\n </td>\r\n <!-- divider -->\r\n <td *ngIf=\"showSeconds\"> </td>\r\n <!-- increment seconds button -->\r\n <td *ngIf=\"showSeconds\">\r\n <a class=\"btn btn-link\" [class.disabled]=\"!canIncrementSeconds || !isEditable\"\r\n (click)=\"changeSeconds(secondsStep)\">\r\n <span class=\"bs-chevron bs-chevron-up\"></span>\r\n </a>\r\n </td>\r\n <!-- space between -->\r\n <td *ngIf=\"showMeridian\"> </td>\r\n <!-- meridian placeholder-->\r\n <td *ngIf=\"showMeridian\"></td>\r\n </tr>\r\n <tr>\r\n <!-- hours -->\r\n <td class=\"form-group mb-3\" [class.has-error]=\"invalidHours\">\r\n <input type=\"text\" [class.is-invalid]=\"invalidHours\"\r\n class=\"form-control text-center bs-timepicker-field\"\r\n [placeholder]=\"hoursPlaceholder\"\r\n maxlength=\"2\"\r\n [readonly]=\"readonlyInput\"\r\n [disabled]=\"disabled\"\r\n [value]=\"hours\"\r\n (wheel)=\"prevDef($event);changeHours(hourStep * wheelSign($event), 'wheel')\"\r\n (keydown.ArrowUp)=\"changeHours(hourStep, 'key')\"\r\n (keydown.ArrowDown)=\"changeHours(-hourStep, 'key')\"\r\n (change)=\"updateHours($event.target)\" [attr.aria-label]=\"labelHours\"></td>\r\n <!-- divider -->\r\n <td *ngIf=\"showMinutes\"> : </td>\r\n <!-- minutes -->\r\n <td class=\"form-group mb-3\" *ngIf=\"showMinutes\" [class.has-error]=\"invalidMinutes\">\r\n <input type=\"text\" [class.is-invalid]=\"invalidMinutes\"\r\n class=\"form-control text-center bs-timepicker-field\"\r\n [placeholder]=\"minutesPlaceholder\"\r\n maxlength=\"2\"\r\n [readonly]=\"readonlyInput\"\r\n [disabled]=\"disabled\"\r\n [value]=\"minutes\"\r\n (wheel)=\"prevDef($event);changeMinutes(minuteStep * wheelSign($event), 'wheel')\"\r\n (keydown.ArrowUp)=\"changeMinutes(minuteStep, 'key')\"\r\n (keydown.ArrowDown)=\"changeMinutes(-minuteStep, 'key')\"\r\n (change)=\"updateMinutes($event.target)\" [attr.aria-label]=\"labelMinutes\">\r\n </td>\r\n <!-- divider -->\r\n <td *ngIf=\"showSeconds\"> : </td>\r\n <!-- seconds -->\r\n <td class=\"form-group mb-3\" *ngIf=\"showSeconds\" [class.has-error]=\"invalidSeconds\">\r\n <input type=\"text\" [class.is-invalid]=\"invalidSeconds\"\r\n class=\"form-control text-center bs-timepicker-field\"\r\n [placeholder]=\"secondsPlaceholder\"\r\n maxlength=\"2\"\r\n [readonly]=\"readonlyInput\"\r\n [disabled]=\"disabled\"\r\n [value]=\"seconds\"\r\n (wheel)=\"prevDef($event);changeSeconds(secondsStep * wheelSign($event), 'wheel')\"\r\n (keydown.ArrowUp)=\"changeSeconds(secondsStep, 'key')\"\r\n (keydown.ArrowDown)=\"changeSeconds(-secondsStep, 'key')\"\r\n (change)=\"updateSeconds($event.target)\" [attr.aria-label]=\"labelSeconds\">\r\n </td>\r\n <!-- space between -->\r\n <td *ngIf=\"showMeridian\"> </td>\r\n <!-- meridian -->\r\n <td *ngIf=\"showMeridian\">\r\n <button type=\"button\" class=\"btn btn-default text-center\"\r\n [disabled]=\"!isEditable || !canToggleMeridian\"\r\n [class.disabled]=\"!isEditable || !canToggleMeridian\"\r\n (click)=\"toggleMeridian()\"\r\n >{{ meridian }}\r\n </button>\r\n </td>\r\n </tr>\r\n <tr class=\"text-center\" [hidden]=\"!showSpinners\">\r\n <!-- decrement hours button-->\r\n <td>\r\n <a class=\"btn btn-link\" [class.disabled]=\"!canDecrementHours || !isEditable\"\r\n (click)=\"changeHours(-hourStep)\">\r\n <span class=\"bs-chevron bs-chevron-down\"></span>\r\n </a>\r\n </td>\r\n <!-- divider -->\r\n <td *ngIf=\"showMinutes\"> </td>\r\n <!-- decrement minutes button-->\r\n <td *ngIf=\"showMinutes\">\r\n <a class=\"btn btn-link\" [class.disabled]=\"!canDecrementMinutes || !isEditable\"\r\n (click)=\"changeMinutes(-minuteStep)\">\r\n <span class=\"bs-chevron bs-chevron-down\"></span>\r\n </a>\r\n </td>\r\n <!-- divider -->\r\n <td *ngIf=\"showSeconds\"> </td>\r\n <!-- decrement seconds button-->\r\n <td *ngIf=\"showSeconds\">\r\n <a class=\"btn btn-link\" [class.disabled]=\"!canDecrementSeconds || !isEditable\"\r\n (click)=\"changeSeconds(-secondsStep)\">\r\n <span class=\"bs-chevron bs-chevron-down\"></span>\r\n </a>\r\n </td>\r\n <!-- space between -->\r\n <td *ngIf=\"showMeridian\"> </td>\r\n <!-- meridian placeholder-->\r\n <td *ngIf=\"showMeridian\"></td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { TimepickerComponent } from './timepicker.component';\r\nimport { TimepickerActions } from './reducer/timepicker.actions';\r\nimport { TimepickerStore } from './reducer/timepicker.store';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [TimepickerComponent],\r\n exports: [TimepickerComponent],\r\n providers:[TimepickerStore]\r\n})\r\nexport class TimepickerModule {\r\n static forRoot(): ModuleWithProviders<TimepickerModule> {\r\n return {\r\n ngModule: TimepickerModule,\r\n providers: [TimepickerActions, TimepickerStore]\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TimepickerConfig","i2.TimepickerStore","i3.TimepickerActions"],"mappings":"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"}