@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
1 lines • 1.66 kB
Source Map (JSON)
{"version":3,"file":"get-thumb-offset-from-scroll.cjs","names":["getThumbSize","linearScale"],"sources":["../../../../src/components/ScrollArea/utils/get-thumb-offset-from-scroll.ts"],"sourcesContent":["import type { Sizes } from '../ScrollArea.types';\nimport { getThumbSize } from './get-thumb-size';\nimport { linearScale } from './linear-scale';\n\nfunction clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport function getThumbOffsetFromScroll(\n scrollPos: number,\n sizes: Sizes,\n dir: 'rtl' | 'ltr' = 'ltr'\n) {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === 'ltr' ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange as [number, number]);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\n"],"mappings":";;;;AAIA,SAAS,MAAM,OAAe,CAAC,KAAK,MAAgC;AAClE,QAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,MAAM,CAAC;;AAG5C,SAAgB,yBACd,WACA,OACA,MAAqB,OACrB;CACA,MAAM,cAAcA,uBAAAA,aAAa,MAAM;CACvC,MAAM,mBAAmB,MAAM,UAAU,eAAe,MAAM,UAAU;CACxE,MAAM,YAAY,MAAM,UAAU,OAAO;CACzC,MAAM,eAAe,MAAM,UAAU,MAAM;CAC3C,MAAM,cAAc,YAAY;CAEhC,MAAM,wBAAwB,MAAM,WADX,QAAQ,QAAQ,CAAC,GAAG,aAAa,GAAG,CAAC,eAAe,IAAI,EAAE,CACC;AAEpF,QADoBC,qBAAAA,YAAY,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,YAAY,CAAC,CACjD,sBAAsB"}