@crossed/ui
Version:
A universal & performant styling library for React Native, Next.js & React
168 lines (167 loc) • 6.4 kB
JavaScript
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