helpers.mjs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. export function calculateUpdatedTarget(_ref) {
  2. let {
  3. selectedElement,
  4. containerElement,
  5. isRtl,
  6. isHorizontal
  7. } = _ref;
  8. const containerSize = getOffsetSize(isHorizontal, containerElement);
  9. const scrollPosition = getScrollPosition(isHorizontal, isRtl, containerElement);
  10. const childrenSize = getOffsetSize(isHorizontal, selectedElement);
  11. const childrenStartPosition = getOffsetPosition(isHorizontal, selectedElement);
  12. const additionalOffset = childrenSize * 0.4;
  13. if (scrollPosition > childrenStartPosition) {
  14. return childrenStartPosition - additionalOffset;
  15. } else if (scrollPosition + containerSize < childrenStartPosition + childrenSize) {
  16. return childrenStartPosition - containerSize + childrenSize + additionalOffset;
  17. }
  18. return scrollPosition;
  19. }
  20. export function calculateCenteredTarget(_ref2) {
  21. let {
  22. selectedElement,
  23. containerElement,
  24. isHorizontal
  25. } = _ref2;
  26. const containerOffsetSize = getOffsetSize(isHorizontal, containerElement);
  27. const childrenOffsetPosition = getOffsetPosition(isHorizontal, selectedElement);
  28. const childrenOffsetSize = getOffsetSize(isHorizontal, selectedElement);
  29. return childrenOffsetPosition - containerOffsetSize / 2 + childrenOffsetSize / 2;
  30. }
  31. export function getScrollSize(isHorizontal, element) {
  32. const key = isHorizontal ? 'scrollWidth' : 'scrollHeight';
  33. return element?.[key] || 0;
  34. }
  35. export function getClientSize(isHorizontal, element) {
  36. const key = isHorizontal ? 'clientWidth' : 'clientHeight';
  37. return element?.[key] || 0;
  38. }
  39. export function getScrollPosition(isHorizontal, rtl, element) {
  40. if (!element) {
  41. return 0;
  42. }
  43. const {
  44. scrollLeft,
  45. offsetWidth,
  46. scrollWidth
  47. } = element;
  48. if (isHorizontal) {
  49. return rtl ? scrollWidth - offsetWidth + scrollLeft : scrollLeft;
  50. }
  51. return element.scrollTop;
  52. }
  53. export function getOffsetSize(isHorizontal, element) {
  54. const key = isHorizontal ? 'offsetWidth' : 'offsetHeight';
  55. return element?.[key] || 0;
  56. }
  57. export function getOffsetPosition(isHorizontal, element) {
  58. const key = isHorizontal ? 'offsetLeft' : 'offsetTop';
  59. return element?.[key] || 0;
  60. }
  61. //# sourceMappingURL=helpers.mjs.map