{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/hooks/content/index.ts"],"sourcesContent":["import type {\n    LayoutChangeEvent,\n    NativeScrollEvent,\n    NativeSyntheticEvent,\n} from \"react-native\";\n\nimport type { Axis } from \"#/@types/options\";\n\nimport { useScrollCore } from \"#/contexts/scrollcore\";\nimport { setLengthFn } from \"#/hooks/content/functions/length\";\nimport { handleScrollFn } from \"#/hooks/content/functions/scroll\";\n\n/** Options for the `useContentHandler` hook. */\ntype UseContentHandlerOptions = {\n    props?: any;\n};\n\n/** Content handler. */\nconst createContentHandler = (\n    axis: Axis,\n    options?: UseContentHandlerOptions,\n) => {\n    const { props } = options ?? {};\n\n    const {\n        options: { disabled, animated, plugins },\n        [axis]: {\n            hvTrack,\n            hvThumb,\n            total,\n            view,\n            viewOffset,\n            scrollbarLength,\n            setScrollbarLength,\n            scrollbarOffset,\n            setScrollbarOffset,\n        },\n    } = useScrollCore();\n\n    const setLength = setLengthFn({\n        axis,\n        disabled,\n        animated,\n        plugins,\n        hvTrack,\n        hvThumb,\n        total,\n        view,\n        viewOffset,\n        scrollbarLength,\n        setScrollbarLength,\n    });\n\n    const onLayout = (event: LayoutChangeEvent): void => {\n        if (!disabled) {\n            if (axis === \"x\") {\n                view.current = event.nativeEvent.layout.width;\n            } else {\n                view.current = event.nativeEvent.layout.height;\n            }\n\n            setLength();\n        }\n\n        props?.onLayout?.(event);\n    };\n\n    const onContentSizeChange = (width: number, height: number): void => {\n        if (!disabled) {\n            if (axis === \"x\") {\n                total.current = width;\n            } else {\n                total.current = height;\n            }\n\n            setLength();\n        }\n\n        props?.onContentSizeChange?.(width, height);\n    };\n\n    const onScroll = (event: NativeSyntheticEvent<NativeScrollEvent>): void => {\n        if (!disabled)\n            handleScrollFn({\n                axis,\n                event,\n                disabled,\n                animated,\n                plugins,\n                hvTrack,\n                hvThumb,\n                total,\n                view,\n                viewOffset,\n                scrollbarOffset,\n                setScrollbarOffset,\n            });\n\n        props?.onScroll?.(event);\n    };\n\n    return {\n        onLayout,\n        onContentSizeChange,\n        onScroll,\n    };\n};\n\nconst useContentXHandler = (options?: UseContentHandlerOptions) => {\n    return createContentHandler(\"x\", options);\n};\n\nconst useContentYHandler = (options?: UseContentHandlerOptions) => {\n    return createContentHandler(\"y\", options);\n};\n\n/** Result of the `useContentXHandler` hook. */\ntype ContentXHandler = ReturnType<typeof useContentXHandler>;\n\n/** Result of the `useContentYHandler` hook. */\ntype ContentYHandler = ReturnType<typeof useContentYHandler>;\n\nexport type { ContentXHandler, ContentYHandler, UseContentHandlerOptions };\nexport { useContentXHandler, useContentYHandler };\n"],"mappings":";;;;;AAkBA,MAAM,wBACF,MACA,YACC;CACD,MAAM,EAAE,UAAU,WAAW,EAAE;CAE/B,MAAM,EACF,SAAS,EAAE,UAAU,UAAU,YAC9B,OAAO,EACJ,SACA,SACA,OACA,MACA,YACA,iBACA,oBACA,iBACA,yBAEJ,eAAe;CAEnB,MAAM,YAAY,YAAY;EAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACH,CAAC;CAEF,MAAM,YAAY,UAAmC;AACjD,MAAI,CAAC,UAAU;AACX,OAAI,SAAS,IACT,MAAK,UAAU,MAAM,YAAY,OAAO;OAExC,MAAK,UAAU,MAAM,YAAY,OAAO;AAG5C,cAAW;;AAGf,SAAO,WAAW,MAAM;;CAG5B,MAAM,uBAAuB,OAAe,WAAyB;AACjE,MAAI,CAAC,UAAU;AACX,OAAI,SAAS,IACT,OAAM,UAAU;OAEhB,OAAM,UAAU;AAGpB,cAAW;;AAGf,SAAO,sBAAsB,OAAO,OAAO;;CAG/C,MAAM,YAAY,UAAyD;AACvE,MAAI,CAAC,SACD,gBAAe;GACX;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC;AAEN,SAAO,WAAW,MAAM;;AAG5B,QAAO;EACH;EACA;EACA;EACH;;AAGL,MAAM,sBAAsB,YAAuC;AAC/D,QAAO,qBAAqB,KAAK,QAAQ;;AAG7C,MAAM,sBAAsB,YAAuC;AAC/D,QAAO,qBAAqB,KAAK,QAAQ"}