{"version":3,"file":"notiz-toolbelt-utils.mjs","sources":["../../../../libs/toolbelt/utils/src/animationframe.ts","../../../../libs/toolbelt/utils/src/equal.ts","../../../../libs/toolbelt/utils/src/notiz-toolbelt-utils.ts"],"sourcesContent":["import { NgZone, inject } from '@angular/core';\nimport {\n  MonoTypeOperatorFunction,\n  Observable,\n  animationFrameScheduler,\n  map,\n  of,\n  pairwise,\n  scan,\n  throttleTime,\n} from 'rxjs';\n\nexport function onAnimationFrame<T>(): MonoTypeOperatorFunction<T> {\n  // if (typeof window === 'undefined') {\n  //   return (source: Observable<T>) => source;\n  // }\n  // return switchMap((t) => animationFrame(window).pipe(first(),map(() => t)));\n  return throttleTime(0, animationFrameScheduler);\n}\n\nexport function fps$() {\n  return inject(NgZone).runOutsideAngular(() => {\n    if (typeof window === 'undefined') {\n      return of(0);\n    }\n\n    return animationFrame(window).pipe(\n      pairwise(),\n      scan((acc, [prev, cur]) => {\n        if (acc.push(1000 / (cur - prev)) > 60) {\n          acc.shift();\n        }\n        return acc;\n      }, [] as number[]),\n      map((arr) =>\n        Math.round(arr.reduce((acc, cur) => acc + cur, 0) / arr.length),\n      ),\n    );\n  });\n}\n\nexport function animationFrame({\n  requestAnimationFrame,\n  cancelAnimationFrame,\n}: Window): Observable<DOMHighResTimeStamp> {\n  return new Observable((subscriber) => {\n    let id = NaN;\n\n    const callback = (timestamp: DOMHighResTimeStamp) => {\n      subscriber.next(timestamp);\n      id = requestAnimationFrame(callback);\n    };\n\n    id = requestAnimationFrame(callback);\n\n    return () => {\n      cancelAnimationFrame(id);\n    };\n  });\n}\n","export function equal(a: any, b: any): boolean {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0; ) if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    if (a.constructor === RegExp)\n      return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf)\n      return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString)\n      return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0; )\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0; ) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a !== a && b !== b;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}