UNPKG

vuestic-ui

Version:
1 lines 1.8 kB
{"version":3,"file":"useScrollParent.mjs","sources":["../../../../src/composables/useScrollParent.ts"],"sourcesContent":["import { Ref } from 'vue'\nimport { useWindow } from './useWindow'\n\ntype ScrollElement = HTMLElement | (Window & { scrollLeft: number; scrollTop: number })\n\nexport const useScrollParent = () => {\n const window = useWindow()\n\n const fakeWindow = new Proxy(window.value || {}, {\n get: (target, key: any, rec) => {\n // Re-map scrollTop and scrollLeft to window.scrollY and window.scrollX\n if (key === 'scrollTop') {\n return window.value?.scrollY\n }\n if (key === 'scrollLeft') {\n return window.value?.scrollX\n }\n\n const value = Reflect.get(target, key, rec)\n if (typeof (value) === 'function') {\n return value.bind(target)\n }\n return value\n },\n })\n\n const getScrollableParent = (element?: HTMLElement | null): ScrollElement => {\n if (!element) {\n return fakeWindow as ScrollElement\n }\n\n if (element.scrollHeight > element.clientHeight) {\n return element\n }\n\n return getScrollableParent(element.parentElement)\n }\n\n return { getScrollableParent }\n}\n"],"names":[],"mappings":";AAKO,MAAM,kBAAkB,MAAM;AACnC,QAAM,SAAS;AAEf,QAAM,aAAa,IAAI,MAAM,OAAO,SAAS,CAAA,GAAI;AAAA,IAC/C,KAAK,CAAC,QAAQ,KAAU,QAAQ;;AAE9B,UAAI,QAAQ,aAAa;AACvB,gBAAO,YAAO,UAAP,mBAAc;AAAA,MACvB;AACA,UAAI,QAAQ,cAAc;AACxB,gBAAO,YAAO,UAAP,mBAAc;AAAA,MACvB;AAEA,YAAM,QAAQ,QAAQ,IAAI,QAAQ,KAAK,GAAG;AACtC,UAAA,OAAQ,UAAW,YAAY;AAC1B,eAAA,MAAM,KAAK,MAAM;AAAA,MAC1B;AACO,aAAA;AAAA,IACT;AAAA,EAAA,CACD;AAEK,QAAA,sBAAsB,CAAC,YAAgD;AAC3E,QAAI,CAAC,SAAS;AACL,aAAA;AAAA,IACT;AAEI,QAAA,QAAQ,eAAe,QAAQ,cAAc;AACxC,aAAA;AAAA,IACT;AAEO,WAAA,oBAAoB,QAAQ,aAAa;AAAA,EAAA;AAGlD,SAAO,EAAE,oBAAoB;AAC/B;"}