mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
build(react): build26 from 45504a2b
This commit is contained in:
Vendored
+89
@@ -0,0 +1,89 @@
|
||||
"use client";
|
||||
import { useOptionalContainer } from "../../player/context.js";
|
||||
import { useLatestRef } from "../../utils/use-latest-ref.js";
|
||||
import { useDestroy } from "../../utils/use-destroy.js";
|
||||
import { TooltipContextProvider } from "./context.js";
|
||||
import { useSafeId } from "../../utils/use-safe-id.js";
|
||||
import { useOptionalControlsContext } from "../controls/context.js";
|
||||
import { usePositionedState } from "../hooks/use-positioned-state.js";
|
||||
import { useTooltipGroup } from "./group-context.js";
|
||||
import { createTooltip, createTransition } from "@videojs/core/dom";
|
||||
import { useSnapshot } from "@videojs/store/react";
|
||||
import { useEffect, useState } from "react";
|
||||
import { jsx } from "react/jsx-runtime";
|
||||
import { isUndefined } from "@videojs/utils/predicate";
|
||||
import { TooltipCore, TooltipDataAttrs } from "@videojs/core";
|
||||
//#region src/ui/tooltip/tooltip-root.tsx
|
||||
function TooltipRoot({ open: controlledOpen, defaultOpen = TooltipCore.defaultProps.defaultOpen, onOpenChange: onOpenChangeProp, onOpenChangeComplete: onOpenChangeCompleteProp, delay = TooltipCore.defaultProps.delay, closeDelay = TooltipCore.defaultProps.closeDelay, disableHoverablePopup = TooltipCore.defaultProps.disableHoverablePopup, disabled = TooltipCore.defaultProps.disabled, boundary = "container", children, ...coreProps }) {
|
||||
const container = useOptionalContainer();
|
||||
const controls = useOptionalControlsContext();
|
||||
const [core] = useState(() => new TooltipCore(coreProps));
|
||||
core.setProps(coreProps);
|
||||
const isControlled = !isUndefined(controlledOpen);
|
||||
const groupFromContext = useTooltipGroup();
|
||||
const onOpenChangeRef = useLatestRef(onOpenChangeProp);
|
||||
const onOpenChangeCompleteRef = useLatestRef(onOpenChangeCompleteProp);
|
||||
const delayRef = useLatestRef(delay);
|
||||
const closeDelayRef = useLatestRef(closeDelay);
|
||||
const disableHoverablePopupRef = useLatestRef(disableHoverablePopup);
|
||||
const disabledRef = useLatestRef(disabled);
|
||||
const groupRef = useLatestRef(groupFromContext);
|
||||
const [tooltip] = useState(() => {
|
||||
const instance = createTooltip({
|
||||
transition: createTransition(),
|
||||
onOpenChange: (nextOpen, details) => {
|
||||
onOpenChangeRef.current?.(nextOpen, details);
|
||||
},
|
||||
onOpenChangeComplete: (nextOpen) => {
|
||||
onOpenChangeCompleteRef.current?.(nextOpen);
|
||||
},
|
||||
delay: () => delayRef.current,
|
||||
closeDelay: () => closeDelayRef.current,
|
||||
disableHoverablePopup: () => disableHoverablePopupRef.current,
|
||||
disabled: () => disabledRef.current,
|
||||
group: () => groupRef.current
|
||||
});
|
||||
if (!isControlled && defaultOpen) instance.open();
|
||||
return instance;
|
||||
});
|
||||
const [content, setContent] = useState();
|
||||
const anchorName = useSafeId();
|
||||
const popupId = useSafeId("tooltip");
|
||||
useEffect(() => {
|
||||
if (isUndefined(controlledOpen)) return;
|
||||
const { active: inputOpen } = tooltip.input.current;
|
||||
if (controlledOpen === inputOpen) return;
|
||||
if (controlledOpen) tooltip.open();
|
||||
else tooltip.close();
|
||||
}, [controlledOpen, tooltip]);
|
||||
useEffect(() => {
|
||||
if (isUndefined(controls?.state.visible)) return;
|
||||
if (controls.state.visible) return;
|
||||
tooltip.close("imperative-action");
|
||||
}, [controls?.state.visible, tooltip]);
|
||||
useDestroy(tooltip);
|
||||
const input = useSnapshot(tooltip.input);
|
||||
core.setInput(input);
|
||||
const { state, preferredSide, setPositionedSide } = usePositionedState(core.getState());
|
||||
return /* @__PURE__ */ jsx(TooltipContextProvider, {
|
||||
value: {
|
||||
core,
|
||||
tooltip,
|
||||
state,
|
||||
preferredSide,
|
||||
setPositionedSide,
|
||||
stateAttrMap: TooltipDataAttrs,
|
||||
anchorName,
|
||||
popupId,
|
||||
content,
|
||||
setContent,
|
||||
boundary,
|
||||
container
|
||||
},
|
||||
children
|
||||
});
|
||||
}
|
||||
//#endregion
|
||||
export { TooltipRoot };
|
||||
|
||||
//# sourceMappingURL=tooltip-root.js.map
|
||||
Reference in New Issue
Block a user