UNPKG

react-box-overflow

Version:

Headless UI for automatically collapsing boxes when overflow in React.

1 lines 1.88 kB
{"version":3,"file":"useOverflow.cjs","sources":["../../src/useOverflow.ts"],"sourcesContent":["/**\n * @author shunzi <tobyzsj@gmail.com>\n * @date 2024-03-24 21:46:59\n */\nimport type { BoxOverflowOptions, OverflowItem } from 'box-overflow-core'\nimport { BoxOverflow } from 'box-overflow-core'\nimport { useEffect, useLayoutEffect, useReducer, useRef } from 'react'\n\nimport { useRefFn } from './useRefFn'\n\nconst useIsomorphicLayoutEffect\n = typeof document !== 'undefined' ? useLayoutEffect : useEffect\n\nexport function useOverflow(options: BoxOverflowOptions) {\n const [,forceRenderer] = useReducer (() => {\n return []\n }, [])\n\n const onDisplayChange = useRefFn((items: OverflowItem[]) => {\n forceRenderer()\n options.onDisplayChange?.(items)\n })\n\n const mergedOptions = {\n ...options,\n onDisplayChange,\n }\n\n const instance = useRef((new BoxOverflow(mergedOptions)))\n\n useEffect(() => {\n return instance.current.onMount()\n }, [])\n\n useIsomorphicLayoutEffect (() => {\n return instance.current.onUpdate()\n })\n\n useLayoutEffect(() => {\n instance.current.setOptions(mergedOptions)\n }, [options])\n\n return instance.current\n}\n"],"names":["useLayoutEffect","useEffect","useReducer","useRefFn","useRef","BoxOverflow"],"mappings":";;;;;AAUA,MAAM,4BACF,OAAO,aAAa,cAAcA,MAAAA,kBAAkBC,MAAAA;AAEjD,SAAS,YAAY,SAA6B;AACvD,QAAM,CAAE,EAAA,aAAa,IAAIC,MAAAA,WAAY,MAAM;AACzC,WAAO;EACT,GAAG,CAAE,CAAA;AAEC,QAAA,kBAAkBC,kBAAS,CAAC,UAA0B;;AAC5C;AACd,kBAAQ,oBAAR,iCAA0B;AAAA,EAAK,CAChC;AAED,QAAM,gBAAgB;AAAA,IACpB,GAAG;AAAA,IACH;AAAA,EAAA;AAGF,QAAM,WAAWC,MAAA,OAAQ,IAAIC,gBAAAA,YAAY,aAAa,CAAE;AAExDJ,QAAAA,UAAU,MAAM;AACP,WAAA,SAAS,QAAQ;EAC1B,GAAG,CAAE,CAAA;AAEL,4BAA2B,MAAM;AACxB,WAAA,SAAS,QAAQ;EAAS,CAClC;AAEDD,QAAAA,gBAAgB,MAAM;AACX,aAAA,QAAQ,WAAW,aAAa;AAAA,EAAA,GACxC,CAAC,OAAO,CAAC;AAEZ,SAAO,SAAS;AAClB;;"}