#include namespace reanimated::css { std::shared_ptr createStyleInterpolator( jsi::Runtime &rt, const jsi::Object &config, const std::string &componentName, const std::shared_ptr &viewStylesRepository) { return std::make_shared( rt, config.getProperty(rt, "keyframesStyle"), componentName, viewStylesRepository); } std::shared_ptr getKeyframeTimingFunctions( jsi::Runtime &rt, const jsi::Object &config) { KeyframeEasingFunctions result; const auto &keyframeTimingFunctions = config.getProperty(rt, "keyframeTimingFunctions").asObject(rt); const auto timingFunctionOffsets = keyframeTimingFunctions.getPropertyNames(rt); const auto timingFunctionsCount = timingFunctionOffsets.size(rt); for (size_t i = 0; i < timingFunctionsCount; ++i) { const auto offset = timingFunctionOffsets.getValueAtIndex(rt, i).asString(rt).utf8(rt); const auto easingFunction = createEasingFunction( rt, keyframeTimingFunctions.getProperty(rt, offset.c_str())); result[std::stod(offset)] = easingFunction; } return std::make_shared(result); } CSSKeyframesConfig parseCSSAnimationKeyframesConfig( jsi::Runtime &rt, const jsi::Value &config, const std::string &componentName, const std::shared_ptr &viewStylesRepository) { const auto &configObj = config.asObject(rt); return { createStyleInterpolator( rt, configObj, componentName, viewStylesRepository), getKeyframeTimingFunctions(rt, configObj)}; } } // namespace reanimated::css