UNPKG

@scrolia/react

Version:

A headless scrollbar component

1 lines 1.9 kB
{"version":3,"file":"scrollcore.mjs","names":["ScrollCoreContext: React.Context<ScrollCore | null>","core: ScrollCore | null"],"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/** States for the `ScrollCore` context. */\ntype ScrollCoreStates = {\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\n/** Core for internal logic. */\ntype ScrollCore = {\n options: ScrollCoreOptions;\n contentRef: React.RefObject<HTMLDivElement | null>;\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 { ScrollCoreOptions, ScrollCoreStates, ScrollCore };\nexport { ScrollCoreContext, useScrollCore };\n"],"mappings":";;;;;;AAiCA,MAAMA,oBACF,MAAM,cAAiC,KAAK;;AAGhD,MAAM,gBAAgB,MAAkB;CACpC,MAAMC,OAA0B,MAAM,WAAW,kBAAkB;AAEnE,KAAI,SAAS,KACT,OAAM,IAAI,MAAM;AAGpB,QAAO;AACV"}