UNPKG

@tamagui/react-native-web-lite

Version:
58 lines (57 loc) 1.98 kB
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