react-native-reanimated
Version:
More powerful alternative to Animated library for React Native.
213 lines (166 loc) • 7.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.checkPluginState = void 0;
exports.configureLayoutAnimations = configureLayoutAnimations;
exports.configureProps = configureProps;
exports.enableLayoutAnimations = enableLayoutAnimations;
exports.getViewProp = getViewProp;
exports.makeShareable = exports.makeRemote = exports.makeMutable = exports.isConfiguredCheck = exports.isConfigured = void 0;
exports.registerEventHandler = registerEventHandler;
exports.registerSensor = registerSensor;
Object.defineProperty(exports, "runOnJS", {
enumerable: true,
get: function () {
return _threads.runOnJS;
}
});
Object.defineProperty(exports, "runOnUI", {
enumerable: true,
get: function () {
return _threads.runOnUI;
}
});
exports.startMapper = void 0;
Object.defineProperty(exports, "stopMapper", {
enumerable: true,
get: function () {
return _mappers.stopMapper;
}
});
exports.subscribeForKeyboardEvents = subscribeForKeyboardEvents;
exports.unregisterEventHandler = unregisterEventHandler;
exports.unregisterSensor = unregisterSensor;
exports.unsubscribeFromKeyboardEvents = unsubscribeFromKeyboardEvents;
var _NativeReanimated = _interopRequireDefault(require("./NativeReanimated"));
var _PlatformChecker = require("./PlatformChecker");
var _shareables = require("./shareables");
var _mappers = require("./mappers");
var _mutables = require("./mutables");
var _initializers = require("./initializers");
var _threads = require("./threads");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const testWorklet = () => {
'worklet';
};
const throwUninitializedReanimatedException = () => {
throw new Error("Failed to initialize react-native-reanimated library, make sure you followed installation steps here: https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/installation/ \n1) Make sure reanimated's babel plugin is installed in your babel.config.js (you should have 'react-native-reanimated/plugin' listed there - also see the above link for details) \n2) Make sure you reset build cache after updating the config, run: yarn start --reset-cache");
};
const checkPluginState = function () {
let throwError = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
if (!testWorklet.__workletHash && !(0, _PlatformChecker.shouldBeUseWeb)()) {
if (throwError) {
throwUninitializedReanimatedException();
}
return false;
}
return true;
};
exports.checkPluginState = checkPluginState;
const isConfigured = function () {
let throwError = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
return checkPluginState(throwError);
};
exports.isConfigured = isConfigured;
const isConfiguredCheck = () => {
checkPluginState(true);
};
exports.isConfiguredCheck = isConfiguredCheck;
const configurationCheckWrapper = __DEV__ ? fn => {
return function () {
isConfigured(true);
return fn(...arguments);
};
} : fn => fn;
const startMapper = __DEV__ ? configurationCheckWrapper(_mappers.startMapper) : _mappers.startMapper;
exports.startMapper = startMapper;
const makeShareable = __DEV__ ? configurationCheckWrapper(_shareables.makeShareable) : _shareables.makeShareable;
exports.makeShareable = makeShareable;
const makeMutable = __DEV__ ? configurationCheckWrapper(_mutables.makeMutable) : _mutables.makeMutable;
exports.makeMutable = makeMutable;
const makeRemote = __DEV__ ? configurationCheckWrapper(_mutables.makeRemote) : _mutables.makeRemote;
exports.makeRemote = makeRemote;
global._WORKLET = false;
global._log = function (s) {
console.log(s);
};
function getViewProp(viewTag, propName) {
if (global._IS_FABRIC) {
throw new Error('[react-native-reanimated] `getViewProp` is not supported on Fabric yet');
}
return new Promise((resolve, reject) => {
return _NativeReanimated.default.getViewProp(viewTag, propName, result => {
if (typeof result === 'string' && result.substr(0, 6) === 'error:') {
reject(result);
} else {
resolve(result);
}
});
});
}
function registerEventHandler(eventHash, eventHandler) {
function handleAndFlushImmediates(eventTimestamp, event) {
'worklet';
global.__frameTimestamp = eventTimestamp;
eventHandler(event);
global.__flushAnimationFrame(eventTimestamp);
global.__frameTimestamp = undefined;
}
return _NativeReanimated.default.registerEventHandler(eventHash, (0, _shareables.makeShareableCloneRecursive)(handleAndFlushImmediates));
}
function unregisterEventHandler(id) {
return _NativeReanimated.default.unregisterEventHandler(id);
}
function subscribeForKeyboardEvents(eventHandler, options) {
// TODO: this should really go with the same code path as other events, that is
// via registerEventHandler. For now we are copying the code from there.
function handleAndFlushImmediates(state, height) {
'worklet';
const now = performance.now();
global.__frameTimestamp = now;
eventHandler(state, height);
global.__flushAnimationFrame(now);
global.__frameTimestamp = undefined;
}
return _NativeReanimated.default.subscribeForKeyboardEvents((0, _shareables.makeShareableCloneRecursive)(handleAndFlushImmediates), options.isStatusBarTranslucentAndroid ?? false);
}
function unsubscribeFromKeyboardEvents(listenerId) {
return _NativeReanimated.default.unsubscribeFromKeyboardEvents(listenerId);
}
function registerSensor(sensorType, interval, iosReferenceFrame, eventHandler) {
return _NativeReanimated.default.registerSensor(sensorType, interval, iosReferenceFrame, (0, _shareables.makeShareableCloneRecursive)(eventHandler));
}
function unregisterSensor(listenerId) {
return _NativeReanimated.default.unregisterSensor(listenerId);
} // initialize UI runtime if applicable
if (!(0, _PlatformChecker.isWeb)() && isConfigured()) {
(0, _initializers.initializeUIRuntime)();
}
let featuresConfig = {
enableLayoutAnimations: false,
setByUser: false
};
function enableLayoutAnimations(flag) {
let isCallByUser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
if (isCallByUser) {
featuresConfig = {
enableLayoutAnimations: flag,
setByUser: true
};
_NativeReanimated.default.enableLayoutAnimations(flag);
} else if (!featuresConfig.setByUser && featuresConfig.enableLayoutAnimations !== flag) {
featuresConfig.enableLayoutAnimations = flag;
_NativeReanimated.default.enableLayoutAnimations(flag);
}
}
function configureLayoutAnimations(viewTag, type, config) {
let sharedTransitionTag = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
_NativeReanimated.default.configureLayoutAnimation(viewTag, type, sharedTransitionTag, (0, _shareables.makeShareableCloneRecursive)(config));
}
function configureProps(uiProps, nativeProps) {
if (!(0, _PlatformChecker.nativeShouldBeMock)()) {
_NativeReanimated.default.configureProps(uiProps, nativeProps);
}
}
//# sourceMappingURL=core.js.map