UNPKG

@vuesax-alpha/nightly

Version:
1 lines 8.98 kB
{"version":3,"file":"shift.mjs","sources":["../../../../../../../packages/hooks/use-floating/core/middleware/shift.ts"],"sourcesContent":["import {\n clamp,\n evaluate,\n getOppositeAxis,\n getSide,\n getSideAxis,\n} from '../../utils'\nimport { detectOverflow } from '../detect-overflow'\nimport type { DetectOverflowOptions } from '../detect-overflow'\nimport type { Coords } from '../../utils'\nimport type { Derivable, Middleware, MiddlewareState } from '../types'\n\nexport type ShiftOptions = Partial<\n DetectOverflowOptions & {\n /**\n * @default true\n */\n mainAxis: boolean\n\n /**\n * @default false\n */\n crossAxis: boolean\n\n limiter: {\n fn: (state: MiddlewareState) => Coords\n options?: any\n }\n }\n>\n\nexport const shift = (\n options: ShiftOptions | Derivable<ShiftOptions> = {}\n): Middleware => ({\n name: 'shift',\n options,\n async fn(state) {\n const { x, y, placement } = state\n\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = { fn: ({ x, y }: Coords) => ({ x, y }) },\n ...detectOverflowOptions\n } = evaluate(options, state)\n\n const coords = { x, y }\n const overflow = await detectOverflow(state, detectOverflowOptions)\n const crossAxis = getSideAxis(getSide(placement))\n const mainAxis = getOppositeAxis(crossAxis)\n\n let mainAxisCoord = coords[mainAxis]\n let crossAxisCoord = coords[crossAxis]\n\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left'\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right'\n const min = mainAxisCoord + overflow[minSide]\n const max = mainAxisCoord - overflow[maxSide]\n\n mainAxisCoord = clamp(min, mainAxisCoord, max)\n }\n\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left'\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right'\n const min = crossAxisCoord + overflow[minSide]\n const max = crossAxisCoord - overflow[maxSide]\n\n crossAxisCoord = clamp(min, crossAxisCoord, max)\n }\n\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord,\n })\n\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n },\n }\n },\n})\n\ntype LimitShiftOffset =\n | number\n | Partial<{\n mainAxis: number\n\n crossAxis: number\n }>\n\nexport type LimitShiftOptions = Partial<{\n offset: LimitShiftOffset | Derivable<LimitShiftOffset>\n\n mainAxis: boolean\n\n crossAxis: boolean\n}>\n\nexport const limitShift = (\n options: LimitShiftOptions | Derivable<LimitShiftOptions> = {}\n): {\n options: any\n fn: (state: MiddlewareState) => Coords\n} => ({\n options,\n fn(state) {\n const { x, y, placement, rects, middlewareData } = state\n\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n } = evaluate(options, state)\n\n const coords = { x, y }\n const crossAxis = getSideAxis(placement)\n const mainAxis = getOppositeAxis(crossAxis)\n\n let mainAxisCoord = coords[mainAxis]\n let crossAxisCoord = coords[crossAxis]\n\n const rawOffset = evaluate(offset, state)\n const computedOffset =\n typeof rawOffset === 'number'\n ? { mainAxis: rawOffset, crossAxis: 0 }\n : { mainAxis: 0, crossAxis: 0, ...rawOffset }\n\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width'\n const limitMin =\n rects.reference[mainAxis] -\n rects.floating[len] +\n computedOffset.mainAxis\n const limitMax =\n rects.reference[mainAxis] +\n rects.reference[len] -\n computedOffset.mainAxis\n\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax\n }\n }\n\n if (checkCrossAxis) {\n const len = mainAxis === 'y' ? 'width' : 'height'\n const isOriginSide = ['top', 'left'].includes(getSide(placement))\n const limitMin =\n rects.reference[crossAxis] -\n rects.floating[len] +\n (isOriginSide ? middlewareData.offset?.[crossAxis] || 0 : 0) +\n (isOriginSide ? 0 : computedOffset.crossAxis)\n const limitMax =\n rects.reference[crossAxis] +\n rects.reference[len] +\n (isOriginSide ? 0 : middlewareData.offset?.[crossAxis] || 0) -\n (isOriginSide ? computedOffset.crossAxis : 0)\n\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax\n }\n }\n\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord,\n } as Coords\n },\n})\n"],"names":["x","y"],"mappings":"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"}