{"version":3,"names":["clamp","evaluate","getAlignment","getAlignmentAxis","getAxisLength","getPaddingObject","isElement","resolveArrowElement","element","current","arrow","options","name","fn","state","x","y","placement","rects","platform","elements","middlewareData","padding","offsetParent","arrowElement","paddingObject","coords","axis","length","arrowDimensions","getDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","reference","floating","startDiff","arrowOffsetParent","getOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","Math","min","maxPadding","max","center","offset","shouldAddOffset","alignmentOffset","data","centerOffset","reset"],"sources":["arrow.ts"],"sourcesContent":["import type { Derivable, Middleware, Padding } from \"@floating-ui/dom\";\nimport {\n\tclamp,\n\tevaluate,\n\tgetAlignment,\n\tgetAlignmentAxis,\n\tgetAxisLength,\n\tgetPaddingObject,\n} from \"@floating-ui/utils\";\nimport { isElement } from \"@floating-ui/utils/dom\";\n\nexport interface ArrowOptions {\n\t/**\n\t * The arrow element to be positioned.\n\t * @default undefined\n\t */\n\telement:\n\t\t| Element\n\t\t| (() => Element | null)\n\t\t| { current: Element | null }\n\t\t| null\n\t\t| undefined;\n\t/**\n\t * Padding between the arrow element and the floating element edges.\n\t * Useful when the floating element has rounded corners.\n\t * @default 0\n\t */\n\tpadding?: Padding | undefined;\n\t/**\n\t * Which element to use as the offset parent.\n\t * @default 'real'\n\t */\n\toffsetParent: \"real\" | \"floating\";\n}\n\nfunction resolveArrowElement(element: ArrowOptions[\"element\"]): Element | null {\n\tif (element == null) {\n\t\treturn null;\n\t}\n\tif (typeof element === \"function\") {\n\t\treturn element();\n\t}\n\tif (typeof element === \"object\" && \"current\" in element) {\n\t\treturn element.current;\n\t}\n\treturn isElement(element) ? element : null;\n}\n\n/**\n * Fork of `@floating-ui/dom`'s `arrow` middleware that accepts an\n * `offsetParent` option ('real' vs 'floating').\n *\n * The React source splits this into `baseArrow` + `arrow` with a `deps`\n * array so React can memoize the middleware. Solid doesn't need that\n * — consumers produce a new middleware each reactive run via a `createMemo`\n * or by referencing signals — so this port keeps only the base form.\n */\nexport const arrow = (\n\toptions: ArrowOptions | Derivable<ArrowOptions>,\n): Middleware => ({\n\tname: \"arrow\",\n\toptions,\n\tasync fn(state) {\n\t\tconst { x, y, placement, rects, platform, elements, middlewareData } =\n\t\t\tstate;\n\t\tconst {\n\t\t\telement,\n\t\t\tpadding = 0,\n\t\t\toffsetParent = \"real\",\n\t\t} = evaluate(options, state) || {};\n\n\t\tconst arrowElement = resolveArrowElement(element);\n\t\tif (arrowElement == null) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst paddingObject = getPaddingObject(padding);\n\t\tconst coords = { x, y };\n\t\tconst axis = getAlignmentAxis(placement);\n\t\tconst length = getAxisLength(axis);\n\t\tconst arrowDimensions = await platform.getDimensions(arrowElement);\n\t\tconst isYAxis = axis === \"y\";\n\t\tconst minProp = isYAxis ? \"top\" : \"left\";\n\t\tconst maxProp = isYAxis ? \"bottom\" : \"right\";\n\t\tconst clientProp = isYAxis ? \"clientHeight\" : \"clientWidth\";\n\n\t\tconst endDiff =\n\t\t\trects.reference[length] +\n\t\t\trects.reference[axis] -\n\t\t\tcoords[axis] -\n\t\t\trects.floating[length];\n\t\tconst startDiff = coords[axis] - rects.reference[axis];\n\n\t\tconst arrowOffsetParent =\n\t\t\toffsetParent === \"real\"\n\t\t\t\t? await platform.getOffsetParent?.(arrowElement)\n\t\t\t\t: elements.floating;\n\t\tlet clientSize = elements.floating[clientProp] || rects.floating[length];\n\n\t\t// DOM platform can return `window` as the `offsetParent`.\n\t\tif (!clientSize || !(await platform.isElement?.(arrowOffsetParent))) {\n\t\t\tclientSize = elements.floating[clientProp] || rects.floating[length];\n\t\t}\n\n\t\tconst centerToReference = endDiff / 2 - startDiff / 2;\n\n\t\t// If padding is large enough that it causes the arrow to no longer be\n\t\t// centered, clamp the padding so the arrow stays centered.\n\t\tconst largestPossiblePadding =\n\t\t\tclientSize / 2 - arrowDimensions[length] / 2 - 1;\n\t\tconst minPadding = Math.min(paddingObject[minProp], largestPossiblePadding);\n\t\tconst maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding);\n\n\t\t// Prevent the arrow from overflowing the floating element when the\n\t\t// center point is outside the floating element's bounds.\n\t\tconst min = minPadding;\n\t\tconst max = clientSize - arrowDimensions[length] - maxPadding;\n\t\tconst center =\n\t\t\tclientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n\t\tconst offset = clamp(min, center, max);\n\n\t\t// If the reference is small enough that the arrow's padding causes it\n\t\t// to point to nothing for an aligned placement, adjust the offset of\n\t\t// the floating element itself. A single reset keeps `shift()` active.\n\t\tconst shouldAddOffset =\n\t\t\t!middlewareData.arrow &&\n\t\t\tgetAlignment(placement) != null &&\n\t\t\tcenter !== offset &&\n\t\t\trects.reference[length] / 2 -\n\t\t\t\t(center < min ? minPadding : maxPadding) -\n\t\t\t\tarrowDimensions[length] / 2 <\n\t\t\t\t0;\n\t\tlet alignmentOffset = 0;\n\t\tif (shouldAddOffset) {\n\t\t\talignmentOffset = center < min ? center - min : center - max;\n\t\t}\n\n\t\treturn {\n\t\t\t[axis]: coords[axis] + alignmentOffset,\n\t\t\tdata: {\n\t\t\t\t[axis]: offset,\n\t\t\t\tcenterOffset: center - offset - alignmentOffset,\n\t\t\t\t...(shouldAddOffset && { alignmentOffset }),\n\t\t\t},\n\t\t\treset: shouldAddOffset,\n\t\t};\n\t},\n});\n"],"mappings":"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","ignoreList":[]}