{"version":3,"file":"notiz-toolbelt-spring.mjs","sources":["../../../../libs/toolbelt/spring/src/spring.ts","../../../../libs/toolbelt/spring/src/spring.pipe.ts","../../../../libs/toolbelt/spring/src/notiz-toolbelt-spring.ts"],"sourcesContent":["// This is not mine :) See https://github.com/gvergnaud/rx-ease\n// @ts-nocheck\n// TODO strongly type here\nimport { MonoTypeOperatorFunction, Observable, of, switchMap } from 'rxjs';\n\nexport const presets = {\n  noWobble: [170, 26],\n  gentle: [120, 14],\n  wobbly: [180, 12],\n  stiff: [210, 20],\n};\n\nexport const mapValues = <A, B, K extends string>(\n  f: (value: A, key: K) => B,\n  obj: Record<K, A>,\n): Record<K, B> =>\n  (Object.keys(obj) as K[]).reduce<Record<K, B>>(\n    (acc, k) => ({ ...acc, [k]: f(obj[k], k) }),\n    {} as Record<K, B>,\n  );\n\nconst defaultSecondPerFrame = 0.016;\n\nconst rafThrottle = <T extends []>(\n  f: (...args: T) => void,\n): ((...args: T) => void) => {\n  let isFirst = true;\n  let shouldExecute = true;\n  let args = [] as T;\n  return (..._args: T) => {\n    if (isFirst) {\n      isFirst = false;\n      f(..._args);\n    } else {\n      args = _args;\n      if (!shouldExecute) return;\n      shouldExecute = false;\n      window.requestAnimationFrame(() => {\n        shouldExecute = true;\n        f(...args);\n      });\n    }\n  };\n};\n\n// stepper :: Number -> Number -> Number -> Number? -> Number? -> Number? -> [Number, Number]\nlet reusedTuple: [number, number] = [0, 0];\nfunction stepper(\n  value: number,\n  velocity: number,\n  destValue: number,\n  stiffness = 170,\n  damping = 20,\n  secondPerFrame = defaultSecondPerFrame,\n  precision = 0.1,\n): [number, number] {\n  // Spring stiffness, in kg / s^2\n\n  // for animations, destValue is really spring length (spring at rest). initial\n  // position is considered as the stretched/compressed position of a spring\n  const Fspring = -stiffness * (value - destValue);\n\n  // Damping, in kg / s\n  const Fdamper = -damping * velocity;\n\n  // usually we put mass here, but for animation purposes, specifying mass is a\n  // bit redundant. you could simply adjust k and b accordingly\n  // let a = (Fspring + Fdamper) / mass\n  const a = Fspring + Fdamper;\n\n  const newVelocity = velocity + a * secondPerFrame;\n  const newValue = value + newVelocity * secondPerFrame;\n\n  if (\n    Math.abs(newVelocity) < precision &&\n    Math.abs(newValue - destValue) < precision\n  ) {\n    reusedTuple[0] = destValue;\n    reusedTuple[1] = 0;\n    return reusedTuple;\n  }\n\n  reusedTuple[0] = newValue;\n  reusedTuple[1] = newVelocity;\n  return reusedTuple;\n}\n\n// createEasedStream :: (number, number) -> number -> Observable number\nconst createEasedStream = (stiffness: number, damping: number) => {\n  let value: number;\n  let velocity = 0;\n  let destValue: number;\n\n  return (x: number): Observable<number> => {\n    destValue = x;\n    if (value === undefined) value = x;\n\n    return new Observable((observer) => {\n      let isRunning = true;\n\n      const run = rafThrottle(() => {\n        [value, velocity] = stepper(\n          value,\n          velocity,\n          destValue,\n          stiffness,\n          damping,\n        );\n\n        observer.next(value);\n        if (velocity !== 0 && isRunning) {\n          run();\n        } else if (velocity === 0) {\n          observer.complete();\n        }\n      });\n\n      run();\n\n      return {\n        unsubscribe() {\n          isRunning = false;\n        },\n      };\n    });\n  };\n};\n\ntype ArrayConfig = [number, number][];\n\n// createEasedStreamArray :: [[number, number]] -> [number] -> Observable [number]\nconst createEasedStreamArray = (configs: ArrayConfig) => {\n  let values;\n  let velocities = configs.map(() => 0);\n  let destValues;\n\n  return <T extends number[]>(xs: T): Observable<T> => {\n    destValues = xs;\n    if (values === undefined) values = xs;\n\n    return new Observable((observer) => {\n      let isRunning = true;\n\n      const run = rafThrottle(() => {\n        for (let i = 0; i < configs.length; i++) {\n          const [stiffness, damping] = configs[i];\n          [values[i], velocities[i]] = stepper(\n            values[i],\n            velocities[i],\n            destValues[i],\n            stiffness,\n            damping,\n          );\n        }\n\n        observer.next(values);\n        if (velocities.some((velocity) => velocity !== 0) && isRunning) {\n          run();\n        } else if (velocities.every((velocity) => velocity === 0)) {\n          observer.complete();\n        }\n      });\n\n      run();\n\n      return {\n        unsubscribe() {\n          isRunning = false;\n        },\n      };\n    });\n  };\n};\n\ntype ObjectConfig<K extends string | number | symbol = string> = Record<\n  K,\n  [number, number]\n>;\n\n// createEasedStreamObject :: Map k [number, number] -> Map k number -> Observable (Map k number)\nconst createEasedStreamObject = (configs: ObjectConfig) => {\n  let values;\n  let velocities = mapValues(() => 0, configs);\n  let destValues;\n\n  return <T extends Record<string, number>>(obj: T): Observable<T> => {\n    destValues = obj;\n    if (values === undefined) values = obj;\n\n    return new Observable((observer) => {\n      let isRunning = true;\n\n      const run = rafThrottle(() => {\n        for (let k in configs) {\n          const [stiffness, damping] = configs[k];\n          [values[k], velocities[k]] = stepper(\n            values[k],\n            velocities[k],\n            destValues[k],\n            stiffness,\n            damping,\n          );\n        }\n\n        observer.next(values);\n        if (\n          Object.keys(velocities).some((k) => velocities[k] !== 0) &&\n          isRunning\n        ) {\n          run();\n        } else if (\n          velocity === Object.keys(velocities).every((k) => velocities[k] === 0)\n        ) {\n          observer.complete();\n        }\n      });\n\n      run();\n\n      return {\n        unsubscribe() {\n          isRunning = false;\n        },\n      };\n    });\n  };\n};\n\nfunction createEase(\n  stiffness: number,\n  damping: number,\n): (value: number) => Observable<number>;\nfunction createEase<T extends number[]>(\n  config: ArrayConfig,\n): (value: T) => Observable<T>;\nfunction createEase<T extends Record<string, number>>(\n  config: ObjectConfig,\n): (value: T) => Observable<T>;\nfunction createEase(\n  stiffness: number | ArrayConfig | ObjectConfig,\n  damping?: number,\n) {\n  return Array.isArray(stiffness)\n    ? createEasedStreamArray(stiffness)\n    : typeof stiffness === 'object'\n      ? createEasedStreamObject(stiffness)\n      : createEasedStream(stiffness, damping as number);\n}\n\nconst cache = new Map();\n\nfunction getEase(\n  stiffness: number,\n  damping: number,\n  id?: string,\n): (value: number) => Observable<number>;\nfunction getEase<T extends number[]>(\n  config: ArrayConfig,\n  id?: string,\n): (value: T) => Observable<T>;\nfunction getEase<T extends Record<string, number>>(\n  config: ObjectConfig,\n  id?: string,\n): (value: T) => Observable<T>;\nfunction getEase(stiffness: any, damping?: any, id?: string) {\n  if (id === undefined && typeof stiffness === 'object') id = damping;\n\n  if (id === undefined) return createEase(stiffness, damping);\n\n  if (!cache.has(id)) cache.set(id, createEase(stiffness, damping));\n  return cache.get(id);\n}\n\nfunction easeOperator<T extends number>(\n  stiffness: number,\n  damping: number,\n  id?: string,\n): MonoTypeOperatorFunction<T>;\nfunction easeOperator<T extends number[]>(\n  config: ArrayConfig,\n  id?: string,\n): MonoTypeOperatorFunction<T>;\nfunction easeOperator<T extends { [k in K]: number }, K extends keyof T>(\n  config: ObjectConfig<K>,\n  id?: string,\n): MonoTypeOperatorFunction<T>;\nfunction easeOperator(stiffness: any, damping?: any, id?: any) {\n  return switchMap(getEase(stiffness, damping, id));\n}\n\nexport const ease = easeOperator;\n\nexport const spring$ = (\n  values: number[] | { [key: string]: number }[],\n  stiffness: number,\n  damping: number,\n) => of(...values).pipe(ease(stiffness, damping));\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { ease, spring$ } from './spring';\n\n@Pipe({\n  name: 'spring',\n  pure: true,\n  standalone: true,\n})\nexport class SpringPipe implements PipeTransform {\n  last: number | undefined;\n  transform(\n    x: Observable<number> | number | undefined,\n    stiffness = 160,\n    damping = 15,\n  ): Observable<number> {\n    if (!x) {\n      return of(0);\n    }\n\n    if (x && x instanceof Observable) {\n      return x.pipe(ease(stiffness, damping));\n    }\n    const prev = this.last || x;\n    this.last = x as number;\n    return spring$([prev, this.last], stiffness, damping);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}