@fluentui/react-virtualizer 9.0.0-alpha.22 → 9.0.0-alpha.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.json +40 -1
  2. package/CHANGELOG.md +15 -2
  3. package/dist/index.d.ts +59 -7
  4. package/lib/components/Virtualizer/Virtualizer.types.js.map +1 -1
  5. package/lib/components/Virtualizer/renderVirtualizer.js.map +1 -1
  6. package/lib/components/Virtualizer/useVirtualizer.js +83 -13
  7. package/lib/components/Virtualizer/useVirtualizer.js.map +1 -1
  8. package/lib/components/VirtualizerScrollView/VirtualizerScrollView.js.map +1 -1
  9. package/lib/components/VirtualizerScrollView/VirtualizerScrollView.types.js.map +1 -1
  10. package/lib/components/VirtualizerScrollView/renderVirtualizerScrollView.js.map +1 -1
  11. package/lib/components/VirtualizerScrollView/useVirtualizerScrollView.js +39 -3
  12. package/lib/components/VirtualizerScrollView/useVirtualizerScrollView.js.map +1 -1
  13. package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.js.map +1 -1
  14. package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js.map +1 -1
  15. package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js +43 -5
  16. package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js.map +1 -1
  17. package/lib/hooks/useResizeObserverRef.js +2 -0
  18. package/lib/hooks/useResizeObserverRef.js.map +1 -1
  19. package/lib/index.js +1 -1
  20. package/lib/index.js.map +1 -1
  21. package/lib/utilities/ImperativeScrolling/imperativeScrolling.js +32 -0
  22. package/lib/utilities/ImperativeScrolling/imperativeScrolling.js.map +1 -0
  23. package/lib/utilities/ImperativeScrolling/imperativeScrolling.types.js +1 -0
  24. package/lib/utilities/ImperativeScrolling/imperativeScrolling.types.js.map +1 -0
  25. package/lib/utilities/ImperativeScrolling/imperativeScrollingDynamic.js +45 -0
  26. package/lib/utilities/ImperativeScrolling/imperativeScrollingDynamic.js.map +1 -0
  27. package/lib/utilities/ImperativeScrolling/index.js +3 -0
  28. package/lib/utilities/ImperativeScrolling/index.js.map +1 -0
  29. package/lib/utilities/index.js +1 -0
  30. package/lib/utilities/index.js.map +1 -1
  31. package/lib-commonjs/components/Virtualizer/useVirtualizer.js +83 -13
  32. package/lib-commonjs/components/Virtualizer/useVirtualizer.js.map +1 -1
  33. package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollView.js +38 -3
  34. package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollView.js.map +1 -1
  35. package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js +41 -4
  36. package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js.map +1 -1
  37. package/lib-commonjs/hooks/useResizeObserverRef.js +2 -0
  38. package/lib-commonjs/hooks/useResizeObserverRef.js.map +1 -1
  39. package/lib-commonjs/index.js +2 -0
  40. package/lib-commonjs/index.js.map +1 -1
  41. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.js +40 -0
  42. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.js.map +1 -0
  43. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.types.js +4 -0
  44. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.types.js.map +1 -0
  45. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrollingDynamic.js +53 -0
  46. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrollingDynamic.js.map +1 -0
  47. package/lib-commonjs/utilities/ImperativeScrolling/index.js +8 -0
  48. package/lib-commonjs/utilities/ImperativeScrolling/index.js.map +1 -0
  49. package/lib-commonjs/utilities/index.js +1 -0
  50. package/lib-commonjs/utilities/index.js.map +1 -1
  51. package/package.json +4 -4
