{"version":3,"file":"jfilgaira-angular-material-timepicker.mjs","sources":["../../../projects/@jfilgaira/angular-material-timepicker/src/lib/angular-material-timepicker-base.ts","../../../projects/@jfilgaira/angular-material-timepicker/src/lib/angular-material-timepicker.animations.ts","../../../projects/@jfilgaira/angular-material-timepicker/src/lib/pipes/hour-format.pipe.ts","../../../projects/@jfilgaira/angular-material-timepicker/src/lib/pipes/minute-format.pipe.ts","../../../projects/@jfilgaira/angular-material-timepicker/src/lib/angular-material-timepicker.component.ts","../../../projects/@jfilgaira/angular-material-timepicker/src/lib/angular-material-timepicker.component.html","../../../projects/@jfilgaira/angular-material-timepicker/src/lib/angular-material-timepicker.directive.ts","../../../projects/@jfilgaira/angular-material-timepicker/src/lib/material.module.ts","../../../projects/@jfilgaira/angular-material-timepicker/src/lib/test-amt-directive.component.ts","../../../projects/@jfilgaira/angular-material-timepicker/src/lib/angular-material-timepicker.module.ts","../../../projects/@jfilgaira/angular-material-timepicker/src/public-api.ts","../../../projects/@jfilgaira/angular-material-timepicker/src/jfilgaira-angular-material-timepicker.ts"],"sourcesContent":["import { AnimationEvent } from \"@angular/animations\";\nimport { Directive, EventEmitter, HostBinding, HostListener, Output } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n@Directive()\nexport class AngularMaterialTimepickerBase\n{\n    /** Defines the default class for the component */\n    @HostBinding('class') class = \"amt\"\n\n    /** Notifier for the click on an hour */\n    hourClicked = new EventEmitter<string>();\n\n    /** Notifier for the click on a minute */\n    @Output() minuteClicked = new EventEmitter<string>();\n\n    /** Hours array that will be used to build the html nodes */\n    hours: Array<number> = [];\n\n    /** Minutes array that will be used to build the html nodes */\n    minutes: Array<number> = [];\n\n    /** Current state of the panel animation. */\n    _panelAnimationState: 'void' | 'enter' = 'void';\n\n    /** Whether the menu is animating. */\n    _isAnimating!: boolean;\n\n    /** Emits whenever an animation on the menu completes. */\n    readonly _animationDone = new Subject<AnimationEvent>();\n\n    /** Callback that is invoked when the panel animation completes. */\n    _onAnimationDone(event: AnimationEvent)\n    {\n        this._animationDone.next(event);\n        this._isAnimating = false;\n    }\n\n    /** Starts the enter animation. */\n    _startAnimation()\n    {\n        this._panelAnimationState = 'enter';\n    }\n\n    /** Resets the panel animation to its initial state. */\n    _resetAnimation()\n    {\n        this._panelAnimationState = 'void';\n    }\n\n}","/** This piece of code is extracted from the Angular Material MatMenu Github */\n\nimport\n{\n    trigger,\n    state,\n    style,\n    animate,\n    transition,\n    AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the angular-material-timepicker component.\n * Animation duration and timing values are based on:\n * https://material.io/guidelines/components/menus.html#menus-usage\n */\nexport const timepickerAnimations: {\n    readonly transformTimepicker: AnimationTriggerMetadata;\n    readonly fadeInItems: AnimationTriggerMetadata;\n} = {\n    /**\n     * This animation controls the timepicker panel's entry and exit from the page.\n     *\n     * When the timepicker panel is added to the DOM, it scales in and fades in its border.\n     *\n     * When the timepicker panel is removed from the DOM, it simply fades out after a brief\n     * delay to display the ripple.\n     */\n    transformTimepicker: trigger('transformTimepicker', [\n        state(\n            'void',\n            style({\n                opacity: 0,\n                transform: 'scale(0.8)',\n            }),\n        ),\n        transition(\n            'void => enter',\n            animate(\n                '120ms cubic-bezier(0, 0, 0.2, 1)',\n                style({\n                    opacity: 1,\n                    transform: 'scale(1)',\n                }),\n            ),\n        ),\n        transition('* => void', animate('100ms 25ms linear', style({ opacity: 0 }))),\n    ]),\n\n    /**\n     * This animation fades in the background color and content of the menu panel\n     * after its containing element is scaled in.\n     */\n    fadeInItems: trigger('fadeInItems', [\n        state('showing', style({ opacity: 1 })),\n        transition('void => *', [\n            style({ opacity: 0 }),\n            animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'),\n        ]),\n    ]),\n};","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'hourFormat'\n})\nexport class HourFormatPipe implements PipeTransform\n{\n    transform(value: number): string\n    {\n        const _value = value ? value.toString() : \"00\";\n        return _value.length == 1 ? `0${ _value }` : _value;\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'minuteFormat'\n})\nexport class MinuteFormatPipe implements PipeTransform\n{\n\n    transform(value: number): string\n    {\n        const _value = value.toString();\n        return _value.length == 1 ? `0${ _value }` : _value;\n    }\n\n}\n","import { AfterViewInit, Component, OnChanges, SimpleChanges } from '@angular/core';\nimport { take } from 'rxjs';\nimport { AngularMaterialTimepickerBase } from './angular-material-timepicker-base';\nimport { timepickerAnimations } from './angular-material-timepicker.animations';\nimport { HourFormatPipe } from './pipes/hour-format.pipe';\nimport { MinuteFormatPipe } from './pipes/minute-format.pipe';\nimport { AngularMaterialTimepickerMode } from './types/mode-type';\n\n@Component({\n    selector: 'angular-material-timepicker',\n    templateUrl: './angular-material-timepicker.component.html',\n    styleUrls: ['./angular-material-timepicker.component.scss'],\n    animations: [timepickerAnimations.transformTimepicker, timepickerAnimations.fadeInItems],\n})\nexport class AngularMaterialTimepickerComponent extends AngularMaterialTimepickerBase implements OnChanges, AfterViewInit\n{\n    /** Mode for building the hour structure */\n    mode: AngularMaterialTimepickerMode = 'pm';\n\n    /** The current hour selected by the component to be shown */\n    hour = \"00\";\n\n    /** The current hour selected by the component to be shown */\n    minute = \"00\";\n\n    constructor()\n    {\n        super();\n        this.buildHours();\n\n        const _default = new Date();\n        const pipe = new HourFormatPipe();\n        this.hour = pipe.transform(_default.getHours());\n        this.minute = pipe.transform(_default.getMinutes());\n\n        // We always have 60 minutes 😂;\n        this.minutes = Array.from(Array(60).keys());\n    }\n\n    ngAfterViewInit(): void\n    {\n        /**\n         * Get the current hour / minute div element and do a scroll in order to show them to the user.\n         *\n         * We do that because if the input field (which fires the component from the directive) has a valid time format (HH:MM) the component is pre-populated with that data. So on that point, if we have a value different of \"00\" on the hour / minute variable, the code below shows that to the user.\n         */\n        const currentHourDiv = document.querySelector<HTMLDivElement>('.amt-hour.amt-current');\n        const currentMinuteDiv = document.querySelector<HTMLDivElement>('.amt-minute.amt-current');\n        this._animationDone\n            .pipe(take(1))\n            .subscribe(() =>\n            {\n                if (currentHourDiv!.offsetTop > 0)\n                    currentHourDiv!.parentElement?.scrollTo({\n                        top: currentHourDiv!.offsetTop,\n                        behavior: \"smooth\"\n                    });\n\n                if (currentMinuteDiv!.offsetTop > 0)\n                    currentMinuteDiv!.parentElement?.scrollTo({\n                        top: currentMinuteDiv!.offsetTop,\n                        behavior: \"smooth\"\n                    })\n            });\n    }\n\n    ngOnChanges(changes: SimpleChanges): void\n    {\n        if (changes[\"mode\"])\n        {\n            this.buildHours(changes[\"mode\"].currentValue);\n        }\n    }\n\n    /** Builds the hour structure taking into account the mode */\n    private buildHours(mode?: AngularMaterialTimepickerMode): void\n    {\n        const _mode = mode || this.mode;\n        this.hours = Array.from(Array(_mode == 'am' ? 12 : 24).keys());\n    }\n\n    /** Sets the current hour or minutes once the user did clicked the view */\n    public elementClicked(type: 'hour' | 'minute', value: number): void\n    {\n        let pipe: HourFormatPipe | MinuteFormatPipe;\n        switch (type)\n        {\n            case 'hour':\n                pipe = new HourFormatPipe();\n                const _hour = pipe.transform(value);\n                this.hour = _hour;\n                this.hourClicked.emit(_hour);\n                break;\n            case 'minute':\n                pipe = new MinuteFormatPipe();\n                const _minute = pipe.transform(value);\n                this.minute = _minute;\n                this.minuteClicked.emit(_minute);\n                break;\n            default:\n                pipe = new HourFormatPipe();\n                this.hourClicked.emit(pipe.transform(value));\n                break;\n        }\n    }\n}\n","<div\n  class=\"amt-container\"\n  [@transformTimepicker]=\"_panelAnimationState\"\n  (@transformTimepicker.done)=\"_onAnimationDone($event)\"\n>\n  <div class=\"amt-hours\">\n    <div\n      matRipple\n      (click)=\"elementClicked('hour', _hour)\"\n      class=\"amt-hour\"\n      [ngClass]=\"{ 'amt-current': (_hour | hourFormat) == hour }\"\n      *ngFor=\"let _hour of hours\"\n      #tplHour\n    >\n      {{ _hour | hourFormat }}\n    </div>\n  </div>\n  <div class=\"amt-minutes\">\n    <div\n      matRipple\n      (click)=\"elementClicked('minute', _minute)\"\n      class=\"amt-minute\"\n      [ngClass]=\"{ 'amt-current': (_minute | minuteFormat) == minute }\"\n      *ngFor=\"let _minute of minutes\"\n    >\n      {{ _minute | minuteFormat }}\n    </div>\n  </div>\n</div>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ComponentRef, Directive, HostListener, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\nimport { combineLatest, concatMap, map, startWith, Subject, take, takeUntil, tap } from 'rxjs';\nimport { AngularMaterialTimepickerComponent } from './angular-material-timepicker.component';\n\n@Directive({\n    selector: 'input[angularMaterialTimepicker]',\n    providers: [AngularMaterialTimepickerComponent]\n})\nexport class AngularMaterialTimepickerDirective implements OnDestroy\n{\n    private componentRef?: ComponentRef<AngularMaterialTimepickerComponent>;\n    private notifier = new Subject<void>();\n    private origin?: HTMLInputElement;\n\n    constructor(\n        public viewContainerRef: ViewContainerRef,\n        public overlay: Overlay\n    ) { }\n\n    public ngOnDestroy(): void\n    {\n        if (this.componentRef)\n        {\n            this.componentRef.destroy();\n            this.notifier.next();\n            this.notifier.complete();\n        }\n    }\n\n    @HostListener('focus') onFocus()\n    {\n        this.loadComponent();\n    }\n\n    /** Pop ups an instance of AMT using CDK Overlay. Also it's attached to the origin input. */\n    private loadComponent()\n    {\n        if (!this.componentRef)\n        {\n            this.origin = this.viewContainerRef.element.nativeElement\n            const overlayRef = this.overlay.create({\n                positionStrategy: this.overlay\n                    .position()\n                    .flexibleConnectedTo(this.origin!)\n                    .withPositions([{\n                        originX: 'start',\n                        originY: 'bottom',\n                        overlayX: 'start',\n                        overlayY: 'top',\n                    }]),\n                scrollStrategy: this.overlay.scrollStrategies.block(),\n                hasBackdrop: true,\n                backdropClass: \"amt-overlay\",\n            });\n            const amtPortal = new ComponentPortal(AngularMaterialTimepickerComponent);\n            this.componentRef = overlayRef.attach(amtPortal);\n\n            // Trigger animations.\n            this.componentRef.instance._startAnimation();\n\n            // Close\n            overlayRef.backdropClick()\n                .pipe(\n                    take(1),\n                    tap(\n                        () =>\n                        {\n                            this.notifier.next();\n                            this.componentRef?.instance._resetAnimation(); // Fires the animation;\n                        }\n                    ),\n                    concatMap(() => this.componentRef!.instance._animationDone)\n                )\n                .subscribe(\n                    () =>\n                    {\n                        overlayRef.dispose();\n                        this.componentRef = undefined; // if we don't do that, it will still pointing to destroyed instance.\n                    }\n                );\n\n            this.setTimeOnPickerIfNeeded();\n            this.setupListeners();\n        }\n    }\n\n    /** Retrieves a valid hour/minutes time format from the origin input. If the value is not valid, returns an empty array. */\n    private getOriginInputHourMinutes(): string[]\n    {\n        const _default = this.origin?.value\n        if (_default && _default.match(\"^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$\"))\n        {\n            return _default.split(\":\");\n        }\n\n        return [];\n    }\n\n    /** Sets the origin input time to the component instance if needed and fires change detection */\n    private setTimeOnPickerIfNeeded(): void\n    {\n        const currentOriginTime = this.getOriginInputHourMinutes();\n        if (currentOriginTime.length > 0)\n        {\n            this.componentRef!.instance.hour = currentOriginTime[0];\n            this.componentRef!.instance.minute = currentOriginTime[1];\n            this.componentRef!.changeDetectorRef.detectChanges();\n        }\n    }\n\n    /**\n     * Here we merged both emiters (hour and minutes) with combineLatest in order to generate a valid hour format for the input.\n     */\n    private setupListeners(): void\n    {\n        const _instance = this.componentRef!.instance;\n        const currentOriginTime = this.getOriginInputHourMinutes();\n        combineLatest(\n            [\n                _instance.hourClicked\n                    .pipe(startWith(currentOriginTime?.[0] || _instance.hour)),\n                _instance.minuteClicked\n                    .pipe(startWith(currentOriginTime?.[1] || _instance.minute))\n            ]\n        )\n            .pipe(\n                takeUntil(this.notifier),\n                map(batch => `${ batch[0] }:${ batch[1] }`)\n            )\n            .subscribe(\n                res =>\n                {\n                    this.origin!.value = res;\n                }\n            );\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatRippleModule } from '@angular/material/core';\nimport { OverlayModule } from '@angular/cdk/overlay';\n\n\n@NgModule({\n    declarations: [],\n    imports: [\n        CommonModule,\n        MatRippleModule,\n        OverlayModule\n    ],\n    exports: [\n        MatRippleModule,\n        OverlayModule\n    ]\n})\nexport class MaterialModule { }\n","import { Component } from \"@angular/core\";\n\n@Component({\n    template: `<input type=\"text\" angularMaterialTimepicker>`\n})\nexport class TestAMTDirectiveComponent\n{\n}","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AngularMaterialTimepickerComponent } from './angular-material-timepicker.component';\nimport { HourFormatPipe } from './pipes/hour-format.pipe';\nimport { MaterialModule } from './material.module';\nimport { MinuteFormatPipe } from './pipes/minute-format.pipe';\nimport { AngularMaterialTimepickerDirective } from './angular-material-timepicker.directive';\nimport { TestAMTDirectiveComponent } from './test-amt-directive.component';\n\n@NgModule({\n    declarations: [\n        AngularMaterialTimepickerComponent,\n        HourFormatPipe,\n        MinuteFormatPipe,\n        AngularMaterialTimepickerDirective,\n        TestAMTDirectiveComponent,\n    ],\n    imports: [\n        MaterialModule,\n        CommonModule\n    ],\n    exports: [\n        AngularMaterialTimepickerDirective\n    ]\n})\nexport class AngularMaterialTimepickerModule { }\n","/*\n * Public API Surface of angular-material-timepicker\n */\n\nexport * from './lib/angular-material-timepicker.component';\nexport * from './lib/angular-material-timepicker.directive';\nexport * from './lib/angular-material-timepicker.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.HourFormatPipe","i4.MinuteFormatPipe","i1","i1.AngularMaterialTimepickerDirective"],"mappings":"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"}