use-transform.mjs 1.1 KB

1234567891011121314151617181920212223242526272829
  1. import { transform } from '../utils/transform.mjs';
  2. import { useConstant } from '../utils/use-constant.mjs';
  3. import { useCombineMotionValues } from './use-combine-values.mjs';
  4. import { useComputed } from './use-computed.mjs';
  5. function useTransform(input, inputRangeOrTransformer, outputRange, options) {
  6. if (typeof input === "function") {
  7. return useComputed(input);
  8. }
  9. const transformer = typeof inputRangeOrTransformer === "function"
  10. ? inputRangeOrTransformer
  11. : transform(inputRangeOrTransformer, outputRange, options);
  12. return Array.isArray(input)
  13. ? useListTransform(input, transformer)
  14. : useListTransform([input], ([latest]) => transformer(latest));
  15. }
  16. function useListTransform(values, transformer) {
  17. const latest = useConstant(() => []);
  18. return useCombineMotionValues(values, () => {
  19. latest.length = 0;
  20. const numValues = values.length;
  21. for (let i = 0; i < numValues; i++) {
  22. latest[i] = values[i].get();
  23. }
  24. return transformer(latest);
  25. });
  26. }
  27. export { useTransform };