@@ -2,19 +2,55 @@ import * as React from 'react';
2
2
  import { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';
3
3
  import { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';
4
4
  import { useStaticVirtualizerMeasure } from '../../Hooks';
5
+ import { useImperativeHandle } from 'react';
6
+ import { scrollToItemStatic } from '../../Utilities';
5
7
  export function useVirtualizerScrollView_unstable(props) {
8
+ const { imperativeRef , itemSize , numItems , axis ='vertical' , reversed } = props;
6
9
  var _props_axis;
7
10
  const { virtualizerLength , bufferItems , bufferSize , scrollRef } = useStaticVirtualizerMeasure({
8
11
  defaultItemSize: props.itemSize,
9
12
  direction: (_props_axis = props.axis) !== null && _props_axis !== void 0 ? _props_axis : 'vertical'
10
13
  });
11
- const iScrollRef = useMergedRefs(React.useRef(null), scrollRef);
14
+ const scrollViewRef = useMergedRefs(React.useRef(null), scrollRef);
15
+ const imperativeVirtualizerRef = React.useRef(null);
16
+ const scrollCallbackRef = React.useRef(null);
17
+ useImperativeHandle(imperativeRef, ()=>{
18
+ return {
19
+ scrollTo (index, behavior = 'auto', callback) {
20
+ var _imperativeVirtualizerRef_current;
21
+ scrollCallbackRef.current = callback !== null && callback !== void 0 ? callback : null;
22
+ (_imperativeVirtualizerRef_current = imperativeVirtualizerRef.current) === null || _imperativeVirtualizerRef_current === void 0 ? void 0 : _imperativeVirtualizerRef_current.setFlaggedIndex(index);
23
+ scrollToItemStatic({
24
+ index,
25
+ itemSize,
26
+ totalItems: numItems,
27
+ scrollViewRef,
28
+ axis,
29
+ reversed,
30
+ behavior
31
+ });
32
+ }
33
+ };
34
+ }, [
35
+ axis,
36
+ scrollViewRef,
37
+ itemSize,
38
+ numItems,
39
+ reversed
40
+ ]);
41
+ const handleRenderedIndex = (index)=>{
42
+ if (scrollCallbackRef.current) {
43
+ scrollCallbackRef.current(index);
44
+ }
45
+ };
12
46
  const virtualizerState = useVirtualizer_unstable({
13
47
  ...props,
14
48
  virtualizerLength,
15
49
  bufferItems,
16
50
  bufferSize,
17
- scrollViewRef: iScrollRef
51
+ scrollViewRef,
52
+ onRenderedFlaggedIndex: handleRenderedIndex,
53
+ imperativeVirtualizerRef
18
54
  });
19
55
  return {
20
56
  ...virtualizerState,
@@ -25,7 +61,7 @@ export function useVirtualizerScrollView_unstable(props) {
25
61
  container: resolveShorthand(props.container, {
26
62
  required: true,
27
63
  defaultProps: {
28
- ref: iScrollRef
64
+ ref: scrollViewRef
29
65
  }
30
66
  })
31
67
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["useVirtualizerScrollView.ts"],"sourcesContent":["import * as React from 'react';\nimport { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';\nimport { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';\nimport { VirtualizerScrollViewProps, VirtualizerScrollViewState } from './VirtualizerScrollView.types';\nimport { useStaticVirtualizerMeasure } from '../../Hooks';\n\nexport function useVirtualizerScrollView_unstable(props: VirtualizerScrollViewProps): VirtualizerScrollViewState {\n const { virtualizerLength, bufferItems, bufferSize, scrollRef } = useStaticVirtualizerMeasure({\n defaultItemSize: props.itemSize,\n direction: props.axis ?? 'vertical',\n });\n\n const iScrollRef = useMergedRefs(React.useRef<HTMLDivElement>(null), scrollRef);\n\n const virtualizerState = useVirtualizer_unstable({\n ...props,\n virtualizerLength,\n bufferItems,\n bufferSize,\n scrollViewRef: iScrollRef,\n });\n\n return {\n ...virtualizerState,\n components: {\n ...virtualizerState.components,\n container: 'div',\n },\n container: resolveShorthand(props.container, {\n required: true,\n defaultProps: {\n ref: iScrollRef as React.RefObject<HTMLDivElement>,\n },\n }),\n };\n}\n"],"names":["React","resolveShorthand","useMergedRefs","useVirtualizer_unstable","useStaticVirtualizerMeasure","useVirtualizerScrollView_unstable","props","virtualizerLength","bufferItems","bufferSize","scrollRef","defaultItemSize","itemSize","direction","axis","iScrollRef","useRef","virtualizerState","scrollViewRef","components","container","required","defaultProps","ref"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,4BAA4B;AAC5E,SAASC,uBAAuB,QAAQ,gCAAgC;AAExE,SAASC,2BAA2B,QAAQ,cAAc;AAE1D,OAAO,SAASC,kCAAkCC,KAAiC,EAA8B;QAGlGA;IAFb,MAAM,EAAEC,kBAAiB,EAAEC,YAAW,EAAEC,WAAU,EAAEC,UAAS,EAAE,GAAGN,4BAA4B;QAC5FO,iBAAiBL,MAAMM,QAAQ;QAC/BC,WAAWP,CAAAA,cAAAA,MAAMQ,IAAI,cAAVR,yBAAAA,cAAc,UAAU;IACrC;IAEA,MAAMS,aAAab,cAAcF,MAAMgB,MAAM,CAAiB,IAAI,GAAGN;IAErE,MAAMO,mBAAmBd,wBAAwB;QAC/C,GAAGG,KAAK;QACRC;QACAC;QACAC;QACAS,eAAeH;IACjB;IAEA,OAAO;QACL,GAAGE,gBAAgB;QACnBE,YAAY;YACV,GAAGF,iBAAiBE,UAAU;YAC9BC,WAAW;QACb;QACAA,WAAWnB,iBAAiBK,MAAMc,SAAS,EAAE;YAC3CC,UAAU,IAAI;YACdC,cAAc;gBACZC,KAAKR;YACP;QACF;IACF;AACF,CAAC"}
1
+ {"version":3,"sources":["useVirtualizerScrollView.ts"],"sourcesContent":["import * as React from 'react';\nimport { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';\nimport { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';\nimport type { VirtualizerScrollViewProps, VirtualizerScrollViewState } from './VirtualizerScrollView.types';\nimport { useStaticVirtualizerMeasure } from '../../Hooks';\nimport { useImperativeHandle } from 'react';\nimport { scrollToItemStatic } from '../../Utilities';\nimport type { VirtualizerDataRef } from '../Virtualizer/Virtualizer.types';\n\nexport function useVirtualizerScrollView_unstable(props: VirtualizerScrollViewProps): VirtualizerScrollViewState {\n const { imperativeRef, itemSize, numItems, axis = 'vertical', reversed } = props;\n const { virtualizerLength, bufferItems, bufferSize, scrollRef } = useStaticVirtualizerMeasure({\n defaultItemSize: props.itemSize,\n direction: props.axis ?? 'vertical',\n });\n\n const scrollViewRef = useMergedRefs(React.useRef<HTMLDivElement>(null), scrollRef) as React.RefObject<HTMLDivElement>;\n const imperativeVirtualizerRef = React.useRef<VirtualizerDataRef | null>(null);\n const scrollCallbackRef = React.useRef<null | ((index: number) => void)>(null);\n\n useImperativeHandle(\n imperativeRef,\n () => {\n return {\n scrollTo(index: number, behavior = 'auto', callback: ((index: number) => void) | undefined) {\n scrollCallbackRef.current = callback ?? null;\n imperativeVirtualizerRef.current?.setFlaggedIndex(index);\n scrollToItemStatic({\n index,\n itemSize,\n totalItems: numItems,\n scrollViewRef,\n axis,\n reversed,\n behavior,\n });\n },\n };\n },\n [axis, scrollViewRef, itemSize, numItems, reversed],\n );\n\n const handleRenderedIndex = (index: number) => {\n if (scrollCallbackRef.current) {\n scrollCallbackRef.current(index);\n }\n };\n\n const virtualizerState = useVirtualizer_unstable({\n ...props,\n virtualizerLength,\n bufferItems,\n bufferSize,\n scrollViewRef,\n onRenderedFlaggedIndex: handleRenderedIndex,\n imperativeVirtualizerRef,\n });\n\n return {\n ...virtualizerState,\n components: {\n ...virtualizerState.components,\n container: 'div',\n },\n container: resolveShorthand(props.container, {\n required: true,\n defaultProps: {\n ref: scrollViewRef as React.RefObject<HTMLDivElement>,\n },\n }),\n };\n}\n"],"names":["React","resolveShorthand","useMergedRefs","useVirtualizer_unstable","useStaticVirtualizerMeasure","useImperativeHandle","scrollToItemStatic","useVirtualizerScrollView_unstable","props","imperativeRef","itemSize","numItems","axis","reversed","virtualizerLength","bufferItems","bufferSize","scrollRef","defaultItemSize","direction","scrollViewRef","useRef","imperativeVirtualizerRef","scrollCallbackRef","scrollTo","index","behavior","callback","current","setFlaggedIndex","totalItems","handleRenderedIndex","virtualizerState","onRenderedFlaggedIndex","components","container","required","defaultProps","ref"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,4BAA4B;AAC5E,SAASC,uBAAuB,QAAQ,gCAAgC;AAExE,SAASC,2BAA2B,QAAQ,cAAc;AAC1D,SAASC,mBAAmB,QAAQ,QAAQ;AAC5C,SAASC,kBAAkB,QAAQ,kBAAkB;AAGrD,OAAO,SAASC,kCAAkCC,KAAiC,EAA8B;IAC/G,MAAM,EAAEC,cAAa,EAAEC,SAAQ,EAAEC,SAAQ,EAAEC,MAAO,WAAU,EAAEC,SAAQ,EAAE,GAAGL;QAG9DA;IAFb,MAAM,EAAEM,kBAAiB,EAAEC,YAAW,EAAEC,WAAU,EAAEC,UAAS,EAAE,GAAGb,4BAA4B;QAC5Fc,iBAAiBV,MAAME,QAAQ;QAC/BS,WAAWX,CAAAA,cAAAA,MAAMI,IAAI,cAAVJ,yBAAAA,cAAc,UAAU;IACrC;IAEA,MAAMY,gBAAgBlB,cAAcF,MAAMqB,MAAM,CAAiB,IAAI,GAAGJ;IACxE,MAAMK,2BAA2BtB,MAAMqB,MAAM,CAA4B,IAAI;IAC7E,MAAME,oBAAoBvB,MAAMqB,MAAM,CAAmC,IAAI;IAE7EhB,oBACEI,eACA,IAAM;QACJ,OAAO;YACLe,UAASC,KAAa,EAAEC,WAAW,MAAM,EAAEC,QAA+C,EAAE;oBAE1FL;gBADAC,kBAAkBK,OAAO,GAAGD,qBAAAA,sBAAAA,WAAY,IAAI;gBAC5CL,CAAAA,oCAAAA,yBAAyBM,OAAO,cAAhCN,+CAAAA,KAAAA,IAAAA,kCAAkCO,gBAAgBJ;gBAClDnB,mBAAmB;oBACjBmB;oBACAf;oBACAoB,YAAYnB;oBACZS;oBACAR;oBACAC;oBACAa;gBACF;YACF;QACF;IACF,GACA;QAACd;QAAMQ;QAAeV;QAAUC;QAAUE;KAAS;IAGrD,MAAMkB,sBAAsB,CAACN,QAAkB;QAC7C,IAAIF,kBAAkBK,OAAO,EAAE;YAC7BL,kBAAkBK,OAAO,CAACH;QAC5B,CAAC;IACH;IAEA,MAAMO,mBAAmB7B,wBAAwB;QAC/C,GAAGK,KAAK;QACRM;QACAC;QACAC;QACAI;QACAa,wBAAwBF;QACxBT;IACF;IAEA,OAAO;QACL,GAAGU,gBAAgB;QACnBE,YAAY;YACV,GAAGF,iBAAiBE,UAAU;YAC9BC,WAAW;QACb;QACAA,WAAWlC,iBAAiBO,MAAM2B,SAAS,EAAE;YAC3CC,UAAU,IAAI;YACdC,cAAc;gBACZC,KAAKlB;YACP;QACF;IACF;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["VirtualizerScrollViewDynamic.ts"],"sourcesContent":["import { VirtualizerScrollViewDynamicProps } from './VirtualizerScrollViewDynamic.types';\nimport { useVirtualizerScrollViewDynamic_unstable } from './useVirtualizerScrollViewDynamic';\nimport { renderVirtualizerScrollViewDynamic_unstable } from './renderVirtualizerScrollViewDynamic';\nimport { useVirtualizerScrollViewDynamicStyles_unstable } from './useVirtualizerScrollViewDynamicStyles.styles';\nimport * as React from 'react';\nimport { VirtualizerContextProps } from '../../Utilities';\n\n/**\n * Virtualizer ScrollView\n */\n\nexport const VirtualizerScrollViewDynamic: React.FC<VirtualizerScrollViewDynamicProps> = (\n props: VirtualizerScrollViewDynamicProps,\n context: React.Context<VirtualizerContextProps>,\n) => {\n const state = useVirtualizerScrollViewDynamic_unstable(props);\n\n useVirtualizerScrollViewDynamicStyles_unstable(state);\n\n return renderVirtualizerScrollViewDynamic_unstable(state);\n};\n\nVirtualizerScrollViewDynamic.displayName = 'VirtualizerScrollViewDynamic';\n"],"names":["useVirtualizerScrollViewDynamic_unstable","renderVirtualizerScrollViewDynamic_unstable","useVirtualizerScrollViewDynamicStyles_unstable","React","VirtualizerScrollViewDynamic","props","context","state","displayName"],"mappings":"AACA,SAASA,wCAAwC,QAAQ,oCAAoC;AAC7F,SAASC,2CAA2C,QAAQ,uCAAuC;AACnG,SAASC,8CAA8C,QAAQ,iDAAiD;AAChH,YAAYC,WAAW,QAAQ;AAG/B;;CAEC,GAED,OAAO,MAAMC,+BAA4E,CACvFC,OACAC,UACG;IACH,MAAMC,QAAQP,yCAAyCK;IAEvDH,+CAA+CK;IAE/C,OAAON,4CAA4CM;AACrD,EAAE;AAEFH,6BAA6BI,WAAW,GAAG"}
1
+ {"version":3,"sources":["VirtualizerScrollViewDynamic.ts"],"sourcesContent":["import type { VirtualizerScrollViewDynamicProps } from './VirtualizerScrollViewDynamic.types';\nimport { useVirtualizerScrollViewDynamic_unstable } from './useVirtualizerScrollViewDynamic';\nimport { renderVirtualizerScrollViewDynamic_unstable } from './renderVirtualizerScrollViewDynamic';\nimport { useVirtualizerScrollViewDynamicStyles_unstable } from './useVirtualizerScrollViewDynamicStyles.styles';\nimport * as React from 'react';\nimport type { VirtualizerContextProps } from '../../Utilities';\n\n/**\n * Virtualizer ScrollView\n */\n\nexport const VirtualizerScrollViewDynamic: React.FC<VirtualizerScrollViewDynamicProps> = (\n props: VirtualizerScrollViewDynamicProps,\n context: React.Context<VirtualizerContextProps>,\n) => {\n const state = useVirtualizerScrollViewDynamic_unstable(props);\n\n useVirtualizerScrollViewDynamicStyles_unstable(state);\n\n return renderVirtualizerScrollViewDynamic_unstable(state);\n};\n\nVirtualizerScrollViewDynamic.displayName = 'VirtualizerScrollViewDynamic';\n"],"names":["useVirtualizerScrollViewDynamic_unstable","renderVirtualizerScrollViewDynamic_unstable","useVirtualizerScrollViewDynamicStyles_unstable","React","VirtualizerScrollViewDynamic","props","context","state","displayName"],"mappings":"AACA,SAASA,wCAAwC,QAAQ,oCAAoC;AAC7F,SAASC,2CAA2C,QAAQ,uCAAuC;AACnG,SAASC,8CAA8C,QAAQ,iDAAiD;AAChH,YAAYC,WAAW,QAAQ;AAG/B;;CAEC,GAED,OAAO,MAAMC,+BAA4E,CACvFC,OACAC,UACG;IACH,MAAMC,QAAQP,yCAAyCK;IAEvDH,+CAA+CK;IAE/C,OAAON,4CAA4CM;AACrD,EAAE;AAEFH,6BAA6BI,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["VirtualizerScrollViewDynamic.types.ts"],"sourcesContent":["import { ComponentProps, ComponentState } from '@fluentui/react-utilities';\nimport {\n VirtualizerConfigProps,\n VirtualizerConfigState,\n VirtualizerChildRenderFunction,\n} from '../Virtualizer/Virtualizer.types';\n\nimport { VirtualizerScrollViewSlots } from '../VirtualizerScrollView/VirtualizerScrollView.types';\n\nexport type VirtualizerScrollViewDynamicSlots = VirtualizerScrollViewSlots;\n\nexport type VirtualizerScrollViewDynamicProps = ComponentProps<Partial<VirtualizerScrollViewDynamicSlots>> &\n Partial<Omit<VirtualizerConfigProps, 'itemSize' | 'numItems' | 'getItemSize' | 'children'>> & {\n /**\n * Set as the minimum item size.\n * Axis: 'vertical' = Height\n * Axis: 'horizontal' = Width\n */\n itemSize: number;\n /**\n * Callback for acquiring size of individual items\n * @param index - the index of the requested size's child\n */\n getItemSize: (index: number) => number;\n /**\n * The total number of items to be virtualized.\n */\n numItems: number;\n /**\n * Child render function.\n * Iteratively called to return current virtualizer DOM children.\n * Will act as a row or column indexer depending on Virtualizer settings.\n */\n children: VirtualizerChildRenderFunction;\n };\n\nexport type VirtualizerScrollViewDynamicState = ComponentState<VirtualizerScrollViewDynamicSlots> &\n VirtualizerConfigState;\n"],"names":[],"mappings":"AAAA,WAqCyB"}
1
+ {"version":3,"sources":["VirtualizerScrollViewDynamic.types.ts"],"sourcesContent":["import type { ComponentProps, ComponentState } from '@fluentui/react-utilities';\nimport type {\n VirtualizerConfigProps,\n VirtualizerConfigState,\n VirtualizerChildRenderFunction,\n} from '../Virtualizer/Virtualizer.types';\n\nimport type { VirtualizerScrollViewSlots } from '../VirtualizerScrollView/VirtualizerScrollView.types';\nimport type { RefObject } from 'react';\nimport type { ScrollToInterface } from '../../Utilities';\n\nexport type VirtualizerScrollViewDynamicSlots = VirtualizerScrollViewSlots;\n\nexport type VirtualizerScrollViewDynamicProps = ComponentProps<Partial<VirtualizerScrollViewDynamicSlots>> &\n Partial<Omit<VirtualizerConfigProps, 'itemSize' | 'numItems' | 'getItemSize' | 'children' | 'flagIndex'>> & {\n /**\n * Set as the minimum item size.\n * Axis: 'vertical' = Height\n * Axis: 'horizontal' = Width\n */\n itemSize: number;\n /**\n * Callback for acquiring size of individual items\n * @param index - the index of the requested size's child\n */\n getItemSize: (index: number) => number;\n /**\n * The total number of items to be virtualized.\n */\n numItems: number;\n /**\n * Child render function.\n * Iteratively called to return current virtualizer DOM children.\n * Will act as a row or column indexer depending on Virtualizer settings.\n */\n children: VirtualizerChildRenderFunction;\n /**\n * Imperative ref contains our scrollTo index functionality for user control.\n */\n imperativeRef?: RefObject<ScrollToInterface>;\n };\n\nexport type VirtualizerScrollViewDynamicState = ComponentState<VirtualizerScrollViewDynamicSlots> &\n VirtualizerConfigState;\n"],"names":[],"mappings":"AAAA,WA2CyB"}
@@ -2,9 +2,11 @@ import * as React from 'react';
2
2
  import { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';
3
3
  import { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';
4
4
  import { useDynamicVirtualizerMeasure } from '../../Hooks';
5
- import { useVirtualizerContextState_unstable } from '../../Utilities';
5
+ import { useVirtualizerContextState_unstable, scrollToItemDynamic } from '../../Utilities';
6
+ import { useImperativeHandle } from 'react';
6
7
  export function useVirtualizerScrollViewDynamic_unstable(props) {
7
8
  const contextState = useVirtualizerContextState_unstable(props.virtualizerContext);
9
+ const { imperativeRef , axis ='vertical' , reversed , imperativeVirtualizerRef } = props;
8
10
  var _props_axis, _contextState_contextIndex;
9
11
  const { virtualizerLength , bufferItems , bufferSize , scrollRef } = useDynamicVirtualizerMeasure({
10
12
  defaultItemSize: props.itemSize,
@@ -13,14 +15,50 @@ export function useVirtualizerScrollViewDynamic_unstable(props) {
13
15
  currentIndex: (_contextState_contextIndex = contextState === null || contextState === void 0 ? void 0 : contextState.contextIndex) !== null && _contextState_contextIndex !== void 0 ? _contextState_contextIndex : 0,
14
16
  numItems: props.numItems
15
17
  });
16
- const iScrollRef = useMergedRefs(React.useRef(null), scrollRef);
18
+ const scrollViewRef = useMergedRefs(React.useRef(null), scrollRef);
19
+ const scrollCallbackRef = React.useRef(null);
20
+ const _imperativeVirtualizerRef = useMergedRefs(React.useRef(null), imperativeVirtualizerRef);
21
+ useImperativeHandle(imperativeRef, ()=>{
22
+ return {
23
+ scrollTo (index, behavior = 'auto', callback) {
24
+ scrollCallbackRef.current = callback !== null && callback !== void 0 ? callback : null;
25
+ if (_imperativeVirtualizerRef.current) {
26
+ var _imperativeVirtualizerRef_current;
27
+ const progressiveSizes = _imperativeVirtualizerRef.current.progressiveSizes.current;
28
+ const totalSize = progressiveSizes && (progressiveSizes === null || progressiveSizes === void 0 ? void 0 : progressiveSizes.length) > 0 ? progressiveSizes[Math.max(progressiveSizes.length - 1, 0)] : 0;
29
+ _imperativeVirtualizerRef.current.setFlaggedIndex(index);
30
+ scrollToItemDynamic({
31
+ index,
32
+ itemSizes: (_imperativeVirtualizerRef_current = _imperativeVirtualizerRef.current) === null || _imperativeVirtualizerRef_current === void 0 ? void 0 : _imperativeVirtualizerRef_current.nodeSizes,
33
+ totalSize,
34
+ scrollViewRef,
35
+ axis,
36
+ reversed,
37
+ behavior
38
+ });
39
+ }
40
+ }
41
+ };
42
+ }, [
43
+ axis,
44
+ scrollViewRef,
45
+ reversed,
46
+ _imperativeVirtualizerRef
47
+ ]);
48
+ const handleRenderedIndex = (index)=>{
49
+ if (scrollCallbackRef.current) {
50
+ scrollCallbackRef.current(index);
51
+ }
52
+ };
17
53
  const virtualizerState = useVirtualizer_unstable({
18
54
  ...props,
19
55
  virtualizerLength,
20
56
  bufferItems,
21
57
  bufferSize,
22
- scrollViewRef: iScrollRef,
23
- virtualizerContext: contextState
58
+ scrollViewRef,
59
+ virtualizerContext: contextState,
60
+ imperativeVirtualizerRef: _imperativeVirtualizerRef,
61
+ onRenderedFlaggedIndex: handleRenderedIndex
24
62
  });
25
63
  return {
26
64
  ...virtualizerState,
@@ -31,7 +69,7 @@ export function useVirtualizerScrollViewDynamic_unstable(props) {
31
69
  container: resolveShorthand(props.container, {
32
70
  required: true,
33
71
  defaultProps: {
34
- ref: iScrollRef
72
+ ref: scrollViewRef
35
73
  }
36
74
  })
37
75
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["useVirtualizerScrollViewDynamic.ts"],"sourcesContent":["import * as React from 'react';\nimport { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';\nimport { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';\nimport {\n VirtualizerScrollViewDynamicProps,\n VirtualizerScrollViewDynamicState,\n} from './VirtualizerScrollViewDynamic.types';\nimport { useDynamicVirtualizerMeasure } from '../../Hooks';\nimport { useVirtualizerContextState_unstable } from '../../Utilities';\n\nexport function useVirtualizerScrollViewDynamic_unstable(\n props: VirtualizerScrollViewDynamicProps,\n): VirtualizerScrollViewDynamicState {\n const contextState = useVirtualizerContextState_unstable(props.virtualizerContext);\n\n const { virtualizerLength, bufferItems, bufferSize, scrollRef } = useDynamicVirtualizerMeasure({\n defaultItemSize: props.itemSize,\n direction: props.axis ?? 'vertical',\n getItemSize: props.getItemSize,\n currentIndex: contextState?.contextIndex ?? 0,\n numItems: props.numItems,\n });\n\n const iScrollRef = useMergedRefs(React.useRef<HTMLDivElement>(null), scrollRef) as React.RefObject<HTMLDivElement>;\n\n const virtualizerState = useVirtualizer_unstable({\n ...props,\n virtualizerLength,\n bufferItems,\n bufferSize,\n scrollViewRef: iScrollRef,\n virtualizerContext: contextState,\n });\n\n return {\n ...virtualizerState,\n components: {\n ...virtualizerState.components,\n container: 'div',\n },\n container: resolveShorthand(props.container, {\n required: true,\n defaultProps: {\n ref: iScrollRef,\n },\n }),\n };\n}\n"],"names":["React","resolveShorthand","useMergedRefs","useVirtualizer_unstable","useDynamicVirtualizerMeasure","useVirtualizerContextState_unstable","useVirtualizerScrollViewDynamic_unstable","props","contextState","virtualizerContext","virtualizerLength","bufferItems","bufferSize","scrollRef","defaultItemSize","itemSize","direction","axis","getItemSize","currentIndex","contextIndex","numItems","iScrollRef","useRef","virtualizerState","scrollViewRef","components","container","required","defaultProps","ref"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,4BAA4B;AAC5E,SAASC,uBAAuB,QAAQ,gCAAgC;AAKxE,SAASC,4BAA4B,QAAQ,cAAc;AAC3D,SAASC,mCAAmC,QAAQ,kBAAkB;AAEtE,OAAO,SAASC,yCACdC,KAAwC,EACL;IACnC,MAAMC,eAAeH,oCAAoCE,MAAME,kBAAkB;QAIpEF,aAEGC;IAJhB,MAAM,EAAEE,kBAAiB,EAAEC,YAAW,EAAEC,WAAU,EAAEC,UAAS,EAAE,GAAGT,6BAA6B;QAC7FU,iBAAiBP,MAAMQ,QAAQ;QAC/BC,WAAWT,CAAAA,cAAAA,MAAMU,IAAI,cAAVV,yBAAAA,cAAc,UAAU;QACnCW,aAAaX,MAAMW,WAAW;QAC9BC,cAAcX,CAAAA,6BAAAA,yBAAAA,0BAAAA,KAAAA,IAAAA,aAAcY,YAAY,cAA1BZ,wCAAAA,6BAA8B,CAAC;QAC7Ca,UAAUd,MAAMc,QAAQ;IAC1B;IAEA,MAAMC,aAAapB,cAAcF,MAAMuB,MAAM,CAAiB,IAAI,GAAGV;IAErE,MAAMW,mBAAmBrB,wBAAwB;QAC/C,GAAGI,KAAK;QACRG;QACAC;QACAC;QACAa,eAAeH;QACfb,oBAAoBD;IACtB;IAEA,OAAO;QACL,GAAGgB,gBAAgB;QACnBE,YAAY;YACV,GAAGF,iBAAiBE,UAAU;YAC9BC,WAAW;QACb;QACAA,WAAW1B,iBAAiBM,MAAMoB,SAAS,EAAE;YAC3CC,UAAU,IAAI;YACdC,cAAc;gBACZC,KAAKR;YACP;QACF;IACF;AACF,CAAC"}
1
+ {"version":3,"sources":["useVirtualizerScrollViewDynamic.ts"],"sourcesContent":["import * as React from 'react';\nimport { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';\nimport { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';\nimport type {\n VirtualizerScrollViewDynamicProps,\n VirtualizerScrollViewDynamicState,\n} from './VirtualizerScrollViewDynamic.types';\nimport { useDynamicVirtualizerMeasure } from '../../Hooks';\nimport { useVirtualizerContextState_unstable, scrollToItemDynamic } from '../../Utilities';\nimport type { VirtualizerDataRef } from '../Virtualizer/Virtualizer.types';\nimport { useImperativeHandle } from 'react';\n\nexport function useVirtualizerScrollViewDynamic_unstable(\n props: VirtualizerScrollViewDynamicProps,\n): VirtualizerScrollViewDynamicState {\n const contextState = useVirtualizerContextState_unstable(props.virtualizerContext);\n const { imperativeRef, axis = 'vertical', reversed, imperativeVirtualizerRef } = props;\n\n const { virtualizerLength, bufferItems, bufferSize, scrollRef } = useDynamicVirtualizerMeasure({\n defaultItemSize: props.itemSize,\n direction: props.axis ?? 'vertical',\n getItemSize: props.getItemSize,\n currentIndex: contextState?.contextIndex ?? 0,\n numItems: props.numItems,\n });\n\n const scrollViewRef = useMergedRefs(React.useRef<HTMLDivElement>(null), scrollRef) as React.RefObject<HTMLDivElement>;\n const scrollCallbackRef = React.useRef<null | ((index: number) => void)>(null);\n\n const _imperativeVirtualizerRef = useMergedRefs(React.useRef<VirtualizerDataRef>(null), imperativeVirtualizerRef);\n\n useImperativeHandle(\n imperativeRef,\n () => {\n return {\n scrollTo(index: number, behavior = 'auto', callback: undefined | ((index: number) => void)) {\n scrollCallbackRef.current = callback ?? null;\n if (_imperativeVirtualizerRef.current) {\n const progressiveSizes = _imperativeVirtualizerRef.current.progressiveSizes.current;\n const totalSize =\n progressiveSizes && progressiveSizes?.length > 0\n ? progressiveSizes[Math.max(progressiveSizes.length - 1, 0)]\n : 0;\n\n _imperativeVirtualizerRef.current.setFlaggedIndex(index);\n scrollToItemDynamic({\n index,\n itemSizes: _imperativeVirtualizerRef.current?.nodeSizes,\n totalSize,\n scrollViewRef,\n axis,\n reversed,\n behavior,\n });\n }\n },\n };\n },\n [axis, scrollViewRef, reversed, _imperativeVirtualizerRef],\n );\n\n const handleRenderedIndex = (index: number) => {\n if (scrollCallbackRef.current) {\n scrollCallbackRef.current(index);\n }\n };\n\n const virtualizerState = useVirtualizer_unstable({\n ...props,\n virtualizerLength,\n bufferItems,\n bufferSize,\n scrollViewRef,\n virtualizerContext: contextState,\n imperativeVirtualizerRef: _imperativeVirtualizerRef,\n onRenderedFlaggedIndex: handleRenderedIndex,\n });\n\n return {\n ...virtualizerState,\n components: {\n ...virtualizerState.components,\n container: 'div',\n },\n container: resolveShorthand(props.container, {\n required: true,\n defaultProps: {\n ref: scrollViewRef,\n },\n }),\n };\n}\n"],"names":["React","resolveShorthand","useMergedRefs","useVirtualizer_unstable","useDynamicVirtualizerMeasure","useVirtualizerContextState_unstable","scrollToItemDynamic","useImperativeHandle","useVirtualizerScrollViewDynamic_unstable","props","contextState","virtualizerContext","imperativeRef","axis","reversed","imperativeVirtualizerRef","virtualizerLength","bufferItems","bufferSize","scrollRef","defaultItemSize","itemSize","direction","getItemSize","currentIndex","contextIndex","numItems","scrollViewRef","useRef","scrollCallbackRef","_imperativeVirtualizerRef","scrollTo","index","behavior","callback","current","progressiveSizes","totalSize","length","Math","max","setFlaggedIndex","itemSizes","nodeSizes","handleRenderedIndex","virtualizerState","onRenderedFlaggedIndex","components","container","required","defaultProps","ref"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,4BAA4B;AAC5E,SAASC,uBAAuB,QAAQ,gCAAgC;AAKxE,SAASC,4BAA4B,QAAQ,cAAc;AAC3D,SAASC,mCAAmC,EAAEC,mBAAmB,QAAQ,kBAAkB;AAE3F,SAASC,mBAAmB,QAAQ,QAAQ;AAE5C,OAAO,SAASC,yCACdC,KAAwC,EACL;IACnC,MAAMC,eAAeL,oCAAoCI,MAAME,kBAAkB;IACjF,MAAM,EAAEC,cAAa,EAAEC,MAAO,WAAU,EAAEC,SAAQ,EAAEC,yBAAwB,EAAE,GAAGN;QAIpEA,aAEGC;IAJhB,MAAM,EAAEM,kBAAiB,EAAEC,YAAW,EAAEC,WAAU,EAAEC,UAAS,EAAE,GAAGf,6BAA6B;QAC7FgB,iBAAiBX,MAAMY,QAAQ;QAC/BC,WAAWb,CAAAA,cAAAA,MAAMI,IAAI,cAAVJ,yBAAAA,cAAc,UAAU;QACnCc,aAAad,MAAMc,WAAW;QAC9BC,cAAcd,CAAAA,6BAAAA,yBAAAA,0BAAAA,KAAAA,IAAAA,aAAce,YAAY,cAA1Bf,wCAAAA,6BAA8B,CAAC;QAC7CgB,UAAUjB,MAAMiB,QAAQ;IAC1B;IAEA,MAAMC,gBAAgBzB,cAAcF,MAAM4B,MAAM,CAAiB,IAAI,GAAGT;IACxE,MAAMU,oBAAoB7B,MAAM4B,MAAM,CAAmC,IAAI;IAE7E,MAAME,4BAA4B5B,cAAcF,MAAM4B,MAAM,CAAqB,IAAI,GAAGb;IAExFR,oBACEK,eACA,IAAM;QACJ,OAAO;YACLmB,UAASC,KAAa,EAAEC,WAAW,MAAM,EAAEC,QAA+C,EAAE;gBAC1FL,kBAAkBM,OAAO,GAAGD,qBAAAA,sBAAAA,WAAY,IAAI;gBAC5C,IAAIJ,0BAA0BK,OAAO,EAAE;wBAUxBL;oBATb,MAAMM,mBAAmBN,0BAA0BK,OAAO,CAACC,gBAAgB,CAACD,OAAO;oBACnF,MAAME,YACJD,oBAAoBA,CAAAA,6BAAAA,8BAAAA,KAAAA,IAAAA,iBAAkBE,MAAM,AAAD,IAAI,IAC3CF,gBAAgB,CAACG,KAAKC,GAAG,CAACJ,iBAAiBE,MAAM,GAAG,GAAG,GAAG,GAC1D,CAAC;oBAEPR,0BAA0BK,OAAO,CAACM,eAAe,CAACT;oBAClD1B,oBAAoB;wBAClB0B;wBACAU,WAAWZ,CAAAA,oCAAAA,0BAA0BK,OAAO,cAAjCL,+CAAAA,KAAAA,IAAAA,kCAAmCa,SAAS;wBACvDN;wBACAV;wBACAd;wBACAC;wBACAmB;oBACF;gBACF,CAAC;YACH;QACF;IACF,GACA;QAACpB;QAAMc;QAAeb;QAAUgB;KAA0B;IAG5D,MAAMc,sBAAsB,CAACZ,QAAkB;QAC7C,IAAIH,kBAAkBM,OAAO,EAAE;YAC7BN,kBAAkBM,OAAO,CAACH;QAC5B,CAAC;IACH;IAEA,MAAMa,mBAAmB1C,wBAAwB;QAC/C,GAAGM,KAAK;QACRO;QACAC;QACAC;QACAS;QACAhB,oBAAoBD;QACpBK,0BAA0Be;QAC1BgB,wBAAwBF;IAC1B;IAEA,OAAO;QACL,GAAGC,gBAAgB;QACnBE,YAAY;YACV,GAAGF,iBAAiBE,UAAU;YAC9BC,WAAW;QACb;QACAA,WAAW/C,iBAAiBQ,MAAMuC,SAAS,EAAE;YAC3CC,UAAU,IAAI;YACdC,cAAc;gBACZC,KAAKxB;YACP;QACF;IACF;AACF,CAAC"}
@@ -13,6 +13,7 @@ import { canUseDOM } from '@fluentui/react-utilities';
13
13
  const [resizeObserver, setResizeObserver] = React.useState(()=>canUseDOM() ? new ResizeObserver(handleResize) : undefined);
14
14
  React.useEffect(()=>{
15
15
  // Update our state when resizeCallback changes
16
+ container.current = null;
16
17
  resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
17
18
  setResizeObserver(canUseDOM() ? new ResizeObserver(handleResize) : undefined);
18
19
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -21,6 +22,7 @@ import { canUseDOM } from '@fluentui/react-utilities';
21
22
  ]);
22
23
  React.useEffect(()=>{
23
24
  return ()=>{
25
+ container.current = null;
24
26
  resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
25
27
  };
26
28
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -1 +1 @@
1
- {"version":3,"sources":["useResizeObserverRef.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce } from '../utilities/debounce';\nimport { canUseDOM } from '@fluentui/react-utilities';\nimport { ResizeCallbackWithRef } from './hooks.types';\n\n/**\n * useResizeObserverRef_unstable simplifies resize observer connection and ensures debounce/cleanup\n */\nexport const useResizeObserverRef_unstable = (resizeCallback: ResizeCallbackWithRef) => {\n const container = React.useRef<HTMLElement | null>(null);\n // the handler for resize observer\n const handleResize = debounce((entries: ResizeObserverEntry[], observer: ResizeObserver) => {\n resizeCallback(entries, observer, container);\n });\n\n // Keep the reference of ResizeObserver in the state, as it should live through renders\n const [resizeObserver, setResizeObserver] = React.useState(() =>\n canUseDOM() ? new ResizeObserver(handleResize) : undefined,\n );\n\n React.useEffect(() => {\n // Update our state when resizeCallback changes\n resizeObserver?.disconnect();\n setResizeObserver(canUseDOM() ? new ResizeObserver(handleResize) : undefined);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [resizeCallback]);\n\n React.useEffect(() => {\n return () => {\n resizeObserver?.disconnect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const scrollRef = React.useCallback(\n (instance: HTMLElement | HTMLDivElement | null) => {\n if (container.current !== instance) {\n if (container.current) {\n resizeObserver?.unobserve(container.current);\n }\n\n container.current = instance;\n if (container.current) {\n resizeObserver?.observe(container.current);\n }\n }\n },\n [resizeObserver],\n );\n\n return scrollRef;\n};\n"],"names":["React","debounce","canUseDOM","useResizeObserverRef_unstable","resizeCallback","container","useRef","handleResize","entries","observer","resizeObserver","setResizeObserver","useState","ResizeObserver","undefined","useEffect","disconnect","scrollRef","useCallback","instance","current","unobserve","observe"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,SAAS,QAAQ,4BAA4B;AAGtD;;CAEC,GACD,OAAO,MAAMC,gCAAgC,CAACC,iBAA0C;IACtF,MAAMC,YAAYL,MAAMM,MAAM,CAAqB,IAAI;IACvD,kCAAkC;IAClC,MAAMC,eAAeN,SAAS,CAACO,SAAgCC,WAA6B;QAC1FL,eAAeI,SAASC,UAAUJ;IACpC;IAEA,uFAAuF;IACvF,MAAM,CAACK,gBAAgBC,kBAAkB,GAAGX,MAAMY,QAAQ,CAAC,IACzDV,cAAc,IAAIW,eAAeN,gBAAgBO,SAAS;IAG5Dd,MAAMe,SAAS,CAAC,IAAM;QACpB,+CAA+C;QAC/CL,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBM,UAAU;QAC1BL,kBAAkBT,cAAc,IAAIW,eAAeN,gBAAgBO,SAAS;IAC5E,uDAAuD;IACzD,GAAG;QAACV;KAAe;IAEnBJ,MAAMe,SAAS,CAAC,IAAM;QACpB,OAAO,IAAM;YACXL,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBM,UAAU;QAC5B;IACA,uDAAuD;IACzD,GAAG,EAAE;IAEL,MAAMC,YAAYjB,MAAMkB,WAAW,CACjC,CAACC,WAAkD;QACjD,IAAId,UAAUe,OAAO,KAAKD,UAAU;YAClC,IAAId,UAAUe,OAAO,EAAE;gBACrBV,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBW,SAAS,CAAChB,UAAUe,OAAO;YAC7C,CAAC;YAEDf,UAAUe,OAAO,GAAGD;YACpB,IAAId,UAAUe,OAAO,EAAE;gBACrBV,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBY,OAAO,CAACjB,UAAUe,OAAO;YAC3C,CAAC;QACH,CAAC;IACH,GACA;QAACV;KAAe;IAGlB,OAAOO;AACT,EAAE"}
1
+ {"version":3,"sources":["useResizeObserverRef.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce } from '../utilities/debounce';\nimport { canUseDOM } from '@fluentui/react-utilities';\nimport { ResizeCallbackWithRef } from './hooks.types';\n\n/**\n * useResizeObserverRef_unstable simplifies resize observer connection and ensures debounce/cleanup\n */\nexport const useResizeObserverRef_unstable = (resizeCallback: ResizeCallbackWithRef) => {\n const container = React.useRef<HTMLElement | null>(null);\n // the handler for resize observer\n const handleResize = debounce((entries: ResizeObserverEntry[], observer: ResizeObserver) => {\n resizeCallback(entries, observer, container);\n });\n\n // Keep the reference of ResizeObserver in the state, as it should live through renders\n const [resizeObserver, setResizeObserver] = React.useState(() =>\n canUseDOM() ? new ResizeObserver(handleResize) : undefined,\n );\n\n React.useEffect(() => {\n // Update our state when resizeCallback changes\n container.current = null;\n resizeObserver?.disconnect();\n setResizeObserver(canUseDOM() ? new ResizeObserver(handleResize) : undefined);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [resizeCallback]);\n\n React.useEffect(() => {\n return () => {\n container.current = null;\n resizeObserver?.disconnect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const scrollRef = React.useCallback(\n (instance: HTMLElement | HTMLDivElement | null) => {\n if (container.current !== instance) {\n if (container.current) {\n resizeObserver?.unobserve(container.current);\n }\n\n container.current = instance;\n if (container.current) {\n resizeObserver?.observe(container.current);\n }\n }\n },\n [resizeObserver],\n );\n\n return scrollRef;\n};\n"],"names":["React","debounce","canUseDOM","useResizeObserverRef_unstable","resizeCallback","container","useRef","handleResize","entries","observer","resizeObserver","setResizeObserver","useState","ResizeObserver","undefined","useEffect","current","disconnect","scrollRef","useCallback","instance","unobserve","observe"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,SAAS,QAAQ,4BAA4B;AAGtD;;CAEC,GACD,OAAO,MAAMC,gCAAgC,CAACC,iBAA0C;IACtF,MAAMC,YAAYL,MAAMM,MAAM,CAAqB,IAAI;IACvD,kCAAkC;IAClC,MAAMC,eAAeN,SAAS,CAACO,SAAgCC,WAA6B;QAC1FL,eAAeI,SAASC,UAAUJ;IACpC;IAEA,uFAAuF;IACvF,MAAM,CAACK,gBAAgBC,kBAAkB,GAAGX,MAAMY,QAAQ,CAAC,IACzDV,cAAc,IAAIW,eAAeN,gBAAgBO,SAAS;IAG5Dd,MAAMe,SAAS,CAAC,IAAM;QACpB,+CAA+C;QAC/CV,UAAUW,OAAO,GAAG,IAAI;QACxBN,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBO,UAAU;QAC1BN,kBAAkBT,cAAc,IAAIW,eAAeN,gBAAgBO,SAAS;IAC5E,uDAAuD;IACzD,GAAG;QAACV;KAAe;IAEnBJ,MAAMe,SAAS,CAAC,IAAM;QACpB,OAAO,IAAM;YACXV,UAAUW,OAAO,GAAG,IAAI;YACxBN,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBO,UAAU;QAC5B;IACA,uDAAuD;IACzD,GAAG,EAAE;IAEL,MAAMC,YAAYlB,MAAMmB,WAAW,CACjC,CAACC,WAAkD;QACjD,IAAIf,UAAUW,OAAO,KAAKI,UAAU;YAClC,IAAIf,UAAUW,OAAO,EAAE;gBACrBN,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBW,SAAS,CAAChB,UAAUW,OAAO;YAC7C,CAAC;YAEDX,UAAUW,OAAO,GAAGI;YACpB,IAAIf,UAAUW,OAAO,EAAE;gBACrBN,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBY,OAAO,CAACjB,UAAUW,OAAO;YAC3C,CAAC;QACH,CAAC;IACH,GACA;QAACN;KAAe;IAGlB,OAAOQ;AACT,EAAE"}
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export { Virtualizer, virtualizerClassNames, useVirtualizer_unstable, renderVirtualizer_unstable, useVirtualizerStyles_unstable } from './Virtualizer';
2
2
  export { useIntersectionObserver, useStaticVirtualizerMeasure, useDynamicVirtualizerMeasure, useResizeObserverRef_unstable } from './Hooks';
3
- export { VirtualizerContextProvider, useVirtualizerContext_unstable } from './Utilities';
3
+ export { VirtualizerContextProvider, useVirtualizerContext_unstable, scrollToItemStatic, scrollToItemDynamic } from './Utilities';
4
4
  export { VirtualizerScrollView, virtualizerScrollViewClassNames, useVirtualizerScrollView_unstable, renderVirtualizerScrollView_unstable, useVirtualizerScrollViewStyles_unstable } from './VirtualizerScrollView';
5
5
  export { VirtualizerScrollViewDynamic, virtualizerScrollViewDynamicClassNames, useVirtualizerScrollViewDynamic_unstable, renderVirtualizerScrollViewDynamic_unstable, useVirtualizerScrollViewDynamicStyles_unstable } from './VirtualizerScrollViewDynamic';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"sourcesContent":["export {\n Virtualizer,\n virtualizerClassNames,\n useVirtualizer_unstable,\n renderVirtualizer_unstable,\n useVirtualizerStyles_unstable,\n} from './Virtualizer';\nexport type {\n VirtualizerProps,\n VirtualizerState,\n VirtualizerSlots,\n VirtualizerChildRenderFunction,\n} from './Virtualizer';\n\nexport {\n useIntersectionObserver,\n useStaticVirtualizerMeasure,\n useDynamicVirtualizerMeasure,\n useResizeObserverRef_unstable,\n} from './Hooks';\n\nexport type { ResizeCallbackWithRef, VirtualizerMeasureDynamicProps, VirtualizerMeasureProps } from './Hooks';\n\nexport { VirtualizerContextProvider, useVirtualizerContext_unstable } from './Utilities';\n\nexport type { VirtualizerContextProps } from './Utilities';\n\nexport {\n VirtualizerScrollView,\n virtualizerScrollViewClassNames,\n useVirtualizerScrollView_unstable,\n renderVirtualizerScrollView_unstable,\n useVirtualizerScrollViewStyles_unstable,\n} from './VirtualizerScrollView';\n\nexport type {\n VirtualizerScrollViewProps,\n VirtualizerScrollViewState,\n VirtualizerScrollViewSlots,\n} from './VirtualizerScrollView';\n\nexport {\n VirtualizerScrollViewDynamic,\n virtualizerScrollViewDynamicClassNames,\n useVirtualizerScrollViewDynamic_unstable,\n renderVirtualizerScrollViewDynamic_unstable,\n useVirtualizerScrollViewDynamicStyles_unstable,\n} from './VirtualizerScrollViewDynamic';\n\nexport type {\n VirtualizerScrollViewDynamicProps,\n VirtualizerScrollViewDynamicState,\n VirtualizerScrollViewDynamicSlots,\n} from './VirtualizerScrollViewDynamic';\n"],"names":["Virtualizer","virtualizerClassNames","useVirtualizer_unstable","renderVirtualizer_unstable","useVirtualizerStyles_unstable","useIntersectionObserver","useStaticVirtualizerMeasure","useDynamicVirtualizerMeasure","useResizeObserverRef_unstable","VirtualizerContextProvider","useVirtualizerContext_unstable","VirtualizerScrollView","virtualizerScrollViewClassNames","useVirtualizerScrollView_unstable","renderVirtualizerScrollView_unstable","useVirtualizerScrollViewStyles_unstable","VirtualizerScrollViewDynamic","virtualizerScrollViewDynamicClassNames","useVirtualizerScrollViewDynamic_unstable","renderVirtualizerScrollViewDynamic_unstable","useVirtualizerScrollViewDynamicStyles_unstable"],"mappings":"AAAA,SACEA,WAAW,EACXC,qBAAqB,EACrBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,6BAA6B,QACxB,gBAAgB;AAQvB,SACEC,uBAAuB,EACvBC,2BAA2B,EAC3BC,4BAA4B,EAC5BC,6BAA6B,QACxB,UAAU;AAIjB,SAASC,0BAA0B,EAAEC,8BAA8B,QAAQ,cAAc;AAIzF,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,iCAAiC,EACjCC,oCAAoC,EACpCC,uCAAuC,QAClC,0BAA0B;AAQjC,SACEC,4BAA4B,EAC5BC,sCAAsC,EACtCC,wCAAwC,EACxCC,2CAA2C,EAC3CC,8CAA8C,QACzC,iCAAiC"}
1
+ {"version":3,"sources":["index.ts"],"sourcesContent":["export {\n Virtualizer,\n virtualizerClassNames,\n useVirtualizer_unstable,\n renderVirtualizer_unstable,\n useVirtualizerStyles_unstable,\n} from './Virtualizer';\n\nexport type {\n VirtualizerProps,\n VirtualizerState,\n VirtualizerSlots,\n VirtualizerChildRenderFunction,\n VirtualizerDataRef,\n} from './Virtualizer';\n\nexport {\n useIntersectionObserver,\n useStaticVirtualizerMeasure,\n useDynamicVirtualizerMeasure,\n useResizeObserverRef_unstable,\n} from './Hooks';\n\nexport type { ResizeCallbackWithRef, VirtualizerMeasureDynamicProps, VirtualizerMeasureProps } from './Hooks';\n\nexport type { ScrollToItemDynamicParams, ScrollToItemStaticParams, ScrollToInterface } from './Utilities';\n\nexport {\n VirtualizerContextProvider,\n useVirtualizerContext_unstable,\n scrollToItemStatic,\n scrollToItemDynamic,\n} from './Utilities';\n\nexport type { VirtualizerContextProps } from './Utilities';\n\nexport {\n VirtualizerScrollView,\n virtualizerScrollViewClassNames,\n useVirtualizerScrollView_unstable,\n renderVirtualizerScrollView_unstable,\n useVirtualizerScrollViewStyles_unstable,\n} from './VirtualizerScrollView';\n\nexport type {\n VirtualizerScrollViewProps,\n VirtualizerScrollViewState,\n VirtualizerScrollViewSlots,\n} from './VirtualizerScrollView';\n\nexport {\n VirtualizerScrollViewDynamic,\n virtualizerScrollViewDynamicClassNames,\n useVirtualizerScrollViewDynamic_unstable,\n renderVirtualizerScrollViewDynamic_unstable,\n useVirtualizerScrollViewDynamicStyles_unstable,\n} from './VirtualizerScrollViewDynamic';\n\nexport type {\n VirtualizerScrollViewDynamicProps,\n VirtualizerScrollViewDynamicState,\n VirtualizerScrollViewDynamicSlots,\n} from './VirtualizerScrollViewDynamic';\n"],"names":["Virtualizer","virtualizerClassNames","useVirtualizer_unstable","renderVirtualizer_unstable","useVirtualizerStyles_unstable","useIntersectionObserver","useStaticVirtualizerMeasure","useDynamicVirtualizerMeasure","useResizeObserverRef_unstable","VirtualizerContextProvider","useVirtualizerContext_unstable","scrollToItemStatic","scrollToItemDynamic","VirtualizerScrollView","virtualizerScrollViewClassNames","useVirtualizerScrollView_unstable","renderVirtualizerScrollView_unstable","useVirtualizerScrollViewStyles_unstable","VirtualizerScrollViewDynamic","virtualizerScrollViewDynamicClassNames","useVirtualizerScrollViewDynamic_unstable","renderVirtualizerScrollViewDynamic_unstable","useVirtualizerScrollViewDynamicStyles_unstable"],"mappings":"AAAA,SACEA,WAAW,EACXC,qBAAqB,EACrBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,6BAA6B,QACxB,gBAAgB;AAUvB,SACEC,uBAAuB,EACvBC,2BAA2B,EAC3BC,4BAA4B,EAC5BC,6BAA6B,QACxB,UAAU;AAMjB,SACEC,0BAA0B,EAC1BC,8BAA8B,EAC9BC,kBAAkB,EAClBC,mBAAmB,QACd,cAAc;AAIrB,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,iCAAiC,EACjCC,oCAAoC,EACpCC,uCAAuC,QAClC,0BAA0B;AAQjC,SACEC,4BAA4B,EAC5BC,sCAAsC,EACtCC,wCAAwC,EACxCC,2CAA2C,EAC3CC,8CAA8C,QACzC,iCAAiC"}
@@ -0,0 +1,32 @@
1
+ export const scrollToItemStatic = (params)=>{
2
+ const { index , itemSize , totalItems , scrollViewRef , axis ='vertical' , reversed =false , behavior ='auto' } = params;
3
+ if (axis === 'horizontal') {
4
+ if (reversed) {
5
+ var _scrollViewRef_current;
6
+ (_scrollViewRef_current = scrollViewRef.current) === null || _scrollViewRef_current === void 0 ? void 0 : _scrollViewRef_current.scrollTo({
7
+ left: totalItems * itemSize - itemSize * index,
8
+ behavior
9
+ });
10
+ } else {
11
+ var _scrollViewRef_current1;
12
+ (_scrollViewRef_current1 = scrollViewRef.current) === null || _scrollViewRef_current1 === void 0 ? void 0 : _scrollViewRef_current1.scrollTo({
13
+ left: itemSize * index,
14
+ behavior
15
+ });
16
+ }
17
+ } else {
18
+ if (reversed) {
19
+ var _scrollViewRef_current2;
20
+ (_scrollViewRef_current2 = scrollViewRef.current) === null || _scrollViewRef_current2 === void 0 ? void 0 : _scrollViewRef_current2.scrollTo({
21
+ top: totalItems * itemSize - itemSize * index,
22
+ behavior
23
+ });
24
+ } else {
25
+ var _scrollViewRef_current3;
26
+ (_scrollViewRef_current3 = scrollViewRef.current) === null || _scrollViewRef_current3 === void 0 ? void 0 : _scrollViewRef_current3.scrollTo({
27
+ top: itemSize * index,
28
+ behavior
29
+ });
30
+ }
31
+ }
32
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["imperativeScrolling.ts"],"sourcesContent":["import { ScrollToItemStaticParams } from './imperativeScrolling.types';\n\nexport const scrollToItemStatic = (params: ScrollToItemStaticParams) => {\n const { index, itemSize, totalItems, scrollViewRef, axis = 'vertical', reversed = false, behavior = 'auto' } = params;\n\n if (axis === 'horizontal') {\n if (reversed) {\n scrollViewRef.current?.scrollTo({\n left: totalItems * itemSize - itemSize * index,\n behavior,\n });\n } else {\n scrollViewRef.current?.scrollTo({\n left: itemSize * index,\n behavior,\n });\n }\n } else {\n if (reversed) {\n scrollViewRef.current?.scrollTo({\n top: totalItems * itemSize - itemSize * index,\n behavior,\n });\n } else {\n scrollViewRef.current?.scrollTo({\n top: itemSize * index,\n behavior,\n });\n }\n }\n};\n"],"names":["scrollToItemStatic","params","index","itemSize","totalItems","scrollViewRef","axis","reversed","behavior","current","scrollTo","left","top"],"mappings":"AAEA,OAAO,MAAMA,qBAAqB,CAACC,SAAqC;IACtE,MAAM,EAAEC,MAAK,EAAEC,SAAQ,EAAEC,WAAU,EAAEC,cAAa,EAAEC,MAAO,WAAU,EAAEC,UAAW,KAAK,CAAA,EAAEC,UAAW,OAAM,EAAE,GAAGP;IAE/G,IAAIK,SAAS,cAAc;QACzB,IAAIC,UAAU;gBACZF;YAAAA,CAAAA,yBAAAA,cAAcI,OAAO,cAArBJ,oCAAAA,KAAAA,IAAAA,uBAAuBK,SAAS;gBAC9BC,MAAMP,aAAaD,WAAWA,WAAWD;gBACzCM;YACF;QACF,OAAO;gBACLH;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBK,SAAS;gBAC9BC,MAAMR,WAAWD;gBACjBM;YACF;QACF,CAAC;IACH,OAAO;QACL,IAAID,UAAU;gBACZF;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBK,SAAS;gBAC9BE,KAAKR,aAAaD,WAAWA,WAAWD;gBACxCM;YACF;QACF,OAAO;gBACLH;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBK,SAAS;gBAC9BE,KAAKT,WAAWD;gBAChBM;YACF;QACF,CAAC;IACH,CAAC;AACH,EAAE"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["imperativeScrolling.types.ts"],"sourcesContent":["import type { RefObject } from 'react';\n\nexport type ScrollToItemStaticParams = {\n index: number;\n itemSize: number;\n totalItems: number;\n scrollViewRef: RefObject<HTMLDivElement>;\n axis?: 'horizontal' | 'vertical';\n reversed?: boolean;\n behavior?: ScrollBehavior;\n};\n\nexport type ScrollToItemDynamicParams = {\n index: number;\n itemSizes: RefObject<number[]>;\n totalSize: number;\n scrollViewRef: RefObject<HTMLDivElement>;\n axis?: 'horizontal' | 'vertical';\n reversed?: boolean;\n behavior?: ScrollBehavior;\n};\n\nexport type ScrollToInterface = {\n scrollTo: (index: number, behavior?: ScrollBehavior, callback?: (index: number) => void) => void;\n};\n"],"names":[],"mappings":"AAAA,WAwBE"}
@@ -0,0 +1,45 @@
1
+ export const scrollToItemDynamic = (params)=>{
2
+ const { index , itemSizes , totalSize , scrollViewRef , axis ='vertical' , reversed =false , behavior ='auto' } = params;
3
+ if (!itemSizes.current) {
4
+ return;
5
+ }
6
+ if (itemSizes.current === null || itemSizes.current.length < index) {
7
+ // null check - abort
8
+ return;
9
+ }
10
+ let itemDepth = 0;
11
+ for(let i = 0; i < index; i++){
12
+ if (i < index) {
13
+ itemDepth += itemSizes.current[i];
14
+ }
15
+ }
16
+ if (axis === 'horizontal') {
17
+ if (reversed) {
18
+ var _scrollViewRef_current;
19
+ (_scrollViewRef_current = scrollViewRef.current) === null || _scrollViewRef_current === void 0 ? void 0 : _scrollViewRef_current.scrollTo({
20
+ left: totalSize - itemDepth,
21
+ behavior
22
+ });
23
+ } else {
24
+ var _scrollViewRef_current1;
25
+ (_scrollViewRef_current1 = scrollViewRef.current) === null || _scrollViewRef_current1 === void 0 ? void 0 : _scrollViewRef_current1.scrollTo({
26
+ left: itemDepth,
27
+ behavior
28
+ });
29
+ }
30
+ } else {
31
+ if (reversed) {
32
+ var _scrollViewRef_current2;
33
+ (_scrollViewRef_current2 = scrollViewRef.current) === null || _scrollViewRef_current2 === void 0 ? void 0 : _scrollViewRef_current2.scrollTo({
34
+ top: totalSize - itemDepth,
35
+ behavior
36
+ });
37
+ } else {
38
+ var _scrollViewRef_current3;
39
+ (_scrollViewRef_current3 = scrollViewRef.current) === null || _scrollViewRef_current3 === void 0 ? void 0 : _scrollViewRef_current3.scrollTo({
40
+ top: itemDepth,
41
+ behavior
42
+ });
43
+ }
44
+ }
45
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["imperativeScrollingDynamic.ts"],"sourcesContent":["import { ScrollToItemDynamicParams } from './imperativeScrolling.types';\n\nexport const scrollToItemDynamic = (params: ScrollToItemDynamicParams) => {\n const { index, itemSizes, totalSize, scrollViewRef, axis = 'vertical', reversed = false, behavior = 'auto' } = params;\n if (!itemSizes.current) {\n return;\n }\n\n if (itemSizes.current === null || itemSizes.current.length < index) {\n // null check - abort\n return;\n }\n\n let itemDepth = 0;\n for (let i = 0; i < index; i++) {\n if (i < index) {\n itemDepth += itemSizes.current[i];\n }\n }\n\n if (axis === 'horizontal') {\n if (reversed) {\n scrollViewRef.current?.scrollTo({\n left: totalSize - itemDepth,\n behavior,\n });\n } else {\n scrollViewRef.current?.scrollTo({\n left: itemDepth,\n behavior,\n });\n }\n } else {\n if (reversed) {\n scrollViewRef.current?.scrollTo({\n top: totalSize - itemDepth,\n behavior,\n });\n } else {\n scrollViewRef.current?.scrollTo({\n top: itemDepth,\n behavior,\n });\n }\n }\n};\n"],"names":["scrollToItemDynamic","params","index","itemSizes","totalSize","scrollViewRef","axis","reversed","behavior","current","length","itemDepth","i","scrollTo","left","top"],"mappings":"AAEA,OAAO,MAAMA,sBAAsB,CAACC,SAAsC;IACxE,MAAM,EAAEC,MAAK,EAAEC,UAAS,EAAEC,UAAS,EAAEC,cAAa,EAAEC,MAAO,WAAU,EAAEC,UAAW,KAAK,CAAA,EAAEC,UAAW,OAAM,EAAE,GAAGP;IAC/G,IAAI,CAACE,UAAUM,OAAO,EAAE;QACtB;IACF,CAAC;IAED,IAAIN,UAAUM,OAAO,KAAK,IAAI,IAAIN,UAAUM,OAAO,CAACC,MAAM,GAAGR,OAAO;QAClE,qBAAqB;QACrB;IACF,CAAC;IAED,IAAIS,YAAY;IAChB,IAAK,IAAIC,IAAI,GAAGA,IAAIV,OAAOU,IAAK;QAC9B,IAAIA,IAAIV,OAAO;YACbS,aAAaR,UAAUM,OAAO,CAACG,EAAE;QACnC,CAAC;IACH;IAEA,IAAIN,SAAS,cAAc;QACzB,IAAIC,UAAU;gBACZF;YAAAA,CAAAA,yBAAAA,cAAcI,OAAO,cAArBJ,oCAAAA,KAAAA,IAAAA,uBAAuBQ,SAAS;gBAC9BC,MAAMV,YAAYO;gBAClBH;YACF;QACF,OAAO;gBACLH;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBQ,SAAS;gBAC9BC,MAAMH;gBACNH;YACF;QACF,CAAC;IACH,OAAO;QACL,IAAID,UAAU;gBACZF;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBQ,SAAS;gBAC9BE,KAAKX,YAAYO;gBACjBH;YACF;QACF,OAAO;gBACLH;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBQ,SAAS;gBAC9BE,KAAKJ;gBACLH;YACF;QACF,CAAC;IACH,CAAC;AACH,EAAE"}
@@ -0,0 +1,3 @@
1
+ export * from './imperativeScrolling';
2
+ export * from './imperativeScrolling.types';
3
+ export * from './imperativeScrollingDynamic';
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"sourcesContent":["export * from './imperativeScrolling';\nexport * from './imperativeScrolling.types';\nexport * from './imperativeScrollingDynamic';\n"],"names":[],"mappings":"AAAA,cAAc,wBAAwB;AACtC,cAAc,8BAA8B;AAC5C,cAAc,+BAA+B"}
@@ -1 +1,2 @@
1
1
  export * from './VirtualizerContext';
2
+ export * from './ImperativeScrolling';
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"sourcesContent":["export * from './VirtualizerContext';\n"],"names":[],"mappings":"AAAA,cAAc,uBAAuB"}
1
+ {"version":3,"sources":["index.ts"],"sourcesContent":["export * from './VirtualizerContext';\nexport * from './ImperativeScrolling';\n"],"names":[],"mappings":"AAAA,cAAc,uBAAuB;AACrC,cAAc,wBAAwB"}
@@ -6,15 +6,16 @@ Object.defineProperty(exports, "useVirtualizer_unstable", {
6
6
  enumerable: true,
7
7
  get: ()=>useVirtualizer_unstable
8
8
  });
9
- const _useIntersectionObserver = require("../../hooks/useIntersectionObserver");
10
9
  const _react = require("react");
10
+ const _useIntersectionObserver = require("../../hooks/useIntersectionObserver");
11
11
  const _reactUtilities = require("@fluentui/react-utilities");
12
12
  const _reactDom = require("react-dom");
13
13
  const _utilities = require("../../Utilities");
14
14
  const _renderVirtualizer = require("./renderVirtualizer");
15
15
  function useVirtualizer_unstable(props) {
16
- const { itemSize , numItems , virtualizerLength , children: renderChild , getItemSize , bufferItems =Math.round(virtualizerLength / 4.0) , bufferSize =Math.floor(bufferItems / 2.0) * itemSize , scrollViewRef , axis ='vertical' , reversed =false , virtualizerContext } = props;
16
+ const { itemSize , numItems , virtualizerLength , children: renderChild , getItemSize , bufferItems =Math.round(virtualizerLength / 4.0) , bufferSize =Math.floor(bufferItems / 2.0) * itemSize , scrollViewRef , axis ='vertical' , reversed =false , virtualizerContext , onRenderedFlaggedIndex , imperativeVirtualizerRef } = props;
17
17
  /* The context is optional, it's useful for injecting additional index logic, or performing uniform state updates*/ const _virtualizerContext = (0, _utilities.useVirtualizerContextState_unstable)(virtualizerContext);
18
+ const flaggedIndex = (0, _react.useRef)(null);
18
19
  const actualIndex = _virtualizerContext.contextIndex;
19
20
  const setActualIndex = _virtualizerContext.setContextIndex;
20
21
  // Store ref to before padding element
@@ -50,6 +51,34 @@ function useVirtualizer_unstable(props) {
50
51
  }
51
52
  }
52
53
  };
54
+ const [isScrolling, setIsScrolling] = (0, _react.useState)(false);
55
+ const scrollTimer = (0, _react.useRef)();
56
+ const scrollCounter = (0, _react.useRef)(0);
57
+ const initializeScrollingTimer = ()=>{
58
+ /*
59
+ * This can be considered the 'velocity' required to start 'isScrolling'
60
+ * INIT_SCROLL_FLAG_REQ: Number of renders required to activate isScrolling
61
+ * INIT_SCROLL_FLAG_DELAY: Amount of time (ms) before current number of renders is reset
62
+ * - Maybe we should let users customize these in the future.
63
+ */ const INIT_SCROLL_FLAG_REQ = 10;
64
+ const INIT_SCROLL_FLAG_DELAY = 100;
65
+ scrollCounter.current++;
66
+ if (scrollCounter.current >= INIT_SCROLL_FLAG_REQ) {
67
+ setIsScrolling(true);
68
+ }
69
+ if (scrollTimer.current) {
70
+ clearTimeout(scrollTimer.current);
71
+ }
72
+ scrollTimer.current = setTimeout(()=>{
73
+ setIsScrolling(false);
74
+ scrollCounter.current = 0;
75
+ }, INIT_SCROLL_FLAG_DELAY);
76
+ };
77
+ (0, _react.useEffect)(()=>{
78
+ initializeScrollingTimer();
79
+ }, [
80
+ actualIndex
81
+ ]);
53
82
  const batchUpdateNewIndex = (index)=>{
54
83
  // Local updates
55
84
  updateChildRows(index);
@@ -174,14 +203,18 @@ function useVirtualizer_unstable(props) {
174
203
  }
175
204
  return getIndexFromSizeArray(scrollPos);
176
205
  };
177
- const calculateTotalSize = ()=>{
206
+ const calculateTotalSize = (0, _react.useCallback)(()=>{
178
207
  if (!getItemSize) {
179
208
  return itemSize * numItems;
180
209
  }
181
210
  // Time for custom size calcs
182
211
  return childProgressiveSizes.current[numItems - 1];
183
- };
184
- const calculateBefore = ()=>{
212
+ }, [
213
+ getItemSize,
214
+ itemSize,
215
+ numItems
216
+ ]);
217
+ const calculateBefore = (0, _react.useCallback)(()=>{
185
218
  const currentIndex = Math.min(actualIndex, numItems);
186
219
  if (!getItemSize) {
187
220
  // The missing items from before virtualization starts height
@@ -192,8 +225,13 @@ function useVirtualizer_unstable(props) {
192
225
  }
193
226
  // Time for custom size calcs
194
227
  return childProgressiveSizes.current[currentIndex - 1];
195
- };
196
- const calculateAfter = ()=>{
228
+ }, [
229
+ actualIndex,
230
+ getItemSize,
231
+ itemSize,
232
+ numItems
233
+ ]);
234
+ const calculateAfter = (0, _react.useCallback)(()=>{
197
235
  if (numItems === 0) {
198
236
  return 0;
199
237
  }
@@ -205,20 +243,28 @@ function useVirtualizer_unstable(props) {
205
243
  }
206
244
  // Time for custom size calcs
207
245
  return childProgressiveSizes.current[numItems - 1] - childProgressiveSizes.current[lastItemIndex];
208
- };
246
+ }, [
247
+ actualIndex,
248
+ getItemSize,
249
+ itemSize,
250
+ numItems,
251
+ virtualizerLength
252
+ ]);
209
253
  const updateChildRows = (0, _react.useCallback)((newIndex)=>{
210
254
  if (numItems === 0) {
211
- /* Nothing to virtualize */ return [];
212
- }
213
- if (childArray.current.length !== numItems) {
214
- childArray.current = new Array(virtualizerLength);
255
+ /* Nothing to virtualize */ return;
215
256
  }
257
+ /*
258
+ We reset the array every time to ensure children are re-rendered
259
+ This function should only be called when update is nessecary
260
+ */ childArray.current = new Array(virtualizerLength);
216
261
  const _actualIndex = Math.max(newIndex, 0);
217
262
  const end = Math.min(_actualIndex + virtualizerLength, numItems);
218
263
  for(let i = _actualIndex; i < end; i++){
219
- childArray.current[i - _actualIndex] = (0, _renderVirtualizer.renderVirtualizerChildPlaceholder)(renderChild(i), i);
264
+ childArray.current[i - _actualIndex] = (0, _renderVirtualizer.renderVirtualizerChildPlaceholder)(renderChild(i, isScrolling), i);
220
265
  }
221
266
  }, [
267
+ isScrolling,
222
268
  numItems,
223
269
  renderChild,
224
270
  virtualizerLength
@@ -286,6 +332,16 @@ function useVirtualizer_unstable(props) {
286
332
  populateSizeArrays();
287
333
  }
288
334
  };
335
+ (0, _react.useImperativeHandle)(imperativeVirtualizerRef, ()=>{
336
+ return {
337
+ progressiveSizes: childProgressiveSizes,
338
+ nodeSizes: childSizes,
339
+ setFlaggedIndex: (index)=>flaggedIndex.current = index
340
+ };
341
+ }, [
342
+ childProgressiveSizes,
343
+ childSizes
344
+ ]);
289
345
  // Initialization on mount - update array index to 0 (ready state).
290
346
  // Only fire on mount (no deps).
291
347
  (0, _react.useEffect)(()=>{
@@ -313,6 +369,20 @@ function useVirtualizer_unstable(props) {
313
369
  }, [
314
370
  getItemSize
315
371
  ]);
372
+ // Effect to check flag index on updates
373
+ (0, _react.useEffect)(()=>{
374
+ if (!onRenderedFlaggedIndex || flaggedIndex.current === null) {
375
+ return;
376
+ }
377
+ if (actualIndex <= flaggedIndex.current && actualIndex + virtualizerLength >= flaggedIndex.current) {
378
+ onRenderedFlaggedIndex(flaggedIndex.current);
379
+ flaggedIndex.current = null;
380
+ }
381
+ }, [
382
+ actualIndex,
383
+ onRenderedFlaggedIndex,
384
+ virtualizerLength
385
+ ]);
316
386
  // Ensure we have run through and updated the whole size list array at least once.
317
387
  initializeSizeArray();
318
388
  if (getItemSize && (numItems !== childSizes.current.length || numItems !== childProgressiveSizes.current.length)) {