UNPKG

@crossed/ui

Version:

A universal & performant styling library for React Native, Next.js & React

168 lines (167 loc) 6.4 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var Tooltip_exports = {}; __export(Tooltip_exports, { Content: () => Content, Root: () => Root, Tooltip: () => Tooltip, Trigger: () => Trigger }); module.exports = __toCommonJS(Tooltip_exports); var import_jsx_runtime = require("react/jsx-runtime"); var import_react = require("react"); var import_Adapt = require("../other/Adapt"); var import_Text = require("../typography/Text"); var import_Sheet = require("./Sheet/index"); var import_core = require("@crossed/core"); var import_styled = require("@crossed/styled"); var import_Floating = require("./Floating"); var import_react2 = require("@floating-ui/react"); var import_dom = require("@floating-ui/dom"); var import_react_native_reanimated = require("react-native-reanimated"); var import_useMedia = require("../useMedia"); var import_layout = require("../layout"); const useFloatinCompat = import_styled.isWeb ? (placement) => (0, import_react2.useFloating)({ placement, middleware: [(0, import_dom.flip)({ crossAxis: true }), (0, import_react2.offset)(10)], whileElementsMounted: import_react2.autoUpdate }) : () => ({ refs: {}, floatingStyles: {} }); const stylesDyn = (0, import_styled.createStyles)(() => ({ dyn: (e) => e })); const [FloatingUiProvider, useFloatingUi] = (0, import_core.createScope)( {} ); const Root = (0, import_react.memo)( ({ children, placement, triggerStrategy, ...props }) => { const { refs, floatingStyles } = useFloatinCompat(placement); const { md } = (0, import_useMedia.useMedia)(); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_Floating.Floating, { triggerStrategy: !md && triggerStrategy === "onPointerEnter" ? "onPress" : triggerStrategy, removeScroll: false, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FloatingUiProvider, { refs, floatingStyles, children }) } ); } ); Root.displayName = "Tooltip.Root"; const Trigger = (0, import_react.memo)( (0, import_react.forwardRef)((props, ref) => { const { refs } = useFloatingUi(); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_Floating.Floating.Trigger, { ...props, ref: (0, import_core.composeRefs)(ref, refs.setReference) } ); }) ); Trigger.displayName = "Tooltip.Trigger"; const Content = (0, import_react.memo)( (0, import_react.forwardRef)(({ children, style }, ref) => { return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: import_styled.isWeb ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Adapt.Adapt, { fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ContentNative, { children, style }), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ContentWeb, { ref, children, style }) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ContentNative, { children, style }) }); }) ); Content.displayName = "Tooltip.Content"; const tooltipStyles = (0, import_styled.inlineStyle)(({ colors, space }) => ({ base: { backgroundColor: colors.text.primary, borderRadius: 16, paddingVertical: space.xs, paddingHorizontal: space.sm, maxWidth: 276 }, web: { base: { width: "max-content" } } })); const ContentWeb = (0, import_react.memo)( (0, import_react.forwardRef)(({ children, style }, ref) => { const { refs, floatingStyles } = useFloatingUi(); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Floating.Floating.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_Floating.Floating.Content, { entering: import_react_native_reanimated.FadeIn, exiting: import_react_native_reanimated.FadeOut, style: (0, import_styled.inlineStyle)(() => ({ base: { position: "absolute" } })), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_layout.Box, { ref: (0, import_core.composeRefs)(ref, refs.setFloating), style: (0, import_styled.composeStyles)( tooltipStyles, stylesDyn.dyn(floatingStyles), style ), children } ) } ) }); }) ); ContentWeb.displayName = "Tooltip.ContentWeb"; const ContentNative = ({ children }) => { const { open, onClose } = (0, import_Floating.useFloatingContext)(); const refSheet = (0, import_react.useRef)(null); (0, import_react.useEffect)(() => { var _a, _b; if (open) { (_a = refSheet.current) == null ? void 0 : _a.show(); } else { (_b = refSheet.current) == null ? void 0 : _b.hide(); } }, [open]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Sheet.Sheet, { ref: refSheet, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Sheet.Sheet.Content, { onClose, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Sheet.Sheet.Padded, { children }) }) }); }; ContentNative.displayName = "Tooltip.ContentNative"; const TooltipText = (props) => { return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_Text.Text, { ...props, style: (0, import_styled.composeStyles)( (0, import_styled.inlineStyle)(({ colors }) => ({ media: { md: { color: colors.text.invert } } })), props.style ) } ); }; TooltipText.displayName = "Tooltip.Text"; const Tooltip = (0, import_core.withStaticProperties)(Root, { Trigger, Content, Text: TooltipText }); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Content, Root, Tooltip, Trigger }); //# sourceMappingURL=Tooltip.js.map