vuesax-alpha
Version:
A Component Library for Vue 3
1 lines • 5.98 kB
Source Map (JSON)
{"version":3,"file":"arrow.mjs","sources":["../../../../../../../packages/hooks/use-floating/core/middleware/arrow.ts"],"sourcesContent":["import { unrefElement } from '@vueuse/core'\nimport {\n clamp,\n evaluate,\n getAlignment,\n getAlignmentAxis,\n getAxisLength,\n getPaddingObject,\n min as mathMin,\n} from '@vuesax-alpha/hooks/use-floating/utils'\nimport type { Padding } from '@vuesax-alpha/hooks/use-floating/utils'\nimport type { Derivable, Middleware } from '../types'\n\nexport interface ArrowOptions {\n /**\n * @default undefined\n */\n element: any\n\n /**\n * @default 0\n */\n padding?: Padding\n}\n\nexport const arrow = (\n options: ArrowOptions | Derivable<ArrowOptions>\n): Middleware => ({\n name: 'arrow',\n options,\n async fn(state) {\n const { x, y, placement, rects, platform, elements, middlewareData } = state\n\n const { element, padding = 0 } = evaluate(options, state) || {}\n\n const htmlElement = unrefElement(element)\n\n if (htmlElement == null) {\n return {}\n }\n\n const paddingObject = getPaddingObject(padding)\n const coords = { x, y }\n const axis = getAlignmentAxis(placement)\n const length = getAxisLength(axis)\n const arrowDimensions = await platform.getDimensions(htmlElement)\n const isYAxis = axis === 'y'\n const minProp = isYAxis ? 'top' : 'left'\n const maxProp = isYAxis ? 'bottom' : 'right'\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth'\n\n const endDiff =\n rects.reference[length] +\n rects.reference[axis] -\n coords[axis] -\n rects.floating[length]\n const startDiff = coords[axis] - rects.reference[axis]\n\n const arrowOffsetParent = await platform.getOffsetParent?.(htmlElement)\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0\n\n if (!clientSize || !(await platform.isElement?.(arrowOffsetParent))) {\n clientSize = elements.floating[clientProp] || rects.floating[length]\n }\n\n const centerToReference = endDiff / 2 - startDiff / 2\n\n const largestPossiblePadding =\n clientSize / 2 - arrowDimensions[length] / 2 - 1\n const minPadding = mathMin(paddingObject[minProp], largestPossiblePadding)\n const maxPadding = mathMin(paddingObject[maxProp], largestPossiblePadding)\n\n const min = minPadding\n const max = clientSize - arrowDimensions[length] - maxPadding\n const center =\n clientSize / 2 - arrowDimensions[length] / 2 + centerToReference\n const offset = clamp(min, center, max)\n\n const shouldAddOffset =\n !middlewareData.arrow &&\n getAlignment(placement) != null &&\n center !== offset &&\n rects.reference[length] / 2 -\n (center < min ? minPadding : maxPadding) -\n arrowDimensions[length] / 2 <\n 0\n const alignmentOffset = shouldAddOffset\n ? center < min\n ? center - min\n : center - max\n : 0\n\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && { alignmentOffset }),\n },\n reset: shouldAddOffset,\n }\n },\n})\n"],"names":["mathMin","min"],"mappings":"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"}