import { createPopover } from "@melt-ui/svelte"; import { getContext, setContext } from "svelte"; import { createBitAttrs, getOptionUpdater, removeUndefined } from "../../internal/index.js"; import { getPositioningUpdater } from "../floating/helpers.js"; export function getPopoverData() { const NAME = "popover"; const PARTS = ["arrow", "close", "content", "trigger"]; return { NAME, PARTS, }; } export function setCtx(props) { const { NAME, PARTS } = getPopoverData(); const getAttrs = createBitAttrs(NAME, PARTS); const popover = { ...createPopover({ positioning: { placement: "bottom", gutter: 0, }, ...removeUndefined(props), forceVisible: true, }), getAttrs, }; setContext(NAME, popover); return { ...popover, updateOption: getOptionUpdater(popover.options), }; } export function getCtx() { const { NAME } = getPopoverData(); return getContext(NAME); } export function setArrow(size = 8) { const popover = getCtx(); popover.options.arrowSize.set(size); return popover; } export function updatePositioning(props) { const defaultPlacement = { side: "bottom", align: "center", }; const withDefaults = { ...defaultPlacement, ...props }; const { options: { positioning }, } = getCtx(); const updater = getPositioningUpdater(positioning); updater(withDefaults); }