{"version":3,"file":"uipath-angular-directives-ui-secondformat.mjs","sources":["../../../projects/angular/directives/ui-secondformat/src/ui-secondformat.directive.ts","../../../projects/angular/directives/ui-secondformat/src/ui-secondformat.module.ts","../../../projects/angular/directives/ui-secondformat/src/uipath-angular-directives-ui-secondformat.ts"],"sourcesContent":["import {\n    Duration,\n    DurationObjectUnits,\n} from 'luxon';\nimport {\n    BehaviorSubject,\n    merge,\n    Observable,\n    of,\n} from 'rxjs';\nimport {\n    distinctUntilChanged,\n    map,\n} from 'rxjs/operators';\n\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    Inject,\n    InjectionToken,\n    Input,\n    Optional,\n} from '@angular/core';\n\n/**\n * The date format options schema.\n */\nexport interface ISecondFormatOptions {\n    /**\n     * Stream that triggers a re-render of the component.\n     *\n     */\n    redraw$: Observable<void>;\n}\n\n/**\n * `ui-secondformat` injection token for the `options`.\n *\n */\nexport const UI_SECONDFORMAT_OPTIONS = new InjectionToken<Observable<void>>('UiSecondFormat options.');\n\n/**\n * A directive that formats a given number of `seconds` into a human readable format.\n *\n * eg:\n * For input `61` -> output `1 minute` with the tooltip PT1M1S.\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@Component({\n    selector: 'ui-secondformat',\n    template: `<span [matTooltip]=\"(tooltip$ | async) ?? ''\">{{ text$ | async }}</span>`,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class UiSecondFormatDirective {\n    /**\n     * The number of `seconds` that need to be formatted.\n     *\n     */\n    @Input()\n    get seconds() { return this._seconds$.value; }\n    set seconds(seconds: number | null) { this._seconds$.next(seconds); }\n\n    /**\n     * @internal\n     */\n    tooltip$: Observable<string | undefined>;\n\n    /**\n     * @internal\n     */\n    text$: Observable<string>;\n\n    protected _text?: HTMLElement;\n\n    private _seconds$ = new BehaviorSubject<number | null>(null);\n\n    private _units: (keyof DurationObjectUnits)[] = ['years', 'months', 'days', 'hours', 'minutes', 'seconds', 'milliseconds'];\n\n    /**\n     * @ignore\n     */\n    constructor(\n        @Inject(UI_SECONDFORMAT_OPTIONS)\n        @Optional()\n        options: ISecondFormatOptions,\n    ) {\n        options = options || {};\n        const redraw$ = options.redraw$ || of(null);\n\n        const seconds$ = merge(\n            redraw$,\n            this._seconds$.pipe(distinctUntilChanged()),\n        ).pipe(\n            map(() => this.seconds),\n            map(this._mapSecondsToDuration),\n        );\n\n        this.text$ = seconds$.pipe(\n            map(this._mapDurationToText),\n        );\n\n        this.tooltip$ = seconds$.pipe(\n            map(this._mapDurationToTooltip),\n        );\n    }\n\n    private _mapSecondsToDuration = (seconds: number | null) => {\n        if (seconds == null) {\n            return null;\n        }\n\n        return Duration.fromObject({ seconds });\n    };\n\n    private _mapDurationToText = (duration: Duration | null) => {\n        if (duration == null) {\n            return '';\n        }\n\n        const rescaledDuration = duration.rescale();\n\n        const largestUnit = this._getDurationLargestUnit(rescaledDuration);\n\n        return Duration.fromObject({ [largestUnit]: rescaledDuration[largestUnit] }).toHuman();\n    };\n\n    private _mapDurationToTooltip = (duration: Duration | null) => {\n        if (duration == null) {\n            return '';\n        }\n\n        return duration.shiftTo('hours', 'minutes', 'seconds').toISO();\n    };\n\n    private _getDurationLargestUnit(duration: Duration) {\n        return this._units.find(unit => !!duration[unit]) ?? 'seconds';\n    }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { UiSecondFormatDirective } from './ui-secondformat.directive';\n\n@NgModule({\n    imports: [CommonModule, MatTooltipModule],\n    declarations: [UiSecondFormatDirective],\n    exports: [UiSecondFormatDirective],\n})\nexport class UiSecondFormatModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}