react-ui-animate 4.1.1 → 4.2.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.
Files changed (35) hide show
  1. package/README.md +55 -43
  2. package/dist/animation/controllers/index.d.ts +2 -2
  3. package/dist/animation/controllers/withDecay.d.ts +9 -5
  4. package/dist/animation/controllers/withDelay.d.ts +4 -6
  5. package/dist/animation/controllers/withEase.d.ts +6 -4
  6. package/dist/animation/controllers/withLoop.d.ts +8 -2
  7. package/dist/animation/controllers/withNative.d.ts +5 -0
  8. package/dist/animation/controllers/withSequence.d.ts +8 -2
  9. package/dist/animation/controllers/withSpring.d.ts +10 -5
  10. package/dist/animation/controllers/withTiming.d.ts +9 -5
  11. package/dist/animation/helpers/animationType.d.ts +59 -55
  12. package/dist/animation/helpers/getToValue.d.ts +2 -2
  13. package/dist/animation/helpers/index.d.ts +1 -3
  14. package/dist/animation/hooks/index.d.ts +1 -1
  15. package/dist/animation/hooks/useMount.d.ts +6 -11
  16. package/dist/animation/hooks/useValue.d.ts +3 -13
  17. package/dist/animation/hooks/useValues.d.ts +3 -4
  18. package/dist/animation/index.d.ts +4 -4
  19. package/dist/animation/modules/MountedBlock.d.ts +4 -13
  20. package/dist/animation/modules/ScrollableBlock.d.ts +2 -13
  21. package/dist/animation/modules/index.d.ts +0 -1
  22. package/dist/animation/types.d.ts +16 -0
  23. package/dist/index.d.ts +3 -3
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/package.json +6 -6
  27. package/dist/animation/controllers/withConfig.d.ts +0 -5
  28. package/dist/animation/core/FluidArrayController.d.ts +0 -7
  29. package/dist/animation/core/FluidController.d.ts +0 -34
  30. package/dist/animation/core/useFluidValue.d.ts +0 -3
  31. package/dist/animation/core/useFluidValues.d.ts +0 -3
  32. package/dist/animation/core/useMount.d.ts +0 -18
  33. package/dist/animation/helpers/delay.d.ts +0 -5
  34. package/dist/animation/helpers/isDefined.d.ts +0 -1
  35. package/dist/animation/modules/TransitionBlock.d.ts +0 -18
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/animation/interpolation/colors.ts","../src/animation/interpolation/interpolateNumbers.ts","../src/animation/interpolation/interpolate.ts","../src/animation/helpers/isDefined.ts","../src/animation/helpers/getToValue.ts","../src/animation/helpers/animationType.ts","../src/animation/core/FluidController.ts","../src/animation/core/useFluidValue.ts","../src/animation/hooks/useValue.ts","../src/animation/core/FluidArrayController.ts","../src/animation/hooks/useMount.ts","../src/animation/core/useMount.ts","../src/gestures/helpers/math.ts","../src/animation/modules/TransitionBlock.tsx","../src/animation/controllers/withConfig.ts","../src/animation/controllers/withSequence.ts","../src/gestures/helpers/eventAttacher.ts","../src/gestures/helpers/withDefault.ts","../src/gestures/controllers/Gesture.ts","../src/gestures/controllers/DragGesture.ts","../src/gestures/controllers/MouseMoveGesture.ts","../src/gestures/controllers/ScrollGesture.ts","../src/gestures/controllers/WheelGesture.ts","../src/gestures/hooks/useRecognizer.ts","../src/animation/modules/MountedBlock.tsx","../src/animation/modules/ScrollableBlock.tsx","../src/animation/helpers/delay.ts","../src/gestures/hooks/useDrag.ts","../src/gestures/hooks/useGesture.ts","../src/hooks/useMeasure.ts","../src/gestures/hooks/useMouseMove.ts","../src/hooks/useOutsideClick.ts","../src/gestures/hooks/useScroll.ts","../src/animation/hooks/useValues.ts","../src/animation/core/useFluidValues.ts","../src/gestures/hooks/useWheel.ts","../src/hooks/useWindowDimension.ts","../src/animation/controllers/withDecay.ts","../src/animation/controllers/withDelay.ts","../src/animation/controllers/withEase.ts","../src/animation/controllers/withLoop.ts","../src/animation/controllers/withSpring.ts","../src/animation/controllers/withTiming.ts"],"sourcesContent":["export const COLOR_NUMBER_REGEX =\n /[+-]?\\d+(\\.\\d+)?|[\\s]?\\.\\d+|#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})/gi;\nexport const HEX_NAME_COLOR =\n /#[a-f\\d]{3,}|transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|burntsienna|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen/gi;\n\ninterface classNameType {\n [name: string]: string;\n}\n\n// Named colors\nexport const colorNames: classNameType = {\n transparent: '#00000000',\n aliceblue: '#f0f8ffff',\n antiquewhite: '#faebd7ff',\n aqua: '#00ffffff',\n aquamarine: '#7fffd4ff',\n azure: '#f0ffffff',\n beige: '#f5f5dcff',\n bisque: '#ffe4c4ff',\n black: '#000000ff',\n blanchedalmond: '#ffebcdff',\n blue: '#0000ffff',\n blueviolet: '#8a2be2ff',\n brown: '#a52a2aff',\n burlywood: '#deb887ff',\n burntsienna: '#ea7e5dff',\n cadetblue: '#5f9ea0ff',\n chartreuse: '#7fff00ff',\n chocolate: '#d2691eff',\n coral: '#ff7f50ff',\n cornflowerblue: '#6495edff',\n cornsilk: '#fff8dcff',\n crimson: '#dc143cff',\n cyan: '#00ffffff',\n darkblue: '#00008bff',\n darkcyan: '#008b8bff',\n darkgoldenrod: '#b8860bff',\n darkgray: '#a9a9a9ff',\n darkgreen: '#006400ff',\n darkgrey: '#a9a9a9ff',\n darkkhaki: '#bdb76bff',\n darkmagenta: '#8b008bff',\n darkolivegreen: '#556b2fff',\n darkorange: '#ff8c00ff',\n darkorchid: '#9932ccff',\n darkred: '#8b0000ff',\n darksalmon: '#e9967aff',\n darkseagreen: '#8fbc8fff',\n darkslateblue: '#483d8bff',\n darkslategray: '#2f4f4fff',\n darkslategrey: '#2f4f4fff',\n darkturquoise: '#00ced1ff',\n darkviolet: '#9400d3ff',\n deeppink: '#ff1493ff',\n deepskyblue: '#00bfffff',\n dimgray: '#696969ff',\n dimgrey: '#696969ff',\n dodgerblue: '#1e90ffff',\n firebrick: '#b22222ff',\n floralwhite: '#fffaf0ff',\n forestgreen: '#228b22ff',\n fuchsia: '#ff00ffff',\n gainsboro: '#dcdcdcff',\n ghostwhite: '#f8f8ffff',\n gold: '#ffd700ff',\n goldenrod: '#daa520ff',\n gray: '#808080ff',\n green: '#008000ff',\n greenyellow: '#adff2fff',\n grey: '#808080ff',\n honeydew: '#f0fff0ff',\n hotpink: '#ff69b4ff',\n indianred: '#cd5c5cff',\n indigo: '#4b0082ff',\n ivory: '#fffff0ff',\n khaki: '#f0e68cff',\n lavender: '#e6e6faff',\n lavenderblush: '#fff0f5ff',\n lawngreen: '#7cfc00ff',\n lemonchiffon: '#fffacdff',\n lightblue: '#add8e6ff',\n lightcoral: '#f08080ff',\n lightcyan: '#e0ffffff',\n lightgoldenrodyellow: '#fafad2ff',\n lightgray: '#d3d3d3ff',\n lightgreen: '#90ee90ff',\n lightgrey: '#d3d3d3ff',\n lightpink: '#ffb6c1ff',\n lightsalmon: '#ffa07aff',\n lightseagreen: '#20b2aaff',\n lightskyblue: '#87cefaff',\n lightslategray: '#778899ff',\n lightslategrey: '#778899ff',\n lightsteelblue: '#b0c4deff',\n lightyellow: '#ffffe0ff',\n lime: '#00ff00ff',\n limegreen: '#32cd32ff',\n linen: '#faf0e6ff',\n magenta: '#ff00ffff',\n maroon: '#800000ff',\n mediumaquamarine: '#66cdaaff',\n mediumblue: '#0000cdff',\n mediumorchid: '#ba55d3ff',\n mediumpurple: '#9370dbff',\n mediumseagreen: '#3cb371ff',\n mediumslateblue: '#7b68eeff',\n mediumspringgreen: '#00fa9aff',\n mediumturquoise: '#48d1ccff',\n mediumvioletred: '#c71585ff',\n midnightblue: '#191970ff',\n mintcream: '#f5fffaff',\n mistyrose: '#ffe4e1ff',\n moccasin: '#ffe4b5ff',\n navajowhite: '#ffdeadff',\n navy: '#000080ff',\n oldlace: '#fdf5e6ff',\n olive: '#808000ff',\n olivedrab: '#6b8e23ff',\n orange: '#ffa500ff',\n orangered: '#ff4500ff',\n orchid: '#da70d6ff',\n palegoldenrod: '#eee8aaff',\n palegreen: '#98fb98ff',\n paleturquoise: '#afeeeeff',\n palevioletred: '#db7093ff',\n papayawhip: '#ffefd5ff',\n peachpuff: '#ffdab9ff',\n peru: '#cd853fff',\n pink: '#ffc0cbff',\n plum: '#dda0ddff',\n powderblue: '#b0e0e6ff',\n purple: '#800080ff',\n rebeccapurple: '#663399ff',\n red: '#ff0000ff',\n rosybrown: '#bc8f8fff',\n royalblue: '#4169e1ff',\n saddlebrown: '#8b4513ff',\n salmon: '#fa8072ff',\n sandybrown: '#f4a460ff',\n seagreen: '#2e8b57ff',\n seashell: '#fff5eeff',\n sienna: '#a0522dff',\n silver: '#c0c0c0ff',\n skyblue: '#87ceebff',\n slateblue: '#6a5acdff',\n slategray: '#708090ff',\n slategrey: '#708090ff',\n snow: '#fffafaff',\n springgreen: '#00ff7fff',\n steelblue: '#4682b4ff',\n tan: '#d2b48cff',\n teal: '#008080ff',\n thistle: '#d8bfd8ff',\n tomato: '#ff6347ff',\n turquoise: '#40e0d0ff',\n violet: '#ee82eeff',\n wheat: '#f5deb3ff',\n white: '#ffffffff',\n whitesmoke: '#f5f5f5ff',\n yellow: '#ffff00ff',\n yellowgreen: '#9acd32ff',\n};\n\nfunction conv3to6(hex: string) {\n const regex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n\n return hex.replace(regex, function (_, r, g, b) {\n return '#' + r + r + g + g + b + b;\n });\n}\n\nfunction conv6to8(hex: string) {\n if (hex.length === 7) {\n return hex + 'FF';\n }\n\n return hex;\n}\n\nexport function hexToRgba(hex: string) {\n const hex6: string = conv3to6(hex);\n const hex8: string = conv6to8(hex6);\n const hexRgba: any =\n /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex8);\n\n return {\n r: parseInt(hexRgba[1], 16),\n g: parseInt(hexRgba[2], 16),\n b: parseInt(hexRgba[3], 16),\n a: parseInt(hexRgba[4], 16) / 255,\n };\n}\n\nexport function rgbaToHex(rgba: {\n r: number;\n g: number;\n b: number;\n a: number;\n}) {\n const { r, g, b, a } = rgba;\n\n const hexR = (r | (1 << 8)).toString(16).slice(1);\n const hexG = (g | (1 << 8)).toString(16).slice(1);\n const hexB = (b | (1 << 8)).toString(16).slice(1);\n const hexA = ((a * 255) | (1 << 8)).toString(16).slice(1);\n\n return '#' + hexR + hexG + hexB + hexA;\n}\n\nexport function processColor(color: number | string) {\n if (typeof color === 'number') {\n const alpha = ((color >> 24) & 255) / 255;\n const red = (color >> 16) & 255;\n const green = (color >> 8) & 255;\n const blue = color & 255;\n\n return { r: red, g: green, b: blue, a: alpha };\n } else {\n // If string then check whether it has # in 0 index\n if (color[0] === '#') {\n return hexToRgba(color);\n } else {\n // It is string color\n const hexColorName: string = colorNames[color];\n if (hexColorName) {\n return hexToRgba(hexColorName);\n } else {\n throw new Error('String cannot be parsed!');\n }\n }\n }\n}\n","import {\n rgbaToHex,\n hexToRgba,\n COLOR_NUMBER_REGEX,\n HEX_NAME_COLOR,\n colorNames,\n} from './colors';\n\ntype ExtrapolateType = 'identity' | 'extend' | 'clamp';\n\ntype ExtrapolateConfig = {\n extrapolate?: ExtrapolateType;\n extrapolateLeft?: ExtrapolateType;\n extrapolateRight?: ExtrapolateType;\n};\n\nconst interpolateValue = (\n val: number,\n arr: any,\n extrapolateLeft: ExtrapolateType,\n extrapolateRight: ExtrapolateType\n) => {\n const [inputMin, inputMax, outputMin, outputMax] = arr;\n let result: number = val;\n\n // EXTRAPOLATE\n if (result < inputMin) {\n if (extrapolateLeft === 'identity') {\n return result;\n } else if (extrapolateLeft === 'clamp') {\n result = inputMin;\n } else if (extrapolateLeft === 'extend') {\n // noop\n }\n }\n\n if (result > inputMax) {\n if (extrapolateRight === 'identity') {\n return result;\n } else if (extrapolateRight === 'clamp') {\n result = inputMax;\n } else if (extrapolateRight === 'extend') {\n // noop\n }\n }\n\n if (outputMin === outputMax) {\n return outputMin;\n }\n\n if (inputMin === inputMax) {\n if (val <= inputMin) {\n return outputMin;\n }\n return outputMax;\n }\n\n // Input Range\n if (inputMin === -Infinity) {\n result = -result;\n } else if (inputMax === Infinity) {\n result = result - inputMin;\n } else {\n result = (result - inputMin) / (inputMax - inputMin);\n }\n\n // Output Range\n if (outputMin === -Infinity) {\n result = -result;\n } else if (outputMax === Infinity) {\n result = result + outputMin;\n } else {\n result = result * (outputMax - outputMin) + outputMin;\n }\n\n return result;\n};\n\nconst getNarrowedInput = function (\n x: number,\n input: number[],\n output: Array<number | string>\n): Array<number | string> {\n const length = input.length;\n let narrowedInput: Array<number | string> = [];\n\n // Boundaries\n if (x < input[0]) {\n narrowedInput = [input[0], input[1], output[0], output[1]];\n } else if (x > input[length - 1]) {\n narrowedInput = [\n input[length - 2],\n input[length - 1],\n output[length - 2],\n output[length - 1],\n ];\n }\n\n // Narrow the input and output ranges\n for (let i = 1; i < length; ++i) {\n if (x <= input[i]) {\n narrowedInput = [input[i - 1], input[i], output[i - 1], output[i]];\n break;\n }\n }\n\n return narrowedInput;\n};\n\nconst interpolateColor = (value: number, narrowedInput: string[]) => {\n const [inputMin, inputMax, outputMin, outputMax] = narrowedInput;\n\n const outputMinProcessed = hexToRgba(outputMin);\n const outputMaxProcessed = hexToRgba(outputMax);\n\n const red = interpolateValue(\n value,\n [inputMin, inputMax, outputMinProcessed.r, outputMaxProcessed.r],\n 'clamp',\n 'clamp'\n );\n\n const green = interpolateValue(\n value,\n [inputMin, inputMax, outputMinProcessed.g, outputMaxProcessed.g],\n 'clamp',\n 'clamp'\n );\n\n const blue = interpolateValue(\n value,\n [inputMin, inputMax, outputMinProcessed.b, outputMaxProcessed.b],\n 'clamp',\n 'clamp'\n );\n\n const alpha = interpolateValue(\n value,\n [inputMin, inputMax, outputMinProcessed.a, outputMaxProcessed.a],\n 'clamp',\n 'clamp'\n );\n\n return rgbaToHex({ r: red, g: green, b: blue, a: alpha });\n};\n\nconst _getArrayInterpolate = (\n value: number,\n narrowedInput: Array<any>,\n _extrapolateLeft: ExtrapolateType,\n _extrapolateRight: ExtrapolateType\n) => {\n const [inputMin, inputMax, outputMin, outputMax] = narrowedInput;\n\n if (outputMin.length === outputMax.length) {\n return outputMin.map((val: any, index: number) => {\n if (typeof val === 'string') {\n // IF IT IS STRING THEN IT MUST BE HEX COLOR\n return interpolateColor(value, [\n inputMin,\n inputMax,\n val,\n outputMax[index],\n ]);\n } else {\n return interpolateValue(\n value,\n [inputMin, inputMax, val, outputMax[index]],\n _extrapolateLeft,\n _extrapolateRight\n );\n }\n });\n } else {\n throw new Error(\"Array length doesn't match\");\n }\n};\n\nconst getTemplateString = (str: string) => {\n return str.replace(COLOR_NUMBER_REGEX, '$');\n};\n\nconst _getParsedStringArray = (str: any) => {\n return str.match(COLOR_NUMBER_REGEX).map((v: string) => {\n if (v.indexOf('#') !== -1) {\n return v;\n } else {\n return Number(v);\n }\n });\n};\n\nconst stringMatched = (str1: string, str2: string) =>\n getTemplateString(str1).trim().replace(/\\s/g, '') ===\n getTemplateString(str2).trim().replace(/\\s/g, '');\n\n/**\n * Function which proccess the\n * hexadecimal colors to its proper formats\n * @param str - string\n * @returns hex color string\n */\nconst getProcessedColor = (str: string) => {\n return str.replace(HEX_NAME_COLOR, function (match: any) {\n if (match.indexOf('#') !== -1) {\n return rgbaToHex(hexToRgba(match));\n } else if (Object.prototype.hasOwnProperty.call(colorNames, match)) {\n return colorNames[match];\n } else {\n throw new Error('String cannot be parsed!');\n }\n });\n};\n\nexport function interpolateNumbers(\n value: number,\n inputRange: Array<number>,\n outputRange: Array<number | string>,\n extrapolateConfig?: ExtrapolateConfig\n) {\n const extrapolate = extrapolateConfig?.extrapolate;\n const extrapolateLeft = extrapolateConfig?.extrapolateLeft;\n const extrapolateRight = extrapolateConfig?.extrapolateRight;\n\n const narrowedInput = getNarrowedInput(value, inputRange, outputRange);\n\n let _extrapolateLeft: ExtrapolateType = 'extend';\n if (extrapolateLeft !== undefined) {\n _extrapolateLeft = extrapolateLeft;\n } else if (extrapolate !== undefined) {\n _extrapolateLeft = extrapolate;\n }\n\n let _extrapolateRight: ExtrapolateType = 'extend';\n if (extrapolateRight !== undefined) {\n _extrapolateRight = extrapolateRight;\n } else if (extrapolate !== undefined) {\n _extrapolateRight = extrapolate;\n }\n\n if (outputRange.length) {\n if (typeof outputRange[0] === 'number') {\n return interpolateValue(\n value,\n narrowedInput,\n _extrapolateLeft,\n _extrapolateRight\n );\n } else if (Array.isArray(outputRange[0])) {\n return _getArrayInterpolate(\n value,\n narrowedInput,\n _extrapolateLeft,\n _extrapolateRight\n );\n } else {\n const [inputMin, inputMax, outputMin, outputMax] = narrowedInput;\n\n const processedOutputMin = getProcessedColor(outputMin as string);\n const processedOutputMax = getProcessedColor(outputMax as string);\n\n let templateString = getTemplateString(processedOutputMin);\n\n if (stringMatched(processedOutputMin, processedOutputMax)) {\n const outputMinParsed = _getParsedStringArray(processedOutputMin);\n const outputMaxParsed = _getParsedStringArray(processedOutputMax);\n\n const result = _getArrayInterpolate(\n value,\n [inputMin, inputMax, outputMinParsed, outputMaxParsed],\n _extrapolateLeft,\n _extrapolateRight\n );\n\n for (const v of result) templateString = templateString.replace('$', v);\n return templateString;\n } else {\n throw new Error(\"Output range doesn't match string format!\");\n }\n }\n } else {\n throw new Error('Output range cannot be Empty');\n }\n}\n","import { FluidValue } from '@raidipesh78/re-motion';\n\nimport { interpolateNumbers } from './interpolateNumbers';\n\ntype ExtrapolateType = 'identity' | 'extend' | 'clamp';\n\ntype ExtrapolateConfig = {\n extrapolate?: ExtrapolateType;\n extrapolateLeft?: ExtrapolateType;\n extrapolateRight?: ExtrapolateType;\n};\n\ntype InterpolateReturnType<T> = T extends number\n ? number\n : ReturnType<FluidValue['interpolate']>;\n\nexport const interpolate = <T extends number | FluidValue>(\n value: T,\n inputRange: number[],\n outputRange: number[] | string[],\n extrapolateConfig?: ExtrapolateConfig\n): InterpolateReturnType<T> => {\n if (value instanceof FluidValue) {\n return value.interpolate(\n inputRange,\n outputRange,\n extrapolateConfig\n ) as InterpolateReturnType<T>;\n } else {\n return interpolateNumbers(\n value,\n inputRange,\n outputRange,\n extrapolateConfig\n ) as InterpolateReturnType<T>;\n }\n};\n\nexport const bInterpolate = <T extends number | FluidValue>(\n value: T,\n minOutput: number | string,\n maxOutput: number | string,\n extrapolateConfig?: ExtrapolateConfig\n) =>\n interpolate(\n value,\n [0, 1],\n [minOutput, maxOutput] as number[] | string[],\n extrapolateConfig\n );\n","export const isDefined = <T>(value: T): value is NonNullable<T> => {\n return value !== null && value !== undefined;\n};\n","import { UpdateValue, UseFluidValueConfig } from '../core/FluidController';\n\nexport function getToValue(\n value: number | string | UpdateValue,\n config?: UseFluidValueConfig\n): UpdateValue {\n return typeof value === 'number' || typeof value === 'string'\n ? { toValue: value, config }\n : value;\n}\n","import { Easing } from '@raidipesh78/re-motion';\n\nexport const AnimationConfig = {\n ELASTIC: { mass: 1, friction: 18, tension: 250 },\n BOUNCE: { duration: 500, easing: Easing.bounce },\n EASE: { mass: 1, friction: 26, tension: 170 },\n STIFF: { mass: 1, friction: 18, tension: 350 },\n WOOBLE: { mass: 1, friction: 8, tension: 250 },\n EASE_IN: { duration: 500, easing: Easing.in(Easing.ease) },\n EASE_OUT: { duration: 500, easing: Easing.out(Easing.ease) },\n EASE_IN_OUT: { duration: 500, easing: Easing.inOut(Easing.ease) },\n POWER1: { duration: 500, easing: Easing.bezier(0.17, 0.42, 0.51, 0.97) },\n POWER2: { duration: 500, easing: Easing.bezier(0.07, 0.11, 0.13, 1) },\n POWER3: { duration: 500, easing: Easing.bezier(0.09, 0.7, 0.16, 1.04) },\n POWER4: { duration: 500, easing: Easing.bezier(0.05, 0.54, 0, 1.03) },\n LINEAR: { duration: 500, easing: Easing.linear },\n};\n","import {\n FluidValue,\n timing,\n decay,\n spring,\n native,\n} from '@raidipesh78/re-motion';\n\nimport { isDefined } from '../helpers';\n\ntype Fn<T, U> = (value: T) => U;\n\nexport interface UseFluidValueConfig {\n mass?: number;\n tension?: number;\n friction?: number;\n duration?: number;\n easing?: Fn<number, number>;\n immediate?: boolean;\n delay?: number;\n restDistance?: number;\n onChange?: Fn<number | string, void>;\n onRest?: Fn<number | string, void>;\n onStart?: Fn<number | string, void>;\n decay?: boolean;\n velocity?: number;\n deceleration?: number;\n loop?: number;\n}\n\nexport type UpdateValue = {\n toValue?: number | string;\n config?: UseFluidValueConfig;\n};\n\nexport class FluidController {\n private fluid: FluidValue;\n private defaultConfig?: UseFluidValueConfig;\n private iterationsSoFar: number = 0;\n\n constructor(value: number | string, config?: UseFluidValueConfig) {\n this.fluid = new FluidValue(value);\n this.defaultConfig = config;\n }\n\n private getAnimation(updateValue: UpdateValue, config: UseFluidValueConfig) {\n if (typeof updateValue.toValue === 'string') {\n return native(this.fluid, { toValue: updateValue.toValue });\n } else if (isDefined(config?.duration) || config?.immediate) {\n if (!isDefined(updateValue.toValue)) {\n throw new Error('No `toValue` is defined');\n }\n\n const timingConfig = {\n toValue: updateValue.toValue,\n delay: config?.delay,\n duration: config?.immediate ? 0 : config?.duration,\n easing: config?.easing,\n };\n\n return timing(this.fluid, timingConfig);\n } else if (config?.decay) {\n const decayConfig = {\n velocity: config?.velocity,\n deceleration: config?.deceleration,\n delay: config?.delay,\n };\n\n return decay(this.fluid, decayConfig);\n } else {\n if (!isDefined(updateValue.toValue)) {\n throw new Error('No `toValue` is defined');\n }\n\n const springConfig = {\n toValue: updateValue.toValue,\n delay: config?.delay,\n mass: config?.mass,\n tension: config?.tension,\n friction: config?.friction,\n restDistance: config?.restDistance,\n };\n\n return spring(this.fluid, springConfig);\n }\n }\n\n private runAnimation(\n updateValue: UpdateValue,\n onComplete?: (value: number) => void\n ) {\n const config = { ...this.defaultConfig, ...updateValue.config };\n const loopCount = config?.loop ?? 0;\n\n this.fluid.removeAllListeners();\n config?.onStart && config.onStart(this.fluid.get());\n\n if (config?.onChange) {\n this.fluid.addListener((value) => config?.onChange?.(value));\n }\n\n const animation = this.getAnimation(updateValue, config);\n\n const handleRest = (result: { finished: boolean; value: number }) => {\n if (result.finished) {\n config?.onRest?.(result.value);\n onComplete?.(result.value);\n }\n };\n\n const loopAnimation = (result: { finished: boolean; value: number }) => {\n if (result.finished) {\n this.iterationsSoFar++;\n\n if (loopCount === -1 || this.iterationsSoFar < loopCount) {\n animation.reset();\n animation.start(loopAnimation);\n } else {\n handleRest(result);\n }\n }\n };\n\n animation.start(isDefined(config?.loop) ? loopAnimation : handleRest);\n }\n\n public setFluid(\n updateValue: UpdateValue | UpdateValue[],\n callback?: (value: number) => void\n ) {\n if (!updateValue) {\n return;\n }\n\n if (Array.isArray(updateValue)) {\n let currentAnimation = 0;\n\n const onComplete = (value: number) => {\n currentAnimation++;\n\n if (currentAnimation === updateValue.length) {\n callback && callback(value);\n\n return;\n }\n\n this.runAnimation(updateValue[currentAnimation], onComplete);\n };\n\n this.runAnimation(updateValue[currentAnimation], onComplete);\n } else {\n this.runAnimation(updateValue, callback);\n }\n }\n\n public getFluid() {\n return this.fluid;\n }\n}\n","import { useCallback, useMemo, useRef } from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport {\n UpdateValue,\n FluidController,\n UseFluidValueConfig,\n} from './FluidController';\n\nexport const useFluidValue = <T extends number | string>(\n value: T,\n config?: UseFluidValueConfig\n): [\n FluidValue,\n (updateValue: UpdateValue | UpdateValue[], callback?: () => void) => void,\n] => {\n const fluidController = useRef(new FluidController(value, config)).current;\n\n const onUpdate = useCallback(\n (updateValue: UpdateValue | UpdateValue[], callback?: () => void) => {\n fluidController.setFluid(updateValue, callback);\n },\n []\n );\n\n const fluidValue = useMemo(() => fluidController.getFluid(), []);\n\n return [fluidValue, onUpdate];\n};\n","import { useCallback, useLayoutEffect, useRef } from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport { useFluidValue } from '../core/useFluidValue';\nimport { getToValue, AnimationConfig } from '../helpers';\n\nimport type { UpdateValue, UseFluidValueConfig } from '../core/FluidController';\n\nexport interface UseValueConfig extends UseFluidValueConfig {}\n\n/**\n * `useValue` returns an animation value with `.value` and `.currentValue` property which is\n * initialized when passed to argument (`initialValue`). The returned value persist until the lifetime of\n * a component. It doesn't cast any re-renders which can is very good for performance optimization.\n *\n * @param { number } initialValue - Initial value\n * @param { UseValueConfig } config - Animation configuration object.\n */\nexport function useValue<T extends number | string>(\n initialValue: T,\n config?: UseValueConfig\n) {\n const isInitialRender = useRef(true);\n const [animation, setAnimation] = useFluidValue(initialValue, {\n ...AnimationConfig.EASE,\n ...config,\n });\n\n const updateAnimation = useCallback(\n (value: string | number | UpdateValue | number[] | UpdateValue[]) => {\n if (Array.isArray(value)) {\n queueMicrotask(() => setAnimation(value.map((v) => getToValue(v))));\n } else {\n queueMicrotask(() => setAnimation(getToValue(value)));\n }\n },\n []\n );\n\n useLayoutEffect(() => {\n if (!isInitialRender.current) {\n updateAnimation(initialValue);\n }\n\n isInitialRender.current = false;\n }, [initialValue, config]);\n\n return {\n set value(to: number | string | UpdateValue | number[] | UpdateValue[]) {\n updateAnimation(to);\n },\n get value(): FluidValue {\n return animation;\n },\n get currentValue() {\n return animation.get();\n },\n };\n}\n","import { FluidController } from './FluidController';\n\nimport type { UpdateValue, UseFluidValueConfig } from './FluidController';\n\nexport class FluidArrayController {\n private fluidControllers: FluidController[];\n\n constructor(values: number[] | string[], config?: UseFluidValueConfig) {\n this.fluidControllers = values.map((v) => new FluidController(v, config));\n }\n\n public setFluid(\n updateValue: Array<UpdateValue | UpdateValue[]>,\n callback?: () => void\n ) {\n this.fluidControllers.map((fc, i) => {\n fc.setFluid(updateValue[i], callback);\n });\n }\n\n public getFluid() {\n return this.fluidControllers.map((fc) => fc.getFluid());\n }\n}\n","import { FluidValue } from '@raidipesh78/re-motion';\n\nimport {\n useMount as useInternalMount,\n UseMountConfig as UseInternalMountConfig,\n} from '../core/useMount';\n\nexport interface UseMountConfig extends UseInternalMountConfig {}\n\n/**\n * `useMount` handles mounting and unmounting of a component which captures current state\n * passed as an argument (`state`) and exposes the shadow state which handles the mount and unmount\n * of a component.\n *\n * @param { boolean } state - Boolean indicating the component should mount or unmount.\n * @param { UseMountConfig } config - Animation configuration.\n */\nexport function useMount(state: boolean, config: UseMountConfig) {\n const mv = useInternalMount(state, config);\n return (\n cb: (value: { value: FluidValue }, mounted: boolean) => React.ReactNode\n ) => mv((a, m) => cb({ value: a }, m));\n}\n","import { useState, useLayoutEffect, useRef } from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport { useFluidValue } from './useFluidValue';\n\nimport type { UpdateValue, UseFluidValueConfig } from './FluidController';\nimport { getToValue } from '../helpers';\n\nexport interface UseMountConfig {\n from: number;\n enter: number | UpdateValue | number[] | UpdateValue[];\n exit: number | UpdateValue | number[] | UpdateValue[];\n config?: UseFluidValueConfig;\n}\n\n/**\n * `useMount`\n *\n * applies mounting and unmounting of a component according to state change\n * applying transitions\n *\n * @param state - boolean indicating mount state of a component\n * @param config - the config object `UseMountConfig`\n */\nexport const useMount = (state: boolean, config: UseMountConfig) => {\n const [mounted, setMounted] = useState(false);\n const { from, enter, exit, config: innerConfig } = useRef(config).current;\n const [animation, setAnimation] = useFluidValue(from, innerConfig);\n\n useLayoutEffect(() => {\n if (state) {\n setMounted(true);\n queueMicrotask(() =>\n setAnimation(\n Array.isArray(enter)\n ? enter.map((e) => getToValue(e, innerConfig))\n : getToValue(enter, innerConfig)\n )\n );\n } else {\n setAnimation(\n Array.isArray(exit)\n ? exit.map((e) => getToValue(e, innerConfig))\n : getToValue(exit, innerConfig),\n () => {\n setMounted(false);\n // cleanup\n animation\n .getSubscriptions()\n .forEach((s) => animation.removeSubscription(s));\n }\n );\n }\n }, [state]);\n\n return (\n callback: (animation: FluidValue, mounted: boolean) => React.ReactNode\n ) => callback(animation, mounted);\n};\n","/**\n * bin(booleanValue)\n * returns 1 if booleanValue == true and 0 if booleanValue == false\n */\nexport function bin(bool: boolean) {\n return bool ? 1 : 0;\n}\n\n/**\n * mix(progress, a, b)\n * linear interpolation between a and b\n */\nexport function mix(perc: number, val1: number, val2: number) {\n return val1 * (1 - perc) + val2 * perc;\n}\n\n/**\n * clamp(value, min, max)\n * clamps value for min and max bounds\n */\nexport function clamp(value: number, lowerbound: number, upperbound: number) {\n return Math.min(Math.max(value, lowerbound), upperbound);\n}\n\nfunction rubber2(distanceFromEdge: number, constant: number) {\n return Math.pow(distanceFromEdge, constant * 5);\n}\n\nfunction rubber(distanceFromEdge: number, dimension: number, constant: number) {\n if (dimension === 0 || Math.abs(dimension) === Infinity)\n return rubber2(distanceFromEdge, constant);\n return (\n (distanceFromEdge * dimension * constant) /\n (dimension + constant * distanceFromEdge)\n );\n}\n\n/**\n * rubberClamp(value, min, max, constant?)\n * constant is optional : default 0.15\n * clamps the value for min and max value and\n * extends beyond min and max values with constant\n * factor to create elastic rubber band effect\n */\nexport function rubberClamp(\n value: number,\n lowerbound: number,\n upperbound: number,\n constant: number = 0.15\n) {\n if (constant === 0) return clamp(value, lowerbound, upperbound);\n\n if (value < lowerbound) {\n return (\n -rubber(lowerbound - value, upperbound - lowerbound, constant) +\n lowerbound\n );\n }\n\n if (value > upperbound) {\n return (\n +rubber(value - upperbound, upperbound - lowerbound, constant) +\n upperbound\n );\n }\n\n return value;\n}\n\n/**\n * snapTo(value, velocity, snapPoints[])\n * Calculates the final snapPoint according to given current value,\n * velocity and snapPoints array\n */\nexport function snapTo(\n value: number,\n velocity: number,\n snapPoints: Array<number>\n): number {\n const finalValue = value + velocity * 0.2;\n const getDiff = (point: number) => Math.abs(point - finalValue);\n const deltas = snapPoints.map(getDiff);\n const minDelta = Math.min(...deltas);\n\n return snapPoints.reduce(function (acc, point) {\n if (getDiff(point) === minDelta) {\n return point;\n } else {\n return acc;\n }\n });\n}\n\n/**\n * move(array, moveIndex, toIndex)\n * move array item from moveIndex to toIndex without array modification\n */\nexport function move(array: Array<any>, moveIndex: number, toIndex: number) {\n const item = array[moveIndex];\n const length = array.length;\n const diff = moveIndex - toIndex;\n\n if (diff > 0) {\n return [\n ...array.slice(0, toIndex),\n item,\n ...array.slice(toIndex, moveIndex),\n ...array.slice(moveIndex + 1, length),\n ];\n } else if (diff < 0) {\n const targetIndex = toIndex + 1;\n return [\n ...array.slice(0, moveIndex),\n ...array.slice(moveIndex + 1, targetIndex),\n item,\n ...array.slice(targetIndex, length),\n ];\n }\n return array;\n}\n","import * as React from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport { bin } from '../../gestures/helpers';\nimport { useValue, type UseValueConfig } from '../hooks';\n\ninterface TransitionBlockProps {\n state: boolean;\n children: (animation: { value: FluidValue }) => React.ReactNode;\n config?: UseValueConfig;\n}\n\n/**\n * TransitionBlock - Higher order component which animates on state change.\n * @prop { boolean } state - Boolean indicating the current state of animation, usually `false = 0 and true = 1`.\n * @prop { function } children - Child as a function with `AnimatedValue` on `.value` property.\n * @prop { UseValueConfig } config - Animation configuration.\n */\nexport const TransitionBlock = ({\n state,\n children,\n config,\n}: TransitionBlockProps) => {\n const amv = useValue(bin(state), config);\n\n return <>{children({ value: amv.value })}</>;\n};\n","import type { UseValueConfig } from '../hooks';\nimport type { UpdateValue } from '../core/FluidController';\n\nexport interface WithOnCallbacks\n extends Pick<UseValueConfig, 'onRest' | 'onStart' | 'onChange'> {}\n\nexport const withConfig = (toValue: number, config?: UseValueConfig): UpdateValue => ({\n toValue,\n config,\n});\n","import { getToValue } from '../helpers';\nimport { type UpdateValue } from '../core/FluidController';\n\nconst flattenUpdateValues = (\n animations: Array<UpdateValue | number | Array<UpdateValue | number>>\n): UpdateValue[] => {\n return animations.reduce<UpdateValue[]>((acc, value) => {\n if (Array.isArray(value)) {\n acc.push(...flattenUpdateValues(value));\n } else {\n acc.push(getToValue(value));\n }\n return acc;\n }, []);\n};\n\nexport const withSequence = (\n animations: Array<UpdateValue | number | Array<UpdateValue | number>>\n): UpdateValue[] => {\n return flattenUpdateValues(animations);\n};\n","type MouseEventType =\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mousemove'\n | 'mouseup'\n | 'touchstart'\n | 'touchmove'\n | 'touchend'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseout'\n | 'mouseover'\n | 'scroll'\n | 'wheel'\n | 'contextmenu';\n\ntype DomTargetTypes = Array<Window | Document | HTMLElement>;\n\n/**\n * Attach single document / window event / HTMLElement\n */\nfunction attachEvent(\n domTargets: DomTargetTypes,\n event: MouseEventType,\n callback: (e: any) => void,\n capture: any = false\n) {\n domTargets.forEach((target) => {\n target.addEventListener(event, callback, capture);\n });\n\n return function () {\n domTargets.forEach((target) => {\n target.removeEventListener(event, callback, capture);\n });\n };\n}\n\n/**\n * Attach multiple document / window event / HTMLElement\n */\nexport function attachEvents(\n domTargets: DomTargetTypes,\n events: Array<\n [event: MouseEventType, callback: (e: any) => void, capture?: any]\n >\n) {\n const subscribers = new Map();\n\n events.forEach(function ([event, callback, capture = false]) {\n subscribers.set(event, attachEvent(domTargets, event, callback, capture));\n });\n\n return function (eventKeys?: Array<string>) {\n for (const [eventKey, subscriber] of subscribers.entries()) {\n if (!eventKeys) {\n subscriber();\n return;\n }\n\n if (eventKeys.indexOf(eventKey) !== -1) {\n subscriber();\n }\n }\n };\n}\n","export const withDefault = (x: number, y: number) => {\n return { x, y };\n};\n","export class Gesture {\n currentIndex?: number;\n lastTimeStamp: number = Date.now();\n isActive: boolean = false;\n targetElement?: HTMLElement; // represents the bounded element\n targetElements: Array<HTMLElement> = []; // represents the bounded elements\n config?: any;\n callback?: <T>(event: T) => void;\n _subscribe?: (eventKeys?: Array<string>) => void;\n static _VELOCITY_LIMIT: number = 20;\n\n // it must be overridden by other child classes\n _initEvents() {}\n\n // cancel events\n // we only canceled down and move events because mouse up\n // will not be triggered\n _cancelEvents() {\n if (this._subscribe) {\n this._subscribe();\n }\n }\n\n // re-apply new callback\n applyCallback(callback: <T>(event: T) => void) {\n this.callback = callback;\n }\n\n // apply gesture\n applyGesture({\n targetElement,\n targetElements,\n callback,\n config,\n }: {\n targetElement?: any;\n targetElements?: any;\n callback: <T>(event: T) => void;\n config?: any;\n }) {\n this.targetElement = targetElement;\n this.targetElements = targetElements.map(\n (element: { current: any }) => element.current\n );\n this.callback = callback;\n this.config = config;\n\n // initialize events\n this._initEvents();\n\n // unbind\n return () => this._subscribe && this._subscribe();\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nimport type { Vector2 } from '../types';\n\nexport class DragGesture extends Gesture {\n movementStart: Vector2 = withDefault(0, 0);\n initialMovement: Vector2 = withDefault(0, 0);\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n translation: Vector2 = withDefault(0, 0);\n offset: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement || this.targetElements.length > 0) {\n this._subscribe = attachEvents(\n [window],\n [\n ['mousedown', this.pointerDown.bind(this)],\n ['mousemove', this.pointerMove.bind(this)],\n ['mouseup', this.pointerUp.bind(this)],\n ['touchstart', this.pointerDown.bind(this), { passive: false }],\n ['touchmove', this.pointerMove.bind(this), { passive: false }],\n ['touchend', this.pointerUp.bind(this)],\n ]\n );\n }\n }\n\n // @override - cancel events\n // we only canceled down and move events because mouse up\n // will not be triggered\n _cancelEvents() {\n if (this._subscribe) {\n this._subscribe(['mousedown', 'mousemove', 'touchstart', 'touchmove']);\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n args: [this.currentIndex],\n down: this.isActive,\n movementX: this.movement.x,\n movementY: this.movement.y,\n offsetX: this.translation.x,\n offsetY: this.translation.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n distanceX: Math.abs(this.movement.x),\n distanceY: Math.abs(this.movement.y),\n directionX: Math.sign(this.movement.x),\n directionY: Math.sign(this.movement.y),\n cancel: () => {\n this._cancelEvents();\n },\n });\n }\n }\n\n pointerDown(e: any) {\n if (e.type === 'touchstart') {\n this.movementStart = {\n x: e.touches[0].clientX,\n y: e.touches[0].clientY,\n };\n } else {\n this.movementStart = { x: e.clientX, y: e.clientY };\n }\n\n this.movement = { x: 0, y: 0 };\n this.offset = { x: this.translation.x, y: this.translation.y };\n this.previousMovement = { x: 0, y: 0 };\n this.velocity = { x: 0, y: 0 };\n\n // find current selected element\n const currElem = this.targetElements.find((elem: any) => elem === e.target);\n\n if (e.target === this.targetElement || currElem) {\n this.isActive = true;\n e.preventDefault();\n\n // set args\n if (currElem) {\n this.currentIndex = this.targetElements.indexOf(currElem);\n }\n\n // if initial function is defined then call it to get initial movementX and movementY\n // if only select to bounded draggable element\n const initial = this.config?.initial && this.config.initial();\n const initialMovementX = initial?.movementX;\n const initialMovementY = initial?.movementY;\n\n this.initialMovement = {\n x: initialMovementX ?? 0,\n y: initialMovementY ?? 0,\n };\n\n this.movement = {\n x: this.initialMovement.x,\n y: this.initialMovement.y,\n };\n\n this.previousMovement = {\n x: this.initialMovement.x,\n y: this.initialMovement.y,\n };\n\n this._handleCallback();\n }\n }\n\n pointerMove(e: any) {\n if (this.isActive) {\n e.preventDefault();\n const now = Date.now();\n const deltaTime = clamp(now - this.lastTimeStamp, 0.1, 64);\n this.lastTimeStamp = now;\n\n const t = deltaTime / 1000;\n\n if (e.type === 'touchmove') {\n this.movement = {\n x:\n this.initialMovement.x +\n (e.touches[0].clientX - this.movementStart.x),\n y:\n this.initialMovement.y +\n (e.touches[0].clientY - this.movementStart.y),\n };\n } else {\n this.movement = {\n x: this.initialMovement.x + (e.clientX - this.movementStart.x),\n y: this.initialMovement.y + (e.clientY - this.movementStart.y),\n };\n }\n\n this.translation = {\n x: this.offset.x + this.movement.x,\n y: this.offset.y + this.movement.y,\n };\n\n this.velocity = {\n x: clamp(\n (this.movement.x - this.previousMovement.x) / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n (this.movement.y - this.previousMovement.y) / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n }\n\n pointerUp() {\n if (this.isActive) {\n this.isActive = false;\n this._handleCallback();\n this._cancelEvents();\n this._initEvents();\n }\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nexport class MouseMoveGesture extends Gesture {\n event?: MouseEvent;\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['mousemove', this.onMouseMove.bind(this)]]\n );\n } else if (this.targetElements.length > 0) {\n this._subscribe = attachEvents(this.targetElements, [\n ['mousemove', this.onMouseMove.bind(this)],\n ]);\n } else {\n this._subscribe = attachEvents(\n [window],\n [['mousemove', this.onMouseMove.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n args: [this.currentIndex],\n event: this.event,\n isMoving: this.isActive,\n target: this.event?.target,\n mouseX: this.movement.x,\n mouseY: this.movement.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n });\n }\n }\n\n onMouseMove(e: MouseEvent) {\n // find current selected element\n const currElem = this.targetElements.find((elem: any) => elem === e.target);\n\n // set args\n if (currElem) {\n this.currentIndex = this.targetElements.indexOf(currElem);\n }\n\n this.event = e;\n\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n const x = e.clientX;\n const y = e.clientY;\n\n this.movement = { x, y };\n\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.direction = { x: 0, y: 0 };\n this.velocity = { x: 0, y: 0 };\n\n this._handleCallback();\n }, 250); // Debounce 250 milliseconds\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = { x: this.movement.x, y: this.movement.y };\n\n this._handleCallback();\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nexport class ScrollGesture extends Gesture {\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['scroll', this.scrollElementListener.bind(this)]]\n );\n } else {\n this._subscribe = attachEvents(\n [window],\n [['scroll', this.scrollListener.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n isScrolling: this.isActive,\n scrollX: this.movement.x,\n scrollY: this.movement.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n });\n }\n }\n\n onScroll({ x, y }: Vector2) {\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n this.movement = { x, y };\n\n // Clear if scrolling\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.direction = { x: 0, y: 0 };\n\n // Reset Velocity\n this.velocity = { x: 0, y: 0 };\n\n this._handleCallback(); // Debounce 250milliseconds\n }, 250);\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n\n scrollListener() {\n const { pageYOffset: y, pageXOffset: x } = window;\n this.onScroll({ x, y });\n }\n\n scrollElementListener() {\n const x = this.targetElement?.scrollLeft || 0;\n const y = this.targetElement?.scrollTop || 0;\n this.onScroll({ x, y });\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nconst LINE_HEIGHT = 40;\nconst PAGE_HEIGHT = 800;\n\nexport class WheelGesture extends Gesture {\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n delta: Vector2 = withDefault(0, 0);\n\n // Holds offsets\n offset: Vector2 = withDefault(0, 0);\n translation: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['wheel', this.onWheel.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n target: this.targetElement,\n isWheeling: this.isActive,\n deltaX: this.delta.x,\n deltaY: this.delta.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n movementX: this.movement.x,\n movementY: this.movement.y,\n offsetX: this.offset.x,\n offsetY: this.offset.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n });\n }\n }\n\n onWheel(event: WheelEvent) {\n let { deltaX, deltaY, deltaMode } = event;\n\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n this.isActive = true;\n\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.translation = { x: this.offset.x, y: this.offset.y };\n this._handleCallback();\n\n this.velocity = { x: 0, y: 0 }; // Reset Velocity\n this.movement = { x: 0, y: 0 };\n }, 200);\n\n // normalize wheel values, especially for Firefox\n if (deltaMode === 1) {\n deltaX *= LINE_HEIGHT;\n deltaY *= LINE_HEIGHT;\n } else if (deltaMode === 2) {\n deltaX *= PAGE_HEIGHT;\n deltaY *= PAGE_HEIGHT;\n }\n\n this.delta = { x: deltaX, y: deltaY };\n this.movement = {\n x: this.movement.x + deltaX,\n y: this.movement.y + deltaY,\n };\n this.offset = {\n x: this.translation.x + this.movement.x,\n y: this.translation.y + this.movement.y,\n };\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\ntype UseRecognizerHandlerType = Array<\n [\n key: 'drag' | 'wheel' | 'move' | 'scroll',\n gesture: any,\n callback: any,\n config?: any\n ]\n>;\n\nexport const useRecognizer = (handlers: UseRecognizerHandlerType) => {\n const ref = React.useRef<any>();\n const elementRefs = React.useRef<Array<any>>([]);\n const subscribers = React.useRef<\n Map<string, { keyIndex: number; gesture: any; unsubscribe: any }>\n >(new Map()).current;\n\n // re-initiate callback on change\n React.useEffect(() => {\n for (let [, { keyIndex, gesture }] of subscribers.entries()) {\n const [, , callback] = handlers[keyIndex];\n gesture.applyCallback(callback);\n }\n }, [handlers]);\n\n React.useEffect(() => {\n handlers.forEach(([key, gesture, callback, config], keyIndex) => {\n queueMicrotask(() =>\n subscribers.set(key, {\n keyIndex,\n gesture,\n unsubscribe: gesture.applyGesture({\n targetElement: ref.current,\n targetElements: elementRefs.current,\n callback,\n config,\n }),\n })\n );\n });\n\n return () => {\n for (let [, { unsubscribe }] of subscribers.entries()) {\n unsubscribe && unsubscribe();\n }\n };\n });\n\n return (index?: number) => {\n if (index === null || index === undefined) {\n return { ref };\n } else {\n elementRefs.current[index] =\n elementRefs.current[index] || React.createRef();\n\n return { ref: elementRefs.current[index] };\n }\n };\n};\n","import * as React from 'react';\n\nimport { useMount, type UseMountConfig } from '../hooks';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\ninterface MountedBlockProps extends Partial<UseMountConfig> {\n state: boolean;\n children: (animation: { value: FluidValue }) => React.ReactNode;\n}\n\n/**\n * MountedBlock - Higher order component which handles mounting and unmounting of a component.\n * @param { boolean } state - Boolean indicating the component should mount or unmount.\n * @param { function } children - Child as a function with `AnimatedValue` on `.value` property.\n * @param { number } } from - Number that dictates the beginning state for animation.\n * @param { number } enter - Number that dictates the entry state for animation.\n * @param { number } exit - Number that dictates the exit state for animation.\n * @param { UseValueConfig } config - Animation configuration for overall animation.\n */\nexport const MountedBlock = ({\n state,\n children,\n from = 0,\n enter = 1,\n exit = 0,\n config,\n}: MountedBlockProps) => {\n const open = useMount(state, {\n from,\n enter,\n exit,\n config,\n });\n\n return (\n <>\n {open(\n (animation, mounted) =>\n mounted && children({ value: animation.value as any })\n )}\n </>\n );\n};\n","import * as React from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport { useValue, type UseValueConfig } from '../hooks';\n\ninterface ScrollableBlockProps {\n children?: (animation: { value: FluidValue }) => React.ReactNode;\n direction?: 'single' | 'both';\n threshold?: number;\n animationConfig?: UseValueConfig;\n}\n\n/**\n * ScrollableBlock - Higher order component to handle the entrance or exit animation\n * of a component when it enters or exit the viewport. Accepts child as a function with\n * `AnimatedValue` as its first argument which can be interpolated on input range [0, 1]\n * @prop { function } children - child as a function with `AnimatedValue` as its first argument.\n * @prop { 'single' | 'both' } direction - single applies animation on enter once, both applies on enter and exit.\n * @prop { number } threshold - should be in range 0 to 1 which equivalent to `IntersectionObserver` threshold.\n * @prop { UseValueConfig } animationConfig - Animation config\n */\nexport const ScrollableBlock = (props: ScrollableBlockProps) => {\n const {\n children,\n direction = 'single',\n animationConfig,\n threshold = 0.2,\n } = props;\n const scrollableBlockRef = React.useRef<HTMLDivElement>(null);\n const animation = useValue(0, animationConfig); // 0: not intersecting | 1: intersecting\n\n React.useEffect(() => {\n const _scrollableBlock = scrollableBlockRef.current;\n\n const observer = new IntersectionObserver(\n function ([entry]) {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n animation.value = 1;\n } else {\n if (direction === 'both') animation.value = 0;\n }\n },\n {\n root: null, // FOR VIEWPORT ONLY\n threshold,\n }\n );\n\n if (_scrollableBlock) {\n observer.observe(_scrollableBlock);\n }\n\n return () => {\n if (_scrollableBlock) {\n observer.unobserve(_scrollableBlock);\n }\n };\n }, []);\n\n return (\n <div ref={scrollableBlockRef}>\n {children && children({ value: animation.value })}\n </div>\n );\n};\n","/**\n * @param { number } ms - number of milliseconds to delay code execution\n * @returns Promise\n */\nexport function delay(ms: number) {\n return new Promise((resolve) => {\n setTimeout(() => resolve(null), ms);\n });\n}\n","import * as React from 'react';\n\nimport { DragEventType, UseDragConfig } from '../types';\nimport { DragGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useDrag(\n callback: (event: DragEventType) => void,\n config?: UseDragConfig\n) {\n const gesture = React.useRef(new DragGesture()).current;\n\n return useRecognizer([['drag', gesture, callback, config]]);\n}\n","import * as React from 'react';\nimport {\n DragGesture,\n MouseMoveGesture,\n ScrollGesture,\n WheelGesture,\n} from '../controllers';\nimport {\n DragEventType,\n WheelEventType,\n ScrollEventType,\n MouseMoveEventType,\n} from '../types';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useGesture({\n onDrag,\n onWheel,\n onScroll,\n onMouseMove,\n}: {\n onDrag?: (event: DragEventType) => void;\n onWheel?: (event: WheelEventType) => void;\n onScroll?: (event: ScrollEventType) => void;\n onMouseMove?: (event: MouseMoveEventType) => void;\n}) {\n const dragGesture = React.useRef(new DragGesture()).current;\n const wheelGesture = React.useRef(new WheelGesture()).current;\n const scrollGesture = React.useRef(new ScrollGesture()).current;\n const mouseMoveGesture = React.useRef(new MouseMoveGesture()).current;\n\n return useRecognizer([\n ['drag', dragGesture, onDrag],\n ['wheel', wheelGesture, onWheel],\n ['scroll', scrollGesture, onScroll],\n ['move', mouseMoveGesture, onMouseMove],\n ]);\n}\n","import { useRef, useEffect, DependencyList, createRef } from 'react';\n\ntype MeasurementValue = number | Array<number>;\n\ntype MeasurementType = {\n left: MeasurementValue;\n top: MeasurementValue;\n width: MeasurementValue;\n height: MeasurementValue;\n vLeft: MeasurementValue;\n vTop: MeasurementValue;\n};\n\nexport function useMeasure(\n callback: (event: MeasurementType) => void,\n deps?: DependencyList\n) {\n const ref = useRef(null);\n const elementRefs = useRef([]);\n const callbackRef = useRef<(event: MeasurementType) => void>(callback);\n\n // Re-initiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const _refElement = ref.current || document.documentElement;\n const _refElementsMultiple = elementRefs.current;\n\n const resizeObserver = new ResizeObserver(([entry]) => {\n const { left, top, width, height } = entry.target.getBoundingClientRect();\n const { pageXOffset, pageYOffset } = window;\n\n if (callbackRef) {\n if (_refElement === document.documentElement) {\n return; // no-op for document\n } else {\n callbackRef.current({\n left: left + pageXOffset,\n top: top + pageYOffset,\n width,\n height,\n vLeft: left,\n vTop: top,\n });\n }\n }\n });\n\n const resizeObserverMultiple = new ResizeObserver((entries) => {\n const left: Array<number> = [];\n const top: Array<number> = [];\n const width: Array<number> = [];\n const height: Array<number> = [];\n const vLeft: Array<number> = [];\n const vTop: Array<number> = [];\n\n entries.forEach((entry) => {\n const {\n left: _left,\n top: _top,\n width: _width,\n height: _height,\n } = entry.target.getBoundingClientRect();\n const { pageXOffset, pageYOffset } = window;\n const _pageLeft = _left + pageXOffset;\n const _pageTop = _top + pageYOffset;\n\n left.push(_pageLeft);\n top.push(_pageTop);\n width.push(_width);\n height.push(_height);\n vLeft.push(_left);\n vTop.push(_top);\n });\n\n if (callbackRef) {\n callbackRef.current({\n left,\n top,\n width,\n height,\n vLeft,\n vTop,\n });\n }\n });\n\n if (_refElement) {\n if (\n _refElement === document.documentElement &&\n _refElementsMultiple.length > 0\n ) {\n _refElementsMultiple.forEach((element: any) => {\n resizeObserverMultiple.observe(element.current);\n });\n } else {\n resizeObserver.observe(_refElement);\n }\n }\n\n return () => {\n if (_refElement) {\n if (\n _refElement === document.documentElement &&\n _refElementsMultiple.length > 0\n ) {\n _refElementsMultiple.forEach((element: any) => {\n resizeObserverMultiple.unobserve(element.current);\n });\n } else {\n resizeObserver.unobserve(_refElement);\n }\n }\n };\n }, []);\n\n return (index?: number) => {\n if (index === null || index === undefined) {\n return { ref };\n } else {\n elementRefs.current[index] = elementRefs.current[index] || createRef();\n\n return { ref: elementRefs.current[index] };\n }\n }; // ...bind() or ...bind(index) for multiple\n}\n","import * as React from 'react';\n\nimport { MouseMoveEventType } from '../types';\nimport { MouseMoveGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useMouseMove(callback: (event: MouseMoveEventType) => void) {\n const gesture = React.useRef(new MouseMoveGesture()).current;\n\n return useRecognizer([['move', gesture, callback]]);\n}\n","import { useRef, useEffect, RefObject, DependencyList } from 'react';\n\nimport { attachEvents } from '../gestures/helpers/eventAttacher';\n\nexport function useOutsideClick(\n elementRef: RefObject<HTMLElement>,\n callback: (event: MouseEvent) => void,\n deps?: DependencyList\n) {\n const callbackRef = useRef<(event: MouseEvent) => void>();\n\n if (!callbackRef.current) {\n callbackRef.current = callback;\n }\n\n // Re-initiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const handleOutsideClick = (e: MouseEvent) => {\n const target = e.target as Node;\n\n if (!target || !target.isConnected) {\n return;\n }\n\n const isOutside =\n elementRef.current && !elementRef.current.contains(target);\n\n if (isOutside) {\n callbackRef.current && callbackRef.current(e);\n }\n };\n\n const subscribe = attachEvents(\n [document],\n [['mousedown', handleOutsideClick]]\n );\n\n return () => subscribe && subscribe();\n }, []);\n}\n","import * as React from 'react';\n\nimport { ScrollEventType } from '../types';\nimport { ScrollGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useScroll(callback: (event: ScrollEventType) => void) {\n const gesture = React.useRef(new ScrollGesture()).current;\n\n return useRecognizer([['scroll', gesture, callback]]);\n}\n","import { useCallback, useLayoutEffect, useRef } from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport { useFluidValues } from '../core/useFluidValues';\nimport { getToValue, AnimationConfig } from '../helpers';\n\nimport { type UpdateValue } from '../core/FluidController';\nimport { type UseValueConfig } from './useValue';\n\nexport function useValues<T extends number[] | string[]>(\n initialValue: T,\n config?: UseValueConfig\n) {\n const isInitialRender = useRef(true);\n const [animation, setAnimation] = useFluidValues(initialValue, {\n ...AnimationConfig.EASE,\n ...config,\n });\n\n const updateAnimation = useCallback(\n (\n values: Array<number | number[] | string | UpdateValue | UpdateValue[]>\n ) => {\n const update = values.map((value) => {\n if (Array.isArray(value)) {\n return value.map((v) => getToValue(v));\n } else {\n return getToValue(value);\n }\n });\n queueMicrotask(() => setAnimation(update));\n },\n []\n );\n\n useLayoutEffect(() => {\n if (!isInitialRender.current) {\n updateAnimation(initialValue);\n }\n\n isInitialRender.current = false;\n }, [initialValue, config]);\n\n return {\n set value(\n to: Array<number | number[] | string | UpdateValue | UpdateValue[]>\n ) {\n updateAnimation(to);\n },\n get value(): FluidValue[] {\n return animation;\n },\n get currentValue() {\n return animation.map((a) => a.get());\n },\n };\n}\n","import { useCallback, useMemo, useRef } from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport { UpdateValue, UseFluidValueConfig } from './FluidController';\nimport { FluidArrayController } from './FluidArrayController';\n\nexport const useFluidValues = <T extends number[] | string[]>(\n value: T,\n config?: UseFluidValueConfig\n): [\n FluidValue[],\n (\n updateValue: Array<UpdateValue | UpdateValue[]>,\n callback?: () => void\n ) => void,\n] => {\n const fluidController = useRef(\n new FluidArrayController(value, config)\n ).current;\n\n const onUpdate = useCallback(\n (\n updateValue: UpdateValue[] | Array<UpdateValue[]>,\n callback?: () => void\n ) => {\n fluidController.setFluid(updateValue, callback);\n },\n []\n );\n\n const fluidValue = useMemo(() => fluidController.getFluid(), []);\n\n return [fluidValue, onUpdate];\n};\n","import * as React from 'react';\n\nimport { WheelEventType } from '../types';\nimport { WheelGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useWheel(callback: (event: WheelEventType) => void) {\n const gesture = React.useRef(new WheelGesture()).current;\n\n return useRecognizer([['wheel', gesture, callback]]);\n}\n","import { useRef, useEffect, DependencyList } from 'react';\n\ntype WindowDimensionType = {\n width: number;\n height: number;\n innerWidth: number;\n innerHeight: number;\n};\n\nexport function useWindowDimension(\n callback: (event: WindowDimensionType) => void,\n deps?: DependencyList\n) {\n const windowDimensionsRef = useRef<WindowDimensionType>({\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n });\n const callbackRef = useRef<(event: WindowDimensionType) => void>(callback);\n\n const handleCallback: () => void = () => {\n if (callbackRef) {\n callbackRef.current({\n ...windowDimensionsRef.current,\n });\n }\n };\n\n // Re-initiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver(([entry]) => {\n const { clientWidth, clientHeight } = entry.target;\n const { innerWidth, innerHeight } = window;\n\n windowDimensionsRef.current = {\n width: clientWidth,\n height: clientHeight,\n innerWidth,\n innerHeight,\n };\n\n handleCallback();\n });\n\n resizeObserver.observe(document.documentElement);\n\n return () => resizeObserver.unobserve(document.documentElement);\n }, []);\n}\n","import type { UseValueConfig } from '../hooks';\nimport type { WithOnCallbacks } from './withConfig';\nimport type { UpdateValue } from '../core/FluidController';\n\ninterface WithDecayConfig\n extends Pick<UseValueConfig, 'velocity' | 'deceleration'>,\n WithOnCallbacks {}\n\nexport const withDecay = (config?: WithDecayConfig): UpdateValue => ({\n config: {\n decay: true,\n ...config,\n },\n});\n","import type { UseValueConfig } from '../hooks';\nimport type { UpdateValue } from '../core/FluidController';\n\nexport const withDelay = (\n delay: number,\n animation: { toValue: number; config?: UseValueConfig }\n): UpdateValue => ({\n ...animation,\n config: {\n ...animation.config,\n delay,\n },\n});\n","import { AnimationConfig } from '../helpers';\nimport { withConfig, type WithOnCallbacks } from './withConfig';\nimport type { UpdateValue } from '../core/FluidController';\n\ninterface WithEaseConfig extends WithOnCallbacks {}\n\nexport const withEase = (toValue: number, config?: WithEaseConfig): UpdateValue =>\n withConfig(toValue, { ...AnimationConfig.EASE, ...config });\n","import type { UpdateValue } from '../core/FluidController';\n\nexport const withLoop = (\n updateValue: UpdateValue | UpdateValue[],\n loop: number\n): UpdateValue[] => {\n if (Array.isArray(updateValue)) {\n let loopedValues: UpdateValue[] = [];\n for (let i = 0; i < loop; i++) {\n loopedValues = loopedValues.concat(updateValue);\n }\n return loopedValues;\n } else {\n return Array(loop).fill({\n toValue: updateValue.toValue,\n config: { ...updateValue.config, loop },\n });\n }\n};\n","import { AnimationConfig } from '../helpers';\nimport { type UseValueConfig } from '../hooks';\nimport { withConfig, type WithOnCallbacks } from './withConfig';\nimport type { UpdateValue } from '../core/FluidController';\n\ninterface WithSpringConfig\n extends Pick<UseValueConfig, 'mass' | 'friction' | 'tension'>,\n WithOnCallbacks {}\n\nexport const withSpring = (\n toValue: number,\n config?: WithSpringConfig\n): UpdateValue =>\n withConfig(toValue, { ...AnimationConfig.ELASTIC, ...config });\n","import { type UseValueConfig } from '../hooks';\nimport { withConfig, type WithOnCallbacks } from './withConfig';\nimport type { UpdateValue } from '../core/FluidController';\n\ninterface WithTimingConfig\n extends Pick<UseValueConfig, 'duration' | 'easing'>,\n WithOnCallbacks {}\n\nexport const withTiming = (\n toValue: number,\n config?: WithTimingConfig\n): UpdateValue => withConfig(toValue, { duration: 250, ...config });\n"],"names":["COLOR_NUMBER_REGEX","HEX_NAME_COLOR","colorNames","transparent","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","hexToRgba","hex","hex6","replace","_","r","g","b","conv3to6","hex8","length","conv6to8","hexRgba","exec","parseInt","a","rgbaToHex","rgba","toString","slice","interpolateValue","val","arr","extrapolateLeft","extrapolateRight","_a","__read","inputMin","inputMax","outputMin","outputMax","result","Infinity","_getArrayInterpolate","value","narrowedInput","_extrapolateLeft","_extrapolateRight","map","index","outputMinProcessed","outputMaxProcessed","interpolateColor","Error","getTemplateString","str","_getParsedStringArray","match","v","indexOf","Number","getProcessedColor","Object","prototype","hasOwnProperty","call","interpolateNumbers","inputRange","outputRange","extrapolateConfig","extrapolate","x","input","output","i","getNarrowedInput","undefined","str2","Array","isArray","_b","processedOutputMin","processedOutputMax","templateString","trim","outputMinParsed","outputMaxParsed","result_1","__values","result_1_1","next","done","interpolate","FluidValue","isDefined","getToValue","config","toValue","AnimationConfig","ELASTIC","mass","friction","tension","BOUNCE","duration","easing","Easing","bounce","EASE","STIFF","WOOBLE","EASE_IN","in","ease","EASE_OUT","out","EASE_IN_OUT","inOut","POWER1","bezier","POWER2","POWER3","POWER4","LINEAR","linear","FluidController","this","iterationsSoFar","fluid","defaultConfig","getAnimation","updateValue","native","immediate","timingConfig","delay","timing","decay","decayConfig","velocity","deceleration","springConfig","restDistance","spring","runAnimation","onComplete","_this","__assign","loopCount","loop","removeAllListeners","onStart","get","onChange","addListener","animation","handleRest","finished","onRest","loopAnimation","reset","start","setFluid","callback","currentAnimation_1","onComplete_1","getFluid","useFluidValue","fluidController","useRef","current","onUpdate","useCallback","useMemo","useValue","initialValue","isInitialRender","setAnimation","updateAnimation","queueMicrotask","useLayoutEffect","to","currentValue","FluidArrayController","values","fluidControllers","fc","useMount","state","mv","useState","mounted","setMounted","from","enter","exit","innerConfig","_c","e","getSubscriptions","forEach","s","removeSubscription","useInternalMount","cb","m","bin","bool","clamp","lowerbound","upperbound","Math","min","max","rubber","distanceFromEdge","dimension","constant","abs","pow","rubber2","withConfig","flattenUpdateValues","animations","reduce","acc","push","apply","attachEvents","domTargets","events","subscribers","Map","event","capture","set","target","addEventListener","removeEventListener","attachEvent","eventKeys","entries","_d","eventKey","subscriber","withDefault","y","Gesture","lastTimeStamp","Date","now","isActive","targetElements","_initEvents","_cancelEvents","_subscribe","applyCallback","applyGesture","targetElement","element","_VELOCITY_LIMIT","DragGesture","_super","movementStart","initialMovement","movement","previousMovement","translation","offset","__extends","window","pointerDown","bind","pointerMove","pointerUp","passive","_handleCallback","args","currentIndex","down","movementX","movementY","offsetX","offsetY","velocityX","velocityY","distanceX","distanceY","directionX","sign","directionY","cancel","type","touches","clientX","clientY","currElem","find","elem","preventDefault","initial","initialMovementX","initialMovementY","deltaTime","t","MouseMoveGesture","direction","onMouseMove","isMoving","mouseX","mouseY","isActiveID","clearTimeout","setTimeout","diffX","diffY","ScrollGesture","scrollElementListener","scrollListener","isScrolling","scrollX","scrollY","onScroll","pageYOffset","pageXOffset","scrollLeft","scrollTop","WheelGesture","delta","onWheel","isWheeling","deltaX","deltaY","deltaMode","useRecognizer","handlers","ref","React","elementRefs","useEffect","_e","keyIndex","gesture","key","unsubscribe","createRef","children","open","_jsx","_Fragment","props","animationConfig","threshold","scrollableBlockRef","_scrollableBlock","observer","IntersectionObserver","isIntersecting","root","observe","unobserve","amv","minOutput","maxOutput","ms","Promise","resolve","perc","val1","val2","array","moveIndex","toIndex","item","diff","__spreadArray","targetIndex","snapPoints","finalValue","getDiff","point","deltas","minDelta","onDrag","dragGesture","wheelGesture","scrollGesture","mouseMoveGesture","deps","callbackRef","_refElement","document","documentElement","_refElementsMultiple","resizeObserver","ResizeObserver","getBoundingClientRect","left","top","width","height","vLeft","vTop","resizeObserverMultiple","entry","_left","_top","_width","_height","_pageLeft","_pageTop","elementRef","subscribe","isConnected","contains","useFluidValues","update","windowDimensionsRef","innerWidth","innerHeight","clientWidth","clientHeight","loopedValues","concat","fill"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/animation/interpolation/colors.ts","../src/animation/interpolation/interpolateNumbers.ts","../src/animation/interpolation/interpolate.ts","../src/animation/helpers/animationType.ts","../src/animation/controllers/withSpring.ts","../src/animation/controllers/withNative.ts","../src/animation/controllers/withEase.ts","../src/animation/helpers/getToValue.ts","../src/animation/hooks/useValue.ts","../src/animation/hooks/useMount.ts","../src/gestures/helpers/eventAttacher.ts","../src/gestures/helpers/math.ts","../src/gestures/helpers/withDefault.ts","../src/gestures/controllers/Gesture.ts","../src/gestures/controllers/DragGesture.ts","../src/gestures/controllers/MouseMoveGesture.ts","../src/gestures/controllers/ScrollGesture.ts","../src/gestures/controllers/WheelGesture.ts","../src/gestures/hooks/useRecognizer.ts","../src/animation/modules/MountedBlock.tsx","../src/animation/modules/ScrollableBlock.tsx","../src/gestures/hooks/useDrag.ts","../src/gestures/hooks/useGesture.ts","../src/hooks/useMeasure.ts","../src/gestures/hooks/useMouseMove.ts","../src/hooks/useOutsideClick.ts","../src/gestures/hooks/useScroll.ts","../src/animation/hooks/useValues.ts","../src/gestures/hooks/useWheel.ts","../src/hooks/useWindowDimension.ts","../src/animation/controllers/withDecay.ts","../src/animation/controllers/withDelay.ts","../src/animation/controllers/withLoop.ts","../src/animation/controllers/withSequence.ts","../src/animation/controllers/withTiming.ts"],"sourcesContent":["export const COLOR_NUMBER_REGEX =\n /[+-]?\\d+(\\.\\d+)?|[\\s]?\\.\\d+|#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})/gi;\nexport const HEX_NAME_COLOR =\n /#[a-f\\d]{3,}|transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|burntsienna|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen/gi;\n\ninterface classNameType {\n [name: string]: string;\n}\n\n// Named colors\nexport const colorNames: classNameType = {\n transparent: '#00000000',\n aliceblue: '#f0f8ffff',\n antiquewhite: '#faebd7ff',\n aqua: '#00ffffff',\n aquamarine: '#7fffd4ff',\n azure: '#f0ffffff',\n beige: '#f5f5dcff',\n bisque: '#ffe4c4ff',\n black: '#000000ff',\n blanchedalmond: '#ffebcdff',\n blue: '#0000ffff',\n blueviolet: '#8a2be2ff',\n brown: '#a52a2aff',\n burlywood: '#deb887ff',\n burntsienna: '#ea7e5dff',\n cadetblue: '#5f9ea0ff',\n chartreuse: '#7fff00ff',\n chocolate: '#d2691eff',\n coral: '#ff7f50ff',\n cornflowerblue: '#6495edff',\n cornsilk: '#fff8dcff',\n crimson: '#dc143cff',\n cyan: '#00ffffff',\n darkblue: '#00008bff',\n darkcyan: '#008b8bff',\n darkgoldenrod: '#b8860bff',\n darkgray: '#a9a9a9ff',\n darkgreen: '#006400ff',\n darkgrey: '#a9a9a9ff',\n darkkhaki: '#bdb76bff',\n darkmagenta: '#8b008bff',\n darkolivegreen: '#556b2fff',\n darkorange: '#ff8c00ff',\n darkorchid: '#9932ccff',\n darkred: '#8b0000ff',\n darksalmon: '#e9967aff',\n darkseagreen: '#8fbc8fff',\n darkslateblue: '#483d8bff',\n darkslategray: '#2f4f4fff',\n darkslategrey: '#2f4f4fff',\n darkturquoise: '#00ced1ff',\n darkviolet: '#9400d3ff',\n deeppink: '#ff1493ff',\n deepskyblue: '#00bfffff',\n dimgray: '#696969ff',\n dimgrey: '#696969ff',\n dodgerblue: '#1e90ffff',\n firebrick: '#b22222ff',\n floralwhite: '#fffaf0ff',\n forestgreen: '#228b22ff',\n fuchsia: '#ff00ffff',\n gainsboro: '#dcdcdcff',\n ghostwhite: '#f8f8ffff',\n gold: '#ffd700ff',\n goldenrod: '#daa520ff',\n gray: '#808080ff',\n green: '#008000ff',\n greenyellow: '#adff2fff',\n grey: '#808080ff',\n honeydew: '#f0fff0ff',\n hotpink: '#ff69b4ff',\n indianred: '#cd5c5cff',\n indigo: '#4b0082ff',\n ivory: '#fffff0ff',\n khaki: '#f0e68cff',\n lavender: '#e6e6faff',\n lavenderblush: '#fff0f5ff',\n lawngreen: '#7cfc00ff',\n lemonchiffon: '#fffacdff',\n lightblue: '#add8e6ff',\n lightcoral: '#f08080ff',\n lightcyan: '#e0ffffff',\n lightgoldenrodyellow: '#fafad2ff',\n lightgray: '#d3d3d3ff',\n lightgreen: '#90ee90ff',\n lightgrey: '#d3d3d3ff',\n lightpink: '#ffb6c1ff',\n lightsalmon: '#ffa07aff',\n lightseagreen: '#20b2aaff',\n lightskyblue: '#87cefaff',\n lightslategray: '#778899ff',\n lightslategrey: '#778899ff',\n lightsteelblue: '#b0c4deff',\n lightyellow: '#ffffe0ff',\n lime: '#00ff00ff',\n limegreen: '#32cd32ff',\n linen: '#faf0e6ff',\n magenta: '#ff00ffff',\n maroon: '#800000ff',\n mediumaquamarine: '#66cdaaff',\n mediumblue: '#0000cdff',\n mediumorchid: '#ba55d3ff',\n mediumpurple: '#9370dbff',\n mediumseagreen: '#3cb371ff',\n mediumslateblue: '#7b68eeff',\n mediumspringgreen: '#00fa9aff',\n mediumturquoise: '#48d1ccff',\n mediumvioletred: '#c71585ff',\n midnightblue: '#191970ff',\n mintcream: '#f5fffaff',\n mistyrose: '#ffe4e1ff',\n moccasin: '#ffe4b5ff',\n navajowhite: '#ffdeadff',\n navy: '#000080ff',\n oldlace: '#fdf5e6ff',\n olive: '#808000ff',\n olivedrab: '#6b8e23ff',\n orange: '#ffa500ff',\n orangered: '#ff4500ff',\n orchid: '#da70d6ff',\n palegoldenrod: '#eee8aaff',\n palegreen: '#98fb98ff',\n paleturquoise: '#afeeeeff',\n palevioletred: '#db7093ff',\n papayawhip: '#ffefd5ff',\n peachpuff: '#ffdab9ff',\n peru: '#cd853fff',\n pink: '#ffc0cbff',\n plum: '#dda0ddff',\n powderblue: '#b0e0e6ff',\n purple: '#800080ff',\n rebeccapurple: '#663399ff',\n red: '#ff0000ff',\n rosybrown: '#bc8f8fff',\n royalblue: '#4169e1ff',\n saddlebrown: '#8b4513ff',\n salmon: '#fa8072ff',\n sandybrown: '#f4a460ff',\n seagreen: '#2e8b57ff',\n seashell: '#fff5eeff',\n sienna: '#a0522dff',\n silver: '#c0c0c0ff',\n skyblue: '#87ceebff',\n slateblue: '#6a5acdff',\n slategray: '#708090ff',\n slategrey: '#708090ff',\n snow: '#fffafaff',\n springgreen: '#00ff7fff',\n steelblue: '#4682b4ff',\n tan: '#d2b48cff',\n teal: '#008080ff',\n thistle: '#d8bfd8ff',\n tomato: '#ff6347ff',\n turquoise: '#40e0d0ff',\n violet: '#ee82eeff',\n wheat: '#f5deb3ff',\n white: '#ffffffff',\n whitesmoke: '#f5f5f5ff',\n yellow: '#ffff00ff',\n yellowgreen: '#9acd32ff',\n};\n\nfunction conv3to6(hex: string) {\n const regex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n\n return hex.replace(regex, function (_, r, g, b) {\n return '#' + r + r + g + g + b + b;\n });\n}\n\nfunction conv6to8(hex: string) {\n if (hex.length === 7) {\n return hex + 'FF';\n }\n\n return hex;\n}\n\nexport function hexToRgba(hex: string) {\n const hex6: string = conv3to6(hex);\n const hex8: string = conv6to8(hex6);\n const hexRgba: any =\n /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex8);\n\n return {\n r: parseInt(hexRgba[1], 16),\n g: parseInt(hexRgba[2], 16),\n b: parseInt(hexRgba[3], 16),\n a: parseInt(hexRgba[4], 16) / 255,\n };\n}\n\nexport function rgbaToHex(rgba: {\n r: number;\n g: number;\n b: number;\n a: number;\n}) {\n const { r, g, b, a } = rgba;\n\n const hexR = (r | (1 << 8)).toString(16).slice(1);\n const hexG = (g | (1 << 8)).toString(16).slice(1);\n const hexB = (b | (1 << 8)).toString(16).slice(1);\n const hexA = ((a * 255) | (1 << 8)).toString(16).slice(1);\n\n return '#' + hexR + hexG + hexB + hexA;\n}\n\nexport function processColor(color: number | string) {\n if (typeof color === 'number') {\n const alpha = ((color >> 24) & 255) / 255;\n const red = (color >> 16) & 255;\n const green = (color >> 8) & 255;\n const blue = color & 255;\n\n return { r: red, g: green, b: blue, a: alpha };\n } else {\n // If string then check whether it has # in 0 index\n if (color[0] === '#') {\n return hexToRgba(color);\n } else {\n // It is string color\n const hexColorName: string = colorNames[color];\n if (hexColorName) {\n return hexToRgba(hexColorName);\n } else {\n throw new Error('String cannot be parsed!');\n }\n }\n }\n}\n","import {\n rgbaToHex,\n hexToRgba,\n COLOR_NUMBER_REGEX,\n HEX_NAME_COLOR,\n colorNames,\n} from './colors';\n\ntype ExtrapolateType = 'identity' | 'extend' | 'clamp';\n\ntype ExtrapolateConfig = {\n extrapolate?: ExtrapolateType;\n extrapolateLeft?: ExtrapolateType;\n extrapolateRight?: ExtrapolateType;\n};\n\nconst interpolateValue = (\n val: number,\n arr: any,\n extrapolateLeft: ExtrapolateType,\n extrapolateRight: ExtrapolateType\n) => {\n const [inputMin, inputMax, outputMin, outputMax] = arr;\n let result: number = val;\n\n // EXTRAPOLATE\n if (result < inputMin) {\n if (extrapolateLeft === 'identity') {\n return result;\n } else if (extrapolateLeft === 'clamp') {\n result = inputMin;\n } else if (extrapolateLeft === 'extend') {\n // noop\n }\n }\n\n if (result > inputMax) {\n if (extrapolateRight === 'identity') {\n return result;\n } else if (extrapolateRight === 'clamp') {\n result = inputMax;\n } else if (extrapolateRight === 'extend') {\n // noop\n }\n }\n\n if (outputMin === outputMax) {\n return outputMin;\n }\n\n if (inputMin === inputMax) {\n if (val <= inputMin) {\n return outputMin;\n }\n return outputMax;\n }\n\n // Input Range\n if (inputMin === -Infinity) {\n result = -result;\n } else if (inputMax === Infinity) {\n result = result - inputMin;\n } else {\n result = (result - inputMin) / (inputMax - inputMin);\n }\n\n // Output Range\n if (outputMin === -Infinity) {\n result = -result;\n } else if (outputMax === Infinity) {\n result = result + outputMin;\n } else {\n result = result * (outputMax - outputMin) + outputMin;\n }\n\n return result;\n};\n\nconst getNarrowedInput = function (\n x: number,\n input: number[],\n output: Array<number | string>\n): Array<number | string> {\n const length = input.length;\n let narrowedInput: Array<number | string> = [];\n\n // Boundaries\n if (x < input[0]) {\n narrowedInput = [input[0], input[1], output[0], output[1]];\n } else if (x > input[length - 1]) {\n narrowedInput = [\n input[length - 2],\n input[length - 1],\n output[length - 2],\n output[length - 1],\n ];\n }\n\n // Narrow the input and output ranges\n for (let i = 1; i < length; ++i) {\n if (x <= input[i]) {\n narrowedInput = [input[i - 1], input[i], output[i - 1], output[i]];\n break;\n }\n }\n\n return narrowedInput;\n};\n\nconst interpolateColor = (value: number, narrowedInput: string[]) => {\n const [inputMin, inputMax, outputMin, outputMax] = narrowedInput;\n\n const outputMinProcessed = hexToRgba(outputMin);\n const outputMaxProcessed = hexToRgba(outputMax);\n\n const red = interpolateValue(\n value,\n [inputMin, inputMax, outputMinProcessed.r, outputMaxProcessed.r],\n 'clamp',\n 'clamp'\n );\n\n const green = interpolateValue(\n value,\n [inputMin, inputMax, outputMinProcessed.g, outputMaxProcessed.g],\n 'clamp',\n 'clamp'\n );\n\n const blue = interpolateValue(\n value,\n [inputMin, inputMax, outputMinProcessed.b, outputMaxProcessed.b],\n 'clamp',\n 'clamp'\n );\n\n const alpha = interpolateValue(\n value,\n [inputMin, inputMax, outputMinProcessed.a, outputMaxProcessed.a],\n 'clamp',\n 'clamp'\n );\n\n return rgbaToHex({ r: red, g: green, b: blue, a: alpha });\n};\n\nconst _getArrayInterpolate = (\n value: number,\n narrowedInput: Array<any>,\n _extrapolateLeft: ExtrapolateType,\n _extrapolateRight: ExtrapolateType\n) => {\n const [inputMin, inputMax, outputMin, outputMax] = narrowedInput;\n\n if (outputMin.length === outputMax.length) {\n return outputMin.map((val: any, index: number) => {\n if (typeof val === 'string') {\n // IF IT IS STRING THEN IT MUST BE HEX COLOR\n return interpolateColor(value, [\n inputMin,\n inputMax,\n val,\n outputMax[index],\n ]);\n } else {\n return interpolateValue(\n value,\n [inputMin, inputMax, val, outputMax[index]],\n _extrapolateLeft,\n _extrapolateRight\n );\n }\n });\n } else {\n throw new Error(\"Array length doesn't match\");\n }\n};\n\nconst getTemplateString = (str: string) => {\n return str.replace(COLOR_NUMBER_REGEX, '$');\n};\n\nconst _getParsedStringArray = (str: any) => {\n return str.match(COLOR_NUMBER_REGEX).map((v: string) => {\n if (v.indexOf('#') !== -1) {\n return v;\n } else {\n return Number(v);\n }\n });\n};\n\nconst stringMatched = (str1: string, str2: string) =>\n getTemplateString(str1).trim().replace(/\\s/g, '') ===\n getTemplateString(str2).trim().replace(/\\s/g, '');\n\n/**\n * Function which proccess the\n * hexadecimal colors to its proper formats\n * @param str - string\n * @returns hex color string\n */\nconst getProcessedColor = (str: string) => {\n return str.replace(HEX_NAME_COLOR, function (match: any) {\n if (match.indexOf('#') !== -1) {\n return rgbaToHex(hexToRgba(match));\n } else if (Object.prototype.hasOwnProperty.call(colorNames, match)) {\n return colorNames[match];\n } else {\n throw new Error('String cannot be parsed!');\n }\n });\n};\n\nexport function interpolateNumbers(\n value: number,\n inputRange: Array<number>,\n outputRange: Array<number | string>,\n extrapolateConfig?: ExtrapolateConfig\n) {\n const extrapolate = extrapolateConfig?.extrapolate;\n const extrapolateLeft = extrapolateConfig?.extrapolateLeft;\n const extrapolateRight = extrapolateConfig?.extrapolateRight;\n\n const narrowedInput = getNarrowedInput(value, inputRange, outputRange);\n\n let _extrapolateLeft: ExtrapolateType = 'extend';\n if (extrapolateLeft !== undefined) {\n _extrapolateLeft = extrapolateLeft;\n } else if (extrapolate !== undefined) {\n _extrapolateLeft = extrapolate;\n }\n\n let _extrapolateRight: ExtrapolateType = 'extend';\n if (extrapolateRight !== undefined) {\n _extrapolateRight = extrapolateRight;\n } else if (extrapolate !== undefined) {\n _extrapolateRight = extrapolate;\n }\n\n if (outputRange.length) {\n if (typeof outputRange[0] === 'number') {\n return interpolateValue(\n value,\n narrowedInput,\n _extrapolateLeft,\n _extrapolateRight\n );\n } else if (Array.isArray(outputRange[0])) {\n return _getArrayInterpolate(\n value,\n narrowedInput,\n _extrapolateLeft,\n _extrapolateRight\n );\n } else {\n const [inputMin, inputMax, outputMin, outputMax] = narrowedInput;\n\n const processedOutputMin = getProcessedColor(outputMin as string);\n const processedOutputMax = getProcessedColor(outputMax as string);\n\n let templateString = getTemplateString(processedOutputMin);\n\n if (stringMatched(processedOutputMin, processedOutputMax)) {\n const outputMinParsed = _getParsedStringArray(processedOutputMin);\n const outputMaxParsed = _getParsedStringArray(processedOutputMax);\n\n const result = _getArrayInterpolate(\n value,\n [inputMin, inputMax, outputMinParsed, outputMaxParsed],\n _extrapolateLeft,\n _extrapolateRight\n );\n\n for (const v of result) templateString = templateString.replace('$', v);\n return templateString;\n } else {\n throw new Error(\"Output range doesn't match string format!\");\n }\n }\n } else {\n throw new Error('Output range cannot be Empty');\n }\n}\n","import { FluidValue } from '@raidipesh78/re-motion';\n\nimport { interpolateNumbers } from './interpolateNumbers';\n\ntype ExtrapolateType = 'identity' | 'extend' | 'clamp';\n\ntype ExtrapolateConfig = {\n extrapolate?: ExtrapolateType;\n extrapolateLeft?: ExtrapolateType;\n extrapolateRight?: ExtrapolateType;\n};\n\ntype InterpolateReturnType<T> = T extends number\n ? number\n : ReturnType<FluidValue['interpolate']>;\n\nexport const interpolate = <T extends number | FluidValue>(\n value: T,\n inputRange: number[],\n outputRange: number[] | string[],\n extrapolateConfig?: ExtrapolateConfig\n): InterpolateReturnType<T> => {\n if (value instanceof FluidValue) {\n return value.interpolate(\n inputRange,\n outputRange,\n extrapolateConfig\n ) as InterpolateReturnType<T>;\n } else {\n return interpolateNumbers(\n value,\n inputRange,\n outputRange,\n extrapolateConfig\n ) as InterpolateReturnType<T>;\n }\n};\n\nexport const bInterpolate = <T extends number | FluidValue>(\n value: T,\n minOutput: number | string,\n maxOutput: number | string,\n extrapolateConfig?: ExtrapolateConfig\n) =>\n interpolate(\n value,\n [0, 1],\n [minOutput, maxOutput] as number[] | string[],\n extrapolateConfig\n );\n","import { Easing } from '@raidipesh78/re-motion';\n\nexport const AnimationConfig = {\n Timing: {\n BOUNCE: { duration: 500, easing: Easing.bounce },\n EASE_IN: { duration: 500, easing: Easing.in(Easing.ease) },\n EASE_OUT: { duration: 500, easing: Easing.out(Easing.ease) },\n EASE_IN_OUT: { duration: 500, easing: Easing.inOut(Easing.ease) },\n POWER1: { duration: 500, easing: Easing.bezier(0.17, 0.42, 0.51, 0.97) },\n POWER2: { duration: 500, easing: Easing.bezier(0.07, 0.11, 0.13, 1) },\n POWER3: { duration: 500, easing: Easing.bezier(0.09, 0.7, 0.16, 1.04) },\n POWER4: { duration: 500, easing: Easing.bezier(0.05, 0.54, 0, 1.03) },\n LINEAR: { duration: 500, easing: Easing.linear },\n },\n Spring: {\n ELASTIC: { mass: 1, friction: 18, tension: 250 },\n EASE: { mass: 1, friction: 26, tension: 170 },\n STIFF: { mass: 1, friction: 18, tension: 350 },\n WOBBLE: { mass: 1, friction: 8, tension: 250 },\n },\n};\n","import { FluidValue, spring } from '@raidipesh78/re-motion';\n\nimport { AnimationConfig } from '../helpers';\n\nimport type { WithCallbacks } from '../types';\n\ninterface WithSpringConfig extends WithCallbacks {\n mass?: number;\n friction?: number;\n tension?: number;\n}\n\nexport const withSpring =\n (\n toValue: number,\n config?: WithSpringConfig,\n callback?: (result: any) => void\n ) =>\n (value: FluidValue) => ({\n controller: spring(value, {\n toValue,\n ...AnimationConfig.Spring.ELASTIC,\n ...config,\n }),\n callback,\n });\n","import { FluidValue, native } from '@raidipesh78/re-motion';\n\nexport const withNative =\n (toValue: number | string, callback?: (result: any) => void) =>\n (value: FluidValue) => ({\n controller: native(value, {\n toValue,\n }),\n callback,\n });\n","import { withSpring } from './withSpring';\nimport { AnimationConfig } from '../helpers';\n\nimport type { WithCallbacks } from '../types';\n\ninterface WithEaseConfig extends WithCallbacks {}\n\nexport const withEase = (\n toValue: number,\n config?: WithEaseConfig,\n callback?: (result: any) => void\n) =>\n withSpring(toValue, { ...AnimationConfig.Spring.EASE, ...config }, callback);\n","import { withNative } from '../controllers';\nimport { ToValue } from '../types';\n\nexport function getToValue(val: string | number | ToValue): ToValue {\n if (typeof val === 'number' || typeof val === 'string') {\n return withNative(val);\n } else {\n return val;\n }\n}\n","import { useCallback, useRef } from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport { getToValue } from '../helpers';\n\nimport type { ToValue } from '../types';\n\nexport function useValue(initialValue: number | string) {\n const animation = useRef(new FluidValue(initialValue)).current;\n\n const updateValue = useCallback((to: number | string | ToValue) => {\n const { controller, callback } = getToValue(to)(animation);\n controller.start(callback);\n }, []);\n\n return {\n set value(to: number | string | ToValue) {\n updateValue(to);\n },\n get value(): FluidValue {\n return animation;\n },\n get currentValue() {\n return animation.get();\n },\n };\n}\n","import { useState, useLayoutEffect, useRef } from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport { withEase } from '../controllers';\nimport { useValue } from './useValue';\n\nimport type { ToValue } from '../types';\n\nexport interface UseMountConfig {\n from?: number;\n enter?: ToValue;\n exit?: ToValue;\n}\n\nexport const useMount = (state: boolean, config?: UseMountConfig) => {\n const [mounted, setMounted] = useState(state);\n const animationConfig = useRef({\n from: config?.from ?? 0,\n enter: config?.enter ?? withEase(1),\n exit: config?.exit ?? withEase(0),\n }).current;\n\n const animation = useValue(animationConfig.from);\n const enterAnimation = animationConfig.enter(animation.value);\n const exitAnimation = animationConfig.exit(animation.value);\n\n useLayoutEffect(() => {\n if (state) {\n setMounted(true);\n queueMicrotask(() => {\n enterAnimation.controller.start(enterAnimation.callback);\n });\n } else {\n queueMicrotask(() => {\n exitAnimation.controller.start((result: { finished: boolean }) => {\n exitAnimation.callback?.(result);\n if (result.finished) {\n setMounted(false);\n }\n });\n });\n }\n }, [state]);\n\n return function (\n fn: (animation: { value: FluidValue }, mounted: boolean) => React.ReactNode\n ) {\n return fn({ value: animation.value }, mounted);\n };\n};\n","type MouseEventType =\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mousemove'\n | 'mouseup'\n | 'touchstart'\n | 'touchmove'\n | 'touchend'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseout'\n | 'mouseover'\n | 'scroll'\n | 'wheel'\n | 'contextmenu';\n\ntype DomTargetTypes = Array<Window | Document | HTMLElement>;\n\n/**\n * Attach single document / window event / HTMLElement\n */\nfunction attachEvent(\n domTargets: DomTargetTypes,\n event: MouseEventType,\n callback: (e: any) => void,\n capture: any = false\n) {\n domTargets.forEach((target) => {\n target.addEventListener(event, callback, capture);\n });\n\n return function () {\n domTargets.forEach((target) => {\n target.removeEventListener(event, callback, capture);\n });\n };\n}\n\n/**\n * Attach multiple document / window event / HTMLElement\n */\nexport function attachEvents(\n domTargets: DomTargetTypes,\n events: Array<\n [event: MouseEventType, callback: (e: any) => void, capture?: any]\n >\n) {\n const subscribers = new Map();\n\n events.forEach(function ([event, callback, capture = false]) {\n subscribers.set(event, attachEvent(domTargets, event, callback, capture));\n });\n\n return function (eventKeys?: Array<string>) {\n for (const [eventKey, subscriber] of subscribers.entries()) {\n if (!eventKeys) {\n subscriber();\n return;\n }\n\n if (eventKeys.indexOf(eventKey) !== -1) {\n subscriber();\n }\n }\n };\n}\n","/**\n * bin(booleanValue)\n * returns 1 if booleanValue == true and 0 if booleanValue == false\n */\nexport function bin(bool: boolean) {\n return bool ? 1 : 0;\n}\n\n/**\n * mix(progress, a, b)\n * linear interpolation between a and b\n */\nexport function mix(perc: number, val1: number, val2: number) {\n return val1 * (1 - perc) + val2 * perc;\n}\n\n/**\n * clamp(value, min, max)\n * clamps value for min and max bounds\n */\nexport function clamp(value: number, lowerbound: number, upperbound: number) {\n return Math.min(Math.max(value, lowerbound), upperbound);\n}\n\nfunction rubber2(distanceFromEdge: number, constant: number) {\n return Math.pow(distanceFromEdge, constant * 5);\n}\n\nfunction rubber(distanceFromEdge: number, dimension: number, constant: number) {\n if (dimension === 0 || Math.abs(dimension) === Infinity)\n return rubber2(distanceFromEdge, constant);\n return (\n (distanceFromEdge * dimension * constant) /\n (dimension + constant * distanceFromEdge)\n );\n}\n\n/**\n * rubberClamp(value, min, max, constant?)\n * constant is optional : default 0.15\n * clamps the value for min and max value and\n * extends beyond min and max values with constant\n * factor to create elastic rubber band effect\n */\nexport function rubberClamp(\n value: number,\n lowerbound: number,\n upperbound: number,\n constant: number = 0.15\n) {\n if (constant === 0) return clamp(value, lowerbound, upperbound);\n\n if (value < lowerbound) {\n return (\n -rubber(lowerbound - value, upperbound - lowerbound, constant) +\n lowerbound\n );\n }\n\n if (value > upperbound) {\n return (\n +rubber(value - upperbound, upperbound - lowerbound, constant) +\n upperbound\n );\n }\n\n return value;\n}\n\n/**\n * snapTo(value, velocity, snapPoints[])\n * Calculates the final snapPoint according to given current value,\n * velocity and snapPoints array\n */\nexport function snapTo(\n value: number,\n velocity: number,\n snapPoints: Array<number>\n): number {\n const finalValue = value + velocity * 0.2;\n const getDiff = (point: number) => Math.abs(point - finalValue);\n const deltas = snapPoints.map(getDiff);\n const minDelta = Math.min(...deltas);\n\n return snapPoints.reduce(function (acc, point) {\n if (getDiff(point) === minDelta) {\n return point;\n } else {\n return acc;\n }\n });\n}\n\n/**\n * move(array, moveIndex, toIndex)\n * move array item from moveIndex to toIndex without array modification\n */\nexport function move(array: Array<any>, moveIndex: number, toIndex: number) {\n const item = array[moveIndex];\n const length = array.length;\n const diff = moveIndex - toIndex;\n\n if (diff > 0) {\n return [\n ...array.slice(0, toIndex),\n item,\n ...array.slice(toIndex, moveIndex),\n ...array.slice(moveIndex + 1, length),\n ];\n } else if (diff < 0) {\n const targetIndex = toIndex + 1;\n return [\n ...array.slice(0, moveIndex),\n ...array.slice(moveIndex + 1, targetIndex),\n item,\n ...array.slice(targetIndex, length),\n ];\n }\n return array;\n}\n","export const withDefault = (x: number, y: number) => {\n return { x, y };\n};\n","export class Gesture {\n currentIndex?: number;\n lastTimeStamp: number = Date.now();\n isActive: boolean = false;\n targetElement?: HTMLElement; // represents the bounded element\n targetElements: Array<HTMLElement> = []; // represents the bounded elements\n config?: any;\n callback?: <T>(event: T) => void;\n _subscribe?: (eventKeys?: Array<string>) => void;\n static _VELOCITY_LIMIT: number = 20;\n\n // it must be overridden by other child classes\n _initEvents() {}\n\n // cancel events\n // we only canceled down and move events because mouse up\n // will not be triggered\n _cancelEvents() {\n if (this._subscribe) {\n this._subscribe();\n }\n }\n\n // re-apply new callback\n applyCallback(callback: <T>(event: T) => void) {\n this.callback = callback;\n }\n\n // apply gesture\n applyGesture({\n targetElement,\n targetElements,\n callback,\n config,\n }: {\n targetElement?: any;\n targetElements?: any;\n callback: <T>(event: T) => void;\n config?: any;\n }) {\n this.targetElement = targetElement;\n this.targetElements = targetElements.map(\n (element: { current: any }) => element.current\n );\n this.callback = callback;\n this.config = config;\n\n // initialize events\n this._initEvents();\n\n // unbind\n return () => this._subscribe && this._subscribe();\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nimport type { Vector2 } from '../types';\n\nexport class DragGesture extends Gesture {\n movementStart: Vector2 = withDefault(0, 0);\n initialMovement: Vector2 = withDefault(0, 0);\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n translation: Vector2 = withDefault(0, 0);\n offset: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement || this.targetElements.length > 0) {\n this._subscribe = attachEvents(\n [window],\n [\n ['mousedown', this.pointerDown.bind(this)],\n ['mousemove', this.pointerMove.bind(this)],\n ['mouseup', this.pointerUp.bind(this)],\n ['touchstart', this.pointerDown.bind(this), { passive: false }],\n ['touchmove', this.pointerMove.bind(this), { passive: false }],\n ['touchend', this.pointerUp.bind(this)],\n ]\n );\n }\n }\n\n // @override - cancel events\n // we only canceled down and move events because mouse up\n // will not be triggered\n _cancelEvents() {\n if (this._subscribe) {\n this._subscribe(['mousedown', 'mousemove', 'touchstart', 'touchmove']);\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n args: [this.currentIndex],\n down: this.isActive,\n movementX: this.movement.x,\n movementY: this.movement.y,\n offsetX: this.translation.x,\n offsetY: this.translation.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n distanceX: Math.abs(this.movement.x),\n distanceY: Math.abs(this.movement.y),\n directionX: Math.sign(this.movement.x),\n directionY: Math.sign(this.movement.y),\n cancel: () => {\n this._cancelEvents();\n },\n });\n }\n }\n\n pointerDown(e: any) {\n if (e.type === 'touchstart') {\n this.movementStart = {\n x: e.touches[0].clientX,\n y: e.touches[0].clientY,\n };\n } else {\n this.movementStart = { x: e.clientX, y: e.clientY };\n }\n\n this.movement = { x: 0, y: 0 };\n this.offset = { x: this.translation.x, y: this.translation.y };\n this.previousMovement = { x: 0, y: 0 };\n this.velocity = { x: 0, y: 0 };\n\n // find current selected element\n const currElem = this.targetElements.find((elem: any) => elem === e.target);\n\n if (e.target === this.targetElement || currElem) {\n this.isActive = true;\n e.preventDefault();\n\n // set args\n if (currElem) {\n this.currentIndex = this.targetElements.indexOf(currElem);\n }\n\n // if initial function is defined then call it to get initial movementX and movementY\n // if only select to bounded draggable element\n const initial = this.config?.initial && this.config.initial();\n const initialMovementX = initial?.movementX;\n const initialMovementY = initial?.movementY;\n\n this.initialMovement = {\n x: initialMovementX ?? 0,\n y: initialMovementY ?? 0,\n };\n\n this.movement = {\n x: this.initialMovement.x,\n y: this.initialMovement.y,\n };\n\n this.previousMovement = {\n x: this.initialMovement.x,\n y: this.initialMovement.y,\n };\n\n this._handleCallback();\n }\n }\n\n pointerMove(e: any) {\n if (this.isActive) {\n e.preventDefault();\n const now = Date.now();\n const deltaTime = clamp(now - this.lastTimeStamp, 0.1, 64);\n this.lastTimeStamp = now;\n\n const t = deltaTime / 1000;\n\n if (e.type === 'touchmove') {\n this.movement = {\n x:\n this.initialMovement.x +\n (e.touches[0].clientX - this.movementStart.x),\n y:\n this.initialMovement.y +\n (e.touches[0].clientY - this.movementStart.y),\n };\n } else {\n this.movement = {\n x: this.initialMovement.x + (e.clientX - this.movementStart.x),\n y: this.initialMovement.y + (e.clientY - this.movementStart.y),\n };\n }\n\n this.translation = {\n x: this.offset.x + this.movement.x,\n y: this.offset.y + this.movement.y,\n };\n\n this.velocity = {\n x: clamp(\n (this.movement.x - this.previousMovement.x) / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n (this.movement.y - this.previousMovement.y) / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n }\n\n pointerUp() {\n if (this.isActive) {\n this.isActive = false;\n this._handleCallback();\n this._cancelEvents();\n this._initEvents();\n }\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nexport class MouseMoveGesture extends Gesture {\n event?: MouseEvent;\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['mousemove', this.onMouseMove.bind(this)]]\n );\n } else if (this.targetElements.length > 0) {\n this._subscribe = attachEvents(this.targetElements, [\n ['mousemove', this.onMouseMove.bind(this)],\n ]);\n } else {\n this._subscribe = attachEvents(\n [window],\n [['mousemove', this.onMouseMove.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n args: [this.currentIndex],\n event: this.event,\n isMoving: this.isActive,\n target: this.event?.target,\n mouseX: this.movement.x,\n mouseY: this.movement.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n });\n }\n }\n\n onMouseMove(e: MouseEvent) {\n // find current selected element\n const currElem = this.targetElements.find((elem: any) => elem === e.target);\n\n // set args\n if (currElem) {\n this.currentIndex = this.targetElements.indexOf(currElem);\n }\n\n this.event = e;\n\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n const x = e.clientX;\n const y = e.clientY;\n\n this.movement = { x, y };\n\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.direction = { x: 0, y: 0 };\n this.velocity = { x: 0, y: 0 };\n\n this._handleCallback();\n }, 250); // Debounce 250 milliseconds\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = { x: this.movement.x, y: this.movement.y };\n\n this._handleCallback();\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nexport class ScrollGesture extends Gesture {\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['scroll', this.scrollElementListener.bind(this)]]\n );\n } else {\n this._subscribe = attachEvents(\n [window],\n [['scroll', this.scrollListener.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n isScrolling: this.isActive,\n scrollX: this.movement.x,\n scrollY: this.movement.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n });\n }\n }\n\n onScroll({ x, y }: Vector2) {\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n this.movement = { x, y };\n\n // Clear if scrolling\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.direction = { x: 0, y: 0 };\n\n // Reset Velocity\n this.velocity = { x: 0, y: 0 };\n\n this._handleCallback(); // Debounce 250milliseconds\n }, 250);\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n\n scrollListener() {\n const { pageYOffset: y, pageXOffset: x } = window;\n this.onScroll({ x, y });\n }\n\n scrollElementListener() {\n const x = this.targetElement?.scrollLeft || 0;\n const y = this.targetElement?.scrollTop || 0;\n this.onScroll({ x, y });\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nconst LINE_HEIGHT = 40;\nconst PAGE_HEIGHT = 800;\n\nexport class WheelGesture extends Gesture {\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n delta: Vector2 = withDefault(0, 0);\n\n // Holds offsets\n offset: Vector2 = withDefault(0, 0);\n translation: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['wheel', this.onWheel.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n target: this.targetElement,\n isWheeling: this.isActive,\n deltaX: this.delta.x,\n deltaY: this.delta.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n movementX: this.movement.x,\n movementY: this.movement.y,\n offsetX: this.offset.x,\n offsetY: this.offset.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n });\n }\n }\n\n onWheel(event: WheelEvent) {\n let { deltaX, deltaY, deltaMode } = event;\n\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n this.isActive = true;\n\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.translation = { x: this.offset.x, y: this.offset.y };\n this._handleCallback();\n\n this.velocity = { x: 0, y: 0 }; // Reset Velocity\n this.movement = { x: 0, y: 0 };\n }, 200);\n\n // normalize wheel values, especially for Firefox\n if (deltaMode === 1) {\n deltaX *= LINE_HEIGHT;\n deltaY *= LINE_HEIGHT;\n } else if (deltaMode === 2) {\n deltaX *= PAGE_HEIGHT;\n deltaY *= PAGE_HEIGHT;\n }\n\n this.delta = { x: deltaX, y: deltaY };\n this.movement = {\n x: this.movement.x + deltaX,\n y: this.movement.y + deltaY,\n };\n this.offset = {\n x: this.translation.x + this.movement.x,\n y: this.translation.y + this.movement.y,\n };\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\ntype UseRecognizerHandlerType = Array<\n [\n key: 'drag' | 'wheel' | 'move' | 'scroll',\n gesture: any,\n callback: any,\n config?: any\n ]\n>;\n\nexport const useRecognizer = (handlers: UseRecognizerHandlerType) => {\n const ref = React.useRef<any>();\n const elementRefs = React.useRef<Array<any>>([]);\n const subscribers = React.useRef<\n Map<string, { keyIndex: number; gesture: any; unsubscribe: any }>\n >(new Map()).current;\n\n // re-initiate callback on change\n React.useEffect(() => {\n for (let [, { keyIndex, gesture }] of subscribers.entries()) {\n const [, , callback] = handlers[keyIndex];\n gesture.applyCallback(callback);\n }\n }, [handlers]);\n\n React.useEffect(() => {\n handlers.forEach(([key, gesture, callback, config], keyIndex) => {\n queueMicrotask(() =>\n subscribers.set(key, {\n keyIndex,\n gesture,\n unsubscribe: gesture.applyGesture({\n targetElement: ref.current,\n targetElements: elementRefs.current,\n callback,\n config,\n }),\n })\n );\n });\n\n return () => {\n for (let [, { unsubscribe }] of subscribers.entries()) {\n unsubscribe && unsubscribe();\n }\n };\n });\n\n return (index?: number) => {\n if (index === null || index === undefined) {\n return { ref };\n } else {\n elementRefs.current[index] =\n elementRefs.current[index] || React.createRef();\n\n return { ref: elementRefs.current[index] };\n }\n };\n};\n","import { ReactNode } from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport { useMount, type UseMountConfig } from '../hooks';\n\ninterface MountedBlockProps extends Partial<UseMountConfig> {\n state: boolean;\n children: (animation: { value: FluidValue }) => ReactNode;\n}\n\nexport const MountedBlock = ({\n state,\n children,\n from,\n enter,\n exit,\n}: MountedBlockProps) => {\n const open = useMount(state, { from, enter, exit });\n\n return (\n <>\n {open(\n (animation, mounted) => mounted && children({ value: animation.value })\n )}\n </>\n );\n};\n","import { ReactNode, useRef, useLayoutEffect } from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport { useValue } from '../hooks';\nimport { withEase } from '../controllers';\n\ninterface ScrollableBlockProps {\n children?: (animation: { value: FluidValue }) => ReactNode;\n direction?: 'single' | 'both';\n threshold?: number;\n}\n\nexport const ScrollableBlock = (props: ScrollableBlockProps) => {\n const { children, direction = 'single', threshold = 0.2 } = props;\n const scrollableBlockRef = useRef<HTMLDivElement>(null);\n const animation = useValue(0); // 0: not intersecting | 1: intersecting\n\n useLayoutEffect(() => {\n const _scrollableBlock = scrollableBlockRef.current;\n\n const observer = new IntersectionObserver(\n function ([entry]) {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n animation.value = withEase(1);\n } else {\n if (direction === 'both') animation.value = withEase(0);\n }\n },\n {\n root: null, // FOR VIEWPORT ONLY\n threshold,\n }\n );\n\n if (_scrollableBlock) {\n observer.observe(_scrollableBlock);\n }\n\n return () => {\n if (_scrollableBlock) {\n observer.unobserve(_scrollableBlock);\n }\n };\n }, []);\n\n return (\n <div ref={scrollableBlockRef}>\n {children && children({ value: animation.value })}\n </div>\n );\n};\n","import * as React from 'react';\n\nimport { DragEventType, UseDragConfig } from '../types';\nimport { DragGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useDrag(\n callback: (event: DragEventType) => void,\n config?: UseDragConfig\n) {\n const gesture = React.useRef(new DragGesture()).current;\n\n return useRecognizer([['drag', gesture, callback, config]]);\n}\n","import * as React from 'react';\nimport {\n DragGesture,\n MouseMoveGesture,\n ScrollGesture,\n WheelGesture,\n} from '../controllers';\nimport {\n DragEventType,\n WheelEventType,\n ScrollEventType,\n MouseMoveEventType,\n} from '../types';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useGesture({\n onDrag,\n onWheel,\n onScroll,\n onMouseMove,\n}: {\n onDrag?: (event: DragEventType) => void;\n onWheel?: (event: WheelEventType) => void;\n onScroll?: (event: ScrollEventType) => void;\n onMouseMove?: (event: MouseMoveEventType) => void;\n}) {\n const dragGesture = React.useRef(new DragGesture()).current;\n const wheelGesture = React.useRef(new WheelGesture()).current;\n const scrollGesture = React.useRef(new ScrollGesture()).current;\n const mouseMoveGesture = React.useRef(new MouseMoveGesture()).current;\n\n return useRecognizer([\n ['drag', dragGesture, onDrag],\n ['wheel', wheelGesture, onWheel],\n ['scroll', scrollGesture, onScroll],\n ['move', mouseMoveGesture, onMouseMove],\n ]);\n}\n","import { useRef, useEffect, DependencyList, createRef } from 'react';\n\ntype MeasurementValue = number | Array<number>;\n\ntype MeasurementType = {\n left: MeasurementValue;\n top: MeasurementValue;\n width: MeasurementValue;\n height: MeasurementValue;\n vLeft: MeasurementValue;\n vTop: MeasurementValue;\n};\n\nexport function useMeasure(\n callback: (event: MeasurementType) => void,\n deps?: DependencyList\n) {\n const ref = useRef(null);\n const elementRefs = useRef([]);\n const callbackRef = useRef<(event: MeasurementType) => void>(callback);\n\n // Re-initiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const _refElement = ref.current || document.documentElement;\n const _refElementsMultiple = elementRefs.current;\n\n const resizeObserver = new ResizeObserver(([entry]) => {\n const { left, top, width, height } = entry.target.getBoundingClientRect();\n const { pageXOffset, pageYOffset } = window;\n\n if (callbackRef) {\n if (_refElement === document.documentElement) {\n return; // no-op for document\n } else {\n callbackRef.current({\n left: left + pageXOffset,\n top: top + pageYOffset,\n width,\n height,\n vLeft: left,\n vTop: top,\n });\n }\n }\n });\n\n const resizeObserverMultiple = new ResizeObserver((entries) => {\n const left: Array<number> = [];\n const top: Array<number> = [];\n const width: Array<number> = [];\n const height: Array<number> = [];\n const vLeft: Array<number> = [];\n const vTop: Array<number> = [];\n\n entries.forEach((entry) => {\n const {\n left: _left,\n top: _top,\n width: _width,\n height: _height,\n } = entry.target.getBoundingClientRect();\n const { pageXOffset, pageYOffset } = window;\n const _pageLeft = _left + pageXOffset;\n const _pageTop = _top + pageYOffset;\n\n left.push(_pageLeft);\n top.push(_pageTop);\n width.push(_width);\n height.push(_height);\n vLeft.push(_left);\n vTop.push(_top);\n });\n\n if (callbackRef) {\n callbackRef.current({\n left,\n top,\n width,\n height,\n vLeft,\n vTop,\n });\n }\n });\n\n if (_refElement) {\n if (\n _refElement === document.documentElement &&\n _refElementsMultiple.length > 0\n ) {\n _refElementsMultiple.forEach((element: any) => {\n resizeObserverMultiple.observe(element.current);\n });\n } else {\n resizeObserver.observe(_refElement);\n }\n }\n\n return () => {\n if (_refElement) {\n if (\n _refElement === document.documentElement &&\n _refElementsMultiple.length > 0\n ) {\n _refElementsMultiple.forEach((element: any) => {\n resizeObserverMultiple.unobserve(element.current);\n });\n } else {\n resizeObserver.unobserve(_refElement);\n }\n }\n };\n }, []);\n\n return (index?: number) => {\n if (index === null || index === undefined) {\n return { ref };\n } else {\n elementRefs.current[index] = elementRefs.current[index] || createRef();\n\n return { ref: elementRefs.current[index] };\n }\n }; // ...bind() or ...bind(index) for multiple\n}\n","import * as React from 'react';\n\nimport { MouseMoveEventType } from '../types';\nimport { MouseMoveGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useMouseMove(callback: (event: MouseMoveEventType) => void) {\n const gesture = React.useRef(new MouseMoveGesture()).current;\n\n return useRecognizer([['move', gesture, callback]]);\n}\n","import { useRef, useEffect, RefObject, DependencyList } from 'react';\n\nimport { attachEvents } from '../gestures/helpers/eventAttacher';\n\nexport function useOutsideClick(\n elementRef: RefObject<HTMLElement>,\n callback: (event: MouseEvent) => void,\n deps?: DependencyList\n) {\n const callbackRef = useRef<(event: MouseEvent) => void>();\n\n if (!callbackRef.current) {\n callbackRef.current = callback;\n }\n\n // Re-initiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const handleOutsideClick = (e: MouseEvent) => {\n const target = e.target as Node;\n\n if (!target || !target.isConnected) {\n return;\n }\n\n const isOutside =\n elementRef.current && !elementRef.current.contains(target);\n\n if (isOutside) {\n callbackRef.current && callbackRef.current(e);\n }\n };\n\n const subscribe = attachEvents(\n [document],\n [['mousedown', handleOutsideClick]]\n );\n\n return () => subscribe && subscribe();\n }, []);\n}\n","import * as React from 'react';\n\nimport { ScrollEventType } from '../types';\nimport { ScrollGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useScroll(callback: (event: ScrollEventType) => void) {\n const gesture = React.useRef(new ScrollGesture()).current;\n\n return useRecognizer([['scroll', gesture, callback]]);\n}\n","import { useCallback, useRef } from 'react';\nimport { FluidValue } from '@raidipesh78/re-motion';\n\nimport type { ToValue } from '../types';\nimport { getToValue } from '../helpers';\n\nexport function useValues(initialValue: number[] | string[]) {\n const animations = useRef(\n initialValue.map((val) => new FluidValue(val))\n ).current;\n\n const updateValue = useCallback((to: number[] | string[] | ToValue[]) => {\n to.forEach((fn, index) => {\n const { controller, callback } = getToValue(fn)(animations[index]);\n controller.start(callback);\n });\n }, []);\n\n return {\n set value(to: number[] | string[] | ToValue[]) {\n updateValue(to);\n },\n get value(): FluidValue[] {\n return animations;\n },\n get currentValue() {\n return animations.map((animation) => animation.get());\n },\n };\n}\n","import * as React from 'react';\n\nimport { WheelEventType } from '../types';\nimport { WheelGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useWheel(callback: (event: WheelEventType) => void) {\n const gesture = React.useRef(new WheelGesture()).current;\n\n return useRecognizer([['wheel', gesture, callback]]);\n}\n","import { useRef, useEffect, DependencyList } from 'react';\n\ntype WindowDimensionType = {\n width: number;\n height: number;\n innerWidth: number;\n innerHeight: number;\n};\n\nexport function useWindowDimension(\n callback: (event: WindowDimensionType) => void,\n deps?: DependencyList\n) {\n const windowDimensionsRef = useRef<WindowDimensionType>({\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n });\n const callbackRef = useRef<(event: WindowDimensionType) => void>(callback);\n\n const handleCallback: () => void = () => {\n if (callbackRef) {\n callbackRef.current({\n ...windowDimensionsRef.current,\n });\n }\n };\n\n // Re-initiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver(([entry]) => {\n const { clientWidth, clientHeight } = entry.target;\n const { innerWidth, innerHeight } = window;\n\n windowDimensionsRef.current = {\n width: clientWidth,\n height: clientHeight,\n innerWidth,\n innerHeight,\n };\n\n handleCallback();\n });\n\n resizeObserver.observe(document.documentElement);\n\n return () => resizeObserver.unobserve(document.documentElement);\n }, []);\n}\n","import { FluidValue, decay } from '@raidipesh78/re-motion';\n\nimport type { WithCallbacks } from '../types';\n\ninterface WithDecayConfig extends WithCallbacks {\n velocity?: number;\n deceleration?: number;\n}\n\nexport const withDecay =\n (config?: WithDecayConfig, callback?: (result: any) => void) =>\n (value: FluidValue) => ({\n controller: decay(value, { ...config }),\n callback,\n });\n","import { delay } from '@raidipesh78/re-motion';\n\nexport const withDelay =\n (ms: number, callback?: (result: any) => void) => () => ({\n controller: delay(ms),\n callback,\n });\n","import { FluidValue, loop } from '@raidipesh78/re-motion';\n\nexport const withLoop =\n (\n animations: (value: FluidValue) => {\n controller: ReturnType<typeof loop>;\n callback?: (result: any) => void;\n },\n iterations: number,\n callback?: (result: any) => void\n ) =>\n (value: FluidValue) => ({\n controller: loop(animations(value).controller, { iterations }),\n callback,\n });\n","import { FluidValue, sequence } from '@raidipesh78/re-motion';\n\nexport const withSequence =\n (\n animations: Array<\n (value: FluidValue) => {\n controller: ReturnType<typeof sequence>;\n callback?: (result: any) => void;\n }\n >,\n callback?: (result: any) => void\n ) =>\n (value: FluidValue) => ({\n controller: sequence(animations.map((a) => a(value).controller)),\n callback,\n });\n","import { FluidValue, timing } from '@raidipesh78/re-motion';\n\nimport type { WithCallbacks } from '../types';\n\ninterface WithTimingConfig extends WithCallbacks {\n duration?: number;\n easing?: (t: number) => number;\n}\n\nexport const withTiming =\n (\n toValue: number,\n config?: WithTimingConfig,\n callback?: (result: any) => void\n ) =>\n (value: FluidValue) => ({\n controller: timing(value, {\n toValue,\n duration: config?.duration,\n easing: config?.easing,\n onStart: config?.onStart,\n onChange: config?.onChange,\n onRest: config?.onRest,\n }),\n callback,\n });\n"],"names":["COLOR_NUMBER_REGEX","HEX_NAME_COLOR","colorNames","transparent","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","hexToRgba","hex","hex6","replace","_","r","g","b","conv3to6","hex8","length","conv6to8","hexRgba","exec","parseInt","a","rgbaToHex","rgba","toString","slice","interpolateValue","val","arr","extrapolateLeft","extrapolateRight","_a","__read","inputMin","inputMax","outputMin","outputMax","result","Infinity","_getArrayInterpolate","value","narrowedInput","_extrapolateLeft","_extrapolateRight","map","index","outputMinProcessed","outputMaxProcessed","interpolateColor","Error","getTemplateString","str","_getParsedStringArray","match","v","indexOf","Number","getProcessedColor","Object","prototype","hasOwnProperty","call","interpolateNumbers","inputRange","outputRange","extrapolateConfig","extrapolate","x","input","output","i","getNarrowedInput","undefined","str2","Array","isArray","_b","processedOutputMin","processedOutputMax","templateString","trim","outputMinParsed","outputMaxParsed","result_1","__values","result_1_1","next","done","interpolate","FluidValue","AnimationConfig","Timing","BOUNCE","duration","easing","Easing","bounce","EASE_IN","in","ease","EASE_OUT","out","EASE_IN_OUT","inOut","POWER1","bezier","POWER2","POWER3","POWER4","LINEAR","linear","Spring","ELASTIC","mass","friction","tension","EASE","STIFF","WOBBLE","withSpring","toValue","config","callback","controller","spring","withNative","native","withEase","__assign","getToValue","useValue","initialValue","animation","useRef","current","updateValue","useCallback","to","start","currentValue","get","useMount","state","_d","useState","mounted","setMounted","animationConfig","from","enter","exit","_c","enterAnimation","exitAnimation","useLayoutEffect","queueMicrotask","finished","fn","attachEvents","domTargets","events","subscribers","Map","forEach","event","capture","set","target","addEventListener","removeEventListener","attachEvent","eventKeys","entries","eventKey","subscriber","clamp","lowerbound","upperbound","Math","min","max","rubber","distanceFromEdge","dimension","constant","abs","pow","rubber2","withDefault","y","Gesture","this","lastTimeStamp","Date","now","isActive","targetElements","_initEvents","_cancelEvents","_subscribe","applyCallback","applyGesture","_this","targetElement","element","_VELOCITY_LIMIT","DragGesture","_super","movementStart","initialMovement","movement","previousMovement","translation","offset","velocity","__extends","window","pointerDown","bind","pointerMove","pointerUp","passive","_handleCallback","args","currentIndex","down","movementX","movementY","offsetX","offsetY","velocityX","velocityY","distanceX","distanceY","directionX","sign","directionY","cancel","e","type","touches","clientX","clientY","currElem","find","elem","preventDefault","initial","initialMovementX","initialMovementY","deltaTime","t","MouseMoveGesture","direction","onMouseMove","isMoving","mouseX","mouseY","isActiveID","clearTimeout","setTimeout","diffX","diffY","ScrollGesture","scrollElementListener","scrollListener","isScrolling","scrollX","scrollY","onScroll","pageYOffset","pageXOffset","scrollLeft","scrollTop","WheelGesture","delta","onWheel","isWheeling","deltaX","deltaY","deltaMode","useRecognizer","handlers","ref","React","elementRefs","useEffect","_e","keyIndex","gesture","key","unsubscribe","createRef","children","open","_jsx","_Fragment","props","threshold","scrollableBlockRef","_scrollableBlock","observer","IntersectionObserver","isIntersecting","root","observe","unobserve","minOutput","maxOutput","bool","perc","val1","val2","array","moveIndex","toIndex","item","diff","__spreadArray","targetIndex","snapPoints","finalValue","getDiff","point","deltas","minDelta","reduce","acc","onDrag","dragGesture","wheelGesture","scrollGesture","mouseMoveGesture","deps","callbackRef","_refElement","document","documentElement","_refElementsMultiple","resizeObserver","ResizeObserver","getBoundingClientRect","left","top","width","height","vLeft","vTop","resizeObserverMultiple","entry","_left","_top","_width","_height","_pageLeft","_pageTop","push","elementRef","subscribe","isConnected","contains","animations","windowDimensionsRef","innerWidth","innerHeight","clientWidth","clientHeight","decay","ms","delay","iterations","loop","sequence","timing","onStart","onChange","onRest"],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "react-ui-animate",
3
- "version": "4.1.1",
3
+ "version": "4.2.0",
4
4
  "description": "React library for gestures and animation",
