1import React from 'react';
2import { NativeModules, requireNativeComponent } from 'react-native';
3/**
4 * A drop-in replacement for `requireNativeComponent`.
5 */
6export function requireNativeViewManager(viewName) {
7    const { viewManagersMetadata } = NativeModules.NativeUnimoduleProxy;
8    const viewManagerConfig = viewManagersMetadata?.[viewName];
9    if (__DEV__ && !viewManagerConfig) {
10        const exportedViewManagerNames = Object.keys(viewManagersMetadata).join(', ');
11        console.warn(`The native view manager required by name (${viewName}) from NativeViewManagerAdapter isn't exported by expo-modules-core. Views of this type may not render correctly. Exported view managers: [${exportedViewManagerNames}].`);
12    }
13    // Set up the React Native native component, which is an adapter to the universal module's view
14    // manager
15    const reactNativeViewName = `ViewManagerAdapter_${viewName}`;
16    const ReactNativeComponent = requireNativeComponent(reactNativeViewName);
17    const proxiedPropsNames = viewManagerConfig?.propsNames ?? [];
18    // Define a component for universal-module authors to access their native view manager
19    function NativeComponentAdapter(props, ref) {
20        const nativeProps = omit(props, proxiedPropsNames);
21        const proxiedProps = pick(props, proxiedPropsNames);
22        return React.createElement(ReactNativeComponent, { ...nativeProps, proxiedProperties: proxiedProps, ref: ref });
23    }
24    NativeComponentAdapter.displayName = `Adapter<${viewName}>`;
25    return React.forwardRef(NativeComponentAdapter);
26}
27function omit(props, propNames) {
28    const copied = { ...props };
29    for (const propName of propNames) {
30        delete copied[propName];
31    }
32    return copied;
33}
34function pick(props, propNames) {
35    return propNames.reduce((prev, curr) => {
36        if (curr in props) {
37            prev[curr] = props[curr];
38        }
39        return prev;
40    }, {});
41}
42//# sourceMappingURL=NativeViewManagerAdapter.native.js.map