UNPKG

@vuesax-alpha/nightly

Version:
1 lines 9.92 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/use-floating/utils/index.ts"],"sourcesContent":["export type Alignment = 'start' | 'end'\nexport type Side = 'top' | 'right' | 'bottom' | 'left'\nexport type AlignedPlacement = `${Side}-${Alignment}`\nexport type Placement = Side | AlignedPlacement\nexport type Strategy = 'absolute' | 'fixed'\nexport type Axis = 'x' | 'y'\nexport type Coords = { [key in Axis]: number }\nexport type Length = 'width' | 'height'\nexport type Dimensions = { [key in Length]: number }\nexport type SideObject = { [key in Side]: number }\nexport type Rect = Coords & Dimensions\nexport type Padding = number | Partial<SideObject>\nexport type ClientRectObject = Rect & SideObject\n\nexport interface ElementRects {\n reference: Rect\n floating: Rect\n}\n\nexport type VirtualElement = {\n getBoundingClientRect(): ClientRectObject\n contextElement?: any\n}\n\nexport const sides: Side[] = ['top', 'right', 'bottom', 'left']\nexport const alignments: Alignment[] = ['start', 'end']\nexport const placements: Placement[] = sides.reduce(\n (acc: Placement[], side) =>\n acc.concat(side, `${side}-${alignments[0]}`, `${side}-${alignments[1]}`),\n []\n)\n\nexport const min = Math.min\nexport const max = Math.max\nexport const round = Math.round\nexport const floor = Math.floor\nexport const createCoords = (v: number) => ({ x: v, y: v })\n\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom',\n}\n\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start',\n}\n\nexport function clamp(start: number, value: number, end: number): number {\n return max(start, min(value, end))\n}\n\nexport function evaluate<T, P>(value: T | ((param: P) => T), param: P): T {\n return typeof value === 'function' ? (value as (param: P) => T)(param) : value\n}\n\nexport function getSide(placement: Placement): Side {\n return placement.split('-')[0] as Side\n}\n\nexport function getAlignment(placement: Placement): Alignment | undefined {\n return placement.split('-')[1] as Alignment | undefined\n}\n\nexport function getOppositeAxis(axis: Axis): Axis {\n return axis === 'x' ? 'y' : 'x'\n}\n\nexport function getAxisLength(axis: Axis): Length {\n return axis === 'y' ? 'height' : 'width'\n}\n\nexport function getSideAxis(placement: Placement): Axis {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x'\n}\n\nexport function getAlignmentAxis(placement: Placement): Axis {\n return getOppositeAxis(getSideAxis(placement))\n}\n\nexport function getAlignmentSides(\n placement: Placement,\n rects: ElementRects,\n rtl = false\n): [Side, Side] {\n const alignment = getAlignment(placement)\n const alignmentAxis = getAlignmentAxis(placement)\n const length = getAxisLength(alignmentAxis)\n\n let mainAlignmentSide: Side =\n alignmentAxis === 'x'\n ? alignment === (rtl ? 'end' : 'start')\n ? 'right'\n : 'left'\n : alignment === 'start'\n ? 'bottom'\n : 'top'\n\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide)\n }\n\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)]\n}\n\nexport function getExpandedPlacements(placement: Placement): Array<Placement> {\n const oppositePlacement = getOppositePlacement(placement)\n\n return [\n getOppositeAlignmentPlacement(placement),\n oppositePlacement,\n getOppositeAlignmentPlacement(oppositePlacement),\n ]\n}\n\nexport function getOppositeAlignmentPlacement<T extends string>(\n placement: T\n): T {\n return placement.replace(\n /start|end/g,\n (alignment) => oppositeAlignmentMap[alignment as Alignment]\n ) as T\n}\n\nfunction getSideList(side: Side, isStart: boolean, rtl?: boolean): Placement[] {\n const lr: Placement[] = ['left', 'right']\n const rl: Placement[] = ['right', 'left']\n const tb: Placement[] = ['top', 'bottom']\n const bt: Placement[] = ['bottom', 'top']\n\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr\n return isStart ? lr : rl\n case 'left':\n case 'right':\n return isStart ? tb : bt\n default:\n return []\n }\n}\n\nexport function getOppositeAxisPlacements(\n placement: Placement,\n flipAlignment: boolean,\n direction: 'none' | Alignment,\n rtl?: boolean\n): Placement[] {\n const alignment = getAlignment(placement)\n let list = getSideList(getSide(placement), direction === 'start', rtl)\n\n if (alignment) {\n list = list.map((side) => `${side}-${alignment}` as Placement)\n\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement))\n }\n }\n\n return list\n}\n\nexport function getOppositePlacement<T extends string>(placement: T): T {\n return placement.replace(\n /left|right|bottom|top/g,\n (side) => oppositeSideMap[side as Side]\n ) as T\n}\n\nexport function expandPaddingObject(padding: Partial<SideObject>): SideObject {\n return { top: 0, right: 0, bottom: 0, left: 0, ...padding }\n}\n\nexport function getPaddingObject(padding: Padding): SideObject {\n return typeof padding !== 'number'\n ? expandPaddingObject(padding)\n : { top: padding, right: padding, bottom: padding, left: padding }\n}\n\nexport function rectToClientRect(rect: Rect): ClientRectObject {\n return {\n ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height,\n }\n}\n"],"names":[],"mappings":"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"}