{"version":3,"file":"uipath-angular-directives-ui-dateformat.mjs","sources":["../../../projects/angular/directives/ui-dateformat/src/ui-dateformat.directive.ts","../../../projects/angular/directives/ui-dateformat/src/ui-dateformat.module.ts","../../../projects/angular/directives/ui-dateformat/src/uipath-angular-directives-ui-dateformat.ts"],"sourcesContent":["import {\n    DateTime,\n    DateTimeFormatOptions,\n} from 'luxon';\nimport {\n    interval,\n    merge,\n    Observable,\n    of,\n} from 'rxjs';\nimport {\n    delay,\n    filter,\n    take,\n    takeUntil,\n} from 'rxjs/operators';\n\nimport {\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    Inject,\n    InjectionToken,\n    Input,\n    NgZone,\n    Optional,\n    Renderer2,\n} from '@angular/core';\nimport { UiFormatDirective } from '@uipath/angular/directives/internal';\n\n/**\n * The date format display type options.\n */\nexport type DisplayType = 'absolute' | 'relative';\n\n/**\n * Timezone resolver type.\n */\nexport type TimezoneResolver = () => string;\n\n/**\n * The date format options schema.\n */\nexport interface IDateFormatOptions {\n    /**\n     * Stream that triggers a re-render of the component.\n     *\n     */\n    redraw$: Observable<void>;\n    /**\n     * The timezone in which the date should be displayed.\n     *\n     */\n    timezone: string | TimezoneResolver;\n    /**\n     * Overwrites the default content type.\n     *\n     */\n    contentType?: DisplayType;\n    /**\n     * Overwrites the default title type.\n     *\n     */\n    titleType?: DisplayType;\n    /**\n     * Overwrites the default dateformat.\n     *\n     */\n    format?: string | DateTimeFormatOptions;\n}\n\n/**\n * `ui-dateformat` injection token for the `options`.\n *\n */\nexport const UI_DATEFORMAT_OPTIONS = new InjectionToken<IDateFormatOptions>('UiDateFormat options.');\n\n/**\n * @ignore\n */\nconst RELATIVE_TIME_UPDATE_INTERVAL = 10000;\n\nexport const resolveTimezone = (options: IDateFormatOptions) => {\n    const type = typeof options.timezone;\n\n    switch (type) {\n        case 'string':\n            return (options.timezone as string);\n        case 'function':\n            return (options.timezone as TimezoneResolver)();\n        default:\n            return '';\n    }\n};\n\n/**\n * A directive that formats a given `Date` input in a `relative` or `absolute` format.\n *\n * Depends On:\n * - [luxon](https://www.npmjs.com/package/luxon)\n * - [humanize-duration](https://www.npmjs.com/package/humanize-duration)\n *\n * @export\n */\n@Directive({\n    selector: '[uiDateFormat], ui-dateformat',\n})\nexport class UiDateFormatDirective extends UiFormatDirective {\n    /**\n     * What format should the content have, `absolute` or `relative`.\n     *\n     */\n    @Input()\n    contentType!: DisplayType;\n    /**\n     * What format should the `[data-title]` attribute have, `absolute` or `relative`.\n     *\n     * This title attribute is exposed in order to easily integrate with `tooltip` components.\n     *\n     * eg:\n     * `<ui-dateformat #ref [matTooltip]=\"ref.dataset['title']\"></ui-dateformat>`\n     */\n    @Input()\n    titleType!: DisplayType;\n    /**\n     * The `timezone` for which the current date is displayed.\n     *\n     */\n    @Input()\n    timezone?: string;\n    /**\n     * The input `Date` that needs to be formatted.\n     *\n     */\n    @Input()\n    set date(date: Date | string | undefined | null) {\n        date = date ?? undefined;\n\n        if (this._isDifferentValue(date, this._date)) {\n            const initial = this._date === undefined;\n            this._date = date;\n\n            if (initial) {\n                this._zone.runOutsideAngular(() => {\n                    merge(\n                        this._zone.onMicrotaskEmpty,\n                        // IE doesn't play nicely with task empty only\n                        this._zone.onStable,\n                    )\n                        .pipe(\n                            take(1),\n                            // hack needed for initial render of mat-tooltip\n                            // if not done only on initial may create a change detection loop\n                            // seen on Edge ~107, cannot point to the exact root cause why\n                            delay(0),\n                        )\n                        .subscribe(() => {\n                            this._cd.markForCheck();\n                        });\n                });\n            }\n        }\n    }\n    get date() {\n        return this._date;\n    }\n    /**\n     * The `luxon` format defaults to `DateTime.DATETIME_SHORT_WITH_SECONDS.\n     *\n     */\n    @Input()\n    dateFormat!: string | DateTimeFormatOptions;\n\n    protected _text?: HTMLElement;\n\n    private get _relativeTime() {\n        if (!this.date) { return ''; }\n        if (!(this.date instanceof Date)) { return this.date; }\n\n        const relativeTime = DateTime.fromJSDate(this.date)\n                .toRelative();\n\n        return relativeTime ?? '';\n    }\n\n    private get _absoluteTime() {\n        if (!this.date) { return ''; }\n        if (!(this.date instanceof Date)) { return this.date; }\n\n        const time = DateTime\n            .fromJSDate(this.date, {\n                zone: this.timezone ?? resolveTimezone(this._options),\n            });\n\n        const absoluteTime = this._isStringFormat(this.dateFormat)\n            ? time.toFormat(this.dateFormat)\n            : time.toLocaleString(this.dateFormat);\n\n        return absoluteTime ?? '';\n    }\n\n    private _lastAbsoluteTime?: string;\n    private _lastRelativeTime?: string;\n    private _lastContentType?: DisplayType;\n    private _lastTitleType?: DisplayType;\n    private _date?: Date | string;\n\n    /**\n     * @ignore\n     */\n    constructor(\n        @Inject(UI_DATEFORMAT_OPTIONS)\n        @Optional()\n        private _options: IDateFormatOptions,\n        private _cd: ChangeDetectorRef,\n        private _zone: NgZone,\n        renderer: Renderer2,\n        elementRef: ElementRef,\n    ) {\n        super(\n            renderer,\n            elementRef,\n        );\n\n        const defaultFormat = DateTime.DATETIME_SHORT_WITH_SECONDS;\n\n        this._options = _options || {};\n        this.dateFormat = this._options.format ?? defaultFormat;\n        this.contentType = this._options.contentType ?? 'absolute';\n        this.titleType = this._options.titleType ?? 'absolute';\n\n        const redraw$ = this._options.redraw$ || of(null);\n\n        merge(\n            redraw$,\n            this._redraw$,\n            interval(RELATIVE_TIME_UPDATE_INTERVAL).pipe(\n                filter(() =>\n                    this._isRelative(this.titleType) ||\n                    this._isRelative(this.contentType),\n                ),\n            ),\n        )\n            .pipe(\n                takeUntil(this._destroyed$),\n            )\n            .subscribe(() => this._evaluate());\n    }\n\n    private _evaluate() {\n        this._updateTitle();\n        this._updateContent();\n\n        this._lastAbsoluteTime = this._absoluteTime;\n        this._lastRelativeTime = this._relativeTime;\n        this._lastContentType = this.contentType;\n        this._lastTitleType = this.titleType;\n    }\n\n    private _updateContent() {\n        if (\n            this._lastContentType === this.contentType &&\n            !this._timeForTypeChanged(this.contentType)\n        ) { return; }\n\n        const text = ` ${this._timeForType(this.contentType)} `;\n\n        if (!this._text) {\n            this._text = this._renderer.createText(text);\n            this._renderer.appendChild(this._elementRef.nativeElement, this._text);\n        } else {\n            this._renderer.setValue(this._text, text);\n        }\n    }\n\n    private _updateTitle() {\n        if (\n            this._lastTitleType === this.titleType &&\n            !this._timeForTypeChanged(this.titleType)\n        ) { return; }\n\n        this._renderer.setAttribute(this._elementRef.nativeElement, 'data-title', this._timeForType(this.titleType));\n    }\n\n    private _isStringFormat(format: string | DateTimeFormatOptions): format is string {\n        return typeof format === 'string';\n    }\n\n    private _isRelative = (type: DisplayType) => type === 'relative';\n\n    private _timeForTypeChanged = (type: DisplayType) =>\n        this._isRelative(type) ?\n            this._lastRelativeTime !== this._relativeTime :\n            this._lastAbsoluteTime !== this._absoluteTime;\n\n    private _timeForType = (type: DisplayType) => this._isRelative(type) ?\n        this._relativeTime :\n        this._absoluteTime;\n\n    private _isDifferentValue = (value: Date | string | undefined, compareValue: Date | string | undefined) => {\n        if (value instanceof Date && compareValue instanceof Date) {\n            return value.getTime() !== compareValue.getTime();\n        }\n\n        return value !== compareValue;\n    };\n}\n","import { NgModule } from '@angular/core';\n\nimport { UiDateFormatDirective } from './ui-dateformat.directive';\n\n@NgModule({\n    declarations: [UiDateFormatDirective],\n    exports: [UiDateFormatDirective],\n})\nexport class UiDateFormatModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;AAuEA;;;AAGG;MACU,qBAAqB,GAAG,IAAI,cAAc,CAAqB,uBAAuB,EAAE;AAErG;;AAEG;AACH,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAErC,MAAM,eAAe,GAAG,CAAC,OAA2B,KAAI;AAC3D,IAAA,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,QAAQ,CAAC;AAErC,IAAA,QAAQ,IAAI;AACR,QAAA,KAAK,QAAQ;YACT,OAAQ,OAAO,CAAC,QAAmB,CAAC;AACxC,QAAA,KAAK,UAAU;AACX,YAAA,OAAQ,OAAO,CAAC,QAA6B,EAAE,CAAC;AACpD,QAAA;AACI,YAAA,OAAO,EAAE,CAAC;AACjB,KAAA;AACL,CAAC,CAAC;AAEF;;;;;;;;AAQG;AAIG,MAAO,qBAAsB,SAAQ,iBAAiB,CAAA;AAuBxD;;;AAGG;IACH,IACI,IAAI,CAAC,IAAsC,EAAA;QAC3C,IAAI,GAAG,IAAI,KAAJ,IAAA,IAAA,IAAI,cAAJ,IAAI,GAAI,SAAS,CAAC;QAEzB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;AACzC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAElB,YAAA,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;AAC9B,oBAAA,KAAK,CACD,IAAI,CAAC,KAAK,CAAC,gBAAgB;;AAE3B,oBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CACtB;AACI,yBAAA,IAAI,CACD,IAAI,CAAC,CAAC,CAAC;;;;oBAIP,KAAK,CAAC,CAAC,CAAC,CACX;yBACA,SAAS,CAAC,MAAK;AACZ,wBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,qBAAC,CAAC,CAAC;AACX,iBAAC,CAAC,CAAC;AACN,aAAA;AACJ,SAAA;KACJ;AACD,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;AAUD,IAAA,IAAY,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,EAAE,CAAC;AAAE,SAAA;QAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;AAAE,SAAA;QAEvD,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,aAAA,UAAU,EAAE,CAAC;AAEtB,QAAA,OAAO,YAAY,KAAZ,IAAA,IAAA,YAAY,cAAZ,YAAY,GAAI,EAAE,CAAC;KAC7B;AAED,IAAA,IAAY,aAAa,GAAA;;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,EAAE,CAAC;AAAE,SAAA;QAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;AAAE,SAAA;QAEvD,MAAM,IAAI,GAAG,QAAQ;AAChB,aAAA,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;YACnB,IAAI,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxD,SAAA,CAAC,CAAC;QAEP,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;cACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;cAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE3C,QAAA,OAAO,YAAY,KAAZ,IAAA,IAAA,YAAY,cAAZ,YAAY,GAAI,EAAE,CAAC;KAC7B;AAQD;;AAEG;IACH,WAGY,CAAA,QAA4B,EAC5B,GAAsB,EACtB,KAAa,EACrB,QAAmB,EACnB,UAAsB,EAAA;;AAEtB,QAAA,KAAK,CACD,QAAQ,EACR,UAAU,CACb,CAAC;AATM,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAoB;AAC5B,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AACtB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QAyEjB,IAAW,CAAA,WAAA,GAAG,CAAC,IAAiB,KAAK,IAAI,KAAK,UAAU,CAAC;AAEzD,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAAC,IAAiB,KAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,aAAa;AAC7C,YAAA,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,aAAa,CAAC;AAE9C,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,IAAiB,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAChE,IAAI,CAAC,aAAa;YAClB,IAAI,CAAC,aAAa,CAAC;QAEf,IAAA,CAAA,iBAAiB,GAAG,CAAC,KAAgC,EAAE,YAAuC,KAAI;AACtG,YAAA,IAAI,KAAK,YAAY,IAAI,IAAI,YAAY,YAAY,IAAI,EAAE;gBACvD,OAAO,KAAK,CAAC,OAAO,EAAE,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;AACrD,aAAA;YAED,OAAO,KAAK,KAAK,YAAY,CAAC;AAClC,SAAC,CAAC;AAjFE,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,2BAA2B,CAAC;AAE3D,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,aAAa,CAAC;QACxD,IAAI,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,UAAU,CAAC;QAC3D,IAAI,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,UAAU,CAAC;AAEvD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAElD,KAAK,CACD,OAAO,EACP,IAAI,CAAC,QAAQ,EACb,QAAQ,CAAC,6BAA6B,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,MACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CACrC,CACJ,CACJ;AACI,aAAA,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAC9B;aACA,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;KAC1C;IAEO,SAAS,GAAA;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;AAEtB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC;AAC5C,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC;AAC5C,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;KACxC;IAEO,cAAc,GAAA;AAClB,QAAA,IACI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,WAAW;YAC1C,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,EAC7C;YAAE,OAAO;AAAE,SAAA;AAEb,QAAA,MAAM,IAAI,GAAG,CAAI,CAAA,EAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA,CAAA,CAAG,CAAC;AAExD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1E,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7C,SAAA;KACJ;IAEO,YAAY,GAAA;AAChB,QAAA,IACI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,SAAS;YACtC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAC3C;YAAE,OAAO;AAAE,SAAA;QAEb,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;KAChH;AAEO,IAAA,eAAe,CAAC,MAAsC,EAAA;AAC1D,QAAA,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC;KACrC;;AAnLQ,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,kBAwGlB,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sGAxGxB,qBAAqB,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,+BAA+B;iBAC5C,CAAA;;;8BAyGQ,MAAM;+BAAC,qBAAqB,CAAA;;8BAC5B,QAAQ;;yBAnGb,WAAW,EAAA,CAAA;sBADV,KAAK;gBAWN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAON,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAOF,IAAI,EAAA,CAAA;sBADP,KAAK;gBAqCN,UAAU,EAAA,CAAA;sBADT,KAAK;;;MClKG,kBAAkB,CAAA;;+GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,YAAA,EAAA,CAHZ,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAC1B,qBAAqB,CAAA,EAAA,CAAA,CAAA;gHAEtB,kBAAkB,EAAA,CAAA,CAAA;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,YAAY,EAAE,CAAC,qBAAqB,CAAC;oBACrC,OAAO,EAAE,CAAC,qBAAqB,CAAC;iBACnC,CAAA;;;ACPD;;AAEG;;;;"}