@tamagui/react-native-web-lite
Version:
React Native for Web
58 lines (57 loc) • 1.98 kB
JavaScript
import { AccessibilityUtil, LocaleProvider, createDOMProps, stylesFromProps } from "@tamagui/react-native-web-internals";
import { getStyleTags, insertStyleRules, useDidFinishSSR } from "@tamagui/web";
import React, { useInsertionEffect, useMemo } from "react";
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
const useCreateElement = (component, props, options) => {
const {
element,
styles
} = createElementAndStyles(component, props, options);
const isHydrated = useDidFinishSSR();
const styleTags = useMemo(() => {
return isHydrated || !styles ? null : getStyleTags(styles);
}, [
// never changes
]);
useInsertionEffect(() => {
if (!styles) return;
const styleObj = {};
for (const style of styles) {
styleObj[style[0]] = style;
}
insertStyleRules(styleObj);
}, [styles]);
return /* @__PURE__ */jsxs(Fragment, {
children: [element, styleTags]
});
};
const createElement = (component, props, options) => {
const {
element,
styles
} = createElementAndStyles(component, props, options);
return /* @__PURE__ */jsxs(Fragment, {
children: [element, styles ? getStyleTags(styles) : null]
});
};
const createElementAndStyles = (component, props, options) => {
let accessibilityComponent;
if (component && component.constructor === String) {
accessibilityComponent = AccessibilityUtil.propsToAccessibilityComponent(props);
}
const Component = accessibilityComponent || component;
const domProps = createDOMProps(Component, props, options);
const styles = stylesFromProps.get(domProps);
let element = React.createElement(Component, domProps);
const elementWithLocaleProvider = domProps.dir ? /* @__PURE__ */jsx(LocaleProvider, {
direction: domProps.dir,
locale: domProps.lang,
children: element
}) : element;
return {
element: elementWithLocaleProvider,
styles
};
};
export { createElement, useCreateElement };
//# sourceMappingURL=index.mjs.map