@scrolia/react-native
Version:
A headless scrollbar component
1 lines • 3.32 kB
Source Map (JSON)
{"version":3,"file":"scrollcore.mjs","names":[],"sources":["../../src/contexts/scrollcore.ts"],"sourcesContent":["\"use client\";\n\nimport type { CompleteOptions } from \"#/@types/options\";\n\nimport * as React from \"react\";\n\n/** Options for the `ScrollCore` context. */\ntype ScrollCoreOptions = CompleteOptions;\n\n/** Content type. */\ntype ContentType = \"scrollview\" | \"flatlist\";\n\n/** States for the `ScrollCore` context. */\ntype ScrollCoreStates = {\n contentType: React.RefObject<ContentType>;\n contentRef: React.RefObject<any | null>;\n hvTrack: boolean;\n setHvTrack: React.Dispatch<React.SetStateAction<boolean>>;\n hvThumb: boolean;\n setHvThumb: React.Dispatch<React.SetStateAction<boolean>>;\n total: React.RefObject<number>;\n view: React.RefObject<number>;\n viewOffset: React.RefObject<number>;\n scrollbarLength: number;\n setScrollbarLength: React.Dispatch<React.SetStateAction<number>>;\n scrollbarOffset: number;\n setScrollbarOffset: React.Dispatch<React.SetStateAction<number>>;\n};\n\nconst useScrollCoreStates = (): ScrollCoreStates => {\n const contentType = React.useRef<ContentType>(\"scrollview\");\n\n const contentRef = React.useRef<any | null>(null);\n\n const [hvTrack, setHvTrack] = React.useState<boolean>(false);\n const [hvThumb, setHvThumb] = React.useState<boolean>(false);\n\n const total = React.useRef<number>(0);\n\n const view = React.useRef<number>(0);\n\n const viewOffset = React.useRef<number>(0);\n\n const [scrollbarLength, setScrollbarLength] = React.useState<number>(0);\n\n const [scrollbarOffset, setScrollbarOffset] = React.useState<number>(0);\n\n return {\n contentType,\n contentRef,\n hvTrack,\n setHvTrack,\n hvThumb,\n setHvThumb,\n total,\n view,\n viewOffset,\n scrollbarLength,\n setScrollbarLength,\n scrollbarOffset,\n setScrollbarOffset,\n };\n};\n\n/** Core for internal logic. */\ntype ScrollCore = {\n options: ScrollCoreOptions;\n x: ScrollCoreStates;\n y: ScrollCoreStates;\n};\n\n/** `ScrollCore` context. */\nconst ScrollCoreContext: React.Context<ScrollCore | null> =\n React.createContext<ScrollCore | null>(null);\n\n/** Hook for using the `ScrollCore` context. */\nconst useScrollCore = (): ScrollCore => {\n const core: ScrollCore | null = React.useContext(ScrollCoreContext);\n\n if (core === null) {\n throw new Error(\"useScrollCore must be used within a provider\");\n }\n\n return core;\n};\n\nexport type { ContentType, ScrollCore, ScrollCoreOptions, ScrollCoreStates };\nexport { ScrollCoreContext, useScrollCore, useScrollCoreStates };\n"],"mappings":";;;;AA6BA,MAAM,4BAA8C;CAChD,MAAM,cAAc,MAAM,OAAoB,aAAa;CAE3D,MAAM,aAAa,MAAM,OAAmB,KAAK;CAEjD,MAAM,CAAC,SAAS,cAAc,MAAM,SAAkB,MAAM;CAC5D,MAAM,CAAC,SAAS,cAAc,MAAM,SAAkB,MAAM;CAE5D,MAAM,QAAQ,MAAM,OAAe,EAAE;CAErC,MAAM,OAAO,MAAM,OAAe,EAAE;CAEpC,MAAM,aAAa,MAAM,OAAe,EAAE;CAE1C,MAAM,CAAC,iBAAiB,sBAAsB,MAAM,SAAiB,EAAE;CAEvE,MAAM,CAAC,iBAAiB,sBAAsB,MAAM,SAAiB,EAAE;AAEvE,QAAO;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACH;;;AAWL,MAAM,oBACF,MAAM,cAAiC,KAAK;;AAGhD,MAAM,sBAAkC;CACpC,MAAM,OAA0B,MAAM,WAAW,kBAAkB;AAEnE,KAAI,SAAS,KACT,OAAM,IAAI,MAAM,+CAA+C;AAGnE,QAAO"}