5
5
  "main": "dist/index.js",
6
6
  "peerDependencies": {
7
7
  "react": ">=16.8.0 || >=17.0.0 || >=18.0.0"
8
8
  },
9
9
  "dependencies": {
10
- "@raidipesh78/re-motion": "^4.1.0"
10
+ "@raidipesh78/re-motion": "^4.2.1"
11
11
  },
12
12
  "devDependencies": {
13
13
  "@rollup/plugin-terser": "^0.4.4",
@@ -20,15 +20,15 @@
20
20
  "babel-runtime": "^6.26.0",
21
21
  "react": "^18.3.1",
22
22
  "react-dom": "^18.3.1",
23
+ "rimraf": "^6.0.1",
23
24
  "rollup": "^4.18.0",
24
25
  "rollup-plugin-typescript2": "^0.36.0",
25
26
  "typescript": "^5.5.2"
26
27
  },
27
28
  "scripts": {
28
- "dev:start": "pm2 start ecosystem.config.js",
29
- "dev:end": "pm2 stop ecosystem.config.js",
30
- "build": "rollup -c",
31
- "start": "rollup -c -w",
29
+ "clean": "rimraf -rf dist",
30
+ "build": "npm run clean && rollup -c",
31
+ "start": "npm run clean && rollup -c -w",
32
32
  "test": "echo \"Error: no test specified\" && exit 1",
33
33
  "version:minor": "npm version --no-git-tag-version minor",
34
34
  "version:major": "npm version --no-git-tag-version major",
@@ -1,5 +0,0 @@
1
- import type { UseValueConfig } from '../hooks';
2
- import type { UpdateValue } from '../core/FluidController';
3
- export interface WithOnCallbacks extends Pick<UseValueConfig, 'onRest' | 'onStart' | 'onChange'> {
4
- }
5
- export declare const withConfig: (toValue: number, config?: UseValueConfig) => UpdateValue;
@@ -1,7 +0,0 @@
1
- import type { UpdateValue, UseFluidValueConfig } from './FluidController';
2
- export declare class FluidArrayController {
3
- private fluidControllers;
4
- constructor(values: number[] | string[], config?: UseFluidValueConfig);
5
- setFluid(updateValue: Array<UpdateValue | UpdateValue[]>, callback?: () => void): void;
6
- getFluid(): import("@raidipesh78/re-motion").FluidValue[];
7
- }