@vuesax-alpha/nightly
Version:
A Component Library for Vue 3
1 lines • 8.19 kB
Source Map (JSON)
{"version":3,"file":"flip.mjs","sources":["../../../../../../../packages/hooks/use-floating/core/middleware/flip.ts"],"sourcesContent":["import {\n evaluate,\n getAlignmentSides,\n getExpandedPlacements,\n getOppositeAxisPlacements,\n getOppositePlacement,\n getSide,\n} from '../../utils'\nimport { detectOverflow } from '../detect-overflow'\nimport type { DetectOverflowOptions } from '../detect-overflow'\nimport type { Derivable, Middleware } from '../types'\nimport type { Placement } from '../../utils'\n\nexport type FlipOptions = Partial<\n DetectOverflowOptions & {\n /**\n * @default true\n */\n mainAxis: boolean\n\n /**\n * @default true\n */\n crossAxis: boolean\n\n /**\n * @default [oppositePlacement] (computed)\n */\n fallbackPlacements: Array<Placement>\n\n /**\n * @default 'bestFit'\n */\n fallbackStrategy: 'bestFit' | 'initialPlacement'\n\n /**\n * @default 'none' (disallow fallback)\n */\n fallbackAxisSideDirection: 'none' | 'start' | 'end'\n\n /**\n * @default true\n */\n flipAlignment: boolean\n }\n>\n\nexport const flip = (\n options: FlipOptions | Derivable<FlipOptions> = {}\n): Middleware => ({\n name: 'flip',\n options,\n async fn(state) {\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements,\n } = state\n\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state)\n\n if (middlewareData.arrow?.alignmentOffset) {\n return {}\n }\n\n const side = getSide(placement)\n const isBasePlacement = getSide(initialPlacement) === initialPlacement\n const rtl = await platform.isRTL?.(elements.floating)\n\n const fallbackPlacements =\n specifiedFallbackPlacements ||\n (isBasePlacement || !flipAlignment\n ? [getOppositePlacement(initialPlacement)]\n : getExpandedPlacements(initialPlacement))\n\n if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n fallbackPlacements.push(\n ...getOppositeAxisPlacements(\n initialPlacement,\n flipAlignment,\n fallbackAxisSideDirection,\n rtl\n )\n )\n }\n\n const placements = [initialPlacement, ...fallbackPlacements]\n\n const overflow = await detectOverflow(state, detectOverflowOptions)\n\n const overflows: number[] = []\n let overflowsData = middlewareData.flip?.overflows || []\n\n if (checkMainAxis) {\n overflows.push(overflow[side])\n }\n\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl)\n overflows.push(overflow[sides[0]], overflow[sides[1]])\n }\n\n overflowsData = [...overflowsData, { placement, overflows }]\n\n if (!overflows.every((side) => side <= 0)) {\n const nextIndex = (middlewareData.flip?.index || 0) + 1\n const nextPlacement = placements[nextIndex]\n\n if (nextPlacement) {\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData,\n },\n reset: {\n placement: nextPlacement,\n },\n }\n }\n\n let resetPlacement = overflowsData\n .filter((d) => d.overflows[0] <= 0)\n .sort((a, b) => a.overflows[1] - b.overflows[1])[0]?.placement\n\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit': {\n const placement = overflowsData\n .map(\n (d) =>\n [\n d.placement,\n d.overflows\n .filter((overflow) => overflow > 0)\n .reduce((acc, overflow) => acc + overflow, 0),\n ] as const\n )\n .sort((a, b) => a[1] - b[1])[0]?.[0]\n if (placement) {\n resetPlacement = placement\n }\n break\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement\n break\n default:\n }\n }\n\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement,\n },\n }\n }\n }\n\n return {}\n },\n})\n"],"names":["side","placement","overflow"],"mappings":"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"}