ngx-lift 1.7.3 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,26 +4,26 @@ import { isPromise } from '../utils/is-promise.util';
4
4
  export function poll(options) {
5
5
  const timerEmitValue = '__timer__emission__';
6
6
  const timer$ = timer(0, options.interval).pipe(map((i) => `${timerEmitValue}${i}`));
7
- const trigger$ = options.trigger === undefined
7
+ const trigger$ = options.forceRefresh === undefined
8
8
  ? EMPTY
9
- : isObservable(options.trigger)
10
- ? options.trigger
11
- : toObservable(options.trigger);
12
- let inputByTrigger = undefined; // if trigger is not provided, input will be undefined
9
+ : isObservable(options.forceRefresh)
10
+ ? options.forceRefresh
11
+ : toObservable(options.forceRefresh);
12
+ let inputByForceRefresh = undefined; // if forceRefresh is not provided, input will be undefined
13
13
  return merge(trigger$, timer$).pipe(exhaustMap((input) => {
14
- // input can be either by trigger or timer
14
+ // input can be either by forceRefresh or timer
15
15
  const isTimerTrigger = typeof input === 'string' && input.includes(timerEmitValue);
16
16
  const isManualTrigger = !isTimerTrigger;
17
17
  if (isManualTrigger) {
18
- inputByTrigger = input;
18
+ inputByForceRefresh = input;
19
19
  }
20
- // build params by trigger input
20
+ // build params by input
21
21
  // if paramsBuilder is provided, params will be the value of this function call
22
- // if paramsBuilder is not provided, params will be the value emitted by the trigger
23
- const params = options.paramsBuilder ? options.paramsBuilder(inputByTrigger) : inputByTrigger;
24
- // NOTE: using exhaustMap will NOT emit ${timerEmitValue}0 if trigger is not provided
25
- // using concatMap will emit ${timerEmitValue}0 if trigger is not provided
26
- const isFirstRequest = input === `${timerEmitValue}0`; // timer first emission when trigger is not provided
22
+ // if paramsBuilder is not provided, params will be the value emitted by the forceRefresh
23
+ const params = options.paramsBuilder ? options.paramsBuilder(inputByForceRefresh) : inputByForceRefresh;
24
+ // NOTE: using exhaustMap will NOT emit ${timerEmitValue}0 if forceRefresh is not provided
25
+ // using concatMap will emit ${timerEmitValue}0 if forceRefresh is not provided
26
+ const isFirstRequest = input === `${timerEmitValue}0`; // timer first emission when forceRefresh is not provided
27
27
  const shouldShowLoading = isManualTrigger || isFirstRequest;
28
28
  const fnResult = options.pollingFn(params);
29
29
  const fnResult$ = isObservable(fnResult) ? fnResult : isPromise(fnResult) ? from(fnResult) : of(fnResult);
@@ -34,4 +34,4 @@ export function poll(options) {
34
34
  return observable$;
35
35
  }), share());
36
36
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC5vcGVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvb3BlcmF0b3JzL3BvbGwub3BlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFDTCxVQUFVLEVBQ1YsS0FBSyxFQUNMLFVBQVUsRUFDVixJQUFJLEVBQ0osWUFBWSxFQUNaLEdBQUcsRUFDSCxLQUFLLEVBRUwsRUFBRSxFQUNGLEtBQUssRUFDTCxTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBa0NuRCxNQUFNLFVBQVUsSUFBSSxDQUFjLE9BS2pDO0lBQ0MsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUM7SUFDN0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXBGLE1BQU0sUUFBUSxHQUNaLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUztRQUMzQixDQUFDLENBQUMsS0FBSztRQUNQLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUM3QixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU87WUFDakIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFdEMsSUFBSSxjQUFjLEdBQXNCLFNBQVMsQ0FBQyxDQUFDLHNEQUFzRDtJQUV6RyxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUNqQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNuQiwwQ0FBMEM7UUFDMUMsTUFBTSxjQUFjLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxjQUFjLENBQUM7UUFDeEMsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixjQUFjLEdBQUcsS0FBYyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsK0VBQStFO1FBQy9FLG9GQUFvRjtRQUNwRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGNBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBRXZHLHFGQUFxRjtRQUNyRiwwRUFBMEU7UUFDMUUsTUFBTSxjQUFjLEdBQUcsS0FBSyxLQUFLLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQyxvREFBb0Q7UUFDM0csTUFBTSxpQkFBaUIsR0FBRyxlQUFlLElBQUksY0FBYyxDQUFDO1FBRTVELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUcsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FDOUIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsRUFDcEQsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUMvRCxDQUFDO1FBRUYsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLENBQUMsRUFDRixLQUFLLEVBQUUsQ0FDUixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7U2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dG9PYnNlcnZhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBFTVBUWSxcbiAgZXhoYXVzdE1hcCxcbiAgZnJvbSxcbiAgaXNPYnNlcnZhYmxlLFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc2hhcmUsXG4gIHN0YXJ0V2l0aCxcbiAgdGltZXIsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0FzeW5jU3RhdGV9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge2lzUHJvbWlzZX0gZnJvbSAnLi4vdXRpbHMvaXMtcHJvbWlzZS51dGlsJztcblxuLyoqXG4gKiBQb2xscyBkYXRhIGF0IGEgc3BlY2lmaWVkIGludGVydmFsIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIG1hbnVhbGx5LlxuICpcbiAqIEB0ZW1wbGF0ZSBEYXRhIC0gVGhlIHR5cGUgb2YgdGhlIGRhdGEgZW1pdHRlZCBieSB0aGUgcG9sbGluZyBmdW5jdGlvbi5cbiAqIEB0ZW1wbGF0ZSBJbnB1dCAtIFRoZSB0eXBlIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXIgdXNlZCB0byBidWlsZCBwb2xsaW5nIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHBvbGxpbmcuXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5pbnRlcnZhbCAtIFRoZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBlYWNoIHBvbGwuXG4gKiBAcGFyYW0geyhwYXJhbXM6IGFueSkgPT4gT2JzZXJ2YWJsZTxEYXRhPiB8IERhdGF9IG9wdGlvbnMucG9sbGluZ0ZuIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgb3IgcHJpbWl0aXZlIHZhbHVlLlxuICogQHBhcmFtIHtPYnNlcnZhYmxlPElucHV0PiB8IFNpZ25hbDxJbnB1dD59IFtvcHRpb25zLnRyaWdnZXJdIC0gQW4gb3B0aW9uYWwgT2JzZXJ2YWJsZSBvciBTaWduYWwgdGhhdCB0cmlnZ2VycyBhIG1hbnVhbCBwb2xsLlxuICogQHBhcmFtIHsoaW5wdXQ6IElucHV0KSA9PiBhbnl9IFtvcHRpb25zLnBhcmFtc0J1aWxkZXJdIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCBidWlsZHMgcGFyYW1ldGVycyBmb3IgdGhlIHBvbGxpbmcgZnVuY3Rpb24gYmFzZWQgb24gdGhlIGlucHV0LiBUaGUgdmFsdWUgZW1pdHRlZCBieSB0aGUgdHJpZ2dlciBvYnNlcnZhYmxlIHdpbGwgc2VydmUgYXMgdGhlIHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPEFzeW5jU3RhdGU8RGF0YT4+fSBBbiBPYnNlcnZhYmxlIGVtaXR0aW5nIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvbGw8RGF0YT4ob3B0aW9uczoge1xuICBpbnRlcnZhbDogbnVtYmVyO1xuICBwb2xsaW5nRm46IChwYXJhbXM6IGFueSkgPT4gT2JzZXJ2YWJsZTxEYXRhPiB8IFByb21pc2U8RGF0YT4gfCBEYXRhO1xufSk6IE9ic2VydmFibGU8QXN5bmNTdGF0ZTxEYXRhPj47XG5cbi8vIHRyaWdnZXIgb3V0cHV0IGlzIHRoZSBwb2xsaW5nRm4gcGFyYW1zJyBpbnB1dFxuZXhwb3J0IGZ1bmN0aW9uIHBvbGw8RGF0YSwgSW5wdXQ+KG9wdGlvbnM6IHtcbiAgaW50ZXJ2YWw6IG51bWJlcjtcbiAgcG9sbGluZ0ZuOiAocGFyYW1zOiBJbnB1dCkgPT4gT2JzZXJ2YWJsZTxEYXRhPiB8IFByb21pc2U8RGF0YT4gfCBEYXRhO1xuICB0cmlnZ2VyOiBPYnNlcnZhYmxlPElucHV0PiB8IFNpZ25hbDxJbnB1dD47XG59KTogT2JzZXJ2YWJsZTxBc3luY1N0YXRlPERhdGE+PjtcblxuLy8gcGFyYW1zQnVpbGRlciBleGlzdHMsIHRyaWdnZXIgb3V0cHV0IGlzIHRoZSBwYXJhbXNCdWlsZGVyIHBhcmFtcycgaW5wdXRcbmV4cG9ydCBmdW5jdGlvbiBwb2xsPERhdGEsIElucHV0PihvcHRpb25zOiB7XG4gIGludGVydmFsOiBudW1iZXI7XG4gIHBvbGxpbmdGbjogKHBhcmFtczogYW55KSA9PiBPYnNlcnZhYmxlPERhdGE+IHwgUHJvbWlzZTxEYXRhPiB8IERhdGE7XG4gIHRyaWdnZXI6IE9ic2VydmFibGU8SW5wdXQ+IHwgU2lnbmFsPElucHV0PjtcbiAgcGFyYW1zQnVpbGRlcjogKGlucHV0OiBJbnB1dCkgPT4gYW55O1xufSk6IE9ic2VydmFibGU8QXN5bmNTdGF0ZTxEYXRhPj47XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2xsPERhdGEsIElucHV0PihvcHRpb25zOiB7XG4gIGludGVydmFsOiBudW1iZXI7XG4gIHBvbGxpbmdGbjogKHBhcmFtczogYW55KSA9PiBPYnNlcnZhYmxlPERhdGE+IHwgUHJvbWlzZTxEYXRhPiB8IERhdGE7XG4gIHRyaWdnZXI/OiBPYnNlcnZhYmxlPElucHV0PiB8IFNpZ25hbDxJbnB1dD47XG4gIHBhcmFtc0J1aWxkZXI/OiAoaW5wdXQ6IElucHV0KSA9PiBhbnk7XG59KTogT2JzZXJ2YWJsZTxBc3luY1N0YXRlPERhdGE+PiB7XG4gIGNvbnN0IHRpbWVyRW1pdFZhbHVlID0gJ19fdGltZXJfX2VtaXNzaW9uX18nO1xuICBjb25zdCB0aW1lciQgPSB0aW1lcigwLCBvcHRpb25zLmludGVydmFsKS5waXBlKG1hcCgoaSkgPT4gYCR7dGltZXJFbWl0VmFsdWV9JHtpfWApKTtcblxuICBjb25zdCB0cmlnZ2VyJCA9XG4gICAgb3B0aW9ucy50cmlnZ2VyID09PSB1bmRlZmluZWRcbiAgICAgID8gRU1QVFlcbiAgICAgIDogaXNPYnNlcnZhYmxlKG9wdGlvbnMudHJpZ2dlcilcbiAgICAgICAgPyBvcHRpb25zLnRyaWdnZXJcbiAgICAgICAgOiB0b09ic2VydmFibGUob3B0aW9ucy50cmlnZ2VyKTtcblxuICBsZXQgaW5wdXRCeVRyaWdnZXI6IElucHV0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkOyAvLyBpZiB0cmlnZ2VyIGlzIG5vdCBwcm92aWRlZCwgaW5wdXQgd2lsbCBiZSB1bmRlZmluZWRcblxuICByZXR1cm4gbWVyZ2UodHJpZ2dlciQsIHRpbWVyJCkucGlwZShcbiAgICBleGhhdXN0TWFwKChpbnB1dCkgPT4ge1xuICAgICAgLy8gaW5wdXQgY2FuIGJlIGVpdGhlciBieSB0cmlnZ2VyIG9yIHRpbWVyXG4gICAgICBjb25zdCBpc1RpbWVyVHJpZ2dlciA9IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQuaW5jbHVkZXModGltZXJFbWl0VmFsdWUpO1xuICAgICAgY29uc3QgaXNNYW51YWxUcmlnZ2VyID0gIWlzVGltZXJUcmlnZ2VyO1xuICAgICAgaWYgKGlzTWFudWFsVHJpZ2dlcikge1xuICAgICAgICBpbnB1dEJ5VHJpZ2dlciA9IGlucHV0IGFzIElucHV0O1xuICAgICAgfVxuXG4gICAgICAvLyBidWlsZCBwYXJhbXMgYnkgdHJpZ2dlciBpbnB1dFxuICAgICAgLy8gaWYgcGFyYW1zQnVpbGRlciBpcyBwcm92aWRlZCwgcGFyYW1zIHdpbGwgYmUgdGhlIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gY2FsbFxuICAgICAgLy8gaWYgcGFyYW1zQnVpbGRlciBpcyBub3QgcHJvdmlkZWQsIHBhcmFtcyB3aWxsIGJlIHRoZSB2YWx1ZSBlbWl0dGVkIGJ5IHRoZSB0cmlnZ2VyXG4gICAgICBjb25zdCBwYXJhbXMgPSBvcHRpb25zLnBhcmFtc0J1aWxkZXIgPyBvcHRpb25zLnBhcmFtc0J1aWxkZXIoaW5wdXRCeVRyaWdnZXIgYXMgSW5wdXQpIDogaW5wdXRCeVRyaWdnZXI7XG5cbiAgICAgIC8vIE5PVEU6IHVzaW5nIGV4aGF1c3RNYXAgd2lsbCBOT1QgZW1pdCAke3RpbWVyRW1pdFZhbHVlfTAgaWYgdHJpZ2dlciBpcyBub3QgcHJvdmlkZWRcbiAgICAgIC8vIHVzaW5nIGNvbmNhdE1hcCB3aWxsIGVtaXQgJHt0aW1lckVtaXRWYWx1ZX0wIGlmIHRyaWdnZXIgaXMgbm90IHByb3ZpZGVkXG4gICAgICBjb25zdCBpc0ZpcnN0UmVxdWVzdCA9IGlucHV0ID09PSBgJHt0aW1lckVtaXRWYWx1ZX0wYDsgLy8gdGltZXIgZmlyc3QgZW1pc3Npb24gd2hlbiB0cmlnZ2VyIGlzIG5vdCBwcm92aWRlZFxuICAgICAgY29uc3Qgc2hvdWxkU2hvd0xvYWRpbmcgPSBpc01hbnVhbFRyaWdnZXIgfHwgaXNGaXJzdFJlcXVlc3Q7XG5cbiAgICAgIGNvbnN0IGZuUmVzdWx0ID0gb3B0aW9ucy5wb2xsaW5nRm4ocGFyYW1zKTtcbiAgICAgIGNvbnN0IGZuUmVzdWx0JCA9IGlzT2JzZXJ2YWJsZShmblJlc3VsdCkgPyBmblJlc3VsdCA6IGlzUHJvbWlzZShmblJlc3VsdCkgPyBmcm9tKGZuUmVzdWx0KSA6IG9mKGZuUmVzdWx0KTtcblxuICAgICAgbGV0IG9ic2VydmFibGUkID0gZm5SZXN1bHQkLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YSkgPT4gKHtsb2FkaW5nOiBmYWxzZSwgZXJyb3I6IG51bGwsIGRhdGF9KSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiBvZih7bG9hZGluZzogZmFsc2UsIGVycm9yLCBkYXRhOiBudWxsfSkpLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNob3VsZFNob3dMb2FkaW5nKSB7XG4gICAgICAgIG9ic2VydmFibGUkID0gb2JzZXJ2YWJsZSQucGlwZShzdGFydFdpdGgoe2xvYWRpbmc6IHRydWUsIGVycm9yOiBudWxsLCBkYXRhOiBudWxsfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZSQ7XG4gICAgfSksXG4gICAgc2hhcmUoKSxcbiAgKTtcbn1cbiJdfQ==
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC5vcGVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvb3BlcmF0b3JzL3BvbGwub3BlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFDTCxVQUFVLEVBQ1YsS0FBSyxFQUNMLFVBQVUsRUFDVixJQUFJLEVBQ0osWUFBWSxFQUNaLEdBQUcsRUFDSCxLQUFLLEVBRUwsRUFBRSxFQUNGLEtBQUssRUFDTCxTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBa0NuRCxNQUFNLFVBQVUsSUFBSSxDQUFjLE9BS2pDO0lBQ0MsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUM7SUFDN0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXBGLE1BQU0sUUFBUSxHQUNaLE9BQU8sQ0FBQyxZQUFZLEtBQUssU0FBUztRQUNoQyxDQUFDLENBQUMsS0FBSztRQUNQLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUNsQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFDdEIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFM0MsSUFBSSxtQkFBbUIsR0FBc0IsU0FBUyxDQUFDLENBQUMsMkRBQTJEO0lBRW5ILE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ2pDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ25CLCtDQUErQztRQUMvQyxNQUFNLGNBQWMsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRixNQUFNLGVBQWUsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUN4QyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLG1CQUFtQixHQUFHLEtBQWMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLCtFQUErRTtRQUMvRSx5RkFBeUY7UUFDekYsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxtQkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztRQUVqSCwwRkFBMEY7UUFDMUYsK0VBQStFO1FBQy9FLE1BQU0sY0FBYyxHQUFHLEtBQUssS0FBSyxHQUFHLGNBQWMsR0FBRyxDQUFDLENBQUMseURBQXlEO1FBQ2hILE1BQU0saUJBQWlCLEdBQUcsZUFBZSxJQUFJLGNBQWMsQ0FBQztRQUU1RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFHLElBQUksV0FBVyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQzlCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQ3BELFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FDL0QsQ0FBQztRQUVGLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0QixXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge1NpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvT2JzZXJ2YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgRU1QVFksXG4gIGV4aGF1c3RNYXAsXG4gIGZyb20sXG4gIGlzT2JzZXJ2YWJsZSxcbiAgbWFwLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHNoYXJlLFxuICBzdGFydFdpdGgsXG4gIHRpbWVyLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtBc3luY1N0YXRlfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtpc1Byb21pc2V9IGZyb20gJy4uL3V0aWxzL2lzLXByb21pc2UudXRpbCc7XG5cbi8qKlxuICogUG9sbHMgZGF0YSBhdCBhIHNwZWNpZmllZCBpbnRlcnZhbCBhbmQgY2FuIGJlIHRyaWdnZXJlZCBtYW51YWxseS5cbiAqXG4gKiBAdGVtcGxhdGUgRGF0YSAtIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGVtaXR0ZWQgYnkgdGhlIHBvbGxpbmcgZnVuY3Rpb24uXG4gKiBAdGVtcGxhdGUgSW5wdXQgLSBUaGUgdHlwZSBvZiB0aGUgaW5wdXQgcGFyYW1ldGVyIHVzZWQgdG8gYnVpbGQgcG9sbGluZyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBwb2xsaW5nLlxuICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMuaW50ZXJ2YWwgLSBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gZWFjaCBwb2xsLlxuICogQHBhcmFtIHsocGFyYW1zOiBhbnkpID0+IE9ic2VydmFibGU8RGF0YT4gfCBEYXRhfSBvcHRpb25zLnBvbGxpbmdGbiAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUsIFByb21pc2UsIG9yIHByaW1pdGl2ZSB2YWx1ZS5cbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZTxJbnB1dD4gfCBTaWduYWw8SW5wdXQ+fSBbb3B0aW9ucy5mb3JjZVJlZnJlc2hdIC0gQW4gb3B0aW9uYWwgT2JzZXJ2YWJsZSBvciBTaWduYWwgdGhhdCB0cmlnZ2VycyBhIG1hbnVhbCByZWZyZXNoIG9mIHRoZSBwb2xsaW5nIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsoaW5wdXQ6IElucHV0KSA9PiBhbnl9IFtvcHRpb25zLnBhcmFtc0J1aWxkZXJdIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCBidWlsZHMgcGFyYW1ldGVycyBmb3IgdGhlIHBvbGxpbmcgZnVuY3Rpb24gYmFzZWQgb24gdGhlIGlucHV0LiBUaGUgdmFsdWUgZW1pdHRlZCBieSB0aGUgZm9yY2VSZWZyZXNoIG9ic2VydmFibGUgd2lsbCBzZXJ2ZSBhcyB0aGUgcGFyYW1ldGVyLlxuICogQHJldHVybnMge09ic2VydmFibGU8QXN5bmNTdGF0ZTxEYXRhPj59IEFuIE9ic2VydmFibGUgZW1pdHRpbmcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9sbDxEYXRhPihvcHRpb25zOiB7XG4gIGludGVydmFsOiBudW1iZXI7XG4gIHBvbGxpbmdGbjogKHBhcmFtczogYW55KSA9PiBPYnNlcnZhYmxlPERhdGE+IHwgUHJvbWlzZTxEYXRhPiB8IERhdGE7XG59KTogT2JzZXJ2YWJsZTxBc3luY1N0YXRlPERhdGE+PjtcblxuLy8gZm9yY2VSZWZyZXNoIG91dHB1dCBpcyB0aGUgcG9sbGluZ0ZuIHBhcmFtcycgaW5wdXRcbmV4cG9ydCBmdW5jdGlvbiBwb2xsPERhdGEsIElucHV0PihvcHRpb25zOiB7XG4gIGludGVydmFsOiBudW1iZXI7XG4gIHBvbGxpbmdGbjogKHBhcmFtczogSW5wdXQpID0+IE9ic2VydmFibGU8RGF0YT4gfCBQcm9taXNlPERhdGE+IHwgRGF0YTtcbiAgZm9yY2VSZWZyZXNoOiBPYnNlcnZhYmxlPElucHV0PiB8IFNpZ25hbDxJbnB1dD47XG59KTogT2JzZXJ2YWJsZTxBc3luY1N0YXRlPERhdGE+PjtcblxuLy8gcGFyYW1zQnVpbGRlciBleGlzdHMsIGZvcmNlUmVmcmVzaCBvdXRwdXQgaXMgdGhlIHBhcmFtc0J1aWxkZXIgcGFyYW1zJyBpbnB1dFxuZXhwb3J0IGZ1bmN0aW9uIHBvbGw8RGF0YSwgSW5wdXQ+KG9wdGlvbnM6IHtcbiAgaW50ZXJ2YWw6IG51bWJlcjtcbiAgcG9sbGluZ0ZuOiAocGFyYW1zOiBhbnkpID0+IE9ic2VydmFibGU8RGF0YT4gfCBQcm9taXNlPERhdGE+IHwgRGF0YTtcbiAgZm9yY2VSZWZyZXNoOiBPYnNlcnZhYmxlPElucHV0PiB8IFNpZ25hbDxJbnB1dD47XG4gIHBhcmFtc0J1aWxkZXI6IChpbnB1dDogSW5wdXQpID0+IGFueTtcbn0pOiBPYnNlcnZhYmxlPEFzeW5jU3RhdGU8RGF0YT4+O1xuXG5leHBvcnQgZnVuY3Rpb24gcG9sbDxEYXRhLCBJbnB1dD4ob3B0aW9uczoge1xuICBpbnRlcnZhbDogbnVtYmVyO1xuICBwb2xsaW5nRm46IChwYXJhbXM6IGFueSkgPT4gT2JzZXJ2YWJsZTxEYXRhPiB8IFByb21pc2U8RGF0YT4gfCBEYXRhO1xuICBmb3JjZVJlZnJlc2g/OiBPYnNlcnZhYmxlPElucHV0PiB8IFNpZ25hbDxJbnB1dD47XG4gIHBhcmFtc0J1aWxkZXI/OiAoaW5wdXQ6IElucHV0KSA9PiBhbnk7XG59KTogT2JzZXJ2YWJsZTxBc3luY1N0YXRlPERhdGE+PiB7XG4gIGNvbnN0IHRpbWVyRW1pdFZhbHVlID0gJ19fdGltZXJfX2VtaXNzaW9uX18nO1xuICBjb25zdCB0aW1lciQgPSB0aW1lcigwLCBvcHRpb25zLmludGVydmFsKS5waXBlKG1hcCgoaSkgPT4gYCR7dGltZXJFbWl0VmFsdWV9JHtpfWApKTtcblxuICBjb25zdCB0cmlnZ2VyJCA9XG4gICAgb3B0aW9ucy5mb3JjZVJlZnJlc2ggPT09IHVuZGVmaW5lZFxuICAgICAgPyBFTVBUWVxuICAgICAgOiBpc09ic2VydmFibGUob3B0aW9ucy5mb3JjZVJlZnJlc2gpXG4gICAgICAgID8gb3B0aW9ucy5mb3JjZVJlZnJlc2hcbiAgICAgICAgOiB0b09ic2VydmFibGUob3B0aW9ucy5mb3JjZVJlZnJlc2gpO1xuXG4gIGxldCBpbnB1dEJ5Rm9yY2VSZWZyZXNoOiBJbnB1dCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDsgLy8gaWYgZm9yY2VSZWZyZXNoIGlzIG5vdCBwcm92aWRlZCwgaW5wdXQgd2lsbCBiZSB1bmRlZmluZWRcblxuICByZXR1cm4gbWVyZ2UodHJpZ2dlciQsIHRpbWVyJCkucGlwZShcbiAgICBleGhhdXN0TWFwKChpbnB1dCkgPT4ge1xuICAgICAgLy8gaW5wdXQgY2FuIGJlIGVpdGhlciBieSBmb3JjZVJlZnJlc2ggb3IgdGltZXJcbiAgICAgIGNvbnN0IGlzVGltZXJUcmlnZ2VyID0gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyAmJiBpbnB1dC5pbmNsdWRlcyh0aW1lckVtaXRWYWx1ZSk7XG4gICAgICBjb25zdCBpc01hbnVhbFRyaWdnZXIgPSAhaXNUaW1lclRyaWdnZXI7XG4gICAgICBpZiAoaXNNYW51YWxUcmlnZ2VyKSB7XG4gICAgICAgIGlucHV0QnlGb3JjZVJlZnJlc2ggPSBpbnB1dCBhcyBJbnB1dDtcbiAgICAgIH1cblxuICAgICAgLy8gYnVpbGQgcGFyYW1zIGJ5IGlucHV0XG4gICAgICAvLyBpZiBwYXJhbXNCdWlsZGVyIGlzIHByb3ZpZGVkLCBwYXJhbXMgd2lsbCBiZSB0aGUgdmFsdWUgb2YgdGhpcyBmdW5jdGlvbiBjYWxsXG4gICAgICAvLyBpZiBwYXJhbXNCdWlsZGVyIGlzIG5vdCBwcm92aWRlZCwgcGFyYW1zIHdpbGwgYmUgdGhlIHZhbHVlIGVtaXR0ZWQgYnkgdGhlIGZvcmNlUmVmcmVzaFxuICAgICAgY29uc3QgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXNCdWlsZGVyID8gb3B0aW9ucy5wYXJhbXNCdWlsZGVyKGlucHV0QnlGb3JjZVJlZnJlc2ggYXMgSW5wdXQpIDogaW5wdXRCeUZvcmNlUmVmcmVzaDtcblxuICAgICAgLy8gTk9URTogdXNpbmcgZXhoYXVzdE1hcCB3aWxsIE5PVCBlbWl0ICR7dGltZXJFbWl0VmFsdWV9MCBpZiBmb3JjZVJlZnJlc2ggaXMgbm90IHByb3ZpZGVkXG4gICAgICAvLyB1c2luZyBjb25jYXRNYXAgd2lsbCBlbWl0ICR7dGltZXJFbWl0VmFsdWV9MCBpZiBmb3JjZVJlZnJlc2ggaXMgbm90IHByb3ZpZGVkXG4gICAgICBjb25zdCBpc0ZpcnN0UmVxdWVzdCA9IGlucHV0ID09PSBgJHt0aW1lckVtaXRWYWx1ZX0wYDsgLy8gdGltZXIgZmlyc3QgZW1pc3Npb24gd2hlbiBmb3JjZVJlZnJlc2ggaXMgbm90IHByb3ZpZGVkXG4gICAgICBjb25zdCBzaG91bGRTaG93TG9hZGluZyA9IGlzTWFudWFsVHJpZ2dlciB8fCBpc0ZpcnN0UmVxdWVzdDtcblxuICAgICAgY29uc3QgZm5SZXN1bHQgPSBvcHRpb25zLnBvbGxpbmdGbihwYXJhbXMpO1xuICAgICAgY29uc3QgZm5SZXN1bHQkID0gaXNPYnNlcnZhYmxlKGZuUmVzdWx0KSA/IGZuUmVzdWx0IDogaXNQcm9taXNlKGZuUmVzdWx0KSA/IGZyb20oZm5SZXN1bHQpIDogb2YoZm5SZXN1bHQpO1xuXG4gICAgICBsZXQgb2JzZXJ2YWJsZSQgPSBmblJlc3VsdCQucGlwZShcbiAgICAgICAgbWFwKChkYXRhKSA9PiAoe2xvYWRpbmc6IGZhbHNlLCBlcnJvcjogbnVsbCwgZGF0YX0pKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IG9mKHtsb2FkaW5nOiBmYWxzZSwgZXJyb3IsIGRhdGE6IG51bGx9KSksXG4gICAgICApO1xuXG4gICAgICBpZiAoc2hvdWxkU2hvd0xvYWRpbmcpIHtcbiAgICAgICAgb2JzZXJ2YWJsZSQgPSBvYnNlcnZhYmxlJC5waXBlKHN0YXJ0V2l0aCh7bG9hZGluZzogdHJ1ZSwgZXJyb3I6IG51bGwsIGRhdGE6IG51bGx9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYnNlcnZhYmxlJDtcbiAgICB9KSxcbiAgICBzaGFyZSgpLFxuICApO1xufVxuIl19
@@ -67,10 +67,13 @@ export class IdleDetectionService {
67
67
  }
68
68
  /**
69
69
  * Resets the idle timer when user activity is detected.
70
+ * @param withCountdownReset - Flag to indicate if countdown should be reset.
71
+ * By default, it only reset the idle-detection timer. If you enter the countdown phase, it won't stop the countdown.
72
+ * Pass true when you want to reset the countdown as well. This is useful when you click "Keep Me Signed In" button in cll-idle-detection component
70
73
  */
71
- resetTimer() {
74
+ resetTimer(withCountdownReset = false) {
72
75
  this.startIdleTimer();
73
- if (this.isCountingDown) {
76
+ if (withCountdownReset && this.isCountingDown) {
74
77
  this.stopCountdown();
75
78
  }
76
79
  }
@@ -184,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
184
187
  }], ctorParameters: () => [{ type: i1.IdleDetectionConfig, decorators: [{
185
188
  type: Optional
186
189
  }] }] });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1kZXRlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdXRpbHMvaWRsZS1kZXRlY3Rpb24vaWRsZS1kZXRlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBSTNFOztHQUVHO0FBSUgsTUFBTSxPQUFPLG9CQUFvQjtJQStEL0I7OztPQUdHO0lBQ0gsWUFBd0IsTUFBMkI7UUFsRW5EOztXQUVHO1FBQ0ssdUJBQWtCLEdBQUc7WUFDM0IsT0FBTztZQUNQLFNBQVM7WUFDVCxVQUFVO1lBQ1YsV0FBVztZQUNYLFdBQVc7WUFDWCxRQUFRO1lBQ1IsT0FBTztZQUNQLFdBQVc7WUFDWCxhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUM7UUFHRjs7V0FFRztRQUNLLGlCQUFZLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUUvQjs7V0FFRztRQUNLLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBWTdCOztXQUVHO1FBQ0ssbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFL0I7O1dBRUc7UUFDSyxjQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUV6Qzs7V0FFRztRQUNLLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU3Qzs7V0FFRztRQUNLLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFFakQ7O1dBRUc7UUFDSyx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBT2hELElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxD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Q0FBQyxDQUFDO1FBQzdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxTQUFTLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxNQUEyQjtRQUNuQyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1FBQ25ELENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUM7UUFDMUUsQ0FBQztJQUNILENBQUM7OEdBOU1VLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzJGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQW9FYyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2Zyb21FdmVudCwgbWVyZ2UsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGhyb3R0bGVUaW1lfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtJZGxlRGV0ZWN0aW9uQ29uZmlnfSBmcm9tICcuL2lkbGUtZGV0ZWN0aW9uLmNvbmZpZyc7XG5cbi8qKlxuICogU2VydmljZSBmb3IgZGV0ZWN0aW5nIHVzZXIgaWRsZSB0aW1lIGFuZCBpbXBsZW1lbnRpbmcgYSBjb3VudGRvd24uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJZGxlRGV0ZWN0aW9uU2VydmljZSB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpbnRlcnJ1cHRpb24gZXZlbnRzIHRoYXQgd2lsbCBlbmQgdGhlIGlkbGUgZGV0ZWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnRlcnJ1cHRpb25FdmVudHMgPSBbXG4gICAgJ2NsaWNrJyxcbiAgICAna2V5ZG93bicsXG4gICAgJ2tleXByZXNzJyxcbiAgICAnbW91c2Vtb3ZlJyxcbiAgICAnbW91c2Vkb3duJyxcbiAgICAnc2Nyb2xsJyxcbiAgICAnd2hlZWwnLFxuICAgICd0b3VjaG1vdmUnLFxuICAgICdwb2ludGVybW92ZScsXG4gICAgJ3Jlc2l6ZScsXG4gIF07XG4gIHByaXZhdGUgaW50ZXJydXB0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBpZGxlIGR1cmF0aW9uIGluIHNlY29uZHMgKDE5IG1pbnV0ZXMpLlxuICAgKi9cbiAgcHJpdmF0ZSBpZGxlRHVyYXRpb24gPSAxOSAqIDYwO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB0aW1lb3V0IGR1cmF0aW9uIGluIHNlY29uZHMgKDEgbWludXRlKS5cbiAgICovXG4gIHByaXZhdGUgdGltZW91dER1cmF0aW9uID0gNjA7XG5cbiAgLyoqXG4gICAqIFRpbWVyIGZvciBpZGxlIGRldGVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgaWRsZVRpbWVyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaW1lciBmb3IgY291bnRkb3duLlxuICAgKi9cbiAgcHJpdmF0ZSBjb3VudGRvd25UaW1lcj86IG51bWJlcjtcblxuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiBjb3VudGRvd24gaXMgaW4gcHJvZ3Jlc3MuXG4gICAqL1xuICBwcml2YXRlIGlzQ291bnRpbmdEb3duID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGNvdW50ZG93biB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgY291bnRkb3duID0gdGhpcy50aW1lb3V0RHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFN1YmplY3QgdG8gZW1pdCB3aGVuIGlkbGUgcGVyaW9kIGVuZHMuXG4gICAqL1xuICBwcml2YXRlIGlkbGVFbmRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogU3ViamVjdCB0byBlbWl0IHRoZSBjb3VudGRvd24gdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIGNvdW50ZG93blN1YmplY3QgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIFN1YmplY3QgdG8gZW1pdCB3aGVuIGNvdW50ZG93biBlbmRzLlxuICAgKi9cbiAgcHJpdmF0ZSBjb3VudGRvd25FbmRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgSWRsZURldGVjdGlvblNlcnZpY2UuXG4gICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciBpZGxlIGFuZCB0aW1lb3V0IGR1cmF0aW9ucy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIGNvbmZpZzogSWRsZURldGVjdGlvbkNvbmZpZykge1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0byB3YXRjaCBmb3IgdXNlciBpbmFjdGl2aXR5LlxuICAgKi9cbiAgc3RhcnRXYXRjaGluZygpIHtcbiAgICB0aGlzLnNldHVwSW50ZXJydXB0aW9uRXZlbnRzKCk7XG4gICAgdGhpcy5zdGFydElkbGVUaW1lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgaWRsZSB0aW1lciB3aGVuIHVzZXIgYWN0aXZpdHkgaXMgZGV0ZWN0ZWQuXG4gICAqL1xuICByZXNldFRpbWVyKCkge1xuICAgIHRoaXMuc3RhcnRJZGxlVGltZXIoKTtcblxuICAgIGlmICh0aGlzLmlzQ291bnRpbmdEb3duKSB7XG4gICAgICB0aGlzLnN0b3BDb3VudGRvd24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgaW50ZXJydXB0aW9uIGV2ZW50cyB0aGF0IHdpbGwgZW5kIHRoZSBpZGxlIGRldGVjdGlvbi5cbiAgICogTGlzdGVucyB0byBhIHNldCBvZiBldmVudHMgb24gdGhlIGRvY3VtZW50IChlLmcuIGNsaWNrLCBrZXlkb3duLCBtb3VzZW1vdmUsIGV0Yy4pLlxuICAgKiBXaGVuIGFueSBvZiB0aGVzZSBldmVudHMgaXMgdHJpZ2dlcmVkLCB0aGUgaWRsZSB0aW1lciBpcyByZXNldC5cbiAgICogVXNlcyBgdGhyb3R0bGVUaW1lYCBvcGVyYXRvciB0byBvbmx5IHRyaWdnZXIgdGhlIHJlc2V0IHdoZW4gdGhlIGV2ZW50cyBhcmUgc3BhY2VkXG4gICAqIG91dCBieSBhdCBsZWFzdCAxMDAwbXMgKDEgc2Vjb25kKS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0dXBJbnRlcnJ1cHRpb25FdmVudHMoKSB7XG4gICAgaWYgKCF0aGlzLmludGVycnVwdGlvblN1YnNjcmlwdGlvbikge1xuICAgICAgY29uc3QgdGhyb3R0bGVkSW50ZXJydXB0aW9uRXZlbnRzID0gdGhpcy5pbnRlcnJ1cHRpb25FdmVudHMubWFwKChldmVudE5hbWUpID0+XG4gICAgICAgIGZyb21FdmVudChkb2N1bWVudCwgZXZlbnROYW1lKS5waXBlKHRocm90dGxlVGltZSgxMDAwKSksXG4gICAgICApO1xuICAgICAgdGhpcy5pbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24gPSBtZXJnZSguLi50aHJvdHRsZWRJbnRlcnJ1cHRpb25FdmVudHMpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2V0VGltZXIoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgaWRsZSB0aW1lci5cbiAgICogV2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgZW1pdHMgYW4gZXZlbnQgdGhyb3VnaCBvbklkbGVFbmQoKSBhbmQgc3RhcnRzIHRoZSBjb3VudGRvd24uXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0SWRsZVRpbWVyKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmlkbGVUaW1lcik7XG5cbiAgICB0aGlzLmlkbGVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGFmdGVyIGlkbGUgcGVyaW9kLCB1c2VyIGluYWN0aXZpdHkgZGV0ZWN0ZWRcbiAgICAgIHRoaXMuaWRsZUVuZFN1YmplY3QubmV4dCgpO1xuICAgICAgdGhpcy5zdGFydENvdW50ZG93bigpO1xuICAgIH0sIHRoaXMuaWRsZUR1cmF0aW9uICogMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBjb3VudGRvd24uXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0Q291bnRkb3duKCkge1xuICAgIHRoaXMuaXNDb3VudGluZ0Rvd24gPSB0cnVlO1xuICAgIHRoaXMuY291bnRkb3duU3ViamVjdC5uZXh0KHRoaXMuY291bnRkb3duKTtcblxuICAgIHRoaXMuY291bnRkb3duVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5jb3VudGRvd24tLTtcbiAgICAgIHRoaXMuY291bnRkb3duU3ViamVjdC5uZXh0KHRoaXMuY291bnRkb3duKTtcblxuICAgICAgaWYgKHRoaXMuY291bnRkb3duIDw9IDApIHtcbiAgICAgICAgdGhpcy5zdG9wQ291bnRkb3duKCk7XG4gICAgICAgIHRoaXMuY291bnRkb3duRW5kU3ViamVjdC5uZXh0KCk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgdGhlIGNvdW50ZG93bi5cbiAgICovXG4gIHByaXZhdGUgc3RvcENvdW50ZG93bigpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuY291bnRkb3duVGltZXIpO1xuICAgIHRoaXMuaXNDb3VudGluZ0Rvd24gPSBmYWxzZTtcblxuICAgIC8vIHJlc2V0IGNvdW50ZG93blxuICAgIHRoaXMuY291bnRkb3duID0gdGhpcy50aW1lb3V0RHVyYXRpb247XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiB0aGUgdXNlciBoYXMgYmVlbiBpZGxlIGZvciBhIGxvbmcgcGVyaW9kLlxuICAgKiBEZXZlbG9wZXJzIGNhbiB1c2UgdGhpcyB0byBwZXJmb3JtIGFjdGlvbnMgbGlrZSBvcGVuaW5nIGEgZGlhbG9nLlxuICAgKlxuICAgKiB1c2VyIGhhcyBiZWVuIGluYWN0aXZlIGZvciBhIGxvbmcgcGVyaW9kIChpZGxlRHVyYXRpb24pLCBhdCB0aGlzIG1vbWVudCwgaWRsZSBkZXRlY3Rpb24gcGhhc2UgZW5kcywgb25JZGxlRW5kIGV2ZW50IGlzIGVtaXR0ZWQsIGFuZCB0aGVuIGVudGVyIGNvdW50ZG93bi90aW1lb3V0IHBoYXNlLlxuICAgKiBEdXJpbmcgdGhlIGNvdW50ZG93biBwaGFzZTpcbiAgICogIC0gaWYgdXNlciBoYXMgYW55IGFjdGl2aXR5LCBjb3VudGRvd24gcGhhc2UgaW1tZWRpYXRlbHkgZW5kcyBhbmQgcmVzdGFydCB0aGUgaWRsZSBkZXRlY3Rpb24gcGhhc2UuXG4gICAqICAtIGVsc2UsIGNvdW50ZG93bkVuZCBldmVudCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aW1lb3V0RHVyYXRpb24gaXMgb3Zlci5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8dm9pZD59IC0gT2JzZXJ2YWJsZSBmb3IgaWRsZSBlbmQgZXZlbnQuXG4gICAqL1xuICBvbklkbGVFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRsZUVuZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiB0aGUgY291bnRkb3duIGVuZHMuXG4gICAqIFVzdWFsbHkgbWVhbnMgdGhlIHVzZXIgaGFzIGJlZW4gaW5hY3RpdmUgZm9yIGEgdmVyeSBsb25nIHRpbWUgYW5kIHNob3VsZCBiZSBsb2dnZWQgb3V0LlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTx2b2lkPn0gLSBPYnNlcnZhYmxlIGZvciBjb3VudGRvd24gZW5kIGV2ZW50LlxuICAgKi9cbiAgb25UaW1lb3V0RW5kKCkge1xuICAgIHJldHVybiB0aGlzLmNvdW50ZG93bkVuZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGNvdW50ZG93biB2YWx1ZSBldmVyeSBzZWNvbmQuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPG51bWJlcj59IC0gT2JzZXJ2YWJsZSBmb3IgY291bnRkb3duIHZhbHVlLlxuICAgKi9cbiAgb25Db3VudERvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY291bnRkb3duU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIHRpbWVycyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgY2xlYXJUaW1lcnMoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaWRsZVRpbWVyKTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuY291bnRkb3duVGltZXIpO1xuXG4gICAgdGhpcy5pbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaWRsZSBhbmQgdGltZW91dCBkdXJhdGlvbnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIGlkbGUgYW5kIHRpbWVvdXQgZHVyYXRpb25zLlxuICAgKi9cbiAgc2V0Q29uZmlnKGNvbmZpZzogSWRsZURldGVjdGlvbkNvbmZpZykge1xuICAgIGlmIChjb25maWcuaWRsZUR1cmF0aW9uSW5TZWNvbmRzKSB7XG4gICAgICB0aGlzLmlkbGVEdXJhdGlvbiA9IGNvbmZpZy5pZGxlRHVyYXRpb25JblNlY29uZHM7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy50aW1lb3V0RHVyYXRpb25JblNlY29uZHMpIHtcbiAgICAgIHRoaXMuY291bnRkb3duID0gdGhpcy50aW1lb3V0RHVyYXRpb24gPSBjb25maWcudGltZW91dER1cmF0aW9uSW5TZWNvbmRzO1xuICAgIH1cbiAgfVxufVxuIl19
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1kZXRlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdXRpbHMvaWRsZS1kZXRlY3Rpb24vaWRsZS1kZXRlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBSTNFOztHQUVHO0FBSUgsTUFBTSxPQUFPLG9CQUFvQjtJQStEL0I7OztPQUdHO0lBQ0gsWUFBd0IsTUFBMkI7UUFsRW5EOztXQUVHO1FBQ0ssdUJBQWtCLEdBQUc7WUFDM0IsT0FBTztZQUNQLFNBQVM7WUFDVCxVQUFVO1lBQ1YsV0FBVztZQUNYLFdBQVc7WUFDWCxRQUFRO1lBQ1IsT0FBTztZQUNQLFdBQVc7WUFDWCxhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUM7UUFHRjs7V0FFRztRQUNLLGlCQUFZLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUUvQjs7V0FFRztRQUNLLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBWTdCOztXQUVHO1FBQ0ssbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFL0I7O1dBRUc7UUFDSyxjQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUV6Qzs7V0FFRztRQUNLLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU3Qzs7V0FFRztRQUNLLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFFakQ7O1dBRUc7UUFDSyx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBT2hELElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxD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Q0gsV0FBVztRQUNULFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFNBQVMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLE1BQTJCO1FBQ25DLElBQUksTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7UUFDbkQsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQzs4R0FqTlUsb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBb0VjLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ZnJvbUV2ZW50LCBtZXJnZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aHJvdHRsZVRpbWV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0lkbGVEZXRlY3Rpb25Db25maWd9IGZyb20gJy4vaWRsZS1kZXRlY3Rpb24uY29uZmlnJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBkZXRlY3RpbmcgdXNlciBpZGxlIHRpbWUgYW5kIGltcGxlbWVudGluZyBhIGNvdW50ZG93bi5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIElkbGVEZXRlY3Rpb25TZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGludGVycnVwdGlvbiBldmVudHMgdGhhdCB3aWxsIGVuZCB0aGUgaWRsZSBkZXRlY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIGludGVycnVwdGlvbkV2ZW50cyA9IFtcbiAgICAnY2xpY2snLFxuICAgICdrZXlkb3duJyxcbiAgICAna2V5cHJlc3MnLFxuICAgICdtb3VzZW1vdmUnLFxuICAgICdtb3VzZWRvd24nLFxuICAgICdzY3JvbGwnLFxuICAgICd3aGVlbCcsXG4gICAgJ3RvdWNobW92ZScsXG4gICAgJ3BvaW50ZXJtb3ZlJyxcbiAgICAncmVzaXplJyxcbiAgXTtcbiAgcHJpdmF0ZSBpbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGlkbGUgZHVyYXRpb24gaW4gc2Vjb25kcyAoMTkgbWludXRlcykuXG4gICAqL1xuICBwcml2YXRlIGlkbGVEdXJhdGlvbiA9IDE5ICogNjA7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHRpbWVvdXQgZHVyYXRpb24gaW4gc2Vjb25kcyAoMSBtaW51dGUpLlxuICAgKi9cbiAgcHJpdmF0ZSB0aW1lb3V0RHVyYXRpb24gPSA2MDtcblxuICAvKipcbiAgICogVGltZXIgZm9yIGlkbGUgZGV0ZWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBpZGxlVGltZXI/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWVyIGZvciBjb3VudGRvd24uXG4gICAqL1xuICBwcml2YXRlIGNvdW50ZG93blRpbWVyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIGNvdW50ZG93biBpcyBpbiBwcm9ncmVzcy5cbiAgICovXG4gIHByaXZhdGUgaXNDb3VudGluZ0Rvd24gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgY291bnRkb3duIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBjb3VudGRvd24gPSB0aGlzLnRpbWVvdXREdXJhdGlvbjtcblxuICAvKipcbiAgICogU3ViamVjdCB0byBlbWl0IHdoZW4gaWRsZSBwZXJpb2QgZW5kcy5cbiAgICovXG4gIHByaXZhdGUgaWRsZUVuZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTdWJqZWN0IHRvIGVtaXQgdGhlIGNvdW50ZG93biB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgY291bnRkb3duU3ViamVjdCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAvKipcbiAgICogU3ViamVjdCB0byBlbWl0IHdoZW4gY291bnRkb3duIGVuZHMuXG4gICAqL1xuICBwcml2YXRlIGNvdW50ZG93bkVuZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBJZGxlRGV0ZWN0aW9uU2VydmljZS5cbiAgICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIGlkbGUgYW5kIHRpbWVvdXQgZHVyYXRpb25zLlxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgY29uZmlnOiBJZGxlRGV0ZWN0aW9uQ29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5zZXRDb25maWcoY29uZmlnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRvIHdhdGNoIGZvciB1c2VyIGluYWN0aXZpdHkuXG4gICAqL1xuICBzdGFydFdhdGNoaW5nKCkge1xuICAgIHRoaXMuc2V0dXBJbnRlcnJ1cHRpb25FdmVudHMoKTtcbiAgICB0aGlzLnN0YXJ0SWRsZVRpbWVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBpZGxlIHRpbWVyIHdoZW4gdXNlciBhY3Rpdml0eSBpcyBkZXRlY3RlZC5cbiAgICogQHBhcmFtIHdpdGhDb3VudGRvd25SZXNldCAtIEZsYWcgdG8gaW5kaWNhdGUgaWYgY291bnRkb3duIHNob3VsZCBiZSByZXNldC5cbiAgICogQnkgZGVmYXVsdCwgaXQgb25seSByZXNldCB0aGUgaWRsZS1kZXRlY3Rpb24gdGltZXIuIElmIHlvdSBlbnRlciB0aGUgY291bnRkb3duIHBoYXNlLCBpdCB3b24ndCBzdG9wIHRoZSBjb3VudGRvd24uXG4gICAqIFBhc3MgdHJ1ZSB3aGVuIHlvdSB3YW50IHRvIHJlc2V0IHRoZSBjb3VudGRvd24gYXMgd2VsbC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgY2xpY2sgXCJLZWVwIE1lIFNpZ25lZCBJblwiIGJ1dHRvbiBpbiBjbGwtaWRsZS1kZXRlY3Rpb24gY29tcG9uZW50XG4gICAqL1xuICByZXNldFRpbWVyKHdpdGhDb3VudGRvd25SZXNldCA9IGZhbHNlKSB7XG4gICAgdGhpcy5zdGFydElkbGVUaW1lcigpO1xuXG4gICAgaWYgKHdpdGhDb3VudGRvd25SZXNldCAmJiB0aGlzLmlzQ291bnRpbmdEb3duKSB7XG4gICAgICB0aGlzLnN0b3BDb3VudGRvd24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgaW50ZXJydXB0aW9uIGV2ZW50cyB0aGF0IHdpbGwgZW5kIHRoZSBpZGxlIGRldGVjdGlvbi5cbiAgICogTGlzdGVucyB0byBhIHNldCBvZiBldmVudHMgb24gdGhlIGRvY3VtZW50IChlLmcuIGNsaWNrLCBrZXlkb3duLCBtb3VzZW1vdmUsIGV0Yy4pLlxuICAgKiBXaGVuIGFueSBvZiB0aGVzZSBldmVudHMgaXMgdHJpZ2dlcmVkLCB0aGUgaWRsZSB0aW1lciBpcyByZXNldC5cbiAgICogVXNlcyBgdGhyb3R0bGVUaW1lYCBvcGVyYXRvciB0byBvbmx5IHRyaWdnZXIgdGhlIHJlc2V0IHdoZW4gdGhlIGV2ZW50cyBhcmUgc3BhY2VkXG4gICAqIG91dCBieSBhdCBsZWFzdCAxMDAwbXMgKDEgc2Vjb25kKS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0dXBJbnRlcnJ1cHRpb25FdmVudHMoKSB7XG4gICAgaWYgKCF0aGlzLmludGVycnVwdGlvblN1YnNjcmlwdGlvbikge1xuICAgICAgY29uc3QgdGhyb3R0bGVkSW50ZXJydXB0aW9uRXZlbnRzID0gdGhpcy5pbnRlcnJ1cHRpb25FdmVudHMubWFwKChldmVudE5hbWUpID0+XG4gICAgICAgIGZyb21FdmVudChkb2N1bWVudCwgZXZlbnROYW1lKS5waXBlKHRocm90dGxlVGltZSgxMDAwKSksXG4gICAgICApO1xuICAgICAgdGhpcy5pbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24gPSBtZXJnZSguLi50aHJvdHRsZWRJbnRlcnJ1cHRpb25FdmVudHMpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2V0VGltZXIoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgaWRsZSB0aW1lci5cbiAgICogV2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgZW1pdHMgYW4gZXZlbnQgdGhyb3VnaCBvbklkbGVFbmQoKSBhbmQgc3RhcnRzIHRoZSBjb3VudGRvd24uXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0SWRsZVRpbWVyKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmlkbGVUaW1lcik7XG5cbiAgICB0aGlzLmlkbGVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGFmdGVyIGlkbGUgcGVyaW9kLCB1c2VyIGluYWN0aXZpdHkgZGV0ZWN0ZWRcbiAgICAgIHRoaXMuaWRsZUVuZFN1YmplY3QubmV4dCgpO1xuICAgICAgdGhpcy5zdGFydENvdW50ZG93bigpO1xuICAgIH0sIHRoaXMuaWRsZUR1cmF0aW9uICogMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBjb3VudGRvd24uXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0Q291bnRkb3duKCkge1xuICAgIHRoaXMuaXNDb3VudGluZ0Rvd24gPSB0cnVlO1xuICAgIHRoaXMuY291bnRkb3duU3ViamVjdC5uZXh0KHRoaXMuY291bnRkb3duKTtcblxuICAgIHRoaXMuY291bnRkb3duVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5jb3VudGRvd24tLTtcbiAgICAgIHRoaXMuY291bnRkb3duU3ViamVjdC5uZXh0KHRoaXMuY291bnRkb3duKTtcblxuICAgICAgaWYgKHRoaXMuY291bnRkb3duIDw9IDApIHtcbiAgICAgICAgdGhpcy5zdG9wQ291bnRkb3duKCk7XG4gICAgICAgIHRoaXMuY291bnRkb3duRW5kU3ViamVjdC5uZXh0KCk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgdGhlIGNvdW50ZG93bi5cbiAgICovXG4gIHByaXZhdGUgc3RvcENvdW50ZG93bigpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuY291bnRkb3duVGltZXIpO1xuICAgIHRoaXMuaXNDb3VudGluZ0Rvd24gPSBmYWxzZTtcblxuICAgIC8vIHJlc2V0IGNvdW50ZG93blxuICAgIHRoaXMuY291bnRkb3duID0gdGhpcy50aW1lb3V0RHVyYXRpb247XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiB0aGUgdXNlciBoYXMgYmVlbiBpZGxlIGZvciBhIGxvbmcgcGVyaW9kLlxuICAgKiBEZXZlbG9wZXJzIGNhbiB1c2UgdGhpcyB0byBwZXJmb3JtIGFjdGlvbnMgbGlrZSBvcGVuaW5nIGEgZGlhbG9nLlxuICAgKlxuICAgKiB1c2VyIGhhcyBiZWVuIGluYWN0aXZlIGZvciBhIGxvbmcgcGVyaW9kIChpZGxlRHVyYXRpb24pLCBhdCB0aGlzIG1vbWVudCwgaWRsZSBkZXRlY3Rpb24gcGhhc2UgZW5kcywgb25JZGxlRW5kIGV2ZW50IGlzIGVtaXR0ZWQsIGFuZCB0aGVuIGVudGVyIGNvdW50ZG93bi90aW1lb3V0IHBoYXNlLlxuICAgKiBEdXJpbmcgdGhlIGNvdW50ZG93biBwaGFzZTpcbiAgICogIC0gaWYgdXNlciBoYXMgYW55IGFjdGl2aXR5LCBjb3VudGRvd24gcGhhc2UgaW1tZWRpYXRlbHkgZW5kcyBhbmQgcmVzdGFydCB0aGUgaWRsZSBkZXRlY3Rpb24gcGhhc2UuXG4gICAqICAtIGVsc2UsIGNvdW50ZG93bkVuZCBldmVudCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aW1lb3V0RHVyYXRpb24gaXMgb3Zlci5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8dm9pZD59IC0gT2JzZXJ2YWJsZSBmb3IgaWRsZSBlbmQgZXZlbnQuXG4gICAqL1xuICBvbklkbGVFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRsZUVuZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiB0aGUgY291bnRkb3duIGVuZHMuXG4gICAqIFVzdWFsbHkgbWVhbnMgdGhlIHVzZXIgaGFzIGJlZW4gaW5hY3RpdmUgZm9yIGEgdmVyeSBsb25nIHRpbWUgYW5kIHNob3VsZCBiZSBsb2dnZWQgb3V0LlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTx2b2lkPn0gLSBPYnNlcnZhYmxlIGZvciBjb3VudGRvd24gZW5kIGV2ZW50LlxuICAgKi9cbiAgb25UaW1lb3V0RW5kKCkge1xuICAgIHJldHVybiB0aGlzLmNvdW50ZG93bkVuZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGNvdW50ZG93biB2YWx1ZSBldmVyeSBzZWNvbmQuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPG51bWJlcj59IC0gT2JzZXJ2YWJsZSBmb3IgY291bnRkb3duIHZhbHVlLlxuICAgKi9cbiAgb25Db3VudERvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY291bnRkb3duU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIHRpbWVycyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgY2xlYXJUaW1lcnMoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaWRsZVRpbWVyKTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuY291bnRkb3duVGltZXIpO1xuXG4gICAgdGhpcy5pbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaWRsZSBhbmQgdGltZW91dCBkdXJhdGlvbnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIGlkbGUgYW5kIHRpbWVvdXQgZHVyYXRpb25zLlxuICAgKi9cbiAgc2V0Q29uZmlnKGNvbmZpZzogSWRsZURldGVjdGlvbkNvbmZpZykge1xuICAgIGlmIChjb25maWcuaWRsZUR1cmF0aW9uSW5TZWNvbmRzKSB7XG4gICAgICB0aGlzLmlkbGVEdXJhdGlvbiA9IGNvbmZpZy5pZGxlRHVyYXRpb25JblNlY29uZHM7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy50aW1lb3V0RHVyYXRpb25JblNlY29uZHMpIHtcbiAgICAgIHRoaXMuY291bnRkb3duID0gdGhpcy50aW1lb3V0RHVyYXRpb24gPSBjb25maWcudGltZW91dER1cmF0aW9uSW5TZWNvbmRzO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -210,26 +210,26 @@ function isPromise$1(obj) {
210
210
  function poll(options) {
211
211
  const timerEmitValue = '__timer__emission__';
212
212
  const timer$ = timer(0, options.interval).pipe(map((i) => `${timerEmitValue}${i}`));
213
- const trigger$ = options.trigger === undefined
213
+ const trigger$ = options.forceRefresh === undefined
214
214
  ? EMPTY
215
- : isObservable(options.trigger)
216
- ? options.trigger
217
- : toObservable(options.trigger);
218
- let inputByTrigger = undefined; // if trigger is not provided, input will be undefined
215
+ : isObservable(options.forceRefresh)
216
+ ? options.forceRefresh
217
+ : toObservable(options.forceRefresh);
218
+ let inputByForceRefresh = undefined; // if forceRefresh is not provided, input will be undefined
219
219
  return merge(trigger$, timer$).pipe(exhaustMap((input) => {
220
- // input can be either by trigger or timer
220
+ // input can be either by forceRefresh or timer
221
221
  const isTimerTrigger = typeof input === 'string' && input.includes(timerEmitValue);
222
222
  const isManualTrigger = !isTimerTrigger;
223
223
  if (isManualTrigger) {
224
- inputByTrigger = input;
224
+ inputByForceRefresh = input;
225
225
  }
226
- // build params by trigger input
226
+ // build params by input
227
227
  // if paramsBuilder is provided, params will be the value of this function call
228
- // if paramsBuilder is not provided, params will be the value emitted by the trigger
229
- const params = options.paramsBuilder ? options.paramsBuilder(inputByTrigger) : inputByTrigger;
230
- // NOTE: using exhaustMap will NOT emit ${timerEmitValue}0 if trigger is not provided
231
- // using concatMap will emit ${timerEmitValue}0 if trigger is not provided
232
- const isFirstRequest = input === `${timerEmitValue}0`; // timer first emission when trigger is not provided
228
+ // if paramsBuilder is not provided, params will be the value emitted by the forceRefresh
229
+ const params = options.paramsBuilder ? options.paramsBuilder(inputByForceRefresh) : inputByForceRefresh;
230
+ // NOTE: using exhaustMap will NOT emit ${timerEmitValue}0 if forceRefresh is not provided
231
+ // using concatMap will emit ${timerEmitValue}0 if forceRefresh is not provided
232
+ const isFirstRequest = input === `${timerEmitValue}0`; // timer first emission when forceRefresh is not provided
233
233
  const shouldShowLoading = isManualTrigger || isFirstRequest;
234
234
  const fnResult = options.pollingFn(params);
235
235
  const fnResult$ = isObservable(fnResult) ? fnResult : isPromise$1(fnResult) ? from(fnResult) : of(fnResult);
@@ -626,10 +626,13 @@ class IdleDetectionService {
626
626
  }
627
627
  /**
628
628
  * Resets the idle timer when user activity is detected.
629
+ * @param withCountdownReset - Flag to indicate if countdown should be reset.
630
+ * By default, it only reset the idle-detection timer. If you enter the countdown phase, it won't stop the countdown.
631
+ * Pass true when you want to reset the countdown as well. This is useful when you click "Keep Me Signed In" button in cll-idle-detection component
629
632
  */
630
- resetTimer() {
633
+ resetTimer(withCountdownReset = false) {
631
634
  this.startIdleTimer();
632
- if (this.isCountingDown) {
635
+ if (withCountdownReset && this.isCountingDown) {
633
636
  this.stopCountdown();
634
637
  }
635
638
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-lift.mjs","sources":["../../../projects/ngx-lift/src/lib/operators/combine-latest-eager.operator.ts","../../../projects/ngx-lift/src/lib/operators/create-async-state.operator.ts","../../../projects/ngx-lift/src/lib/operators/distinct-on-change.operator.ts","../../../projects/ngx-lift/src/lib/operators/logger.operator.ts","../../../projects/ngx-lift/src/lib/utils/is-promise.util.ts","../../../projects/ngx-lift/src/lib/operators/poll.operator.ts","../../../projects/ngx-lift/src/lib/operators/start-with-tap.operator.ts","../../../projects/ngx-lift/src/lib/operators/switch-map-with-async-state.operator.ts","../../../projects/ngx-lift/src/lib/pipes/array-join.pipe.ts","../../../projects/ngx-lift/src/lib/pipes/byte-converter.pipe.ts","../../../projects/ngx-lift/src/lib/utils/difference-in-days.util.ts","../../../projects/ngx-lift/src/lib/utils/form.util.ts","../../../projects/ngx-lift/src/lib/utils/idle-detection/idle-detection.config.ts","../../../projects/ngx-lift/src/lib/utils/idle-detection/idle-detection.module.ts","../../../projects/ngx-lift/src/lib/utils/idle-detection/idle-detection.service.ts","../../../projects/ngx-lift/src/lib/utils/is-empty.util.ts","../../../projects/ngx-lift/src/lib/utils/is-equal.util.ts","../../../projects/ngx-lift/src/lib/utils/pick-by.util.ts","../../../projects/ngx-lift/src/lib/utils/omit-by.util.ts","../../../projects/ngx-lift/src/lib/utils/range.util.ts","../../../projects/ngx-lift/src/lib/const.ts","../../../projects/ngx-lift/src/lib/utils/url.util.ts","../../../projects/ngx-lift/src/lib/pipes/is-https.pipe.ts","../../../projects/ngx-lift/src/lib/pipes/mask.pipe.ts","../../../projects/ngx-lift/src/lib/pipes/range.pipe.ts","../../../projects/ngx-lift/src/lib/signals/combine-from.ts","../../../projects/ngx-lift/src/lib/signals/computed-async.ts","../../../projects/ngx-lift/src/lib/signals/create-trigger.ts","../../../projects/ngx-lift/src/lib/signals/inject-params.ts","../../../projects/ngx-lift/src/lib/signals/inject-query-params.ts","../../../projects/ngx-lift/src/lib/signals/merge-from.ts","../../../projects/ngx-lift/src/lib/validators/date-range.validator.ts","../../../projects/ngx-lift/src/lib/validators/intersection.validator.ts","../../../projects/ngx-lift/src/lib/validators/unique.validator.ts","../../../projects/ngx-lift/src/lib/validators/url.validator.ts","../../../projects/ngx-lift/src/public-api.ts","../../../projects/ngx-lift/src/ngx-lift.ts"],"sourcesContent":["import {combineLatest, Observable, startWith, Subject} from 'rxjs';\n\nexport function combineLatestEager<T extends Observable<unknown>[]>(\n sources: T,\n startWithNullForAll?: boolean,\n): Observable<{[K in keyof T]: T[K] extends Observable<infer U> ? U | null : never}>;\n\nexport function combineLatestEager<T extends Record<string, Observable<unknown>>>(\n sources: T,\n startWithNullForAll?: boolean,\n): Observable<{[K in keyof T]: T[K] extends Observable<infer U> ? U | null : never}>;\n\n/**\n * Combines multiple observables into a single observable emitting an array or dictionary\n * of the latest values from each source observable.\n * Adds startWith(null) for each Subject in combineLatest when the second parameter startWithNullForAll is false.\n * When startWithNullForAll is true, each observable will startWith null.\n *\n * @template T - The type of the data in the observables.\n *\n * @param {Array<Observable<T>> | Record<string, Observable<T>>} sources -\n * An array of observables or a dictionary of observables to be combined.\n *\n * @param {boolean} [startWithNullForAll=false] -\n * Determines whether to start each observable with a `null` value.\n *\n * @returns {Observable<Array<T | null> | Record<string, T | null>>} -\n * An observable emitting an array or dictionary of the latest values from each source observable.\n *\n * @throws {Error} -\n * Throws an error if the provided argument is not an array of observables or a dictionary of observables.\n */\nexport function combineLatestEager<T>(\n sources: Array<Observable<T>> | Record<string, Observable<T>>,\n startWithNullForAll = false,\n): Observable<Array<T | null> | Record<string, T | null>> {\n function observableMapper<T>(observable: Observable<T>) {\n if (startWithNullForAll) {\n return observable.pipe(startWith(null));\n } else {\n // Check if observable is a Subject, if true, apply startWith(null)\n return observable instanceof Subject ? observable.pipe(startWith(null)) : observable;\n }\n }\n\n if (Array.isArray(sources)) {\n // If sources is an array of observables\n return combineLatest(sources.map(observableMapper));\n } else if (typeof sources === 'object' && sources !== null) {\n // If sources is a dictionary of observables\n const observables: Record<string, Observable<T | null>> = {};\n\n for (const [key, value] of Object.entries(sources)) {\n observables[key] = observableMapper(value);\n }\n\n return combineLatest(observables);\n } else {\n throw new Error(\n `Invalid argument type. Please provide an array of observables or a dictionary of observables. Received: ${typeof sources}`,\n );\n }\n}\n","import {HttpErrorResponse} from '@angular/common/http';\nimport {catchError, map, Observable, of, pipe, startWith, tap, TapObserver, UnaryFunction} from 'rxjs';\n\nimport {AsyncState} from '../models/async-state.model';\n\n/**\n * createAsyncState transforms an Observable of type T into an Observable of AsyncState<T>.\n * AsyncState<T> represents the loading, error, and data states for asynchronous operations.\n *\n * @template T - The type of the data in the observable.\n * @template E - The type of the error that can occur.\n *\n * @param {Partial<Observer<T>> | ((value: T) => void)} [observerOrNextForOrigin] -\n * An optional parameter that can be a partial TapObserver<T> or a function to handle the next value or error in the original Observable.\n *\n * @returns {UnaryFunction<Observable<T>, Observable<AsyncState<T, E>>>} -\n * A function that transforms an observable stream into an asynchronous state.\n *\n * @example\n * Usage 1: Simple request\n * data$ = this.shopService.products$.pipe(\n * createAsyncState({\n * next: res => console.log('Side effect if success: ' + res),\n * error: error => console.error('Side effect if error: ' + error.message)\n * })\n * );\n *\n * Usage 2: Dependent requests\n * data$ = firstCall$.pipe(\n * switchMap(() => this.shopService.products$),\n * createAsyncState()\n * );\n *\n * Another implementation thought when refreshing the data: instead of startWith, `merge of` emit as the trigger\n *\n * subject.pipe(\n * switchMap(() => merge(\n * of({ loading: true, error: null, data: null }),\n * this.service.apiCall().pipe(\n * map(data => ({ loading: false, error: null, data })),\n * tap({\n * next: res => callback?.(res.data),\n * error: err => errorCallback?.(err),\n * }),\n * catchError(error => of({ loading: false, error, data: null })),\n * ),\n * ))\n * )\n *\n */\nexport function createAsyncState<T, E = HttpErrorResponse>(\n observerOrNextForOrigin?: Partial<TapObserver<T>> | ((value: T) => void),\n): UnaryFunction<Observable<T>, Observable<AsyncState<T, E>>> {\n return pipe(\n tap(observerOrNextForOrigin),\n map((data) => ({loading: false, error: null, data})),\n startWith({loading: true, error: null, data: null}),\n // retry(1), // if you want to add retry\n catchError((error: E) => of({loading: false, error, data: null})),\n );\n}\n","import {Observable, OperatorFunction, Subscriber, TeardownLogic} from 'rxjs';\n\n/**\n * Creates an operator function for RxJS Observables that filters out consecutive\n * values that are considered equal according to a provided comparator function,\n * and invokes a callback when a distinct value is encountered.\n *\n * @template T - The type of elements emitted by the observable.\n * @param {(previousValue: T, currentValue: T) => void} onChangeCallback\n * A callback function that will be invoked when a distinct value is encountered.\n * It receives the previous distinct value and the current value.\n * @param {(previousValue: T, currentValue: T) => boolean} [comparator]\n * A function that determines if two values are considered equal.\n * Defaults to a function that performs strict equality (===) comparison.\n * @returns {OperatorFunction<T, T>} - The RxJS operator function.\n *\n * @example\n * Example 1:\n * const source$ = new Observable<number>((observer) => {\n * observer.next(1);\n * observer.next(2);\n * observer.next(2);\n * observer.next(3);\n * observer.next(3);\n * observer.next(4);\n * observer.next(5);\n * observer.complete();\n * });\n *\n * const distinctOnChange$ = source$.pipe(\n * distinctOnChange(\n * (prev, curr) => console.log(`Value changed from ${prev} to: ${curr}`),\n * (prev, curr) => prev === curr,\n * ),\n * );\n * distinctOnChange$.subscribe((res) => console.log(res));\n *\n *\n * Example 2:\n * distinctOnChange<RDEValue<OseInstance>[]>(\n * () => {\n * this.store.dispatch(\n * addToast({\n * toast: {\n * type: ToastType.SUCCESS,\n * title: this.l10nService.getMessage('STATUS_CHANGE'),\n * description: this.l10nService.getMessage('STATUS_CHANGE_DESC'),\n * },\n * }),\n * );\n * },\n * (prev, current) =>\n * prev.every((prevInstance, index) => instanceComparator(prevInstance.entity, current[index].entity)),\n * );\n */\nexport function distinctOnChange<T>(\n onChangeCallback: (previousValue: T, currentValue: T) => void,\n comparator: (previousValue: T, currentValue: T) => boolean = (prev, curr) => prev === curr,\n): OperatorFunction<T, T> {\n return (source: Observable<T>) =>\n new Observable<T>((subscriber: Subscriber<T>): TeardownLogic => {\n let hasFirstValue = false;\n let previousValue: T;\n\n const subscription = source.subscribe({\n next: (currentValue: T) => {\n if (hasFirstValue) {\n if (!comparator(previousValue, currentValue)) {\n onChangeCallback(previousValue, currentValue);\n previousValue = currentValue;\n subscriber.next(currentValue);\n }\n } else {\n previousValue = currentValue;\n hasFirstValue = true;\n subscriber.next(currentValue);\n }\n },\n error: (err: unknown) => subscriber.error(err),\n complete: () => subscriber.complete(),\n });\n\n return () => subscription.unsubscribe();\n });\n}\n","import {OperatorFunction, pipe, tap} from 'rxjs';\n\n// Define a type for different logger functions\ntype LoggerType = 'count' | 'debug' | 'dir' | 'log' | 'table';\n\n// Define a more permissive type for console functions\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ConsoleFunction = (...args: any[]) => void;\n\n// Map each LoggerType to its corresponding console function\nconst loggerFunctions: Record<LoggerType, ConsoleFunction> = {\n count: console.count.bind(console),\n debug: console.debug.bind(console),\n dir: console.dir.bind(console),\n log: console.log.bind(console),\n table: console.table.bind(console),\n};\n\n/**\n * Logger operator for RxJS observables.\n *\n * @param loggerType The type of logger to be used: 'count', 'debug', 'dir', 'log', 'table'.\n * Defaults to 'log' if not provided or if an unknown type is specified.\n * @returns An RxJS operator function that logs values using the specified console function.\n */\nexport const logger = <T>(loggerType: LoggerType = 'log'): OperatorFunction<T, T> =>\n pipe(\n tap((value: T) => {\n const logFunction = loggerFunctions[loggerType] || console.log.bind(console);\n logFunction(value);\n }),\n );\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isPromise(obj: any): obj is Promise<any> {\n return !!obj && typeof obj.then === 'function';\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {Signal} from '@angular/core';\nimport {toObservable} from '@angular/core/rxjs-interop';\nimport {\n catchError,\n EMPTY,\n exhaustMap,\n from,\n isObservable,\n map,\n merge,\n Observable,\n of,\n share,\n startWith,\n timer,\n} from 'rxjs';\n\nimport {AsyncState} from '../models';\nimport {isPromise} from '../utils/is-promise.util';\n\n/**\n * Polls data at a specified interval and can be triggered manually.\n *\n * @template Data - The type of the data emitted by the polling function.\n * @template Input - The type of the input parameter used to build polling parameters.\n * @param {object} options - The configuration options for polling.\n * @param {number} options.interval - The interval in milliseconds between each poll.\n * @param {(params: any) => Observable<Data> | Data} options.pollingFn - A function that returns an Observable, Promise, or primitive value.\n * @param {Observable<Input> | Signal<Input>} [options.trigger] - An optional Observable or Signal that triggers a manual poll.\n * @param {(input: Input) => any} [options.paramsBuilder] - An optional function that builds parameters for the polling function based on the input. The value emitted by the trigger observable will serve as the parameter.\n * @returns {Observable<AsyncState<Data>>} An Observable emitting objects representing the state of the asynchronous operation.\n */\nexport function poll<Data>(options: {\n interval: number;\n pollingFn: (params: any) => Observable<Data> | Promise<Data> | Data;\n}): Observable<AsyncState<Data>>;\n\n// trigger output is the pollingFn params' input\nexport function poll<Data, Input>(options: {\n interval: number;\n pollingFn: (params: Input) => Observable<Data> | Promise<Data> | Data;\n trigger: Observable<Input> | Signal<Input>;\n}): Observable<AsyncState<Data>>;\n\n// paramsBuilder exists, trigger output is the paramsBuilder params' input\nexport function poll<Data, Input>(options: {\n interval: number;\n pollingFn: (params: any) => Observable<Data> | Promise<Data> | Data;\n trigger: Observable<Input> | Signal<Input>;\n paramsBuilder: (input: Input) => any;\n}): Observable<AsyncState<Data>>;\n\nexport function poll<Data, Input>(options: {\n interval: number;\n pollingFn: (params: any) => Observable<Data> | Promise<Data> | Data;\n trigger?: Observable<Input> | Signal<Input>;\n paramsBuilder?: (input: Input) => any;\n}): Observable<AsyncState<Data>> {\n const timerEmitValue = '__timer__emission__';\n const timer$ = timer(0, options.interval).pipe(map((i) => `${timerEmitValue}${i}`));\n\n const trigger$ =\n options.trigger === undefined\n ? EMPTY\n : isObservable(options.trigger)\n ? options.trigger\n : toObservable(options.trigger);\n\n let inputByTrigger: Input | undefined = undefined; // if trigger is not provided, input will be undefined\n\n return merge(trigger$, timer$).pipe(\n exhaustMap((input) => {\n // input can be either by trigger or timer\n const isTimerTrigger = typeof input === 'string' && input.includes(timerEmitValue);\n const isManualTrigger = !isTimerTrigger;\n if (isManualTrigger) {\n inputByTrigger = input as Input;\n }\n\n // build params by trigger input\n // if paramsBuilder is provided, params will be the value of this function call\n // if paramsBuilder is not provided, params will be the value emitted by the trigger\n const params = options.paramsBuilder ? options.paramsBuilder(inputByTrigger as Input) : inputByTrigger;\n\n // NOTE: using exhaustMap will NOT emit ${timerEmitValue}0 if trigger is not provided\n // using concatMap will emit ${timerEmitValue}0 if trigger is not provided\n const isFirstRequest = input === `${timerEmitValue}0`; // timer first emission when trigger is not provided\n const shouldShowLoading = isManualTrigger || isFirstRequest;\n\n const fnResult = options.pollingFn(params);\n const fnResult$ = isObservable(fnResult) ? fnResult : isPromise(fnResult) ? from(fnResult) : of(fnResult);\n\n let observable$ = fnResult$.pipe(\n map((data) => ({loading: false, error: null, data})),\n catchError((error) => of({loading: false, error, data: null})),\n );\n\n if (shouldShowLoading) {\n observable$ = observable$.pipe(startWith({loading: true, error: null, data: null}));\n }\n\n return observable$;\n }),\n share(),\n );\n}\n","import {Observable} from 'rxjs';\n\n/**\n * Operator that taps into a callback before the source Observable starts emitting values.\n *\n * This operator is useful for triggering a side effect before the main Observable starts emitting.\n *\n * @param callback A function to be executed before the source Observable emits its first value.\n * @returns An RxJS operator function that taps into the callback and then switchMaps to the source Observable.\n */\nexport function startWithTap<T>(callback: () => void) {\n return (source: Observable<T>) => {\n callback();\n return source;\n };\n}\n","import {HttpErrorResponse} from '@angular/common/http';\nimport {Observable, OperatorFunction, switchMap} from 'rxjs';\n\nimport {AsyncState} from '../models';\nimport {createAsyncState} from './create-async-state.operator';\n\n/**\n * Custom RxJS operator that uses switchMap to handle asynchronous operations and\n * transforms the emitted values into an AsyncState object.\n *\n * @template T - The type of data emitted by the observable returned by the project.\n * @template K - The type of value emitted by the source observable.\n * @template E - The type of error that can be encountered during the asynchronous operation.\n *\n * @param {function(K): Observable<T>} project - A function that takes a value emitted by the source\n * observable and returns an observable representing an asynchronous operation.\n *\n * @returns {OperatorFunction<K, AsyncState<T, E>>} - An RxJS operator that transforms the source observable into\n * an observable of AsyncState objects.\n *\n * @example\n * // Usage of the switchMapWithAsyncState operator\n * const source$ = new BehaviorSubject<number>(1);\n *\n * const asyncOperation = (value: number) => {\n * return of(value * 2).pipe(delay(1000));\n * };\n *\n * const result$ = source$.pipe(switchMapWithAsyncState(asyncOperation));\n * result$.subscribe((state) => {\n * console.log(state); // Outputs AsyncState objects with loading, data, and error properties.\n * });\n */\nexport function switchMapWithAsyncState<T, K, E = HttpErrorResponse>(\n project: (value: K, index: number) => Observable<T>,\n): OperatorFunction<K, AsyncState<T, E>> {\n return (source: Observable<K>) =>\n source.pipe(switchMap((value, index) => project(value, index).pipe(createAsyncState<T, E>())));\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'arrayJoin',\n standalone: true,\n})\nexport class ArrayJoinPipe implements PipeTransform {\n transform(value: unknown, separator: string = ',') {\n if (Array.isArray(value)) {\n return value.join(separator);\n }\n\n // For non-array cases or unexpected types, return the value as is\n return value;\n }\n}\n","import {inject, LOCALE_ID, Pipe, PipeTransform} from '@angular/core';\n\n/**\n * import { LOCALE_ID, NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { AppComponent } from './app.component';\n * import { registerLocaleData } from '@angular/common';\n *\n * import localeEn from '@angular/common/locales/en';\n * import localeFr from '@angular/common/locales/fr';\n *\n * // Register locales\n * registerLocaleData(localeEn);\n * registerLocaleData(localeFr);\n *\n * @NgModule({\n * declarations: [AppComponent],\n * imports: [BrowserModule],\n * providers: [\n * {\n * provide: LOCALE_ID,\n * useFactory: () => {\n * // Use the browser's language or a default language\n * return navigator.language || 'en';\n * },\n * },\n * ],\n * bootstrap: [AppComponent],\n * })\n * export class AppModule {}\n */\n\n@Pipe({\n name: 'byteConverter',\n standalone: true,\n})\nexport class ByteConverterPipe implements PipeTransform {\n private locale = inject<string>(LOCALE_ID);\n // If using navigator.language directly in the pipe, this approach directly uses the browser's language at the moment the ByteConverterPipe is constructed. If the user changes the language while using the application, it won't be automatically reflected. If dynamic language changes are a requirement, using the LOCALE_ID provider as demonstrated in the AppModule is a more Angular-centric approach.\n // private locale: string;\n // constructor() {\n // // Use navigator.language as the default locale\n // this.locale = navigator.language || 'en';\n // }\n\n transform(value: number): string;\n transform(value?: number): string | null;\n transform(value?: number | null): string | null;\n transform(value?: null | number | undefined): string | null {\n if (value === null || value === undefined || isNaN(value)) {\n return null;\n }\n\n const units = ['BYTE', 'KB', 'MB', 'GB', 'TB'];\n let unitIndex = 0;\n\n while (value >= 1024 && unitIndex < units.length - 1) {\n value /= 1024;\n unitIndex++;\n }\n\n const translationObject = translations[this.locale] || translations['en'];\n const key = units[unitIndex];\n\n return this.formatNumber(value) + ' ' + translationObject[key];\n }\n\n private formatNumber(value: number): string {\n return new Intl.NumberFormat(this.locale, {maximumFractionDigits: 2}).format(value);\n }\n}\n\nconst translations: Record<string, Record<string, string>> = {\n en: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n 'en-US': {\n // You can provide specific variations for en-US if needed\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n de: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n es: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n fr: {\n BYTE: 'o',\n KB: 'Ko',\n MB: 'Mo',\n GB: 'Go',\n TB: 'To',\n },\n it: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n ja: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n ko: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n 'pt-BR': {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n 'zh-CN': {\n BYTE: '字节',\n KB: '千字节',\n MB: '兆字节',\n GB: '千兆字节',\n TB: '太字节',\n },\n 'zh-TW': {\n BYTE: '位元組',\n KB: '千位元組',\n MB: '兆位元組',\n GB: '千兆位元組',\n TB: '太位元組',\n },\n ru: {\n BYTE: 'Б',\n KB: 'КБ',\n MB: 'МБ',\n GB: 'ГБ',\n TB: 'ТБ',\n },\n};\n","/**\n * Calculates the difference in whole days between two dates.\n *\n * @param {Date | number | string} dateLeft - The date from which the difference is measured (the reference date).\n * Can be a Date object, a number representing milliseconds since the Unix epoch,\n * or a string in a format parseable by the Date constructor.\n * @param {Date | number | string} dateRight - The date to be compared against the reference date.\n * Can be a Date object, a number representing milliseconds since the Unix epoch,\n * or a string in a format parseable by the Date constructor.\n * @returns {number} The number of whole days between the reference date (dateLeft) and the compared date (dateRight).\n *\n * @example\n * // How many whole days are between '2022-09-08' and '2023-09-18'?\n * const result = differenceInDays('2022-09-08', new Date('2023-09-18'));\n *\n * The result is 0 if the diff is within a full day\n * const result = differenceInDays('2022-09-08T00:00:00', new Date('2023-09-08T14:00:00'));\n */\nexport function differenceInDays(dateLeft: Date | number | string, dateRight: Date | number | string) {\n const _dateLeft = new Date(dateLeft);\n const _dateRight = new Date(dateRight);\n\n const difference = (_dateLeft.getTime() - _dateRight.getTime()) / (1000 * 60 * 60 * 24);\n\n return Math.trunc(difference);\n}\n","import {AbstractControl, AsyncValidatorFn, ValidatorFn, Validators} from '@angular/forms';\nimport {of} from 'rxjs';\n\n/**\n * Provides a conditional validator that applies the specified validator functions only if the condition is met.\n *\n * @param condition A function that determines whether the validators should be applied.\n * @param trueValidatorFn The validator function or an array of validator functions to be applied when the condition is true.\n * @param falseValidatorFn Optional. The validator function or an array of validator functions to be applied when the condition is false.\n * @returns A validator function that can be used with Angular Reactive Forms.\n */\nexport function ifValidator(\n condition: (control: AbstractControl) => boolean,\n trueValidatorFn: ValidatorFn | ValidatorFn[],\n falseValidatorFn?: ValidatorFn | ValidatorFn[],\n): ValidatorFn {\n /**\n * @param control The AbstractControl to validate.\n * @returns Validation errors if the condition is met; otherwise, null.\n */\n return (control: AbstractControl): Validators | null => {\n if (!trueValidatorFn || !condition(control)) {\n return composeValidators(control, falseValidatorFn);\n }\n\n return composeValidators(control, trueValidatorFn);\n };\n}\n\n/**\n * Provides a conditional async validator that applies the specified async validator function only if the condition is met.\n *\n * @param condition A function that determines whether the async validator should be applied.\n * @param validatorFn The async validator function to be applied conditionally.\n * @returns An async validator function that can be used with Angular Reactive Forms.\n */\nexport function ifAsyncValidator(\n condition: (control: AbstractControl) => boolean,\n validatorFn: AsyncValidatorFn,\n): AsyncValidatorFn {\n /**\n * @param control The AbstractControl to validate asynchronously.\n * @returns An observable that emits validation errors if the condition is met; otherwise, emits null.\n */\n return (control: AbstractControl) => {\n if (!validatorFn || !condition(control)) {\n return of(null);\n }\n\n return validatorFn(control);\n };\n}\n\n/**\n * Composes and applies the provided validators to the given AbstractControl.\n *\n * @param control The AbstractControl to validate.\n * @param validatorFn The validator function or an array of validator functions to be applied.\n * @returns Validation errors if the validators are applicable; otherwise, null.\n */\nfunction composeValidators(\n control: AbstractControl,\n validatorFn: ValidatorFn | ValidatorFn[] | undefined,\n): Validators | null {\n if (!validatorFn) {\n return null;\n }\n\n const validatorFns = Array.isArray(validatorFn) ? validatorFn : [validatorFn];\n return Validators.compose(validatorFns)?.(control) || null;\n}\n","import {makeEnvironmentProviders} from '@angular/core';\n\nexport class IdleDetectionConfig {\n idleDurationInSeconds?: number;\n timeoutDurationInSeconds?: number;\n}\n\nexport function provideIdleDetectionConfig(config: IdleDetectionConfig) {\n return makeEnvironmentProviders([{provide: IdleDetectionConfig, useValue: config}]);\n}\n","import {ModuleWithProviders, NgModule} from '@angular/core';\n\nimport {IdleDetectionConfig, provideIdleDetectionConfig} from './idle-detection.config';\n\n/**\n * Idle detection module.\n * @deprecated use provideIdleDetectionConfig(config: IdleDetectionConfig) instead\n */\n@NgModule({\n imports: [],\n})\nexport class IdleDetectionModule {\n static forRoot(config: IdleDetectionConfig): ModuleWithProviders<IdleDetectionModule> {\n return {\n ngModule: IdleDetectionModule,\n providers: [provideIdleDetectionConfig(config)],\n };\n }\n}\n","import {Injectable, Optional} from '@angular/core';\nimport {fromEvent, merge, Subject, Subscription, throttleTime} from 'rxjs';\n\nimport {IdleDetectionConfig} from './idle-detection.config';\n\n/**\n * Service for detecting user idle time and implementing a countdown.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class IdleDetectionService {\n /**\n * The list of interruption events that will end the idle detection.\n */\n private interruptionEvents = [\n 'click',\n 'keydown',\n 'keypress',\n 'mousemove',\n 'mousedown',\n 'scroll',\n 'wheel',\n 'touchmove',\n 'pointermove',\n 'resize',\n ];\n private interruptionSubscription?: Subscription;\n\n /**\n * The default idle duration in seconds (19 minutes).\n */\n private idleDuration = 19 * 60;\n\n /**\n * The default timeout duration in seconds (1 minute).\n */\n private timeoutDuration = 60;\n\n /**\n * Timer for idle detection.\n */\n private idleTimer?: number;\n\n /**\n * Timer for countdown.\n */\n private countdownTimer?: number;\n\n /**\n * Flag to indicate if countdown is in progress.\n */\n private isCountingDown = false;\n\n /**\n * The current countdown value.\n */\n private countdown = this.timeoutDuration;\n\n /**\n * Subject to emit when idle period ends.\n */\n private idleEndSubject = new Subject<void>();\n\n /**\n * Subject to emit the countdown value.\n */\n private countdownSubject = new Subject<number>();\n\n /**\n * Subject to emit when countdown ends.\n */\n private countdownEndSubject = new Subject<void>();\n\n /**\n * Constructs the IdleDetectionService.\n * @param config - Optional configuration for idle and timeout durations.\n */\n constructor(@Optional() config: IdleDetectionConfig) {\n if (config) {\n this.setConfig(config);\n }\n }\n\n /**\n * Starts to watch for user inactivity.\n */\n startWatching() {\n this.setupInterruptionEvents();\n this.startIdleTimer();\n }\n\n /**\n * Resets the idle timer when user activity is detected.\n */\n resetTimer() {\n this.startIdleTimer();\n\n if (this.isCountingDown) {\n this.stopCountdown();\n }\n }\n\n /**\n * Sets up the interruption events that will end the idle detection.\n * Listens to a set of events on the document (e.g. click, keydown, mousemove, etc.).\n * When any of these events is triggered, the idle timer is reset.\n * Uses `throttleTime` operator to only trigger the reset when the events are spaced\n * out by at least 1000ms (1 second).\n * @private\n */\n private setupInterruptionEvents() {\n if (!this.interruptionSubscription) {\n const throttledInterruptionEvents = this.interruptionEvents.map((eventName) =>\n fromEvent(document, eventName).pipe(throttleTime(1000)),\n );\n this.interruptionSubscription = merge(...throttledInterruptionEvents).subscribe(() => this.resetTimer());\n }\n }\n\n /**\n * Starts the idle timer.\n * When the timer expires, it emits an event through onIdleEnd() and starts the countdown.\n */\n private startIdleTimer() {\n clearTimeout(this.idleTimer);\n\n this.idleTimer = window.setTimeout(() => {\n // after idle period, user inactivity detected\n this.idleEndSubject.next();\n this.startCountdown();\n }, this.idleDuration * 1000);\n }\n\n /**\n * Starts the countdown.\n */\n private startCountdown() {\n this.isCountingDown = true;\n this.countdownSubject.next(this.countdown);\n\n this.countdownTimer = window.setInterval(() => {\n this.countdown--;\n this.countdownSubject.next(this.countdown);\n\n if (this.countdown <= 0) {\n this.stopCountdown();\n this.countdownEndSubject.next();\n }\n }, 1000);\n }\n\n /**\n * Stops the countdown.\n */\n private stopCountdown() {\n clearInterval(this.countdownTimer);\n this.isCountingDown = false;\n\n // reset countdown\n this.countdown = this.timeoutDuration;\n }\n\n /**\n * Returns an observable that emits when the user has been idle for a long period.\n * Developers can use this to perform actions like opening a dialog.\n *\n * user has been inactive for a long period (idleDuration), at this moment, idle detection phase ends, onIdleEnd event is emitted, and then enter countdown/timeout phase.\n * During the countdown phase:\n * - if user has any activity, countdown phase immediately ends and restart the idle detection phase.\n * - else, countdownEnd event will be emitted when timeoutDuration is over.\n * @returns {Observable<void>} - Observable for idle end event.\n */\n onIdleEnd() {\n return this.idleEndSubject.asObservable();\n }\n\n /**\n * Returns an observable that emits when the countdown ends.\n * Usually means the user has been inactive for a very long time and should be logged out.\n * @returns {Observable<void>} - Observable for countdown end event.\n */\n onTimeoutEnd() {\n return this.countdownEndSubject.asObservable();\n }\n\n /**\n * Returns an observable that emits the countdown value every second.\n * @returns {Observable<number>} - Observable for countdown value.\n */\n onCountDown() {\n return this.countdownSubject.asObservable();\n }\n\n /**\n * Clears all timers when the component is destroyed.\n */\n clearTimers() {\n clearTimeout(this.idleTimer);\n clearInterval(this.countdownTimer);\n\n this.interruptionSubscription?.unsubscribe();\n this.interruptionSubscription = undefined;\n }\n\n /**\n * Sets the idle and timeout durations based on the provided configuration.\n * @param config - Configuration object with idle and timeout durations.\n */\n setConfig(config: IdleDetectionConfig) {\n if (config.idleDurationInSeconds) {\n this.idleDuration = config.idleDurationInSeconds;\n }\n\n if (config.timeoutDurationInSeconds) {\n this.countdown = this.timeoutDuration = config.timeoutDurationInSeconds;\n }\n }\n}\n","/**\n * Check if a value is empty.\n * @param {T | undefined | null} value - The value to check for emptiness.\n * @returns {boolean} - Returns true if the value is empty, otherwise false.\n */\nexport function isEmpty<T extends object | string | Array<unknown>>(value: T | undefined | null): value is null {\n if (value == null) return true;\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (typeof value === 'object') {\n return Object.keys(value as Record<string, unknown>).length === 0;\n }\n\n return false;\n}\n","/**\n * Check if two values are deeply equal.\n * @param {T} value1 - The first value to compare.\n * @param {T} value2 - The second value to compare.\n * @returns {boolean} - Returns true if the values are deeply equal, otherwise false.\n */\nexport function isEqual<T>(value1: T, value2: T): boolean {\n if (value1 === value2) return true;\n\n if (typeof value1 !== 'object' || typeof value2 !== 'object' || value1 === null || value2 === null) {\n return false;\n }\n\n const keys1 = Object.keys(value1) as Array<keyof T>;\n const keys2 = Object.keys(value2) as Array<keyof T>;\n\n if (keys1.length !== keys2.length) return false;\n\n for (const key of keys1) {\n if (!keys2.includes(key) || !isEqual(value1[key], value2[key])) {\n return false;\n }\n }\n\n return true;\n}\n","/**\n * Create an object composed of object properties that satisfy a given condition.\n * @param {T} source - The object to pick properties from.\n * @param {(value: T[keyof T], key: string) => boolean} predicate - The function invoked per property.\n * @returns {Partial<T>} - Returns the new object.\n */\nexport function pickBy<T>(source: T, predicate: (value: T[keyof T], key: string) => boolean): Partial<T> {\n const result: Partial<T> = {};\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key) && predicate(source[key], key)) {\n result[key] = source[key];\n }\n }\n\n return result;\n}\n","import {pickBy} from './pick-by.util';\n\n/**\n * Create an object composed of object properties that do not satisfy a given condition.\n * @param {T} source - The object to omit properties from.\n * @param {(value: T[keyof T], key: string) => boolean} predicate - The function invoked per property.\n * @returns {Partial<T>} - Returns the new object.\n */\nexport function omitBy<T>(source: T, predicate: (value: T[keyof T], key: string) => boolean): Partial<T> {\n // Negate the predicate and pass it to pickBy\n return pickBy(source, (value, key) => !predicate(value, key));\n}\n","/**\n * Creates an array of numbers (positive and/or negative) progressing from start up to, but not including, end.\n * A step of -1 is used if a negative start is specified without an end or step.\n * If end is not specified, it's set to start with start then set to 0.\n *\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nexport function range(start: number, end?: number | undefined, step?: number | undefined, fromRight = false) {\n // if range takes only 1 input, that input is end, start with 0\n if (end === undefined) {\n end = start;\n start = 0;\n }\n\n step = step === undefined ? (start < end ? 1 : -1) : step;\n\n let index = -1;\n let length = Math.max(Math.ceil((end - start) / (step || 1)), 0);\n const result = new Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n","// https://regex101.com/library/mX1xW0\nexport const emailPattern = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/;\n\nexport const urlPattern =\n /^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/;\nexport const httpsPattern =\n /^https:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/;\n\n// https://regex101.com/library/dT0vT3?orderBy=RELEVANCE&search=ip\nexport const ipRegex =\n /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n\n// A fully qualified domain name (FQDN) is a domain name that specifies its exact location in the tree hierarchy of the Domain Name System (DNS)\n// https://www.regextester.com/103452\nexport const fqdnRegex = /(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\\.)+[a-zA-Z]{2,63}$)/;\n","import {fqdnRegex, httpsPattern, ipRegex, urlPattern} from '../const';\n\n/**\n * Check if hostname is IP\n * @param hostname new URL(your-url).hostname\n * @returns true if hostname is a IP\n */\nexport function isIP(hostname: string) {\n return ipRegex.test(hostname);\n}\n\n/**\n * Check if hostname is FQDN\n * @param hostname new URL(your-url).hostname\n * @returns true if hostname is a FQDN\n */\nexport function isFQDN(hostname: string) {\n return fqdnRegex.test(hostname);\n}\n\n/**\n * Check if url is valid\n * @param url\n * @returns true if valid\n */\nexport function isURL(url: string) {\n return urlPattern.test(url);\n}\n\n/**\n * Check if a url starts with https, the url must be a valid url.\n * @param url\n * @returns true if it's a https valid url\n */\nexport function isHttps(url: string) {\n return httpsPattern.test(url);\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nimport {isHttps} from '../utils';\n\n@Pipe({\n name: 'isHttps',\n standalone: true,\n})\nexport class IsHttpsPipe implements PipeTransform {\n transform(value: string): boolean {\n return isHttps(value);\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nconst unmaskNumber = 6;\nconst maskChar = '*';\n\nexport interface MaskOptions {\n unmaskedPrefixLength?: number;\n unmaskedSuffixLength?: number;\n masked?: boolean;\n}\n\n@Pipe({\n name: 'mask',\n standalone: true,\n})\nexport class MaskPipe implements PipeTransform {\n /**\n * Transforms the input string by masking characters based on the provided options.\n *\n * @param {string} value - The input string to be masked.\n * @param {MaskOptions} [options={}] - Options for customizing the masking behavior.\n * @returns {string} - The masked string.\n */\n transform(value: string, options: MaskOptions = {}): string {\n const {unmaskedPrefixLength = unmaskNumber, unmaskedSuffixLength = unmaskNumber, masked = true} = options;\n\n if (\n value.length <= unmaskedPrefixLength + unmaskedSuffixLength ||\n unmaskedPrefixLength < 0 ||\n unmaskedSuffixLength < 0 ||\n !masked\n ) {\n return value;\n }\n\n return value\n .split('')\n .map((char, i) => (i < unmaskedPrefixLength || i > value.length - unmaskedSuffixLength - 1 ? char : maskChar))\n .join('');\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nimport {range} from '../utils';\n\n@Pipe({\n name: 'range',\n standalone: true,\n})\nexport class RangePipe implements PipeTransform {\n transform(value: [number]): number[];\n transform(value: [number, number]): number[];\n transform(value: [number, number, number]): number[];\n transform(value: [number, number, number, boolean]): number[];\n transform(value: unknown): number[] {\n const input = value as [number, number, number, boolean];\n return range(...input);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {assertInInjectionContext, computed, Injector, isSignal, Signal, untracked} from '@angular/core';\nimport {toObservable, toSignal} from '@angular/core/rxjs-interop';\nimport {\n combineLatest,\n distinctUntilChanged,\n from,\n identity,\n isObservable,\n ObservableInput,\n ObservableInputTuple,\n OperatorFunction,\n startWith,\n} from 'rxjs';\n\ntype ObservableSignalInput<T> = ObservableInput<T> | Signal<T>;\n\ntype ObservableSignalInputTuple<T> = {\n [K in keyof T]: ObservableSignalInput<T[K]> | (() => T[K]);\n};\n\n// pick from ToSignalOptions\nexport type CombineFromOptions<IValue> = {\n readonly injector?: Injector;\n readonly initialValue?: IValue;\n};\n\n// array inputs only\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n): Signal<Output>;\n\n// ---------- 3 args with array inputs -------------\n// combineFrom([signal, obs$], pipeOperator, { initialValue: [1,2] }), Input is [signal, obs$]\n// 1. no initialValue\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<undefined>,\n): Signal<Output | undefined>;\n// 2. initialValue is null, returning type should include null\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<null>,\n): Signal<Output | null>;\n// 3. provide initialValue\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<Output>,\n): Signal<Output>;\n\n// ---------- 2 args wit array inputs -------------\n// 1. no initialValue\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n options?: CombineFromOptions<undefined>,\n): Signal<Output | undefined>;\n// 2. initialValue is null, returning type should include null\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n options?: CombineFromOptions<null>,\n): Signal<Output | null>;\n// 3. provide initialValue\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n options?: CombineFromOptions<Output>,\n): Signal<Output>;\n\n// object input only, e.g. Input is { a: signal, b: obs$ }\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n): Signal<Output>;\n\n// ----------------- 3 args with object input --------------------\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<undefined>,\n): Signal<Output | undefined>;\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<null>,\n): Signal<Output | null>;\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<Output>,\n): Signal<Output>;\n\n// ----------------- 2 args with object input --------------------\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n options?: CombineFromOptions<undefined>,\n): Signal<Output | undefined>;\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n options?: CombineFromOptions<null>,\n): Signal<Output | null>;\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n options?: CombineFromOptions<Output>,\n): Signal<Output>;\n\n/**\n * Combines multiple `Observable` or `Signal` sources into a `Signal` that emits their values. It's like combineLatest.\n *\n * @param {ObservableSignalInputTuple} sources - Array or object of `Observable` or `Signal` values\n * @param {OperatorFunction} [operator] - Operator to apply to the combined values\n * @param {CombineFromOptions} [options] - Options including `initialValue` and `injector`\n * @returns Signal emitting the combined values\n *\n * @example\n * ```ts\n * export class Component {\n * private readonly userService = inject(UserService);\n * page = signal(2);\n *\n * data = combineFrom(\n * [this.page, this.userService.users$],\n * pipe(\n * switchMap(([page, users]) => this.dataService.getData(page, users)),\n * startWith([])\n * )\n * );\n * }\n * ```\n */\nexport function combineFrom<Input = any, Output = Input>(...args: any[]): Signal<Output | null | undefined> {\n assertInInjectionContext(combineFrom);\n\n const {normalizedSources, hasInitValue, operator, options} = normalizeArgs<Input, Output>(args);\n\n const ret = hasInitValue\n ? toSignal(combineLatest(normalizedSources).pipe(operator), {\n initialValue: options!.initialValue!,\n injector: options?.injector,\n })\n : (toSignal(combineLatest(normalizedSources).pipe(operator), {\n injector: options?.injector,\n // requireSync: true,\n }) as Signal<Output | undefined>);\n\n return ret;\n}\n\nfunction normalizeArgs<Input, Output>(\n args: any[],\n): {\n normalizedSources: ObservableInputTuple<Input>;\n operator: OperatorFunction<Input, Output>;\n hasInitValue: boolean;\n options: CombineFromOptions<Output> | undefined;\n} {\n if (!args || args.length < 1 || typeof args[0] !== 'object') {\n throw new TypeError('combineFrom needs sources');\n }\n\n const hasOperator = typeof args[1] === 'function';\n\n if (args.length === 3 && !hasOperator) {\n throw new TypeError('combineFrom needs a pipe operator as the second argument');\n }\n\n // pass sources and options\n if (!hasOperator) {\n // add identity function to args at index 1 as operator function as x=>x\n args.splice(1, 0, identity);\n }\n\n // if no operator passed, identity will be operator\n const [sources, operator, options] = args;\n\n const hasInitValue = options?.initialValue !== undefined;\n\n const normalizedSources = Object.entries(sources).reduce(\n (acc, [keyOrIndex, source]) => {\n if (isSignal(source)) {\n acc[keyOrIndex] = toObservable(source, {injector: options?.injector}).pipe(\n // toObservable doesn't immediately emit initialValue of the signal\n startWith(untracked(source)),\n );\n } else if (isObservable(source)) {\n acc[keyOrIndex] = source.pipe(distinctUntilChanged());\n } else if (typeof source === 'function') {\n // seldom use: pass function like () => 5\n const computedRes = computed(source as () => unknown);\n acc[keyOrIndex] = toObservable(computedRes, {injector: options?.injector}).pipe(startWith(source()));\n } else {\n // seldom use: pass promise, Map, array, etc that from accepts\n acc[keyOrIndex] = from(source as any).pipe(distinctUntilChanged());\n }\n return acc;\n },\n (Array.isArray(sources) ? [] : {}) as any,\n );\n\n return {normalizedSources, operator, hasInitValue, options};\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {computed, CreateComputedOptions, DestroyRef, effect, inject, Signal, signal, untracked} from '@angular/core';\nimport {concatAll, exhaustAll, isObservable, mergeAll, Observable, Subject, switchAll} from 'rxjs';\n\ntype ComputedAsyncBehavior = 'switch' | 'merge' | 'concat' | 'exhaust';\n\n// { equal, behavior }\ntype BaseOptions<T> = CreateComputedOptions<T> & {behavior?: ComputedAsyncBehavior};\n\ntype OptionsWithInitialValue<T> = {initialValue: T} & BaseOptions<T>;\ntype OptionsWithOptionalInitialValue<T> = {initialValue?: undefined} & BaseOptions<T>;\ntype OptionsWithRequireSync<T> = {requireSync: true} & BaseOptions<T>;\n\n// without options\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | Promise<T> | T | undefined,\n): Signal<T | undefined>;\n\n// with optional initialValue\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | Promise<T> | T | undefined,\n options: OptionsWithOptionalInitialValue<T>,\n): Signal<T | undefined>;\n\n// with initialValue\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | Promise<T> | T | undefined,\n options: OptionsWithInitialValue<T>,\n): Signal<T>;\n\n// for promise, without initialValue but set requireSync as true, throw error\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Promise<T>,\n options: OptionsWithOptionalInitialValue<T> & {requireSync: true},\n): never;\n\n// for observables, without initialValue, without requireSync, return T | undefined\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | T | undefined,\n options: {\n initialValue?: undefined;\n requireSync?: false;\n } & BaseOptions<T>,\n): Signal<T | undefined>;\n\n// for observables, without initialValue, but requireSync is true, return T\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | T,\n options: OptionsWithRequireSync<T> & {initialValue?: undefined | T},\n): Signal<T>;\n\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | Promise<T> | T | undefined,\n options: any = {},\n): Signal<T | undefined> {\n const destroyRef = inject(DestroyRef);\n\n const sourceSubject = new Subject<Promise<T> | Observable<T>>();\n const source$ = flattenObservable(sourceSubject, options.behavior || 'switch');\n\n const sourceValue = signal<T | undefined>(options.initialValue);\n\n const sourceResult = source$.subscribe({\n next: (value) => sourceValue.set(value),\n error: (error) => {\n sourceValue.set(error);\n // Error should be handled by the user\n // throw error;\n },\n });\n\n destroyRef.onDestroy(() => sourceResult.unsubscribe());\n\n if (options.requireSync && options.initialValue === undefined) {\n const initialEmission = computeFn(undefined);\n\n if (isPromise(initialEmission)) {\n throw new Error(`Promises cannot work with requireSync. Set requireSync to false or pass an initialValue.`);\n }\n\n if (isObservable(initialEmission)) {\n sourceSubject.next(initialEmission);\n } else {\n // primitive value T\n sourceValue.set(initialEmission);\n }\n }\n\n if (options.requireSync && sourceValue() === undefined) {\n throw new Error(`The observable doesn't emit synchronously. Set requireSync to false or pass an initialValue.`);\n }\n\n let shouldSkipFirstComputation = options.requireSync === true;\n\n effect(() => {\n const currentValue = untracked(() => sourceValue());\n\n const newSource = computeFn(currentValue);\n\n if (shouldSkipFirstComputation) {\n shouldSkipFirstComputation = false;\n return;\n }\n\n if (isPromise(newSource) || isObservable(newSource)) {\n untracked(() => sourceSubject.next(newSource));\n } else {\n untracked(() => sourceValue.set(newSource));\n }\n });\n\n return computed(() => sourceValue() as T, {equal: options.equal});\n}\n\nfunction flattenObservable<T>(\n source: Subject<Promise<T> | Observable<T>>,\n behavior: ComputedAsyncBehavior,\n): Observable<T> {\n const behaviorMap = {\n switch: switchAll,\n merge: mergeAll,\n concat: concatAll,\n exhaust: exhaustAll,\n };\n\n return source.pipe(behaviorMap[behavior]());\n}\n\nfunction isPromise<T>(value: any): value is Promise<T> {\n return value && typeof value.then === 'function';\n}\n","import {signal} from '@angular/core';\n\nexport function createTrigger() {\n const sourceSignal = signal(0);\n\n return {\n next: () => {\n sourceSignal.update((v) => v + 1);\n },\n value: sourceSignal.asReadonly(),\n };\n}\n","import {assertInInjectionContext, inject, type Signal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {ActivatedRoute, type Params} from '@angular/router';\nimport {map} from 'rxjs';\n\ntype ParamsTransformFn<Output> = (params: Params) => Output;\n\n/**\n * The `InputOptions` interface defines options for configuring the behavior of the `injectParams` function.\n *\n * @template Output - The expected type of the read value.\n */\nexport interface ParamsOptions<Output> {\n /**\n * A transformation function to convert the written value to the expected read value.\n *\n * @param v - The value to transform.\n * @returns The transformed value.\n */\n transform?: (v: string) => Output;\n\n /**\n * The initial value to use if the parameter is not present or undefined.\n */\n initialValue?: Output;\n}\n\n/**\n * Injects the params from the current route.\n * If a key is provided, returns the value of that key.\n * If a transform function is provided, returns the result of the function.\n * Otherwise, returns the entire params object.\n *\n * @example\n * const params = injectParams(); // Returns the entire params object\n * const userId = injectParams('id'); // Returns the value of the 'id' param\n * const userId = injectParams(p => p['id'] as string); // Returns the 'id' param using a custom transform function\n * const userId = injectParams('id', { transform: numberAttribute, initialValue: 1 });\n *\n * @param keyOrParamsTransform OPTIONAL The key of the param to return, or a transform function to apply to the params object\n */\nexport function injectParams(): Signal<Params>;\n\nexport function injectParams<Output>(fn: ParamsTransformFn<Output>): Signal<Output>;\n\nexport function injectParams(key: string): Signal<string | null>;\n\n// for boolean or number, if initialValue is provided, transform is a must\nexport function injectParams(\n key: string,\n options: {transform: (v: string) => boolean; initialValue: boolean},\n): Signal<boolean>;\nexport function injectParams(\n key: string,\n options: {transform: (v: string) => number; initialValue: number},\n): Signal<number>;\n// for string, transform is optional\nexport function injectParams(\n key: string,\n options: {transform?: (v: string) => string; initialValue: string},\n): Signal<string>;\n\n// initialValue not provided, must provide transform fn\nexport function injectParams(\n key: string,\n options: {transform: (v: string) => boolean; initialValue?: undefined},\n): Signal<boolean | null>;\nexport function injectParams(\n key: string,\n options: {transform: (v: string) => number; initialValue?: undefined},\n): Signal<number | null>;\nexport function injectParams(\n key: string,\n options: {transform: (v: string) => string; initialValue?: undefined},\n): Signal<string | null>;\n\nexport function injectParams<Output>(\n keyOrParamsTransform?: string | ParamsTransformFn<Output>,\n options: ParamsOptions<Output> = {},\n): Signal<Output | Params | string | boolean | number | null> {\n assertInInjectionContext(injectParams);\n\n const route = inject(ActivatedRoute);\n const initialParams = route.snapshot.params;\n\n const {transform, initialValue} = options;\n\n // injectParams(): Signal<Params>\n if (!keyOrParamsTransform) {\n return toSignal(route.params, {initialValue: initialParams});\n }\n\n // injectParams<Output>(fn: ParamsTransformFn<Output>): Signal<Output>\n if (typeof keyOrParamsTransform === 'function') {\n return toSignal(route.params.pipe(map(keyOrParamsTransform)), {initialValue: keyOrParamsTransform(initialParams)});\n }\n\n // keyOrParamsTransform is string.\n // export function injectParams(key: string): Signal<string | null>;\n // export function injectParams(key: string, options: { transform: (v: string) => boolean; initialValue: boolean }): Signal<boolean>;\n // export function injectParams(key: string, options: { transform: (v: string) => number; initialValue: number }): Signal<number>;\n // export function injectParams(key: string, options: { transform?: (v: string) => string; initialValue: string }): Signal<string>;\n // export function injectParams(key: string, options: { transform: (v: string) => boolean; initialValue?: undefined }): Signal<boolean | null>;\n // export function injectParams(key: string, options: { transform: (v: string) => number; initialValue?: undefined }): Signal<number | null>;\n // export function injectParams(key: string, options: { transform: (v: string) => string; initialValue?: undefined }): Signal<string | null>;\n const getParam = (params: Params) => {\n const param = params?.[keyOrParamsTransform] as string | undefined;\n\n if (!param) {\n return initialValue ?? null;\n }\n\n return transform ? transform(param) : param;\n };\n\n return toSignal(route.params.pipe(map(getParam)), {initialValue: getParam(initialParams)});\n}\n","import {assertInInjectionContext, inject, type Signal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {ActivatedRoute, type Params} from '@angular/router';\nimport {map} from 'rxjs';\n\ntype QueryParamsTransformFn<Output> = (params: Params) => Output;\n\n/**\n * The `InputOptions` interface defines options for configuring the behavior of the `injectQueryParams` function.\n *\n * @template Output - The expected type of the read value.\n */\nexport interface QueryParamsOptions<Output> {\n /**\n * A transformation function to convert the written value to the expected read value.\n *\n * @param v - The value to transform.\n * @returns The transformed value.\n */\n transform?: (v: string) => Output;\n\n /**\n * The initial value to use if the query parameter is not present or undefined.\n */\n initialValue?: Output;\n}\n\n/**\n * The `injectQueryParams` function allows you to access and manipulate query parameters from the current route.\n *\n * @returns A `Signal` that emits the entire query parameters object.\n */\nexport function injectQueryParams(): Signal<Params>;\n\n/**\n * The `injectQueryParams` function allows you to access and manipulate query parameters from the current route.\n * It retrieves the value of a query parameter based on a custom transform function applied to the query parameters object.\n *\n * @template Output - The expected type of the read value.\n * @param {QueryParamsTransformFn<Output>} fn - A transform function that takes the query parameters object (`params: Params`) and returns the desired value.\n * @returns {Signal} A `Signal` that emits the transformed value based on the provided custom transform function.\n *\n * @example\n * const searchValue = injectQueryParams((params) => params['search'] as string);\n */\nexport function injectQueryParams<Output>(fn: QueryParamsTransformFn<Output>): Signal<Output>;\n\n/**\n * The `injectQueryParams` function allows you to access and manipulate query parameters from the current route.\n *\n * @param {string} key - The name of the query parameter to retrieve.\n * @returns {Signal} A `Signal` that emits the value of the specified query parameter, or `null` if it's not present.\n */\nexport function injectQueryParams(key: string): Signal<string | null>;\n\n// for boolean or number, if initialValue is provided, transform is a must\nexport function injectQueryParams(\n key: string,\n options: {transform: (v: string) => boolean; initialValue: boolean},\n): Signal<boolean>;\nexport function injectQueryParams(\n key: string,\n options: {transform: (v: string) => number; initialValue: number},\n): Signal<number>;\n// for string, transform is optional\nexport function injectQueryParams(\n key: string,\n options: {transform?: (v: string) => string; initialValue: string},\n): Signal<string>;\n\n// initialValue not provided, must provide transform fn\nexport function injectQueryParams(\n key: string,\n options: {transform: (v: string) => boolean; initialValue?: undefined},\n): Signal<boolean | null>;\nexport function injectQueryParams(\n key: string,\n options: {transform: (v: string) => number; initialValue?: undefined},\n): Signal<number | null>;\nexport function injectQueryParams(\n key: string,\n options: {transform: (v: string) => string; initialValue?: undefined},\n): Signal<string | null>;\n\n/**\n * The `injectQueryParams` function allows you to access and manipulate query parameters from the current route.\n *\n * @template Output - The expected type of the read value.\n * @param {string} keyOrParamsTransform - The name of the query parameter to retrieve, or a transform function to apply to the query parameters object.\n * @param {QueryParamsOptions} options - Optional configuration options for the query parameter.\n * @returns {QueryParamsOptions} A `Signal` that emits the transformed value of the specified query parameter, or the entire query parameters object if no key is provided.\n *\n * @example\n * const search = injectQueryParams('search'); // returns the value of the 'search' query param\n * const search = injectQueryParams(p => p['search'] as string); // same as above but can be used with a custom transform function\n * const idParam = injectQueryParams('id', {transform: numberAttribute}); // returns the value fo the 'id' query params and transforms it into a number\n * const idParam = injectQueryParams(p => numberAttribute(p['id'])); // same as above but can be used with a custom transform function\n * const queryParams = injectQueryParams(); // returns the entire query params object\n */\nexport function injectQueryParams<Output>(\n keyOrParamsTransform?: string | QueryParamsTransformFn<Output>,\n options: QueryParamsOptions<Output> = {},\n): Signal<Output | Params | string | boolean | number | null> {\n assertInInjectionContext(injectQueryParams);\n\n const route = inject(ActivatedRoute);\n const initialQueryParams = route.snapshot.queryParams;\n\n const {transform, initialValue} = options;\n\n // injectQueryParams(): Signal<Params>\n if (!keyOrParamsTransform) {\n return toSignal(route.queryParams, {initialValue: initialQueryParams});\n }\n\n // injectQueryParams<Output>(fn: QueryParamsTransformFn<Output>): Signal<Output>\n if (typeof keyOrParamsTransform === 'function') {\n return toSignal(route.queryParams.pipe(map(keyOrParamsTransform)), {\n initialValue: keyOrParamsTransform(initialQueryParams),\n });\n }\n\n // keyOrParamsTransform is string.\n const getParam = (params: Params) => {\n const param = params?.[keyOrParamsTransform] as string | string[] | undefined;\n\n if (!param) {\n return initialValue ?? null;\n }\n\n if (Array.isArray(param)) {\n if (param.length < 1) {\n return initialValue ?? null;\n }\n return transform ? transform(param[0]) : param[0];\n }\n\n return transform ? transform(param) : param;\n };\n\n return toSignal(route.queryParams.pipe(map(getParam)), {\n initialValue: getParam(initialQueryParams),\n });\n}\n","import {assertInInjectionContext, Injector, isSignal, Signal, untracked} from '@angular/core';\nimport {toObservable, toSignal} from '@angular/core/rxjs-interop';\nimport {\n distinctUntilChanged,\n from,\n identity,\n isObservable,\n merge,\n ObservableInput,\n OperatorFunction,\n startWith,\n} from 'rxjs';\n\ntype ObservableSignalInput<T> = ObservableInput<T> | Signal<T>;\n\ntype ObservableSignalInputTuple<T> = {\n [K in keyof T]: ObservableSignalInput<T[K]>;\n};\n\n// pick from ToSignalOptions\nexport type MergeFromOptions<T> = {\n readonly injector?: Injector;\n readonly initialValue?: T | null;\n};\n\nexport function mergeFrom<Input extends readonly unknown[], Output = Input[number]>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n operator?: OperatorFunction<Input[number], Output>,\n options?: MergeFromOptions<Output>,\n): Signal<Output>;\n\nexport function mergeFrom<Input extends readonly unknown[], Output = Input[number]>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n options?: MergeFromOptions<Output>,\n): Signal<Output>;\n\n// No object inputs\n\n/**\n * merge multiple `Observable` or `Signal` sources into a `Signal` that emits the last value. It's like merge.\n *\n * @param {ObservableSignalInputTuple} sources - Array of `Observable` or `Signal` values\n * @param {OperatorFunction} [operator] - Operator to apply to the merge\n * @param {MergeFromOptions} [options] - Options including `initialValue` and `injector`\n * @returns Signal emitting the latest merge result\n *\n * @example\n * ```ts\n * export class Component {\n * e$ = of(1).pipe(delay(1000));\n * f = signal(2);\n *\n * data = mergeFrom(\n * [this.e$, this.f],\n * pipe(\n * switchMap((res) => of(`${res} is coming~`)),\n * startWith(0),\n * ),\n * );\n * }\n * ```\n */\nexport function mergeFrom<Input extends readonly unknown[], Output = Input[number]>(...args: unknown[]) {\n assertInInjectionContext(mergeFrom);\n\n const [sources, operator = identity, options = {}] = parseArgs<Input, Output>(args);\n\n const normalizedSources = sources.map((source) => {\n if (isSignal(source)) {\n return toObservable(source, {injector: options.injector}).pipe(startWith(untracked(source)));\n }\n\n if (!isObservable(source)) {\n source = from(source);\n }\n\n return source.pipe(distinctUntilChanged());\n });\n\n const merged$ = merge(...normalizedSources).pipe(operator as OperatorFunction<Input[number], Output>);\n\n if (options.initialValue !== undefined) {\n return toSignal(merged$, {initialValue: options.initialValue as Output, injector: options.injector});\n }\n return toSignal(merged$, {requireSync: true, injector: options.injector});\n}\n\nfunction parseArgs<Input extends readonly unknown[], Output = Input[number]>(args: unknown[]) {\n if (!args || args.length < 1) {\n throw new TypeError('mergeFrom needs sources');\n }\n\n if (args.length === 1) {\n return [args[0] as readonly [...ObservableSignalInputTuple<Input>], undefined, undefined] as const;\n }\n\n if (args.length === 2) {\n const hasOperator = typeof args[1] === 'function';\n\n if (hasOperator) {\n return [\n args[0] as readonly [...ObservableSignalInputTuple<Input>],\n args[1] as OperatorFunction<Input[number], Output>,\n undefined,\n ] as const;\n }\n\n return [\n args[0] as readonly [...ObservableSignalInputTuple<Input>],\n undefined,\n args[1] as MergeFromOptions<Output>,\n ] as const;\n }\n\n return args as unknown as [\n readonly [...ObservableSignalInputTuple<Input>],\n OperatorFunction<Input[number], Output>,\n MergeFromOptions<Output>,\n ];\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\nimport {differenceInDays} from '../utils/difference-in-days.util';\n\n/**\n * Interface defining the options for the date range validator.\n */\ninterface DateRangeOptions {\n minDate?: Date | string; // Minimum allowed date\n maxDate?: Date | string; // Maximum allowed date\n minInclusive?: boolean; // Whether the comparison for the minimum date can include the exact date\n maxInclusive?: boolean; // Whether the comparison for the maximum date can include the exact date\n compareTime?: boolean; // Whether to compare the time as well. If true, comparisons will include Date time components; if false, time parts will be ignored\n}\n\n/**\n * Validates a date against a specified date range.\n *\n * @param {DateRangeOptions} options - The options for the date range validation.\n * @returns {ValidatorFn} A function that validates a FormControl and returns an error if the date is out of range.\n */\nexport function dateRangeValidator(options: DateRangeOptions): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n // if control doesn't have any value, pass validation. Developer should use Angular required validator.\n if (!control.value) {\n return null;\n }\n\n // Parse the selected date from the control value\n const selectedDate = new Date(control.value);\n\n if (isNaN(selectedDate.getTime())) {\n return {invalidDate: true};\n }\n\n const minDate = options.minDate ? new Date(options.minDate) : null;\n const maxDate = options.maxDate ? new Date(options.maxDate) : null;\n\n if (minDate) {\n let errorCondition = false;\n\n if (options.compareTime) {\n errorCondition = options.minInclusive\n ? selectedDate.getTime() < minDate.getTime()\n : selectedDate.getTime() <= minDate.getTime();\n } else {\n const diff = differenceInDays(selectedDate, minDate);\n errorCondition = options.minInclusive ? diff < 0 : diff <= 0;\n }\n\n if (errorCondition) {\n return {\n minDate: minDate.toISOString(),\n };\n }\n }\n\n if (maxDate) {\n let errorCondition = false;\n\n if (options.compareTime) {\n errorCondition = options.maxInclusive\n ? selectedDate.getTime() > maxDate.getTime()\n : selectedDate.getTime() >= maxDate.getTime();\n } else {\n const diff = differenceInDays(selectedDate, maxDate);\n errorCondition = options.maxInclusive ? diff > 0 : diff >= 0;\n }\n\n if (errorCondition) {\n return {\n maxDate: maxDate.toISOString(),\n };\n }\n }\n\n return null;\n };\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\n/**\n * A custom validator function that checks for intersection between two form controls. The two controls' values must be arrays.\n *\n * @param {string} controlName1 - The name of the first form control.\n * @param {string} controlName2 - The name of the second form control.\n * @returns {ValidatorFn} A function that validates the form group and returns an error if there is an intersection.\n */\nexport function intersectionValidator<T = string>(controlName1: string, controlName2: string): ValidatorFn {\n return (formGroup: AbstractControl): ValidationErrors | null => {\n const control1 = formGroup.get(controlName1);\n const control2 = formGroup.get(controlName2);\n\n if (!control1 || !control2) {\n return null; // If either control is undefined or null\n }\n\n const value1 = control1.value;\n const value2 = control2.value;\n\n // Assuming both values are arrays\n if (!Array.isArray(value1) || !Array.isArray(value2)) {\n return null;\n }\n\n const intersection = value1.filter((value: T) => value2.includes(value));\n\n if (intersection.length > 0) {\n control1.setErrors({intersection: true});\n control2.setErrors({intersection: true});\n return {intersection: true};\n } else {\n control1.setErrors(null);\n control2.setErrors(null);\n return null;\n }\n };\n}\n","import {AbstractControl, FormArray, ValidationErrors, ValidatorFn} from '@angular/forms';\n\n/**\n * Validator for checking uniqueness across multiple fields in a FormArray or FormGroup.\n *\n * This validator can be applied to a FormArray or FormGroup containing the controls to be validated.\n * It ensures that each control's value is unique among all other controls within the array or group.\n */\nexport class UniqueValidator {\n /**\n * Validator function to be attached to a FormArray or FormGroup.\n *\n * This validator checks for uniqueness of each control's value within the array or group.\n *\n * @param keySelector A function to select the key control for comparison (default is the control itself).\n * @typeparam T The type of the control value.\n */\n static unique<T>(\n keySelector: (control: AbstractControl) => AbstractControl<T> = (control: AbstractControl<T>) => control,\n ): ValidatorFn {\n return (formArray: AbstractControl): ValidationErrors | null => {\n if (!(formArray instanceof FormArray)) {\n return null;\n }\n\n const targetControls = formArray.controls.map(keySelector);\n const valueControlMap = new Map<T, AbstractControl<T>>();\n const invalidControls: AbstractControl<T>[] = [];\n\n for (const control of targetControls) {\n const value = control.value;\n\n if (value == null || String(value) === '' || String(value) === 'NaN') {\n continue;\n }\n\n const controlInMap = valueControlMap.get(value);\n\n if (controlInMap) {\n if (!invalidControls.includes(controlInMap)) {\n invalidControls.push(controlInMap);\n }\n\n invalidControls.push(control);\n } else {\n valueControlMap.set(value, control);\n }\n }\n\n const notUniqueError = {notUnique: true};\n\n // set errors manually for target controls\n for (const control of targetControls) {\n const errors = control.errors;\n\n if (invalidControls.includes(control)) {\n // set not unique error for invalid controls\n control.setErrors(errors === null ? notUniqueError : {...errors, ...notUniqueError});\n } else {\n // remove not unique errors for valid controls\n if (errors === null) {\n control.setErrors(null);\n } else {\n delete errors['notUnique'];\n control.setErrors(Object.keys(errors).length > 0 ? errors : null);\n }\n }\n }\n\n return invalidControls.length > 0 ? notUniqueError : null;\n };\n }\n}\n","import {AbstractControl, ValidationErrors} from '@angular/forms';\n\nimport {httpsPattern, urlPattern} from '../const';\n\nexport function urlValidator(control: AbstractControl): ValidationErrors | null {\n if (!urlPattern.test(control.value)) {\n return {invalidUrl: true};\n }\n return null;\n}\n\nexport function httpsValidator(control: AbstractControl): ValidationErrors | null {\n if (!httpsPattern.test(control.value)) {\n return {invalidUrl: true};\n }\n return null;\n}\n","/*\n * Public API Surface of ngx-lift\n */\n\nexport * from './lib/models';\nexport * from './lib/operators';\nexport * from './lib/pipes';\nexport * from './lib/signals';\nexport * from './lib/utils';\nexport * from './lib/validators';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["isPromise","i1.IdleDetectionConfig"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-lift.mjs","sources":["../../../projects/ngx-lift/src/lib/operators/combine-latest-eager.operator.ts","../../../projects/ngx-lift/src/lib/operators/create-async-state.operator.ts","../../../projects/ngx-lift/src/lib/operators/distinct-on-change.operator.ts","../../../projects/ngx-lift/src/lib/operators/logger.operator.ts","../../../projects/ngx-lift/src/lib/utils/is-promise.util.ts","../../../projects/ngx-lift/src/lib/operators/poll.operator.ts","../../../projects/ngx-lift/src/lib/operators/start-with-tap.operator.ts","../../../projects/ngx-lift/src/lib/operators/switch-map-with-async-state.operator.ts","../../../projects/ngx-lift/src/lib/pipes/array-join.pipe.ts","../../../projects/ngx-lift/src/lib/pipes/byte-converter.pipe.ts","../../../projects/ngx-lift/src/lib/utils/difference-in-days.util.ts","../../../projects/ngx-lift/src/lib/utils/form.util.ts","../../../projects/ngx-lift/src/lib/utils/idle-detection/idle-detection.config.ts","../../../projects/ngx-lift/src/lib/utils/idle-detection/idle-detection.module.ts","../../../projects/ngx-lift/src/lib/utils/idle-detection/idle-detection.service.ts","../../../projects/ngx-lift/src/lib/utils/is-empty.util.ts","../../../projects/ngx-lift/src/lib/utils/is-equal.util.ts","../../../projects/ngx-lift/src/lib/utils/pick-by.util.ts","../../../projects/ngx-lift/src/lib/utils/omit-by.util.ts","../../../projects/ngx-lift/src/lib/utils/range.util.ts","../../../projects/ngx-lift/src/lib/const.ts","../../../projects/ngx-lift/src/lib/utils/url.util.ts","../../../projects/ngx-lift/src/lib/pipes/is-https.pipe.ts","../../../projects/ngx-lift/src/lib/pipes/mask.pipe.ts","../../../projects/ngx-lift/src/lib/pipes/range.pipe.ts","../../../projects/ngx-lift/src/lib/signals/combine-from.ts","../../../projects/ngx-lift/src/lib/signals/computed-async.ts","../../../projects/ngx-lift/src/lib/signals/create-trigger.ts","../../../projects/ngx-lift/src/lib/signals/inject-params.ts","../../../projects/ngx-lift/src/lib/signals/inject-query-params.ts","../../../projects/ngx-lift/src/lib/signals/merge-from.ts","../../../projects/ngx-lift/src/lib/validators/date-range.validator.ts","../../../projects/ngx-lift/src/lib/validators/intersection.validator.ts","../../../projects/ngx-lift/src/lib/validators/unique.validator.ts","../../../projects/ngx-lift/src/lib/validators/url.validator.ts","../../../projects/ngx-lift/src/public-api.ts","../../../projects/ngx-lift/src/ngx-lift.ts"],"sourcesContent":["import {combineLatest, Observable, startWith, Subject} from 'rxjs';\n\nexport function combineLatestEager<T extends Observable<unknown>[]>(\n sources: T,\n startWithNullForAll?: boolean,\n): Observable<{[K in keyof T]: T[K] extends Observable<infer U> ? U | null : never}>;\n\nexport function combineLatestEager<T extends Record<string, Observable<unknown>>>(\n sources: T,\n startWithNullForAll?: boolean,\n): Observable<{[K in keyof T]: T[K] extends Observable<infer U> ? U | null : never}>;\n\n/**\n * Combines multiple observables into a single observable emitting an array or dictionary\n * of the latest values from each source observable.\n * Adds startWith(null) for each Subject in combineLatest when the second parameter startWithNullForAll is false.\n * When startWithNullForAll is true, each observable will startWith null.\n *\n * @template T - The type of the data in the observables.\n *\n * @param {Array<Observable<T>> | Record<string, Observable<T>>} sources -\n * An array of observables or a dictionary of observables to be combined.\n *\n * @param {boolean} [startWithNullForAll=false] -\n * Determines whether to start each observable with a `null` value.\n *\n * @returns {Observable<Array<T | null> | Record<string, T | null>>} -\n * An observable emitting an array or dictionary of the latest values from each source observable.\n *\n * @throws {Error} -\n * Throws an error if the provided argument is not an array of observables or a dictionary of observables.\n */\nexport function combineLatestEager<T>(\n sources: Array<Observable<T>> | Record<string, Observable<T>>,\n startWithNullForAll = false,\n): Observable<Array<T | null> | Record<string, T | null>> {\n function observableMapper<T>(observable: Observable<T>) {\n if (startWithNullForAll) {\n return observable.pipe(startWith(null));\n } else {\n // Check if observable is a Subject, if true, apply startWith(null)\n return observable instanceof Subject ? observable.pipe(startWith(null)) : observable;\n }\n }\n\n if (Array.isArray(sources)) {\n // If sources is an array of observables\n return combineLatest(sources.map(observableMapper));\n } else if (typeof sources === 'object' && sources !== null) {\n // If sources is a dictionary of observables\n const observables: Record<string, Observable<T | null>> = {};\n\n for (const [key, value] of Object.entries(sources)) {\n observables[key] = observableMapper(value);\n }\n\n return combineLatest(observables);\n } else {\n throw new Error(\n `Invalid argument type. Please provide an array of observables or a dictionary of observables. Received: ${typeof sources}`,\n );\n }\n}\n","import {HttpErrorResponse} from '@angular/common/http';\nimport {catchError, map, Observable, of, pipe, startWith, tap, TapObserver, UnaryFunction} from 'rxjs';\n\nimport {AsyncState} from '../models/async-state.model';\n\n/**\n * createAsyncState transforms an Observable of type T into an Observable of AsyncState<T>.\n * AsyncState<T> represents the loading, error, and data states for asynchronous operations.\n *\n * @template T - The type of the data in the observable.\n * @template E - The type of the error that can occur.\n *\n * @param {Partial<Observer<T>> | ((value: T) => void)} [observerOrNextForOrigin] -\n * An optional parameter that can be a partial TapObserver<T> or a function to handle the next value or error in the original Observable.\n *\n * @returns {UnaryFunction<Observable<T>, Observable<AsyncState<T, E>>>} -\n * A function that transforms an observable stream into an asynchronous state.\n *\n * @example\n * Usage 1: Simple request\n * data$ = this.shopService.products$.pipe(\n * createAsyncState({\n * next: res => console.log('Side effect if success: ' + res),\n * error: error => console.error('Side effect if error: ' + error.message)\n * })\n * );\n *\n * Usage 2: Dependent requests\n * data$ = firstCall$.pipe(\n * switchMap(() => this.shopService.products$),\n * createAsyncState()\n * );\n *\n * Another implementation thought when refreshing the data: instead of startWith, `merge of` emit as the trigger\n *\n * subject.pipe(\n * switchMap(() => merge(\n * of({ loading: true, error: null, data: null }),\n * this.service.apiCall().pipe(\n * map(data => ({ loading: false, error: null, data })),\n * tap({\n * next: res => callback?.(res.data),\n * error: err => errorCallback?.(err),\n * }),\n * catchError(error => of({ loading: false, error, data: null })),\n * ),\n * ))\n * )\n *\n */\nexport function createAsyncState<T, E = HttpErrorResponse>(\n observerOrNextForOrigin?: Partial<TapObserver<T>> | ((value: T) => void),\n): UnaryFunction<Observable<T>, Observable<AsyncState<T, E>>> {\n return pipe(\n tap(observerOrNextForOrigin),\n map((data) => ({loading: false, error: null, data})),\n startWith({loading: true, error: null, data: null}),\n // retry(1), // if you want to add retry\n catchError((error: E) => of({loading: false, error, data: null})),\n );\n}\n","import {Observable, OperatorFunction, Subscriber, TeardownLogic} from 'rxjs';\n\n/**\n * Creates an operator function for RxJS Observables that filters out consecutive\n * values that are considered equal according to a provided comparator function,\n * and invokes a callback when a distinct value is encountered.\n *\n * @template T - The type of elements emitted by the observable.\n * @param {(previousValue: T, currentValue: T) => void} onChangeCallback\n * A callback function that will be invoked when a distinct value is encountered.\n * It receives the previous distinct value and the current value.\n * @param {(previousValue: T, currentValue: T) => boolean} [comparator]\n * A function that determines if two values are considered equal.\n * Defaults to a function that performs strict equality (===) comparison.\n * @returns {OperatorFunction<T, T>} - The RxJS operator function.\n *\n * @example\n * Example 1:\n * const source$ = new Observable<number>((observer) => {\n * observer.next(1);\n * observer.next(2);\n * observer.next(2);\n * observer.next(3);\n * observer.next(3);\n * observer.next(4);\n * observer.next(5);\n * observer.complete();\n * });\n *\n * const distinctOnChange$ = source$.pipe(\n * distinctOnChange(\n * (prev, curr) => console.log(`Value changed from ${prev} to: ${curr}`),\n * (prev, curr) => prev === curr,\n * ),\n * );\n * distinctOnChange$.subscribe((res) => console.log(res));\n *\n *\n * Example 2:\n * distinctOnChange<RDEValue<OseInstance>[]>(\n * () => {\n * this.store.dispatch(\n * addToast({\n * toast: {\n * type: ToastType.SUCCESS,\n * title: this.l10nService.getMessage('STATUS_CHANGE'),\n * description: this.l10nService.getMessage('STATUS_CHANGE_DESC'),\n * },\n * }),\n * );\n * },\n * (prev, current) =>\n * prev.every((prevInstance, index) => instanceComparator(prevInstance.entity, current[index].entity)),\n * );\n */\nexport function distinctOnChange<T>(\n onChangeCallback: (previousValue: T, currentValue: T) => void,\n comparator: (previousValue: T, currentValue: T) => boolean = (prev, curr) => prev === curr,\n): OperatorFunction<T, T> {\n return (source: Observable<T>) =>\n new Observable<T>((subscriber: Subscriber<T>): TeardownLogic => {\n let hasFirstValue = false;\n let previousValue: T;\n\n const subscription = source.subscribe({\n next: (currentValue: T) => {\n if (hasFirstValue) {\n if (!comparator(previousValue, currentValue)) {\n onChangeCallback(previousValue, currentValue);\n previousValue = currentValue;\n subscriber.next(currentValue);\n }\n } else {\n previousValue = currentValue;\n hasFirstValue = true;\n subscriber.next(currentValue);\n }\n },\n error: (err: unknown) => subscriber.error(err),\n complete: () => subscriber.complete(),\n });\n\n return () => subscription.unsubscribe();\n });\n}\n","import {OperatorFunction, pipe, tap} from 'rxjs';\n\n// Define a type for different logger functions\ntype LoggerType = 'count' | 'debug' | 'dir' | 'log' | 'table';\n\n// Define a more permissive type for console functions\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ConsoleFunction = (...args: any[]) => void;\n\n// Map each LoggerType to its corresponding console function\nconst loggerFunctions: Record<LoggerType, ConsoleFunction> = {\n count: console.count.bind(console),\n debug: console.debug.bind(console),\n dir: console.dir.bind(console),\n log: console.log.bind(console),\n table: console.table.bind(console),\n};\n\n/**\n * Logger operator for RxJS observables.\n *\n * @param loggerType The type of logger to be used: 'count', 'debug', 'dir', 'log', 'table'.\n * Defaults to 'log' if not provided or if an unknown type is specified.\n * @returns An RxJS operator function that logs values using the specified console function.\n */\nexport const logger = <T>(loggerType: LoggerType = 'log'): OperatorFunction<T, T> =>\n pipe(\n tap((value: T) => {\n const logFunction = loggerFunctions[loggerType] || console.log.bind(console);\n logFunction(value);\n }),\n );\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isPromise(obj: any): obj is Promise<any> {\n return !!obj && typeof obj.then === 'function';\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {Signal} from '@angular/core';\nimport {toObservable} from '@angular/core/rxjs-interop';\nimport {\n catchError,\n EMPTY,\n exhaustMap,\n from,\n isObservable,\n map,\n merge,\n Observable,\n of,\n share,\n startWith,\n timer,\n} from 'rxjs';\n\nimport {AsyncState} from '../models';\nimport {isPromise} from '../utils/is-promise.util';\n\n/**\n * Polls data at a specified interval and can be triggered manually.\n *\n * @template Data - The type of the data emitted by the polling function.\n * @template Input - The type of the input parameter used to build polling parameters.\n * @param {object} options - The configuration options for polling.\n * @param {number} options.interval - The interval in milliseconds between each poll.\n * @param {(params: any) => Observable<Data> | Data} options.pollingFn - A function that returns an Observable, Promise, or primitive value.\n * @param {Observable<Input> | Signal<Input>} [options.forceRefresh] - An optional Observable or Signal that triggers a manual refresh of the polling function.\n * @param {(input: Input) => any} [options.paramsBuilder] - An optional function that builds parameters for the polling function based on the input. The value emitted by the forceRefresh observable will serve as the parameter.\n * @returns {Observable<AsyncState<Data>>} An Observable emitting objects representing the state of the asynchronous operation.\n */\nexport function poll<Data>(options: {\n interval: number;\n pollingFn: (params: any) => Observable<Data> | Promise<Data> | Data;\n}): Observable<AsyncState<Data>>;\n\n// forceRefresh output is the pollingFn params' input\nexport function poll<Data, Input>(options: {\n interval: number;\n pollingFn: (params: Input) => Observable<Data> | Promise<Data> | Data;\n forceRefresh: Observable<Input> | Signal<Input>;\n}): Observable<AsyncState<Data>>;\n\n// paramsBuilder exists, forceRefresh output is the paramsBuilder params' input\nexport function poll<Data, Input>(options: {\n interval: number;\n pollingFn: (params: any) => Observable<Data> | Promise<Data> | Data;\n forceRefresh: Observable<Input> | Signal<Input>;\n paramsBuilder: (input: Input) => any;\n}): Observable<AsyncState<Data>>;\n\nexport function poll<Data, Input>(options: {\n interval: number;\n pollingFn: (params: any) => Observable<Data> | Promise<Data> | Data;\n forceRefresh?: Observable<Input> | Signal<Input>;\n paramsBuilder?: (input: Input) => any;\n}): Observable<AsyncState<Data>> {\n const timerEmitValue = '__timer__emission__';\n const timer$ = timer(0, options.interval).pipe(map((i) => `${timerEmitValue}${i}`));\n\n const trigger$ =\n options.forceRefresh === undefined\n ? EMPTY\n : isObservable(options.forceRefresh)\n ? options.forceRefresh\n : toObservable(options.forceRefresh);\n\n let inputByForceRefresh: Input | undefined = undefined; // if forceRefresh is not provided, input will be undefined\n\n return merge(trigger$, timer$).pipe(\n exhaustMap((input) => {\n // input can be either by forceRefresh or timer\n const isTimerTrigger = typeof input === 'string' && input.includes(timerEmitValue);\n const isManualTrigger = !isTimerTrigger;\n if (isManualTrigger) {\n inputByForceRefresh = input as Input;\n }\n\n // build params by input\n // if paramsBuilder is provided, params will be the value of this function call\n // if paramsBuilder is not provided, params will be the value emitted by the forceRefresh\n const params = options.paramsBuilder ? options.paramsBuilder(inputByForceRefresh as Input) : inputByForceRefresh;\n\n // NOTE: using exhaustMap will NOT emit ${timerEmitValue}0 if forceRefresh is not provided\n // using concatMap will emit ${timerEmitValue}0 if forceRefresh is not provided\n const isFirstRequest = input === `${timerEmitValue}0`; // timer first emission when forceRefresh is not provided\n const shouldShowLoading = isManualTrigger || isFirstRequest;\n\n const fnResult = options.pollingFn(params);\n const fnResult$ = isObservable(fnResult) ? fnResult : isPromise(fnResult) ? from(fnResult) : of(fnResult);\n\n let observable$ = fnResult$.pipe(\n map((data) => ({loading: false, error: null, data})),\n catchError((error) => of({loading: false, error, data: null})),\n );\n\n if (shouldShowLoading) {\n observable$ = observable$.pipe(startWith({loading: true, error: null, data: null}));\n }\n\n return observable$;\n }),\n share(),\n );\n}\n","import {Observable} from 'rxjs';\n\n/**\n * Operator that taps into a callback before the source Observable starts emitting values.\n *\n * This operator is useful for triggering a side effect before the main Observable starts emitting.\n *\n * @param callback A function to be executed before the source Observable emits its first value.\n * @returns An RxJS operator function that taps into the callback and then switchMaps to the source Observable.\n */\nexport function startWithTap<T>(callback: () => void) {\n return (source: Observable<T>) => {\n callback();\n return source;\n };\n}\n","import {HttpErrorResponse} from '@angular/common/http';\nimport {Observable, OperatorFunction, switchMap} from 'rxjs';\n\nimport {AsyncState} from '../models';\nimport {createAsyncState} from './create-async-state.operator';\n\n/**\n * Custom RxJS operator that uses switchMap to handle asynchronous operations and\n * transforms the emitted values into an AsyncState object.\n *\n * @template T - The type of data emitted by the observable returned by the project.\n * @template K - The type of value emitted by the source observable.\n * @template E - The type of error that can be encountered during the asynchronous operation.\n *\n * @param {function(K): Observable<T>} project - A function that takes a value emitted by the source\n * observable and returns an observable representing an asynchronous operation.\n *\n * @returns {OperatorFunction<K, AsyncState<T, E>>} - An RxJS operator that transforms the source observable into\n * an observable of AsyncState objects.\n *\n * @example\n * // Usage of the switchMapWithAsyncState operator\n * const source$ = new BehaviorSubject<number>(1);\n *\n * const asyncOperation = (value: number) => {\n * return of(value * 2).pipe(delay(1000));\n * };\n *\n * const result$ = source$.pipe(switchMapWithAsyncState(asyncOperation));\n * result$.subscribe((state) => {\n * console.log(state); // Outputs AsyncState objects with loading, data, and error properties.\n * });\n */\nexport function switchMapWithAsyncState<T, K, E = HttpErrorResponse>(\n project: (value: K, index: number) => Observable<T>,\n): OperatorFunction<K, AsyncState<T, E>> {\n return (source: Observable<K>) =>\n source.pipe(switchMap((value, index) => project(value, index).pipe(createAsyncState<T, E>())));\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'arrayJoin',\n standalone: true,\n})\nexport class ArrayJoinPipe implements PipeTransform {\n transform(value: unknown, separator: string = ',') {\n if (Array.isArray(value)) {\n return value.join(separator);\n }\n\n // For non-array cases or unexpected types, return the value as is\n return value;\n }\n}\n","import {inject, LOCALE_ID, Pipe, PipeTransform} from '@angular/core';\n\n/**\n * import { LOCALE_ID, NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { AppComponent } from './app.component';\n * import { registerLocaleData } from '@angular/common';\n *\n * import localeEn from '@angular/common/locales/en';\n * import localeFr from '@angular/common/locales/fr';\n *\n * // Register locales\n * registerLocaleData(localeEn);\n * registerLocaleData(localeFr);\n *\n * @NgModule({\n * declarations: [AppComponent],\n * imports: [BrowserModule],\n * providers: [\n * {\n * provide: LOCALE_ID,\n * useFactory: () => {\n * // Use the browser's language or a default language\n * return navigator.language || 'en';\n * },\n * },\n * ],\n * bootstrap: [AppComponent],\n * })\n * export class AppModule {}\n */\n\n@Pipe({\n name: 'byteConverter',\n standalone: true,\n})\nexport class ByteConverterPipe implements PipeTransform {\n private locale = inject<string>(LOCALE_ID);\n // If using navigator.language directly in the pipe, this approach directly uses the browser's language at the moment the ByteConverterPipe is constructed. If the user changes the language while using the application, it won't be automatically reflected. If dynamic language changes are a requirement, using the LOCALE_ID provider as demonstrated in the AppModule is a more Angular-centric approach.\n // private locale: string;\n // constructor() {\n // // Use navigator.language as the default locale\n // this.locale = navigator.language || 'en';\n // }\n\n transform(value: number): string;\n transform(value?: number): string | null;\n transform(value?: number | null): string | null;\n transform(value?: null | number | undefined): string | null {\n if (value === null || value === undefined || isNaN(value)) {\n return null;\n }\n\n const units = ['BYTE', 'KB', 'MB', 'GB', 'TB'];\n let unitIndex = 0;\n\n while (value >= 1024 && unitIndex < units.length - 1) {\n value /= 1024;\n unitIndex++;\n }\n\n const translationObject = translations[this.locale] || translations['en'];\n const key = units[unitIndex];\n\n return this.formatNumber(value) + ' ' + translationObject[key];\n }\n\n private formatNumber(value: number): string {\n return new Intl.NumberFormat(this.locale, {maximumFractionDigits: 2}).format(value);\n }\n}\n\nconst translations: Record<string, Record<string, string>> = {\n en: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n 'en-US': {\n // You can provide specific variations for en-US if needed\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n de: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n es: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n fr: {\n BYTE: 'o',\n KB: 'Ko',\n MB: 'Mo',\n GB: 'Go',\n TB: 'To',\n },\n it: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n ja: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n ko: {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n 'pt-BR': {\n BYTE: 'B',\n KB: 'KB',\n MB: 'MB',\n GB: 'GB',\n TB: 'TB',\n },\n 'zh-CN': {\n BYTE: '字节',\n KB: '千字节',\n MB: '兆字节',\n GB: '千兆字节',\n TB: '太字节',\n },\n 'zh-TW': {\n BYTE: '位元組',\n KB: '千位元組',\n MB: '兆位元組',\n GB: '千兆位元組',\n TB: '太位元組',\n },\n ru: {\n BYTE: 'Б',\n KB: 'КБ',\n MB: 'МБ',\n GB: 'ГБ',\n TB: 'ТБ',\n },\n};\n","/**\n * Calculates the difference in whole days between two dates.\n *\n * @param {Date | number | string} dateLeft - The date from which the difference is measured (the reference date).\n * Can be a Date object, a number representing milliseconds since the Unix epoch,\n * or a string in a format parseable by the Date constructor.\n * @param {Date | number | string} dateRight - The date to be compared against the reference date.\n * Can be a Date object, a number representing milliseconds since the Unix epoch,\n * or a string in a format parseable by the Date constructor.\n * @returns {number} The number of whole days between the reference date (dateLeft) and the compared date (dateRight).\n *\n * @example\n * // How many whole days are between '2022-09-08' and '2023-09-18'?\n * const result = differenceInDays('2022-09-08', new Date('2023-09-18'));\n *\n * The result is 0 if the diff is within a full day\n * const result = differenceInDays('2022-09-08T00:00:00', new Date('2023-09-08T14:00:00'));\n */\nexport function differenceInDays(dateLeft: Date | number | string, dateRight: Date | number | string) {\n const _dateLeft = new Date(dateLeft);\n const _dateRight = new Date(dateRight);\n\n const difference = (_dateLeft.getTime() - _dateRight.getTime()) / (1000 * 60 * 60 * 24);\n\n return Math.trunc(difference);\n}\n","import {AbstractControl, AsyncValidatorFn, ValidatorFn, Validators} from '@angular/forms';\nimport {of} from 'rxjs';\n\n/**\n * Provides a conditional validator that applies the specified validator functions only if the condition is met.\n *\n * @param condition A function that determines whether the validators should be applied.\n * @param trueValidatorFn The validator function or an array of validator functions to be applied when the condition is true.\n * @param falseValidatorFn Optional. The validator function or an array of validator functions to be applied when the condition is false.\n * @returns A validator function that can be used with Angular Reactive Forms.\n */\nexport function ifValidator(\n condition: (control: AbstractControl) => boolean,\n trueValidatorFn: ValidatorFn | ValidatorFn[],\n falseValidatorFn?: ValidatorFn | ValidatorFn[],\n): ValidatorFn {\n /**\n * @param control The AbstractControl to validate.\n * @returns Validation errors if the condition is met; otherwise, null.\n */\n return (control: AbstractControl): Validators | null => {\n if (!trueValidatorFn || !condition(control)) {\n return composeValidators(control, falseValidatorFn);\n }\n\n return composeValidators(control, trueValidatorFn);\n };\n}\n\n/**\n * Provides a conditional async validator that applies the specified async validator function only if the condition is met.\n *\n * @param condition A function that determines whether the async validator should be applied.\n * @param validatorFn The async validator function to be applied conditionally.\n * @returns An async validator function that can be used with Angular Reactive Forms.\n */\nexport function ifAsyncValidator(\n condition: (control: AbstractControl) => boolean,\n validatorFn: AsyncValidatorFn,\n): AsyncValidatorFn {\n /**\n * @param control The AbstractControl to validate asynchronously.\n * @returns An observable that emits validation errors if the condition is met; otherwise, emits null.\n */\n return (control: AbstractControl) => {\n if (!validatorFn || !condition(control)) {\n return of(null);\n }\n\n return validatorFn(control);\n };\n}\n\n/**\n * Composes and applies the provided validators to the given AbstractControl.\n *\n * @param control The AbstractControl to validate.\n * @param validatorFn The validator function or an array of validator functions to be applied.\n * @returns Validation errors if the validators are applicable; otherwise, null.\n */\nfunction composeValidators(\n control: AbstractControl,\n validatorFn: ValidatorFn | ValidatorFn[] | undefined,\n): Validators | null {\n if (!validatorFn) {\n return null;\n }\n\n const validatorFns = Array.isArray(validatorFn) ? validatorFn : [validatorFn];\n return Validators.compose(validatorFns)?.(control) || null;\n}\n","import {makeEnvironmentProviders} from '@angular/core';\n\nexport class IdleDetectionConfig {\n idleDurationInSeconds?: number;\n timeoutDurationInSeconds?: number;\n}\n\nexport function provideIdleDetectionConfig(config: IdleDetectionConfig) {\n return makeEnvironmentProviders([{provide: IdleDetectionConfig, useValue: config}]);\n}\n","import {ModuleWithProviders, NgModule} from '@angular/core';\n\nimport {IdleDetectionConfig, provideIdleDetectionConfig} from './idle-detection.config';\n\n/**\n * Idle detection module.\n * @deprecated use provideIdleDetectionConfig(config: IdleDetectionConfig) instead\n */\n@NgModule({\n imports: [],\n})\nexport class IdleDetectionModule {\n static forRoot(config: IdleDetectionConfig): ModuleWithProviders<IdleDetectionModule> {\n return {\n ngModule: IdleDetectionModule,\n providers: [provideIdleDetectionConfig(config)],\n };\n }\n}\n","import {Injectable, Optional} from '@angular/core';\nimport {fromEvent, merge, Subject, Subscription, throttleTime} from 'rxjs';\n\nimport {IdleDetectionConfig} from './idle-detection.config';\n\n/**\n * Service for detecting user idle time and implementing a countdown.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class IdleDetectionService {\n /**\n * The list of interruption events that will end the idle detection.\n */\n private interruptionEvents = [\n 'click',\n 'keydown',\n 'keypress',\n 'mousemove',\n 'mousedown',\n 'scroll',\n 'wheel',\n 'touchmove',\n 'pointermove',\n 'resize',\n ];\n private interruptionSubscription?: Subscription;\n\n /**\n * The default idle duration in seconds (19 minutes).\n */\n private idleDuration = 19 * 60;\n\n /**\n * The default timeout duration in seconds (1 minute).\n */\n private timeoutDuration = 60;\n\n /**\n * Timer for idle detection.\n */\n private idleTimer?: number;\n\n /**\n * Timer for countdown.\n */\n private countdownTimer?: number;\n\n /**\n * Flag to indicate if countdown is in progress.\n */\n private isCountingDown = false;\n\n /**\n * The current countdown value.\n */\n private countdown = this.timeoutDuration;\n\n /**\n * Subject to emit when idle period ends.\n */\n private idleEndSubject = new Subject<void>();\n\n /**\n * Subject to emit the countdown value.\n */\n private countdownSubject = new Subject<number>();\n\n /**\n * Subject to emit when countdown ends.\n */\n private countdownEndSubject = new Subject<void>();\n\n /**\n * Constructs the IdleDetectionService.\n * @param config - Optional configuration for idle and timeout durations.\n */\n constructor(@Optional() config: IdleDetectionConfig) {\n if (config) {\n this.setConfig(config);\n }\n }\n\n /**\n * Starts to watch for user inactivity.\n */\n startWatching() {\n this.setupInterruptionEvents();\n this.startIdleTimer();\n }\n\n /**\n * Resets the idle timer when user activity is detected.\n * @param withCountdownReset - Flag to indicate if countdown should be reset.\n * By default, it only reset the idle-detection timer. If you enter the countdown phase, it won't stop the countdown.\n * Pass true when you want to reset the countdown as well. This is useful when you click \"Keep Me Signed In\" button in cll-idle-detection component\n */\n resetTimer(withCountdownReset = false) {\n this.startIdleTimer();\n\n if (withCountdownReset && this.isCountingDown) {\n this.stopCountdown();\n }\n }\n\n /**\n * Sets up the interruption events that will end the idle detection.\n * Listens to a set of events on the document (e.g. click, keydown, mousemove, etc.).\n * When any of these events is triggered, the idle timer is reset.\n * Uses `throttleTime` operator to only trigger the reset when the events are spaced\n * out by at least 1000ms (1 second).\n * @private\n */\n private setupInterruptionEvents() {\n if (!this.interruptionSubscription) {\n const throttledInterruptionEvents = this.interruptionEvents.map((eventName) =>\n fromEvent(document, eventName).pipe(throttleTime(1000)),\n );\n this.interruptionSubscription = merge(...throttledInterruptionEvents).subscribe(() => this.resetTimer());\n }\n }\n\n /**\n * Starts the idle timer.\n * When the timer expires, it emits an event through onIdleEnd() and starts the countdown.\n */\n private startIdleTimer() {\n clearTimeout(this.idleTimer);\n\n this.idleTimer = window.setTimeout(() => {\n // after idle period, user inactivity detected\n this.idleEndSubject.next();\n this.startCountdown();\n }, this.idleDuration * 1000);\n }\n\n /**\n * Starts the countdown.\n */\n private startCountdown() {\n this.isCountingDown = true;\n this.countdownSubject.next(this.countdown);\n\n this.countdownTimer = window.setInterval(() => {\n this.countdown--;\n this.countdownSubject.next(this.countdown);\n\n if (this.countdown <= 0) {\n this.stopCountdown();\n this.countdownEndSubject.next();\n }\n }, 1000);\n }\n\n /**\n * Stops the countdown.\n */\n private stopCountdown() {\n clearInterval(this.countdownTimer);\n this.isCountingDown = false;\n\n // reset countdown\n this.countdown = this.timeoutDuration;\n }\n\n /**\n * Returns an observable that emits when the user has been idle for a long period.\n * Developers can use this to perform actions like opening a dialog.\n *\n * user has been inactive for a long period (idleDuration), at this moment, idle detection phase ends, onIdleEnd event is emitted, and then enter countdown/timeout phase.\n * During the countdown phase:\n * - if user has any activity, countdown phase immediately ends and restart the idle detection phase.\n * - else, countdownEnd event will be emitted when timeoutDuration is over.\n * @returns {Observable<void>} - Observable for idle end event.\n */\n onIdleEnd() {\n return this.idleEndSubject.asObservable();\n }\n\n /**\n * Returns an observable that emits when the countdown ends.\n * Usually means the user has been inactive for a very long time and should be logged out.\n * @returns {Observable<void>} - Observable for countdown end event.\n */\n onTimeoutEnd() {\n return this.countdownEndSubject.asObservable();\n }\n\n /**\n * Returns an observable that emits the countdown value every second.\n * @returns {Observable<number>} - Observable for countdown value.\n */\n onCountDown() {\n return this.countdownSubject.asObservable();\n }\n\n /**\n * Clears all timers when the component is destroyed.\n */\n clearTimers() {\n clearTimeout(this.idleTimer);\n clearInterval(this.countdownTimer);\n\n this.interruptionSubscription?.unsubscribe();\n this.interruptionSubscription = undefined;\n }\n\n /**\n * Sets the idle and timeout durations based on the provided configuration.\n * @param config - Configuration object with idle and timeout durations.\n */\n setConfig(config: IdleDetectionConfig) {\n if (config.idleDurationInSeconds) {\n this.idleDuration = config.idleDurationInSeconds;\n }\n\n if (config.timeoutDurationInSeconds) {\n this.countdown = this.timeoutDuration = config.timeoutDurationInSeconds;\n }\n }\n}\n","/**\n * Check if a value is empty.\n * @param {T | undefined | null} value - The value to check for emptiness.\n * @returns {boolean} - Returns true if the value is empty, otherwise false.\n */\nexport function isEmpty<T extends object | string | Array<unknown>>(value: T | undefined | null): value is null {\n if (value == null) return true;\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (typeof value === 'object') {\n return Object.keys(value as Record<string, unknown>).length === 0;\n }\n\n return false;\n}\n","/**\n * Check if two values are deeply equal.\n * @param {T} value1 - The first value to compare.\n * @param {T} value2 - The second value to compare.\n * @returns {boolean} - Returns true if the values are deeply equal, otherwise false.\n */\nexport function isEqual<T>(value1: T, value2: T): boolean {\n if (value1 === value2) return true;\n\n if (typeof value1 !== 'object' || typeof value2 !== 'object' || value1 === null || value2 === null) {\n return false;\n }\n\n const keys1 = Object.keys(value1) as Array<keyof T>;\n const keys2 = Object.keys(value2) as Array<keyof T>;\n\n if (keys1.length !== keys2.length) return false;\n\n for (const key of keys1) {\n if (!keys2.includes(key) || !isEqual(value1[key], value2[key])) {\n return false;\n }\n }\n\n return true;\n}\n","/**\n * Create an object composed of object properties that satisfy a given condition.\n * @param {T} source - The object to pick properties from.\n * @param {(value: T[keyof T], key: string) => boolean} predicate - The function invoked per property.\n * @returns {Partial<T>} - Returns the new object.\n */\nexport function pickBy<T>(source: T, predicate: (value: T[keyof T], key: string) => boolean): Partial<T> {\n const result: Partial<T> = {};\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key) && predicate(source[key], key)) {\n result[key] = source[key];\n }\n }\n\n return result;\n}\n","import {pickBy} from './pick-by.util';\n\n/**\n * Create an object composed of object properties that do not satisfy a given condition.\n * @param {T} source - The object to omit properties from.\n * @param {(value: T[keyof T], key: string) => boolean} predicate - The function invoked per property.\n * @returns {Partial<T>} - Returns the new object.\n */\nexport function omitBy<T>(source: T, predicate: (value: T[keyof T], key: string) => boolean): Partial<T> {\n // Negate the predicate and pass it to pickBy\n return pickBy(source, (value, key) => !predicate(value, key));\n}\n","/**\n * Creates an array of numbers (positive and/or negative) progressing from start up to, but not including, end.\n * A step of -1 is used if a negative start is specified without an end or step.\n * If end is not specified, it's set to start with start then set to 0.\n *\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nexport function range(start: number, end?: number | undefined, step?: number | undefined, fromRight = false) {\n // if range takes only 1 input, that input is end, start with 0\n if (end === undefined) {\n end = start;\n start = 0;\n }\n\n step = step === undefined ? (start < end ? 1 : -1) : step;\n\n let index = -1;\n let length = Math.max(Math.ceil((end - start) / (step || 1)), 0);\n const result = new Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n","// https://regex101.com/library/mX1xW0\nexport const emailPattern = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/;\n\nexport const urlPattern =\n /^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/;\nexport const httpsPattern =\n /^https:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/;\n\n// https://regex101.com/library/dT0vT3?orderBy=RELEVANCE&search=ip\nexport const ipRegex =\n /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n\n// A fully qualified domain name (FQDN) is a domain name that specifies its exact location in the tree hierarchy of the Domain Name System (DNS)\n// https://www.regextester.com/103452\nexport const fqdnRegex = /(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\\.)+[a-zA-Z]{2,63}$)/;\n","import {fqdnRegex, httpsPattern, ipRegex, urlPattern} from '../const';\n\n/**\n * Check if hostname is IP\n * @param hostname new URL(your-url).hostname\n * @returns true if hostname is a IP\n */\nexport function isIP(hostname: string) {\n return ipRegex.test(hostname);\n}\n\n/**\n * Check if hostname is FQDN\n * @param hostname new URL(your-url).hostname\n * @returns true if hostname is a FQDN\n */\nexport function isFQDN(hostname: string) {\n return fqdnRegex.test(hostname);\n}\n\n/**\n * Check if url is valid\n * @param url\n * @returns true if valid\n */\nexport function isURL(url: string) {\n return urlPattern.test(url);\n}\n\n/**\n * Check if a url starts with https, the url must be a valid url.\n * @param url\n * @returns true if it's a https valid url\n */\nexport function isHttps(url: string) {\n return httpsPattern.test(url);\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nimport {isHttps} from '../utils';\n\n@Pipe({\n name: 'isHttps',\n standalone: true,\n})\nexport class IsHttpsPipe implements PipeTransform {\n transform(value: string): boolean {\n return isHttps(value);\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nconst unmaskNumber = 6;\nconst maskChar = '*';\n\nexport interface MaskOptions {\n unmaskedPrefixLength?: number;\n unmaskedSuffixLength?: number;\n masked?: boolean;\n}\n\n@Pipe({\n name: 'mask',\n standalone: true,\n})\nexport class MaskPipe implements PipeTransform {\n /**\n * Transforms the input string by masking characters based on the provided options.\n *\n * @param {string} value - The input string to be masked.\n * @param {MaskOptions} [options={}] - Options for customizing the masking behavior.\n * @returns {string} - The masked string.\n */\n transform(value: string, options: MaskOptions = {}): string {\n const {unmaskedPrefixLength = unmaskNumber, unmaskedSuffixLength = unmaskNumber, masked = true} = options;\n\n if (\n value.length <= unmaskedPrefixLength + unmaskedSuffixLength ||\n unmaskedPrefixLength < 0 ||\n unmaskedSuffixLength < 0 ||\n !masked\n ) {\n return value;\n }\n\n return value\n .split('')\n .map((char, i) => (i < unmaskedPrefixLength || i > value.length - unmaskedSuffixLength - 1 ? char : maskChar))\n .join('');\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nimport {range} from '../utils';\n\n@Pipe({\n name: 'range',\n standalone: true,\n})\nexport class RangePipe implements PipeTransform {\n transform(value: [number]): number[];\n transform(value: [number, number]): number[];\n transform(value: [number, number, number]): number[];\n transform(value: [number, number, number, boolean]): number[];\n transform(value: unknown): number[] {\n const input = value as [number, number, number, boolean];\n return range(...input);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {assertInInjectionContext, computed, Injector, isSignal, Signal, untracked} from '@angular/core';\nimport {toObservable, toSignal} from '@angular/core/rxjs-interop';\nimport {\n combineLatest,\n distinctUntilChanged,\n from,\n identity,\n isObservable,\n ObservableInput,\n ObservableInputTuple,\n OperatorFunction,\n startWith,\n} from 'rxjs';\n\ntype ObservableSignalInput<T> = ObservableInput<T> | Signal<T>;\n\ntype ObservableSignalInputTuple<T> = {\n [K in keyof T]: ObservableSignalInput<T[K]> | (() => T[K]);\n};\n\n// pick from ToSignalOptions\nexport type CombineFromOptions<IValue> = {\n readonly injector?: Injector;\n readonly initialValue?: IValue;\n};\n\n// array inputs only\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n): Signal<Output>;\n\n// ---------- 3 args with array inputs -------------\n// combineFrom([signal, obs$], pipeOperator, { initialValue: [1,2] }), Input is [signal, obs$]\n// 1. no initialValue\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<undefined>,\n): Signal<Output | undefined>;\n// 2. initialValue is null, returning type should include null\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<null>,\n): Signal<Output | null>;\n// 3. provide initialValue\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<Output>,\n): Signal<Output>;\n\n// ---------- 2 args wit array inputs -------------\n// 1. no initialValue\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n options?: CombineFromOptions<undefined>,\n): Signal<Output | undefined>;\n// 2. initialValue is null, returning type should include null\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n options?: CombineFromOptions<null>,\n): Signal<Output | null>;\n// 3. provide initialValue\nexport function combineFrom<Input extends readonly unknown[], Output = Input>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n options?: CombineFromOptions<Output>,\n): Signal<Output>;\n\n// object input only, e.g. Input is { a: signal, b: obs$ }\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n): Signal<Output>;\n\n// ----------------- 3 args with object input --------------------\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<undefined>,\n): Signal<Output | undefined>;\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<null>,\n): Signal<Output | null>;\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n operator?: OperatorFunction<Input, Output>,\n options?: CombineFromOptions<Output>,\n): Signal<Output>;\n\n// ----------------- 2 args with object input --------------------\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n options?: CombineFromOptions<undefined>,\n): Signal<Output | undefined>;\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n options?: CombineFromOptions<null>,\n): Signal<Output | null>;\nexport function combineFrom<Input extends object, Output = Input>(\n sources: ObservableSignalInputTuple<Input>,\n options?: CombineFromOptions<Output>,\n): Signal<Output>;\n\n/**\n * Combines multiple `Observable` or `Signal` sources into a `Signal` that emits their values. It's like combineLatest.\n *\n * @param {ObservableSignalInputTuple} sources - Array or object of `Observable` or `Signal` values\n * @param {OperatorFunction} [operator] - Operator to apply to the combined values\n * @param {CombineFromOptions} [options] - Options including `initialValue` and `injector`\n * @returns Signal emitting the combined values\n *\n * @example\n * ```ts\n * export class Component {\n * private readonly userService = inject(UserService);\n * page = signal(2);\n *\n * data = combineFrom(\n * [this.page, this.userService.users$],\n * pipe(\n * switchMap(([page, users]) => this.dataService.getData(page, users)),\n * startWith([])\n * )\n * );\n * }\n * ```\n */\nexport function combineFrom<Input = any, Output = Input>(...args: any[]): Signal<Output | null | undefined> {\n assertInInjectionContext(combineFrom);\n\n const {normalizedSources, hasInitValue, operator, options} = normalizeArgs<Input, Output>(args);\n\n const ret = hasInitValue\n ? toSignal(combineLatest(normalizedSources).pipe(operator), {\n initialValue: options!.initialValue!,\n injector: options?.injector,\n })\n : (toSignal(combineLatest(normalizedSources).pipe(operator), {\n injector: options?.injector,\n // requireSync: true,\n }) as Signal<Output | undefined>);\n\n return ret;\n}\n\nfunction normalizeArgs<Input, Output>(\n args: any[],\n): {\n normalizedSources: ObservableInputTuple<Input>;\n operator: OperatorFunction<Input, Output>;\n hasInitValue: boolean;\n options: CombineFromOptions<Output> | undefined;\n} {\n if (!args || args.length < 1 || typeof args[0] !== 'object') {\n throw new TypeError('combineFrom needs sources');\n }\n\n const hasOperator = typeof args[1] === 'function';\n\n if (args.length === 3 && !hasOperator) {\n throw new TypeError('combineFrom needs a pipe operator as the second argument');\n }\n\n // pass sources and options\n if (!hasOperator) {\n // add identity function to args at index 1 as operator function as x=>x\n args.splice(1, 0, identity);\n }\n\n // if no operator passed, identity will be operator\n const [sources, operator, options] = args;\n\n const hasInitValue = options?.initialValue !== undefined;\n\n const normalizedSources = Object.entries(sources).reduce(\n (acc, [keyOrIndex, source]) => {\n if (isSignal(source)) {\n acc[keyOrIndex] = toObservable(source, {injector: options?.injector}).pipe(\n // toObservable doesn't immediately emit initialValue of the signal\n startWith(untracked(source)),\n );\n } else if (isObservable(source)) {\n acc[keyOrIndex] = source.pipe(distinctUntilChanged());\n } else if (typeof source === 'function') {\n // seldom use: pass function like () => 5\n const computedRes = computed(source as () => unknown);\n acc[keyOrIndex] = toObservable(computedRes, {injector: options?.injector}).pipe(startWith(source()));\n } else {\n // seldom use: pass promise, Map, array, etc that from accepts\n acc[keyOrIndex] = from(source as any).pipe(distinctUntilChanged());\n }\n return acc;\n },\n (Array.isArray(sources) ? [] : {}) as any,\n );\n\n return {normalizedSources, operator, hasInitValue, options};\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {computed, CreateComputedOptions, DestroyRef, effect, inject, Signal, signal, untracked} from '@angular/core';\nimport {concatAll, exhaustAll, isObservable, mergeAll, Observable, Subject, switchAll} from 'rxjs';\n\ntype ComputedAsyncBehavior = 'switch' | 'merge' | 'concat' | 'exhaust';\n\n// { equal, behavior }\ntype BaseOptions<T> = CreateComputedOptions<T> & {behavior?: ComputedAsyncBehavior};\n\ntype OptionsWithInitialValue<T> = {initialValue: T} & BaseOptions<T>;\ntype OptionsWithOptionalInitialValue<T> = {initialValue?: undefined} & BaseOptions<T>;\ntype OptionsWithRequireSync<T> = {requireSync: true} & BaseOptions<T>;\n\n// without options\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | Promise<T> | T | undefined,\n): Signal<T | undefined>;\n\n// with optional initialValue\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | Promise<T> | T | undefined,\n options: OptionsWithOptionalInitialValue<T>,\n): Signal<T | undefined>;\n\n// with initialValue\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | Promise<T> | T | undefined,\n options: OptionsWithInitialValue<T>,\n): Signal<T>;\n\n// for promise, without initialValue but set requireSync as true, throw error\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Promise<T>,\n options: OptionsWithOptionalInitialValue<T> & {requireSync: true},\n): never;\n\n// for observables, without initialValue, without requireSync, return T | undefined\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | T | undefined,\n options: {\n initialValue?: undefined;\n requireSync?: false;\n } & BaseOptions<T>,\n): Signal<T | undefined>;\n\n// for observables, without initialValue, but requireSync is true, return T\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | T,\n options: OptionsWithRequireSync<T> & {initialValue?: undefined | T},\n): Signal<T>;\n\nexport function computedAsync<T>(\n computeFn: (previousValue?: T) => Observable<T> | Promise<T> | T | undefined,\n options: any = {},\n): Signal<T | undefined> {\n const destroyRef = inject(DestroyRef);\n\n const sourceSubject = new Subject<Promise<T> | Observable<T>>();\n const source$ = flattenObservable(sourceSubject, options.behavior || 'switch');\n\n const sourceValue = signal<T | undefined>(options.initialValue);\n\n const sourceResult = source$.subscribe({\n next: (value) => sourceValue.set(value),\n error: (error) => {\n sourceValue.set(error);\n // Error should be handled by the user\n // throw error;\n },\n });\n\n destroyRef.onDestroy(() => sourceResult.unsubscribe());\n\n if (options.requireSync && options.initialValue === undefined) {\n const initialEmission = computeFn(undefined);\n\n if (isPromise(initialEmission)) {\n throw new Error(`Promises cannot work with requireSync. Set requireSync to false or pass an initialValue.`);\n }\n\n if (isObservable(initialEmission)) {\n sourceSubject.next(initialEmission);\n } else {\n // primitive value T\n sourceValue.set(initialEmission);\n }\n }\n\n if (options.requireSync && sourceValue() === undefined) {\n throw new Error(`The observable doesn't emit synchronously. Set requireSync to false or pass an initialValue.`);\n }\n\n let shouldSkipFirstComputation = options.requireSync === true;\n\n effect(() => {\n const currentValue = untracked(() => sourceValue());\n\n const newSource = computeFn(currentValue);\n\n if (shouldSkipFirstComputation) {\n shouldSkipFirstComputation = false;\n return;\n }\n\n if (isPromise(newSource) || isObservable(newSource)) {\n untracked(() => sourceSubject.next(newSource));\n } else {\n untracked(() => sourceValue.set(newSource));\n }\n });\n\n return computed(() => sourceValue() as T, {equal: options.equal});\n}\n\nfunction flattenObservable<T>(\n source: Subject<Promise<T> | Observable<T>>,\n behavior: ComputedAsyncBehavior,\n): Observable<T> {\n const behaviorMap = {\n switch: switchAll,\n merge: mergeAll,\n concat: concatAll,\n exhaust: exhaustAll,\n };\n\n return source.pipe(behaviorMap[behavior]());\n}\n\nfunction isPromise<T>(value: any): value is Promise<T> {\n return value && typeof value.then === 'function';\n}\n","import {signal} from '@angular/core';\n\nexport function createTrigger() {\n const sourceSignal = signal(0);\n\n return {\n next: () => {\n sourceSignal.update((v) => v + 1);\n },\n value: sourceSignal.asReadonly(),\n };\n}\n","import {assertInInjectionContext, inject, type Signal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {ActivatedRoute, type Params} from '@angular/router';\nimport {map} from 'rxjs';\n\ntype ParamsTransformFn<Output> = (params: Params) => Output;\n\n/**\n * The `InputOptions` interface defines options for configuring the behavior of the `injectParams` function.\n *\n * @template Output - The expected type of the read value.\n */\nexport interface ParamsOptions<Output> {\n /**\n * A transformation function to convert the written value to the expected read value.\n *\n * @param v - The value to transform.\n * @returns The transformed value.\n */\n transform?: (v: string) => Output;\n\n /**\n * The initial value to use if the parameter is not present or undefined.\n */\n initialValue?: Output;\n}\n\n/**\n * Injects the params from the current route.\n * If a key is provided, returns the value of that key.\n * If a transform function is provided, returns the result of the function.\n * Otherwise, returns the entire params object.\n *\n * @example\n * const params = injectParams(); // Returns the entire params object\n * const userId = injectParams('id'); // Returns the value of the 'id' param\n * const userId = injectParams(p => p['id'] as string); // Returns the 'id' param using a custom transform function\n * const userId = injectParams('id', { transform: numberAttribute, initialValue: 1 });\n *\n * @param keyOrParamsTransform OPTIONAL The key of the param to return, or a transform function to apply to the params object\n */\nexport function injectParams(): Signal<Params>;\n\nexport function injectParams<Output>(fn: ParamsTransformFn<Output>): Signal<Output>;\n\nexport function injectParams(key: string): Signal<string | null>;\n\n// for boolean or number, if initialValue is provided, transform is a must\nexport function injectParams(\n key: string,\n options: {transform: (v: string) => boolean; initialValue: boolean},\n): Signal<boolean>;\nexport function injectParams(\n key: string,\n options: {transform: (v: string) => number; initialValue: number},\n): Signal<number>;\n// for string, transform is optional\nexport function injectParams(\n key: string,\n options: {transform?: (v: string) => string; initialValue: string},\n): Signal<string>;\n\n// initialValue not provided, must provide transform fn\nexport function injectParams(\n key: string,\n options: {transform: (v: string) => boolean; initialValue?: undefined},\n): Signal<boolean | null>;\nexport function injectParams(\n key: string,\n options: {transform: (v: string) => number; initialValue?: undefined},\n): Signal<number | null>;\nexport function injectParams(\n key: string,\n options: {transform: (v: string) => string; initialValue?: undefined},\n): Signal<string | null>;\n\nexport function injectParams<Output>(\n keyOrParamsTransform?: string | ParamsTransformFn<Output>,\n options: ParamsOptions<Output> = {},\n): Signal<Output | Params | string | boolean | number | null> {\n assertInInjectionContext(injectParams);\n\n const route = inject(ActivatedRoute);\n const initialParams = route.snapshot.params;\n\n const {transform, initialValue} = options;\n\n // injectParams(): Signal<Params>\n if (!keyOrParamsTransform) {\n return toSignal(route.params, {initialValue: initialParams});\n }\n\n // injectParams<Output>(fn: ParamsTransformFn<Output>): Signal<Output>\n if (typeof keyOrParamsTransform === 'function') {\n return toSignal(route.params.pipe(map(keyOrParamsTransform)), {initialValue: keyOrParamsTransform(initialParams)});\n }\n\n // keyOrParamsTransform is string.\n // export function injectParams(key: string): Signal<string | null>;\n // export function injectParams(key: string, options: { transform: (v: string) => boolean; initialValue: boolean }): Signal<boolean>;\n // export function injectParams(key: string, options: { transform: (v: string) => number; initialValue: number }): Signal<number>;\n // export function injectParams(key: string, options: { transform?: (v: string) => string; initialValue: string }): Signal<string>;\n // export function injectParams(key: string, options: { transform: (v: string) => boolean; initialValue?: undefined }): Signal<boolean | null>;\n // export function injectParams(key: string, options: { transform: (v: string) => number; initialValue?: undefined }): Signal<number | null>;\n // export function injectParams(key: string, options: { transform: (v: string) => string; initialValue?: undefined }): Signal<string | null>;\n const getParam = (params: Params) => {\n const param = params?.[keyOrParamsTransform] as string | undefined;\n\n if (!param) {\n return initialValue ?? null;\n }\n\n return transform ? transform(param) : param;\n };\n\n return toSignal(route.params.pipe(map(getParam)), {initialValue: getParam(initialParams)});\n}\n","import {assertInInjectionContext, inject, type Signal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {ActivatedRoute, type Params} from '@angular/router';\nimport {map} from 'rxjs';\n\ntype QueryParamsTransformFn<Output> = (params: Params) => Output;\n\n/**\n * The `InputOptions` interface defines options for configuring the behavior of the `injectQueryParams` function.\n *\n * @template Output - The expected type of the read value.\n */\nexport interface QueryParamsOptions<Output> {\n /**\n * A transformation function to convert the written value to the expected read value.\n *\n * @param v - The value to transform.\n * @returns The transformed value.\n */\n transform?: (v: string) => Output;\n\n /**\n * The initial value to use if the query parameter is not present or undefined.\n */\n initialValue?: Output;\n}\n\n/**\n * The `injectQueryParams` function allows you to access and manipulate query parameters from the current route.\n *\n * @returns A `Signal` that emits the entire query parameters object.\n */\nexport function injectQueryParams(): Signal<Params>;\n\n/**\n * The `injectQueryParams` function allows you to access and manipulate query parameters from the current route.\n * It retrieves the value of a query parameter based on a custom transform function applied to the query parameters object.\n *\n * @template Output - The expected type of the read value.\n * @param {QueryParamsTransformFn<Output>} fn - A transform function that takes the query parameters object (`params: Params`) and returns the desired value.\n * @returns {Signal} A `Signal` that emits the transformed value based on the provided custom transform function.\n *\n * @example\n * const searchValue = injectQueryParams((params) => params['search'] as string);\n */\nexport function injectQueryParams<Output>(fn: QueryParamsTransformFn<Output>): Signal<Output>;\n\n/**\n * The `injectQueryParams` function allows you to access and manipulate query parameters from the current route.\n *\n * @param {string} key - The name of the query parameter to retrieve.\n * @returns {Signal} A `Signal` that emits the value of the specified query parameter, or `null` if it's not present.\n */\nexport function injectQueryParams(key: string): Signal<string | null>;\n\n// for boolean or number, if initialValue is provided, transform is a must\nexport function injectQueryParams(\n key: string,\n options: {transform: (v: string) => boolean; initialValue: boolean},\n): Signal<boolean>;\nexport function injectQueryParams(\n key: string,\n options: {transform: (v: string) => number; initialValue: number},\n): Signal<number>;\n// for string, transform is optional\nexport function injectQueryParams(\n key: string,\n options: {transform?: (v: string) => string; initialValue: string},\n): Signal<string>;\n\n// initialValue not provided, must provide transform fn\nexport function injectQueryParams(\n key: string,\n options: {transform: (v: string) => boolean; initialValue?: undefined},\n): Signal<boolean | null>;\nexport function injectQueryParams(\n key: string,\n options: {transform: (v: string) => number; initialValue?: undefined},\n): Signal<number | null>;\nexport function injectQueryParams(\n key: string,\n options: {transform: (v: string) => string; initialValue?: undefined},\n): Signal<string | null>;\n\n/**\n * The `injectQueryParams` function allows you to access and manipulate query parameters from the current route.\n *\n * @template Output - The expected type of the read value.\n * @param {string} keyOrParamsTransform - The name of the query parameter to retrieve, or a transform function to apply to the query parameters object.\n * @param {QueryParamsOptions} options - Optional configuration options for the query parameter.\n * @returns {QueryParamsOptions} A `Signal` that emits the transformed value of the specified query parameter, or the entire query parameters object if no key is provided.\n *\n * @example\n * const search = injectQueryParams('search'); // returns the value of the 'search' query param\n * const search = injectQueryParams(p => p['search'] as string); // same as above but can be used with a custom transform function\n * const idParam = injectQueryParams('id', {transform: numberAttribute}); // returns the value fo the 'id' query params and transforms it into a number\n * const idParam = injectQueryParams(p => numberAttribute(p['id'])); // same as above but can be used with a custom transform function\n * const queryParams = injectQueryParams(); // returns the entire query params object\n */\nexport function injectQueryParams<Output>(\n keyOrParamsTransform?: string | QueryParamsTransformFn<Output>,\n options: QueryParamsOptions<Output> = {},\n): Signal<Output | Params | string | boolean | number | null> {\n assertInInjectionContext(injectQueryParams);\n\n const route = inject(ActivatedRoute);\n const initialQueryParams = route.snapshot.queryParams;\n\n const {transform, initialValue} = options;\n\n // injectQueryParams(): Signal<Params>\n if (!keyOrParamsTransform) {\n return toSignal(route.queryParams, {initialValue: initialQueryParams});\n }\n\n // injectQueryParams<Output>(fn: QueryParamsTransformFn<Output>): Signal<Output>\n if (typeof keyOrParamsTransform === 'function') {\n return toSignal(route.queryParams.pipe(map(keyOrParamsTransform)), {\n initialValue: keyOrParamsTransform(initialQueryParams),\n });\n }\n\n // keyOrParamsTransform is string.\n const getParam = (params: Params) => {\n const param = params?.[keyOrParamsTransform] as string | string[] | undefined;\n\n if (!param) {\n return initialValue ?? null;\n }\n\n if (Array.isArray(param)) {\n if (param.length < 1) {\n return initialValue ?? null;\n }\n return transform ? transform(param[0]) : param[0];\n }\n\n return transform ? transform(param) : param;\n };\n\n return toSignal(route.queryParams.pipe(map(getParam)), {\n initialValue: getParam(initialQueryParams),\n });\n}\n","import {assertInInjectionContext, Injector, isSignal, Signal, untracked} from '@angular/core';\nimport {toObservable, toSignal} from '@angular/core/rxjs-interop';\nimport {\n distinctUntilChanged,\n from,\n identity,\n isObservable,\n merge,\n ObservableInput,\n OperatorFunction,\n startWith,\n} from 'rxjs';\n\ntype ObservableSignalInput<T> = ObservableInput<T> | Signal<T>;\n\ntype ObservableSignalInputTuple<T> = {\n [K in keyof T]: ObservableSignalInput<T[K]>;\n};\n\n// pick from ToSignalOptions\nexport type MergeFromOptions<T> = {\n readonly injector?: Injector;\n readonly initialValue?: T | null;\n};\n\nexport function mergeFrom<Input extends readonly unknown[], Output = Input[number]>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n operator?: OperatorFunction<Input[number], Output>,\n options?: MergeFromOptions<Output>,\n): Signal<Output>;\n\nexport function mergeFrom<Input extends readonly unknown[], Output = Input[number]>(\n sources: readonly [...ObservableSignalInputTuple<Input>],\n options?: MergeFromOptions<Output>,\n): Signal<Output>;\n\n// No object inputs\n\n/**\n * merge multiple `Observable` or `Signal` sources into a `Signal` that emits the last value. It's like merge.\n *\n * @param {ObservableSignalInputTuple} sources - Array of `Observable` or `Signal` values\n * @param {OperatorFunction} [operator] - Operator to apply to the merge\n * @param {MergeFromOptions} [options] - Options including `initialValue` and `injector`\n * @returns Signal emitting the latest merge result\n *\n * @example\n * ```ts\n * export class Component {\n * e$ = of(1).pipe(delay(1000));\n * f = signal(2);\n *\n * data = mergeFrom(\n * [this.e$, this.f],\n * pipe(\n * switchMap((res) => of(`${res} is coming~`)),\n * startWith(0),\n * ),\n * );\n * }\n * ```\n */\nexport function mergeFrom<Input extends readonly unknown[], Output = Input[number]>(...args: unknown[]) {\n assertInInjectionContext(mergeFrom);\n\n const [sources, operator = identity, options = {}] = parseArgs<Input, Output>(args);\n\n const normalizedSources = sources.map((source) => {\n if (isSignal(source)) {\n return toObservable(source, {injector: options.injector}).pipe(startWith(untracked(source)));\n }\n\n if (!isObservable(source)) {\n source = from(source);\n }\n\n return source.pipe(distinctUntilChanged());\n });\n\n const merged$ = merge(...normalizedSources).pipe(operator as OperatorFunction<Input[number], Output>);\n\n if (options.initialValue !== undefined) {\n return toSignal(merged$, {initialValue: options.initialValue as Output, injector: options.injector});\n }\n return toSignal(merged$, {requireSync: true, injector: options.injector});\n}\n\nfunction parseArgs<Input extends readonly unknown[], Output = Input[number]>(args: unknown[]) {\n if (!args || args.length < 1) {\n throw new TypeError('mergeFrom needs sources');\n }\n\n if (args.length === 1) {\n return [args[0] as readonly [...ObservableSignalInputTuple<Input>], undefined, undefined] as const;\n }\n\n if (args.length === 2) {\n const hasOperator = typeof args[1] === 'function';\n\n if (hasOperator) {\n return [\n args[0] as readonly [...ObservableSignalInputTuple<Input>],\n args[1] as OperatorFunction<Input[number], Output>,\n undefined,\n ] as const;\n }\n\n return [\n args[0] as readonly [...ObservableSignalInputTuple<Input>],\n undefined,\n args[1] as MergeFromOptions<Output>,\n ] as const;\n }\n\n return args as unknown as [\n readonly [...ObservableSignalInputTuple<Input>],\n OperatorFunction<Input[number], Output>,\n MergeFromOptions<Output>,\n ];\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\nimport {differenceInDays} from '../utils/difference-in-days.util';\n\n/**\n * Interface defining the options for the date range validator.\n */\ninterface DateRangeOptions {\n minDate?: Date | string; // Minimum allowed date\n maxDate?: Date | string; // Maximum allowed date\n minInclusive?: boolean; // Whether the comparison for the minimum date can include the exact date\n maxInclusive?: boolean; // Whether the comparison for the maximum date can include the exact date\n compareTime?: boolean; // Whether to compare the time as well. If true, comparisons will include Date time components; if false, time parts will be ignored\n}\n\n/**\n * Validates a date against a specified date range.\n *\n * @param {DateRangeOptions} options - The options for the date range validation.\n * @returns {ValidatorFn} A function that validates a FormControl and returns an error if the date is out of range.\n */\nexport function dateRangeValidator(options: DateRangeOptions): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n // if control doesn't have any value, pass validation. Developer should use Angular required validator.\n if (!control.value) {\n return null;\n }\n\n // Parse the selected date from the control value\n const selectedDate = new Date(control.value);\n\n if (isNaN(selectedDate.getTime())) {\n return {invalidDate: true};\n }\n\n const minDate = options.minDate ? new Date(options.minDate) : null;\n const maxDate = options.maxDate ? new Date(options.maxDate) : null;\n\n if (minDate) {\n let errorCondition = false;\n\n if (options.compareTime) {\n errorCondition = options.minInclusive\n ? selectedDate.getTime() < minDate.getTime()\n : selectedDate.getTime() <= minDate.getTime();\n } else {\n const diff = differenceInDays(selectedDate, minDate);\n errorCondition = options.minInclusive ? diff < 0 : diff <= 0;\n }\n\n if (errorCondition) {\n return {\n minDate: minDate.toISOString(),\n };\n }\n }\n\n if (maxDate) {\n let errorCondition = false;\n\n if (options.compareTime) {\n errorCondition = options.maxInclusive\n ? selectedDate.getTime() > maxDate.getTime()\n : selectedDate.getTime() >= maxDate.getTime();\n } else {\n const diff = differenceInDays(selectedDate, maxDate);\n errorCondition = options.maxInclusive ? diff > 0 : diff >= 0;\n }\n\n if (errorCondition) {\n return {\n maxDate: maxDate.toISOString(),\n };\n }\n }\n\n return null;\n };\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\n/**\n * A custom validator function that checks for intersection between two form controls. The two controls' values must be arrays.\n *\n * @param {string} controlName1 - The name of the first form control.\n * @param {string} controlName2 - The name of the second form control.\n * @returns {ValidatorFn} A function that validates the form group and returns an error if there is an intersection.\n */\nexport function intersectionValidator<T = string>(controlName1: string, controlName2: string): ValidatorFn {\n return (formGroup: AbstractControl): ValidationErrors | null => {\n const control1 = formGroup.get(controlName1);\n const control2 = formGroup.get(controlName2);\n\n if (!control1 || !control2) {\n return null; // If either control is undefined or null\n }\n\n const value1 = control1.value;\n const value2 = control2.value;\n\n // Assuming both values are arrays\n if (!Array.isArray(value1) || !Array.isArray(value2)) {\n return null;\n }\n\n const intersection = value1.filter((value: T) => value2.includes(value));\n\n if (intersection.length > 0) {\n control1.setErrors({intersection: true});\n control2.setErrors({intersection: true});\n return {intersection: true};\n } else {\n control1.setErrors(null);\n control2.setErrors(null);\n return null;\n }\n };\n}\n","import {AbstractControl, FormArray, ValidationErrors, ValidatorFn} from '@angular/forms';\n\n/**\n * Validator for checking uniqueness across multiple fields in a FormArray or FormGroup.\n *\n * This validator can be applied to a FormArray or FormGroup containing the controls to be validated.\n * It ensures that each control's value is unique among all other controls within the array or group.\n */\nexport class UniqueValidator {\n /**\n * Validator function to be attached to a FormArray or FormGroup.\n *\n * This validator checks for uniqueness of each control's value within the array or group.\n *\n * @param keySelector A function to select the key control for comparison (default is the control itself).\n * @typeparam T The type of the control value.\n */\n static unique<T>(\n keySelector: (control: AbstractControl) => AbstractControl<T> = (control: AbstractControl<T>) => control,\n ): ValidatorFn {\n return (formArray: AbstractControl): ValidationErrors | null => {\n if (!(formArray instanceof FormArray)) {\n return null;\n }\n\n const targetControls = formArray.controls.map(keySelector);\n const valueControlMap = new Map<T, AbstractControl<T>>();\n const invalidControls: AbstractControl<T>[] = [];\n\n for (const control of targetControls) {\n const value = control.value;\n\n if (value == null || String(value) === '' || String(value) === 'NaN') {\n continue;\n }\n\n const controlInMap = valueControlMap.get(value);\n\n if (controlInMap) {\n if (!invalidControls.includes(controlInMap)) {\n invalidControls.push(controlInMap);\n }\n\n invalidControls.push(control);\n } else {\n valueControlMap.set(value, control);\n }\n }\n\n const notUniqueError = {notUnique: true};\n\n // set errors manually for target controls\n for (const control of targetControls) {\n const errors = control.errors;\n\n if (invalidControls.includes(control)) {\n // set not unique error for invalid controls\n control.setErrors(errors === null ? notUniqueError : {...errors, ...notUniqueError});\n } else {\n // remove not unique errors for valid controls\n if (errors === null) {\n control.setErrors(null);\n } else {\n delete errors['notUnique'];\n control.setErrors(Object.keys(errors).length > 0 ? errors : null);\n }\n }\n }\n\n return invalidControls.length > 0 ? notUniqueError : null;\n };\n }\n}\n","import {AbstractControl, ValidationErrors} from '@angular/forms';\n\nimport {httpsPattern, urlPattern} from '../const';\n\nexport function urlValidator(control: AbstractControl): ValidationErrors | null {\n if (!urlPattern.test(control.value)) {\n return {invalidUrl: true};\n }\n return null;\n}\n\nexport function httpsValidator(control: AbstractControl): ValidationErrors | null {\n if (!httpsPattern.test(control.value)) {\n return {invalidUrl: true};\n }\n return null;\n}\n","/*\n * Public API Surface of ngx-lift\n */\n\nexport * from './lib/models';\nexport * from './lib/operators';\nexport * from './lib/pipes';\nexport * from './lib/signals';\nexport * from './lib/utils';\nexport * from './lib/validators';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["isPromise","i1.IdleDetectionConfig"],"mappings":"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"}
@@ -9,8 +9,8 @@ import { AsyncState } from '../models';
9
9
  * @param {object} options - The configuration options for polling.
10
10
  * @param {number} options.interval - The interval in milliseconds between each poll.
11
11
  * @param {(params: any) => Observable<Data> | Data} options.pollingFn - A function that returns an Observable, Promise, or primitive value.
12
- * @param {Observable<Input> | Signal<Input>} [options.trigger] - An optional Observable or Signal that triggers a manual poll.
13
- * @param {(input: Input) => any} [options.paramsBuilder] - An optional function that builds parameters for the polling function based on the input. The value emitted by the trigger observable will serve as the parameter.
12
+ * @param {Observable<Input> | Signal<Input>} [options.forceRefresh] - An optional Observable or Signal that triggers a manual refresh of the polling function.
13
+ * @param {(input: Input) => any} [options.paramsBuilder] - An optional function that builds parameters for the polling function based on the input. The value emitted by the forceRefresh observable will serve as the parameter.
14
14
  * @returns {Observable<AsyncState<Data>>} An Observable emitting objects representing the state of the asynchronous operation.
15
15
  */
16
16
  export declare function poll<Data>(options: {
@@ -20,11 +20,11 @@ export declare function poll<Data>(options: {
20
20
  export declare function poll<Data, Input>(options: {
21
21
  interval: number;
22
22
  pollingFn: (params: Input) => Observable<Data> | Promise<Data> | Data;
23
- trigger: Observable<Input> | Signal<Input>;
23
+ forceRefresh: Observable<Input> | Signal<Input>;
24
24
  }): Observable<AsyncState<Data>>;
25
25
  export declare function poll<Data, Input>(options: {
26
26
  interval: number;
27
27
  pollingFn: (params: any) => Observable<Data> | Promise<Data> | Data;
28
- trigger: Observable<Input> | Signal<Input>;
28
+ forceRefresh: Observable<Input> | Signal<Input>;
29
29
  paramsBuilder: (input: Input) => any;
30
30
  }): Observable<AsyncState<Data>>;
@@ -56,8 +56,11 @@ export declare class IdleDetectionService {
56
56
  startWatching(): void;
57
57
  /**
58
58
  * Resets the idle timer when user activity is detected.
59
+ * @param withCountdownReset - Flag to indicate if countdown should be reset.
60
+ * By default, it only reset the idle-detection timer. If you enter the countdown phase, it won't stop the countdown.
61
+ * Pass true when you want to reset the countdown as well. This is useful when you click "Keep Me Signed In" button in cll-idle-detection component
59
62
  */
60
- resetTimer(): void;
63
+ resetTimer(withCountdownReset?: boolean): void;
61
64
  /**
62
65
  * Sets up the interruption events that will end the idle detection.
63
66
  * Listens to a set of events on the document (e.g. click, keydown, mousemove, etc.).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-lift",
3
- "version": "1.7.3",
3
+ "version": "1.8.0",
4
4
  "description": "A project has been crafted with the goal of enhancing and simplifying your Angular development experience.",
5
5
  "author": "Guanghui Wang <guanghui-wang@foxmail.com>",
6
6
  "peerDependencies": {