@scrolia/react-native
Version:
A headless scrollbar component
1 lines • 4.42 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","names":["axis: Axis","options?: UseContentHandlerOptions","event: LayoutChangeEvent","width: number","height: number","event: NativeSyntheticEvent<NativeScrollEvent>"],"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 { UseContentHandlerOptions, ContentXHandler, ContentYHandler };\nexport { useContentXHandler, useContentYHandler };\n"],"mappings":";;;;;AAkBA,MAAM,uBAAuB,CACzBA,MACAC,YACC;CACD,MAAM,EAAE,OAAO,GAAG,WAAW,CAAE;CAE/B,MAAM,EACF,SAAS,EAAE,UAAU,UAAU,SAAS,EACxC,CAAC,OAAO,EACJ,SACA,SACA,OACA,MACA,YACA,iBACA,oBACA,iBACA,oBACH,EACJ,GAAG,eAAe;CAEnB,MAAM,YAAY,YAAY;EAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACH,EAAC;CAEF,MAAM,WAAW,CAACC,UAAmC;AACjD,MAAI,CAAC,UAAU;AACX,OAAI,SAAS,KACT,KAAK,UAAU,MAAM,YAAY,OAAO;QAExC,KAAK,UAAU,MAAM,YAAY,OAAO;GAG5C,WAAW;EACd;EAED,OAAO,WAAW,MAAM;CAC3B;CAED,MAAM,sBAAsB,CAACC,OAAeC,WAAyB;AACjE,MAAI,CAAC,UAAU;AACX,OAAI,SAAS,KACT,MAAM,UAAU;QAEhB,MAAM,UAAU;GAGpB,WAAW;EACd;EAED,OAAO,sBAAsB,OAAO,OAAO;CAC9C;CAED,MAAM,WAAW,CAACC,UAAyD;AACvE,MAAI,CAAC,UACD,eAAe;GACX;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACH,EAAC;EAEN,OAAO,WAAW,MAAM;CAC3B;AAED,QAAO;EACH;EACA;EACA;CACH;AACJ;AAED,MAAM,qBAAqB,CAACJ,YAAuC;AAC/D,QAAO,qBAAqB,KAAK,QAAQ;AAC5C;AAED,MAAM,qBAAqB,CAACA,YAAuC;AAC/D,QAAO,qBAAqB,KAAK,QAAQ;AAC5C"}