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