@fluentui/react-virtualizer 9.0.0-alpha.21 → 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 (166) hide show
  1. package/CHANGELOG.json +79 -1
  2. package/CHANGELOG.md +28 -2
  3. package/dist/index.d.ts +59 -7
  4. package/lib/Hooks.js +0 -1
  5. package/lib/Hooks.js.map +1 -1
  6. package/lib/Utilities.js +0 -1
  7. package/lib/Utilities.js.map +1 -1
  8. package/lib/Virtualizer.js +0 -1
  9. package/lib/Virtualizer.js.map +1 -1
  10. package/lib/VirtualizerScrollView.js +0 -1
  11. package/lib/VirtualizerScrollView.js.map +1 -1
  12. package/lib/VirtualizerScrollViewDynamic.js +0 -1
  13. package/lib/VirtualizerScrollViewDynamic.js.map +1 -1
  14. package/lib/components/Virtualizer/Virtualizer.js +5 -7
  15. package/lib/components/Virtualizer/Virtualizer.js.map +1 -1
  16. package/lib/components/Virtualizer/Virtualizer.types.js +0 -1
  17. package/lib/components/Virtualizer/Virtualizer.types.js.map +1 -1
  18. package/lib/components/Virtualizer/index.js +1 -2
  19. package/lib/components/Virtualizer/index.js.map +1 -1
  20. package/lib/components/Virtualizer/renderVirtualizer.js +9 -13
  21. package/lib/components/Virtualizer/renderVirtualizer.js.map +1 -1
  22. package/lib/components/Virtualizer/useVirtualizer.js +419 -355
  23. package/lib/components/Virtualizer/useVirtualizer.js.map +1 -1
  24. package/lib/components/Virtualizer/{useVirtualizerStyles.js → useVirtualizerStyles.styles.js} +1 -1
  25. package/lib/components/Virtualizer/useVirtualizerStyles.styles.js.map +1 -0
  26. package/lib/components/VirtualizerScrollView/VirtualizerScrollView.js +5 -7
  27. package/lib/components/VirtualizerScrollView/VirtualizerScrollView.js.map +1 -1
  28. package/lib/components/VirtualizerScrollView/VirtualizerScrollView.types.js +1 -2
  29. package/lib/components/VirtualizerScrollView/VirtualizerScrollView.types.js.map +1 -1
  30. package/lib/components/VirtualizerScrollView/index.js +1 -2
  31. package/lib/components/VirtualizerScrollView/index.js.map +1 -1
  32. package/lib/components/VirtualizerScrollView/renderVirtualizerScrollView.js +4 -8
  33. package/lib/components/VirtualizerScrollView/renderVirtualizerScrollView.js.map +1 -1
  34. package/lib/components/VirtualizerScrollView/useVirtualizerScrollView.js +62 -32
  35. package/lib/components/VirtualizerScrollView/useVirtualizerScrollView.js.map +1 -1
  36. package/lib/components/VirtualizerScrollView/{useVirtualizerScrollViewStyles.js → useVirtualizerScrollViewStyles.styles.js} +2 -2
  37. package/lib/components/VirtualizerScrollView/useVirtualizerScrollViewStyles.styles.js.map +1 -0
  38. package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.js +5 -7
  39. package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.js.map +1 -1
  40. package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js +1 -2
  41. package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js.map +1 -1
  42. package/lib/components/VirtualizerScrollViewDynamic/index.js +1 -2
  43. package/lib/components/VirtualizerScrollViewDynamic/index.js.map +1 -1
  44. package/lib/components/VirtualizerScrollViewDynamic/renderVirtualizerScrollViewDynamic.js +4 -8
  45. package/lib/components/VirtualizerScrollViewDynamic/renderVirtualizerScrollViewDynamic.js.map +1 -1
  46. package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js +70 -38
  47. package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js.map +1 -1
  48. package/lib/components/VirtualizerScrollViewDynamic/{useVirtualizerScrollViewDynamicStyles.js → useVirtualizerScrollViewDynamicStyles.styles.js} +2 -2
  49. package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamicStyles.styles.js.map +1 -0
  50. package/lib/hooks/hooks.types.js +1 -2
  51. package/lib/hooks/hooks.types.js.map +1 -1
  52. package/lib/hooks/index.js +0 -1
  53. package/lib/hooks/index.js.map +1 -1
  54. package/lib/hooks/useDynamicVirtualizerMeasure.js +91 -91
  55. package/lib/hooks/useDynamicVirtualizerMeasure.js.map +1 -1
  56. package/lib/hooks/useIntersectionObserver.js +31 -32
  57. package/lib/hooks/useIntersectionObserver.js.map +1 -1
  58. package/lib/hooks/useResizeObserverRef.js +36 -32
  59. package/lib/hooks/useResizeObserverRef.js.map +1 -1
  60. package/lib/hooks/useVirtualizerMeasure.js +38 -47
  61. package/lib/hooks/useVirtualizerMeasure.js.map +1 -1
  62. package/lib/index.js +1 -2
  63. package/lib/index.js.map +1 -1
  64. package/lib/utilities/ImperativeScrolling/imperativeScrolling.js +32 -0
  65. package/lib/utilities/ImperativeScrolling/imperativeScrolling.js.map +1 -0
  66. package/lib/utilities/ImperativeScrolling/imperativeScrolling.types.js +1 -0
  67. package/lib/utilities/ImperativeScrolling/imperativeScrolling.types.js.map +1 -0
  68. package/lib/utilities/ImperativeScrolling/imperativeScrollingDynamic.js +45 -0
  69. package/lib/utilities/ImperativeScrolling/imperativeScrollingDynamic.js.map +1 -0
  70. package/lib/utilities/ImperativeScrolling/index.js +3 -0
  71. package/lib/utilities/ImperativeScrolling/index.js.map +1 -0
  72. package/lib/utilities/VirtualizerContext/VirtualizerContext.js +26 -22
  73. package/lib/utilities/VirtualizerContext/VirtualizerContext.js.map +1 -1
  74. package/lib/utilities/VirtualizerContext/index.js +0 -1
  75. package/lib/utilities/VirtualizerContext/index.js.map +1 -1
  76. package/lib/utilities/VirtualizerContext/types.js +1 -2
  77. package/lib/utilities/VirtualizerContext/types.js.map +1 -1
  78. package/lib/utilities/debounce.js +13 -14
  79. package/lib/utilities/debounce.js.map +1 -1
  80. package/lib/utilities/index.js +1 -1
  81. package/lib/utilities/index.js.map +1 -1
  82. package/lib-commonjs/Hooks.js +0 -3
  83. package/lib-commonjs/Hooks.js.map +1 -1
  84. package/lib-commonjs/Utilities.js +0 -3
  85. package/lib-commonjs/Utilities.js.map +1 -1
  86. package/lib-commonjs/Virtualizer.js +0 -3
  87. package/lib-commonjs/Virtualizer.js.map +1 -1
  88. package/lib-commonjs/VirtualizerScrollView.js +0 -3
  89. package/lib-commonjs/VirtualizerScrollView.js.map +1 -1
  90. package/lib-commonjs/VirtualizerScrollViewDynamic.js +0 -3
  91. package/lib-commonjs/VirtualizerScrollViewDynamic.js.map +1 -1
  92. package/lib-commonjs/components/Virtualizer/Virtualizer.js +3 -5
  93. package/lib-commonjs/components/Virtualizer/Virtualizer.js.map +1 -1
  94. package/lib-commonjs/components/Virtualizer/Virtualizer.types.js +0 -3
  95. package/lib-commonjs/components/Virtualizer/Virtualizer.types.js.map +1 -1
  96. package/lib-commonjs/components/Virtualizer/index.js +1 -4
  97. package/lib-commonjs/components/Virtualizer/index.js.map +1 -1
  98. package/lib-commonjs/components/Virtualizer/renderVirtualizer.js +1 -3
  99. package/lib-commonjs/components/Virtualizer/renderVirtualizer.js.map +1 -1
  100. package/lib-commonjs/components/Virtualizer/useVirtualizer.js +84 -16
  101. package/lib-commonjs/components/Virtualizer/useVirtualizer.js.map +1 -1
  102. package/lib-commonjs/components/Virtualizer/{useVirtualizerStyles.js → useVirtualizerStyles.styles.js} +1 -3
  103. package/lib-commonjs/components/Virtualizer/useVirtualizerStyles.styles.js.map +1 -0
  104. package/lib-commonjs/components/VirtualizerScrollView/VirtualizerScrollView.js +3 -5
  105. package/lib-commonjs/components/VirtualizerScrollView/VirtualizerScrollView.js.map +1 -1
  106. package/lib-commonjs/components/VirtualizerScrollView/VirtualizerScrollView.types.js +0 -3
  107. package/lib-commonjs/components/VirtualizerScrollView/VirtualizerScrollView.types.js.map +1 -1
  108. package/lib-commonjs/components/VirtualizerScrollView/index.js +1 -4
  109. package/lib-commonjs/components/VirtualizerScrollView/index.js.map +1 -1
  110. package/lib-commonjs/components/VirtualizerScrollView/renderVirtualizerScrollView.js +1 -3
  111. package/lib-commonjs/components/VirtualizerScrollView/renderVirtualizerScrollView.js.map +1 -1
  112. package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollView.js +39 -6
  113. package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollView.js.map +1 -1
  114. package/lib-commonjs/components/VirtualizerScrollView/{useVirtualizerScrollViewStyles.js → useVirtualizerScrollViewStyles.styles.js} +4 -6
  115. package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollViewStyles.styles.js.map +1 -0
  116. package/lib-commonjs/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.js +3 -5
  117. package/lib-commonjs/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.js.map +1 -1
  118. package/lib-commonjs/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js +0 -3
  119. package/lib-commonjs/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js.map +1 -1
  120. package/lib-commonjs/components/VirtualizerScrollViewDynamic/index.js +1 -4
  121. package/lib-commonjs/components/VirtualizerScrollViewDynamic/index.js.map +1 -1
  122. package/lib-commonjs/components/VirtualizerScrollViewDynamic/renderVirtualizerScrollViewDynamic.js +1 -3
  123. package/lib-commonjs/components/VirtualizerScrollViewDynamic/renderVirtualizerScrollViewDynamic.js.map +1 -1
  124. package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js +42 -7
  125. package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js.map +1 -1
  126. package/lib-commonjs/components/VirtualizerScrollViewDynamic/{useVirtualizerScrollViewDynamicStyles.js → useVirtualizerScrollViewDynamicStyles.styles.js} +4 -6
  127. package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamicStyles.styles.js.map +1 -0
  128. package/lib-commonjs/hooks/hooks.types.js +0 -3
  129. package/lib-commonjs/hooks/hooks.types.js.map +1 -1
  130. package/lib-commonjs/hooks/index.js +0 -3
  131. package/lib-commonjs/hooks/index.js.map +1 -1
  132. package/lib-commonjs/hooks/useDynamicVirtualizerMeasure.js +5 -7
  133. package/lib-commonjs/hooks/useDynamicVirtualizerMeasure.js.map +1 -1
  134. package/lib-commonjs/hooks/useIntersectionObserver.js +1 -3
  135. package/lib-commonjs/hooks/useIntersectionObserver.js.map +1 -1
  136. package/lib-commonjs/hooks/useResizeObserverRef.js +3 -3
  137. package/lib-commonjs/hooks/useResizeObserverRef.js.map +1 -1
  138. package/lib-commonjs/hooks/useVirtualizerMeasure.js +7 -9
  139. package/lib-commonjs/hooks/useVirtualizerMeasure.js.map +1 -1
  140. package/lib-commonjs/index.js +2 -3
  141. package/lib-commonjs/index.js.map +1 -1
  142. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.js +40 -0
  143. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.js.map +1 -0
  144. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.types.js +4 -0
  145. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.types.js.map +1 -0
  146. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrollingDynamic.js +53 -0
  147. package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrollingDynamic.js.map +1 -0
  148. package/lib-commonjs/utilities/ImperativeScrolling/index.js +8 -0
  149. package/lib-commonjs/utilities/ImperativeScrolling/index.js.map +1 -0
  150. package/lib-commonjs/utilities/VirtualizerContext/VirtualizerContext.js +3 -5
  151. package/lib-commonjs/utilities/VirtualizerContext/VirtualizerContext.js.map +1 -1
  152. package/lib-commonjs/utilities/VirtualizerContext/index.js +0 -3
  153. package/lib-commonjs/utilities/VirtualizerContext/index.js.map +1 -1
  154. package/lib-commonjs/utilities/VirtualizerContext/types.js +0 -3
  155. package/lib-commonjs/utilities/VirtualizerContext/types.js.map +1 -1
  156. package/lib-commonjs/utilities/debounce.js +1 -3
  157. package/lib-commonjs/utilities/debounce.js.map +1 -1
  158. package/lib-commonjs/utilities/index.js +1 -3
  159. package/lib-commonjs/utilities/index.js.map +1 -1
  160. package/package.json +5 -5
  161. package/lib/components/Virtualizer/useVirtualizerStyles.js.map +0 -1
  162. package/lib/components/VirtualizerScrollView/useVirtualizerScrollViewStyles.js.map +0 -1
  163. package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamicStyles.js.map +0 -1
  164. package/lib-commonjs/components/Virtualizer/useVirtualizerStyles.js.map +0 -1
  165. package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollViewStyles.js.map +0 -1
  166. package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamicStyles.js.map +0 -1
@@ -2,43 +2,75 @@ 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
- const contextState = useVirtualizerContextState_unstable(props.virtualizerContext);
8
- var _props_axis, _contextState_contextIndex;
9
- const {
10
- virtualizerLength,
11
- bufferItems,
12
- bufferSize,
13
- scrollRef
14
- } = useDynamicVirtualizerMeasure({
15
- defaultItemSize: props.itemSize,
16
- direction: (_props_axis = props.axis) !== null && _props_axis !== void 0 ? _props_axis : 'vertical',
17
- getItemSize: props.getItemSize,
18
- currentIndex: (_contextState_contextIndex = contextState === null || contextState === void 0 ? void 0 : contextState.contextIndex) !== null && _contextState_contextIndex !== void 0 ? _contextState_contextIndex : 0,
19
- numItems: props.numItems
20
- });
21
- const iScrollRef = useMergedRefs(React.useRef(null), scrollRef);
22
- const virtualizerState = useVirtualizer_unstable({
23
- ...props,
24
- virtualizerLength,
25
- bufferItems,
26
- bufferSize,
27
- scrollViewRef: iScrollRef,
28
- virtualizerContext: contextState
29
- });
30
- return {
31
- ...virtualizerState,
32
- components: {
33
- ...virtualizerState.components,
34
- container: 'div'
35
- },
36
- container: resolveShorthand(props.container, {
37
- required: true,
38
- defaultProps: {
39
- ref: iScrollRef
40
- }
41
- })
42
- };
8
+ const contextState = useVirtualizerContextState_unstable(props.virtualizerContext);
9
+ const { imperativeRef , axis ='vertical' , reversed , imperativeVirtualizerRef } = props;
10
+ var _props_axis, _contextState_contextIndex;
11
+ const { virtualizerLength , bufferItems , bufferSize , scrollRef } = useDynamicVirtualizerMeasure({
12
+ defaultItemSize: props.itemSize,
13
+ direction: (_props_axis = props.axis) !== null && _props_axis !== void 0 ? _props_axis : 'vertical',
14
+ getItemSize: props.getItemSize,
15
+ currentIndex: (_contextState_contextIndex = contextState === null || contextState === void 0 ? void 0 : contextState.contextIndex) !== null && _contextState_contextIndex !== void 0 ? _contextState_contextIndex : 0,
16
+ numItems: props.numItems
17
+ });
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
+ };
53
+ const virtualizerState = useVirtualizer_unstable({
54
+ ...props,
55
+ virtualizerLength,
56
+ bufferItems,
57
+ bufferSize,
58
+ scrollViewRef,
59
+ virtualizerContext: contextState,
60
+ imperativeVirtualizerRef: _imperativeVirtualizerRef,
61
+ onRenderedFlaggedIndex: handleRenderedIndex
62
+ });
63
+ return {
64
+ ...virtualizerState,
65
+ components: {
66
+ ...virtualizerState.components,
67
+ container: 'div'
68
+ },
69
+ container: resolveShorthand(props.container, {
70
+ required: true,
71
+ defaultProps: {
72
+ ref: scrollViewRef
73
+ }
74
+ })
75
+ };
43
76
  }
44
- //# sourceMappingURL=useVirtualizerScrollViewDynamic.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","resolveShorthand","useMergedRefs","useVirtualizer_unstable","useDynamicVirtualizerMeasure","useVirtualizerContextState_unstable","useVirtualizerScrollViewDynamic_unstable","props","contextState","virtualizerContext","_props_axis","_contextState_contextIndex","virtualizerLength","bufferItems","bufferSize","scrollRef","defaultItemSize","itemSize","direction","axis","getItemSize","currentIndex","contextIndex","numItems","iScrollRef","useRef","virtualizerState","scrollViewRef","components","container","required","defaultProps","ref"],"sources":["../../../src/components/VirtualizerScrollViewDynamic/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"],"mappings":"AAAA,YAAYA,KAAA,MAAW;AACvB,SAASC,gBAAgB,EAAEC,aAAa,QAAQ;AAChD,SAASC,uBAAuB,QAAQ;AAKxC,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,mCAAmC,QAAQ;AAEpD,OAAO,SAASC,yCACdC,KAAwC,EACL;EACnC,MAAMC,YAAA,GAAeH,mCAAA,CAAoCE,KAAA,CAAME,kBAAkB;MAIpEC,WAAA,EAEGC,0BAAA;EAJhB,MAAM;IAAEC,iBAAA;IAAmBC,WAAA;IAAaC,UAAA;IAAYC;EAAS,CAAE,GAAGX,4BAAA,CAA6B;IAC7FY,eAAA,EAAiBT,KAAA,CAAMU,QAAQ;IAC/BC,SAAA,EAAW,CAAAR,WAAA,GAAAH,KAAA,CAAMY,IAAI,cAAVT,WAAA,cAAAA,WAAA,GAAc,UAAU;IACnCU,WAAA,EAAab,KAAA,CAAMa,WAAW;IAC9BC,YAAA,EAAc,CAAAV,0BAAA,GAAAH,YAAA,aAAAA,YAAA,uBAAAA,YAAA,CAAcc,YAAY,cAA1BX,0BAAA,cAAAA,0BAAA,GAA8B,CAAC;IAC7CY,QAAA,EAAUhB,KAAA,CAAMgB;EAClB;EAEA,MAAMC,UAAA,GAAatB,aAAA,CAAcF,KAAA,CAAMyB,MAAM,CAAiB,IAAI,GAAGV,SAAA;EAErE,MAAMW,gBAAA,GAAmBvB,uBAAA,CAAwB;IAC/C,GAAGI,KAAK;IACRK,iBAAA;IACAC,WAAA;IACAC,UAAA;IACAa,aAAA,EAAeH,UAAA;IACff,kBAAA,EAAoBD;EACtB;EAEA,OAAO;IACL,GAAGkB,gBAAgB;IACnBE,UAAA,EAAY;MACV,GAAGF,gBAAA,CAAiBE,UAAU;MAC9BC,SAAA,EAAW;IACb;IACAA,SAAA,EAAW5B,gBAAA,CAAiBM,KAAA,CAAMsB,SAAS,EAAE;MAC3CC,QAAA,EAAU,IAAI;MACdC,YAAA,EAAc;QACZC,GAAA,EAAKR;MACP;IACF;EACF;AACF"}
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"}
@@ -1,4 +1,4 @@
1
- import { useVirtualizerStyles_unstable, virtualizerClassNames } from '../Virtualizer/useVirtualizerStyles';
1
+ import { useVirtualizerStyles_unstable, virtualizerClassNames } from '../Virtualizer/useVirtualizerStyles.styles';
2
2
  import { __styles, mergeClasses } from '@griffel/react';
3
3
  const virtualizerScrollViewDynamicClassName = 'fui-Virtualizer-Scroll-View-Dynamic';
4
4
  export const virtualizerScrollViewDynamicClassNames = {
@@ -43,4 +43,4 @@ export const useVirtualizerScrollViewDynamicStyles_unstable = state => {
43
43
  state.container.className = mergeClasses(virtualizerScrollViewDynamicClassNames.container, styles.base, containerStyle, state.container.className);
44
44
  return state;
45
45
  };
46
- //# sourceMappingURL=useVirtualizerScrollViewDynamicStyles.js.map
46
+ //# sourceMappingURL=useVirtualizerScrollViewDynamicStyles.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useVirtualizerStyles_unstable","virtualizerClassNames","__styles","mergeClasses","virtualizerScrollViewDynamicClassName","virtualizerScrollViewDynamicClassNames","container","useStyles","base","mc9l5x","a9b677","Bqenvij","Eiaeu8","vertical","Beiy3e4","Bmxbyg5","horizontal","B68tc82","verticalReversed","horizontalReversed","d","useVirtualizerScrollViewDynamicStyles_unstable","state","styles","containerStyle","axis","reversed","className"],"sources":["useVirtualizerScrollViewDynamicStyles.styles.js"],"sourcesContent":["import { useVirtualizerStyles_unstable, virtualizerClassNames } from '../Virtualizer/useVirtualizerStyles.styles';\nimport { makeStyles, mergeClasses } from '@griffel/react';\nconst virtualizerScrollViewDynamicClassName = 'fui-Virtualizer-Scroll-View-Dynamic';\nexport const virtualizerScrollViewDynamicClassNames = {\n ...virtualizerClassNames,\n container: `${virtualizerScrollViewDynamicClassName}__container`\n};\nconst useStyles = makeStyles({\n base: {\n display: 'flex',\n width: '100%',\n height: '100%',\n overflowAnchor: 'none'\n },\n vertical: {\n flexDirection: 'column',\n overflowY: 'auto'\n },\n horizontal: {\n flexDirection: 'row',\n overflowX: 'auto'\n },\n verticalReversed: {\n flexDirection: 'column-reverse',\n overflowY: 'auto'\n },\n horizontalReversed: {\n flexDirection: 'row-reverse',\n overflowX: 'auto'\n }\n});\n/**\n * Apply styling to the Virtualizer states\n */ export const useVirtualizerScrollViewDynamicStyles_unstable = (state)=>{\n const styles = useStyles();\n // Default virtualizer styles base\n useVirtualizerStyles_unstable(state);\n const containerStyle = state.axis === 'horizontal' ? state.reversed ? styles.horizontalReversed : styles.horizontal : state.reversed ? styles.verticalReversed : styles.vertical;\n // Add container styles\n state.container.className = mergeClasses(virtualizerScrollViewDynamicClassNames.container, styles.base, containerStyle, state.container.className);\n return state;\n};\n"],"mappings":"AAAA,SAASA,6BAA6B,EAAEC,qBAAqB,QAAQ,4CAA4C;AACjH,SAAAC,QAAA,EAAqBC,YAAY,QAAQ,gBAAgB;AACzD,MAAMC,qCAAqC,GAAG,qCAAqC;AACnF,OAAO,MAAMC,sCAAsC,GAAG;EAClD,GAAGJ,qBAAqB;EACxBK,SAAS,EAAG,GAAEF,qCAAsC;AACxD,CAAC;AACD,MAAMG,SAAS,gBAAGL,QAAA;EAAAM,IAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,MAAA;EAAA;EAAAC,QAAA;IAAAC,OAAA;IAAAC,OAAA;EAAA;EAAAC,UAAA;IAAAF,OAAA;IAAAG,OAAA;EAAA;EAAAC,gBAAA;IAAAJ,OAAA;IAAAC,OAAA;EAAA;EAAAI,kBAAA;IAAAL,OAAA;IAAAG,OAAA;EAAA;AAAA;EAAAG,CAAA;AAAA,CAuBjB,CAAC;AACF;AACA;AACA;AAAI,OAAO,MAAMC,8CAA8C,GAAIC,KAAK,IAAG;EACvE,MAAMC,MAAM,GAAGhB,SAAS,CAAC,CAAC;EAC1B;EACAP,6BAA6B,CAACsB,KAAK,CAAC;EACpC,MAAME,cAAc,GAAGF,KAAK,CAACG,IAAI,KAAK,YAAY,GAAGH,KAAK,CAACI,QAAQ,GAAGH,MAAM,CAACJ,kBAAkB,GAAGI,MAAM,CAACP,UAAU,GAAGM,KAAK,CAACI,QAAQ,GAAGH,MAAM,CAACL,gBAAgB,GAAGK,MAAM,CAACV,QAAQ;EAChL;EACAS,KAAK,CAAChB,SAAS,CAACqB,SAAS,GAAGxB,YAAY,CAACE,sCAAsC,CAACC,SAAS,EAAEiB,MAAM,CAACf,IAAI,EAAEgB,cAAc,EAAEF,KAAK,CAAChB,SAAS,CAACqB,SAAS,CAAC;EAClJ,OAAOL,KAAK;AAChB,CAAC"}
@@ -1,2 +1 @@
1
- export {};
2
- //# sourceMappingURL=hooks.types.js.map
1
+ export { };
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/hooks/hooks.types.ts"],"sourcesContent":["import { MutableRefObject } from 'react';\n\nexport type VirtualizerMeasureProps = {\n defaultItemSize: number;\n direction?: 'vertical' | 'horizontal';\n};\n\nexport type VirtualizerMeasureDynamicProps = {\n defaultItemSize: number;\n currentIndex: number;\n numItems: number;\n getItemSize: (index: number) => number;\n direction?: 'vertical' | 'horizontal';\n};\n\n/**\n * Additional direct Ref prevents reading old resize entry data\n * Backwards compatible with ResizeObserverCallback if preferred\n */\nexport interface ResizeCallbackWithRef {\n (entries: ResizeObserverEntry[], observer: ResizeObserver, scrollRef?: MutableRefObject<HTMLElement | null>): void;\n}\n"],"mappings":"AAAA"}
1
+ {"version":3,"sources":["hooks.types.ts"],"sourcesContent":["import { MutableRefObject } from 'react';\n\nexport type VirtualizerMeasureProps = {\n defaultItemSize: number;\n direction?: 'vertical' | 'horizontal';\n};\n\nexport type VirtualizerMeasureDynamicProps = {\n defaultItemSize: number;\n currentIndex: number;\n numItems: number;\n getItemSize: (index: number) => number;\n direction?: 'vertical' | 'horizontal';\n};\n\n/**\n * Additional direct Ref prevents reading old resize entry data\n * Backwards compatible with ResizeObserverCallback if preferred\n */\nexport interface ResizeCallbackWithRef {\n (entries: ResizeObserverEntry[], observer: ResizeObserver, scrollRef?: MutableRefObject<HTMLElement | null>): void;\n}\n"],"names":[],"mappings":"AAAA,WAqBC"}
@@ -3,4 +3,3 @@ export * from './useVirtualizerMeasure';
3
3
  export * from './useDynamicVirtualizerMeasure';
4
4
  export * from './useResizeObserverRef';
5
5
  export * from './hooks.types';
6
- //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/hooks/index.ts"],"sourcesContent":["export * from './useIntersectionObserver';\nexport * from './useVirtualizerMeasure';\nexport * from './useDynamicVirtualizerMeasure';\nexport * from './useResizeObserverRef';\nexport * from './hooks.types';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc"}
1
+ {"version":3,"sources":["index.ts"],"sourcesContent":["export * from './useIntersectionObserver';\nexport * from './useVirtualizerMeasure';\nexport * from './useDynamicVirtualizerMeasure';\nexport * from './useResizeObserverRef';\nexport * from './hooks.types';\n"],"names":[],"mappings":"AAAA,cAAc,4BAA4B;AAC1C,cAAc,0BAA0B;AACxC,cAAc,iCAAiC;AAC/C,cAAc,yBAAyB;AACvC,cAAc,gBAAgB"}
@@ -4,96 +4,96 @@ import { useResizeObserverRef_unstable } from './useResizeObserverRef';
4
4
  import { useRef } from 'react';
5
5
  /**
6
6
  * React hook that measures virtualized space dynamically to ensure optimized virtualization length.
7
- */
8
- export const useDynamicVirtualizerMeasure = virtualizerProps => {
9
- const {
10
- defaultItemSize,
11
- direction = 'vertical',
12
- numItems,
13
- getItemSize,
14
- currentIndex
15
- } = virtualizerProps;
16
- const indexRef = useRef(currentIndex);
17
- indexRef.current = currentIndex;
18
- const [state, setState] = React.useState({
19
- virtualizerLength: 0,
20
- virtualizerBufferItems: 0,
21
- virtualizerBufferSize: 0
22
- });
23
- const {
24
- virtualizerLength,
25
- virtualizerBufferItems,
26
- virtualizerBufferSize
27
- } = state;
28
- const container = React.useRef(null);
29
- const handleScrollResize = React.useCallback(scrollRef => {
30
- if (!(scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current)) {
31
- // Error? ignore?
32
- return;
33
- }
34
- if (scrollRef.current !== container.current) {
35
- container.current = scrollRef.current;
36
- }
37
- const containerSize = direction === 'vertical' ? scrollRef.current.getBoundingClientRect().height : scrollRef.current.getBoundingClientRect().width;
38
- let indexSizer = 0;
39
- let length = 0;
40
- while (indexSizer <= containerSize && length < numItems) {
41
- const iItemSize = getItemSize(indexRef.current + length);
42
- // Increment
43
- indexSizer += iItemSize;
44
- length++;
45
- }
46
- /*
47
- * Number of items to append at each end, i.e. 'preload' each side before entering view.
48
- */
49
- const bufferItems = Math.max(Math.floor(length / 4), 2);
50
- /*
51
- * This is how far we deviate into the bufferItems to detect a redraw.
52
- */
53
- const bufferSize = Math.max(Math.floor(length / 8 * defaultItemSize), 1);
54
- const totalLength = length + bufferItems * 2 + 3;
55
- setState({
56
- virtualizerLength: totalLength,
57
- virtualizerBufferSize: bufferSize,
58
- virtualizerBufferItems: bufferItems
7
+ */ export const useDynamicVirtualizerMeasure = (virtualizerProps)=>{
8
+ const { defaultItemSize , direction ='vertical' , numItems , getItemSize , currentIndex } = virtualizerProps;
9
+ const indexRef = useRef(currentIndex);
10
+ indexRef.current = currentIndex;
11
+ const [state, setState] = React.useState({
12
+ virtualizerLength: 0,
13
+ virtualizerBufferItems: 0,
14
+ virtualizerBufferSize: 0
59
15
  });
60
- }, [defaultItemSize, direction, getItemSize, numItems]);
61
- const resizeCallback = React.useCallback((_entries, _observer, scrollRef) => {
62
- if (scrollRef) {
63
- handleScrollResize(scrollRef);
64
- }
65
- }, [handleScrollResize]);
66
- const scrollRef = useResizeObserverRef_unstable(resizeCallback);
67
- useIsomorphicLayoutEffect(() => {
68
- var _container_current, _container_current1;
69
- if (!container.current) {
70
- return;
71
- }
72
- const containerSize = direction === 'vertical' ? ((_container_current = container.current) === null || _container_current === void 0 ? void 0 : _container_current.getBoundingClientRect().height) * 1.5 : ((_container_current1 = container.current) === null || _container_current1 === void 0 ? void 0 : _container_current1.getBoundingClientRect().width) * 1.5;
73
- let couldBeSmaller = false;
74
- let recheckTotal = 0;
75
- for (let i = currentIndex; i < currentIndex + virtualizerLength; i++) {
76
- const newItemSize = getItemSize(i);
77
- recheckTotal += newItemSize;
78
- const newLength = i - currentIndex;
79
- const bufferItems = Math.max(Math.floor(newLength / 4), 2);
80
- const totalNewLength = newLength + bufferItems * 2 + 4;
81
- const compareLengths = totalNewLength < virtualizerLength;
82
- if (recheckTotal > containerSize && compareLengths) {
83
- couldBeSmaller = true;
84
- break;
85
- }
86
- }
87
- // Check if the render has caused us to need a re-calc of virtualizer length
88
- if (recheckTotal < containerSize || couldBeSmaller) {
89
- handleScrollResize(container);
90
- }
91
- }, [getItemSize, currentIndex, direction, virtualizerLength, resizeCallback, handleScrollResize]);
92
- return {
93
- virtualizerLength,
94
- bufferItems: virtualizerBufferItems,
95
- bufferSize: virtualizerBufferSize,
96
- scrollRef
97
- };
16
+ const { virtualizerLength , virtualizerBufferItems , virtualizerBufferSize } = state;
17
+ const container = React.useRef(null);
18
+ const handleScrollResize = React.useCallback((scrollRef)=>{
19
+ if (!(scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current)) {
20
+ // Error? ignore?
21
+ return;
22
+ }
23
+ if (scrollRef.current !== container.current) {
24
+ container.current = scrollRef.current;
25
+ }
26
+ const containerSize = direction === 'vertical' ? scrollRef.current.getBoundingClientRect().height : scrollRef.current.getBoundingClientRect().width;
27
+ let indexSizer = 0;
28
+ let length = 0;
29
+ while(indexSizer <= containerSize && length < numItems){
30
+ const iItemSize = getItemSize(indexRef.current + length);
31
+ // Increment
32
+ indexSizer += iItemSize;
33
+ length++;
34
+ }
35
+ /*
36
+ * Number of items to append at each end, i.e. 'preload' each side before entering view.
37
+ */ const bufferItems = Math.max(Math.floor(length / 4), 2);
38
+ /*
39
+ * This is how far we deviate into the bufferItems to detect a redraw.
40
+ */ const bufferSize = Math.max(Math.floor(length / 8 * defaultItemSize), 1);
41
+ const totalLength = length + bufferItems * 2 + 3;
42
+ setState({
43
+ virtualizerLength: totalLength,
44
+ virtualizerBufferSize: bufferSize,
45
+ virtualizerBufferItems: bufferItems
46
+ });
47
+ }, [
48
+ defaultItemSize,
49
+ direction,
50
+ getItemSize,
51
+ numItems
52
+ ]);
53
+ const resizeCallback = React.useCallback((_entries, _observer, scrollRef)=>{
54
+ if (scrollRef) {
55
+ handleScrollResize(scrollRef);
56
+ }
57
+ }, [
58
+ handleScrollResize
59
+ ]);
60
+ const scrollRef = useResizeObserverRef_unstable(resizeCallback);
61
+ useIsomorphicLayoutEffect(()=>{
62
+ var _container_current, _container_current1;
63
+ if (!container.current) {
64
+ return;
65
+ }
66
+ const containerSize = direction === 'vertical' ? ((_container_current = container.current) === null || _container_current === void 0 ? void 0 : _container_current.getBoundingClientRect().height) * 1.5 : ((_container_current1 = container.current) === null || _container_current1 === void 0 ? void 0 : _container_current1.getBoundingClientRect().width) * 1.5;
67
+ let couldBeSmaller = false;
68
+ let recheckTotal = 0;
69
+ for(let i = currentIndex; i < currentIndex + virtualizerLength; i++){
70
+ const newItemSize = getItemSize(i);
71
+ recheckTotal += newItemSize;
72
+ const newLength = i - currentIndex;
73
+ const bufferItems = Math.max(Math.floor(newLength / 4), 2);
74
+ const totalNewLength = newLength + bufferItems * 2 + 4;
75
+ const compareLengths = totalNewLength < virtualizerLength;
76
+ if (recheckTotal > containerSize && compareLengths) {
77
+ couldBeSmaller = true;
78
+ break;
79
+ }
80
+ }
81
+ // Check if the render has caused us to need a re-calc of virtualizer length
82
+ if (recheckTotal < containerSize || couldBeSmaller) {
83
+ handleScrollResize(container);
84
+ }
85
+ }, [
86
+ getItemSize,
87
+ currentIndex,
88
+ direction,
89
+ virtualizerLength,
90
+ resizeCallback,
91
+ handleScrollResize
92
+ ]);
93
+ return {
94
+ virtualizerLength,
95
+ bufferItems: virtualizerBufferItems,
96
+ bufferSize: virtualizerBufferSize,
97
+ scrollRef
98
+ };
98
99
  };
99
- //# sourceMappingURL=useDynamicVirtualizerMeasure.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useIsomorphicLayoutEffect","React","useResizeObserverRef_unstable","useRef","useDynamicVirtualizerMeasure","virtualizerProps","defaultItemSize","direction","numItems","getItemSize","currentIndex","indexRef","current","state","setState","useState","virtualizerLength","virtualizerBufferItems","virtualizerBufferSize","container","handleScrollResize","useCallback","scrollRef","containerSize","getBoundingClientRect","height","width","indexSizer","length","iItemSize","bufferItems","Math","max","floor","bufferSize","totalLength","resizeCallback","_entries","_observer","_container_current","_container_current1","couldBeSmaller","recheckTotal","i","newItemSize","newLength","totalNewLength","compareLengths"],"sources":["../../src/hooks/useDynamicVirtualizerMeasure.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { VirtualizerMeasureDynamicProps } from './hooks.types';\nimport { useResizeObserverRef_unstable } from './useResizeObserverRef';\nimport { useRef } from 'react';\n\n/**\n * React hook that measures virtualized space dynamically to ensure optimized virtualization length.\n */\nexport const useDynamicVirtualizerMeasure = <TElement extends HTMLElement>(\n virtualizerProps: VirtualizerMeasureDynamicProps,\n): {\n virtualizerLength: number;\n bufferItems: number;\n bufferSize: number;\n scrollRef: (instance: TElement | null) => void;\n} => {\n const { defaultItemSize, direction = 'vertical', numItems, getItemSize, currentIndex } = virtualizerProps;\n const indexRef = useRef<number>(currentIndex);\n indexRef.current = currentIndex;\n\n const [state, setState] = React.useState({\n virtualizerLength: 0,\n virtualizerBufferItems: 0,\n virtualizerBufferSize: 0,\n });\n\n const { virtualizerLength, virtualizerBufferItems, virtualizerBufferSize } = state;\n\n const container = React.useRef<HTMLElement | null>(null);\n const handleScrollResize = React.useCallback(\n (scrollRef: React.MutableRefObject<HTMLElement | null>) => {\n if (!scrollRef?.current) {\n // Error? ignore?\n return;\n }\n\n if (scrollRef.current !== container.current) {\n container.current = scrollRef.current;\n }\n\n const containerSize =\n direction === 'vertical'\n ? scrollRef.current.getBoundingClientRect().height\n : scrollRef.current.getBoundingClientRect().width;\n\n let indexSizer = 0;\n let length = 0;\n\n while (indexSizer <= containerSize && length < numItems) {\n const iItemSize = getItemSize(indexRef.current + length);\n\n // Increment\n indexSizer += iItemSize;\n length++;\n }\n\n /*\n * Number of items to append at each end, i.e. 'preload' each side before entering view.\n */\n const bufferItems = Math.max(Math.floor(length / 4), 2);\n\n /*\n * This is how far we deviate into the bufferItems to detect a redraw.\n */\n const bufferSize = Math.max(Math.floor((length / 8) * defaultItemSize), 1);\n\n const totalLength = length + bufferItems * 2 + 3;\n setState({\n virtualizerLength: totalLength,\n virtualizerBufferSize: bufferSize,\n virtualizerBufferItems: bufferItems,\n });\n },\n [defaultItemSize, direction, getItemSize, numItems],\n );\n\n const resizeCallback = React.useCallback(\n (\n _entries: ResizeObserverEntry[],\n _observer: ResizeObserver,\n scrollRef?: React.MutableRefObject<HTMLElement | null>,\n ) => {\n if (scrollRef) {\n handleScrollResize(scrollRef);\n }\n },\n [handleScrollResize],\n );\n\n const scrollRef = useResizeObserverRef_unstable(resizeCallback);\n\n useIsomorphicLayoutEffect(() => {\n if (!container.current) {\n return;\n }\n\n const containerSize =\n direction === 'vertical'\n ? container.current?.getBoundingClientRect().height * 1.5\n : container.current?.getBoundingClientRect().width * 1.5;\n\n let couldBeSmaller = false;\n let recheckTotal = 0;\n for (let i = currentIndex; i < currentIndex + virtualizerLength; i++) {\n const newItemSize = getItemSize(i);\n recheckTotal += newItemSize;\n\n const newLength = i - currentIndex;\n\n const bufferItems = Math.max(Math.floor(newLength / 4), 2);\n const totalNewLength = newLength + bufferItems * 2 + 4;\n const compareLengths = totalNewLength < virtualizerLength;\n\n if (recheckTotal > containerSize && compareLengths) {\n couldBeSmaller = true;\n break;\n }\n }\n\n // Check if the render has caused us to need a re-calc of virtualizer length\n if (recheckTotal < containerSize || couldBeSmaller) {\n handleScrollResize(container);\n }\n }, [getItemSize, currentIndex, direction, virtualizerLength, resizeCallback, handleScrollResize]);\n\n return {\n virtualizerLength,\n bufferItems: virtualizerBufferItems,\n bufferSize: virtualizerBufferSize,\n scrollRef,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"sources":["useDynamicVirtualizerMeasure.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { VirtualizerMeasureDynamicProps } from './hooks.types';\nimport { useResizeObserverRef_unstable } from './useResizeObserverRef';\nimport { useRef } from 'react';\n\n/**\n * React hook that measures virtualized space dynamically to ensure optimized virtualization length.\n */\nexport const useDynamicVirtualizerMeasure = <TElement extends HTMLElement>(\n virtualizerProps: VirtualizerMeasureDynamicProps,\n): {\n virtualizerLength: number;\n bufferItems: number;\n bufferSize: number;\n scrollRef: (instance: TElement | null) => void;\n} => {\n const { defaultItemSize, direction = 'vertical', numItems, getItemSize, currentIndex } = virtualizerProps;\n const indexRef = useRef<number>(currentIndex);\n indexRef.current = currentIndex;\n\n const [state, setState] = React.useState({\n virtualizerLength: 0,\n virtualizerBufferItems: 0,\n virtualizerBufferSize: 0,\n });\n\n const { virtualizerLength, virtualizerBufferItems, virtualizerBufferSize } = state;\n\n const container = React.useRef<HTMLElement | null>(null);\n const handleScrollResize = React.useCallback(\n (scrollRef: React.MutableRefObject<HTMLElement | null>) => {\n if (!scrollRef?.current) {\n // Error? ignore?\n return;\n }\n\n if (scrollRef.current !== container.current) {\n container.current = scrollRef.current;\n }\n\n const containerSize =\n direction === 'vertical'\n ? scrollRef.current.getBoundingClientRect().height\n : scrollRef.current.getBoundingClientRect().width;\n\n let indexSizer = 0;\n let length = 0;\n\n while (indexSizer <= containerSize && length < numItems) {\n const iItemSize = getItemSize(indexRef.current + length);\n\n // Increment\n indexSizer += iItemSize;\n length++;\n }\n\n /*\n * Number of items to append at each end, i.e. 'preload' each side before entering view.\n */\n const bufferItems = Math.max(Math.floor(length / 4), 2);\n\n /*\n * This is how far we deviate into the bufferItems to detect a redraw.\n */\n const bufferSize = Math.max(Math.floor((length / 8) * defaultItemSize), 1);\n\n const totalLength = length + bufferItems * 2 + 3;\n setState({\n virtualizerLength: totalLength,\n virtualizerBufferSize: bufferSize,\n virtualizerBufferItems: bufferItems,\n });\n },\n [defaultItemSize, direction, getItemSize, numItems],\n );\n\n const resizeCallback = React.useCallback(\n (\n _entries: ResizeObserverEntry[],\n _observer: ResizeObserver,\n scrollRef?: React.MutableRefObject<HTMLElement | null>,\n ) => {\n if (scrollRef) {\n handleScrollResize(scrollRef);\n }\n },\n [handleScrollResize],\n );\n\n const scrollRef = useResizeObserverRef_unstable(resizeCallback);\n\n useIsomorphicLayoutEffect(() => {\n if (!container.current) {\n return;\n }\n\n const containerSize =\n direction === 'vertical'\n ? container.current?.getBoundingClientRect().height * 1.5\n : container.current?.getBoundingClientRect().width * 1.5;\n\n let couldBeSmaller = false;\n let recheckTotal = 0;\n for (let i = currentIndex; i < currentIndex + virtualizerLength; i++) {\n const newItemSize = getItemSize(i);\n recheckTotal += newItemSize;\n\n const newLength = i - currentIndex;\n\n const bufferItems = Math.max(Math.floor(newLength / 4), 2);\n const totalNewLength = newLength + bufferItems * 2 + 4;\n const compareLengths = totalNewLength < virtualizerLength;\n\n if (recheckTotal > containerSize && compareLengths) {\n couldBeSmaller = true;\n break;\n }\n }\n\n // Check if the render has caused us to need a re-calc of virtualizer length\n if (recheckTotal < containerSize || couldBeSmaller) {\n handleScrollResize(container);\n }\n }, [getItemSize, currentIndex, direction, virtualizerLength, resizeCallback, handleScrollResize]);\n\n return {\n virtualizerLength,\n bufferItems: virtualizerBufferItems,\n bufferSize: virtualizerBufferSize,\n scrollRef,\n };\n};\n"],"names":["useIsomorphicLayoutEffect","React","useResizeObserverRef_unstable","useRef","useDynamicVirtualizerMeasure","virtualizerProps","defaultItemSize","direction","numItems","getItemSize","currentIndex","indexRef","current","state","setState","useState","virtualizerLength","virtualizerBufferItems","virtualizerBufferSize","container","handleScrollResize","useCallback","scrollRef","containerSize","getBoundingClientRect","height","width","indexSizer","length","iItemSize","bufferItems","Math","max","floor","bufferSize","totalLength","resizeCallback","_entries","_observer","couldBeSmaller","recheckTotal","i","newItemSize","newLength","totalNewLength","compareLengths"],"mappings":"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"}
@@ -1,9 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { useIsomorphicLayoutEffect } from '@fluentui/react-utilities';
3
- const {
4
- useState,
5
- useRef
6
- } = React;
3
+ const { useState , useRef } = React;
7
4
  /**
8
5
  * React hook that allows easy usage of the browser API IntersectionObserver within React
9
6
  * @param callback - A function called when the percentage of the target element is visible crosses a threshold.
@@ -12,33 +9,35 @@ const {
12
9
  * enough to trigger a callback).
13
10
  * @returns An array containing a callback to update the list of Elements the observer should listen to, a callback to
14
11
  * update the init options of the IntersectionObserver and a ref to the IntersectionObserver instance itself.
15
- */
16
- export const useIntersectionObserver = (callback, options) => {
17
- const observer = useRef();
18
- const [observerList, setObserverList] = useState();
19
- const [observerInit, setObserverInit] = useState(options);
20
- // Observer elements in passed in list and clean up previous list
21
- // This effect is only triggered when observerList is updated
22
- useIsomorphicLayoutEffect(() => {
23
- observer.current = new IntersectionObserver(callback, observerInit);
24
- // If we have an instance of IO and a list with elements, observer the elements
25
- if (observer.current && observerList && observerList.length > 0) {
26
- observerList.forEach(element => {
27
- var _observer_current;
28
- (_observer_current = observer.current) === null || _observer_current === void 0 ? void 0 : _observer_current.observe(element);
29
- });
30
- }
31
- // clean up previous elements being listened to
32
- return () => {
33
- if (observer.current) {
34
- observer.current.disconnect();
35
- }
12
+ */ export const useIntersectionObserver = (callback, options)=>{
13
+ const observer = useRef();
14
+ const [observerList, setObserverList] = useState();
15
+ const [observerInit, setObserverInit] = useState(options);
16
+ // Observer elements in passed in list and clean up previous list
17
+ // This effect is only triggered when observerList is updated
18
+ useIsomorphicLayoutEffect(()=>{
19
+ observer.current = new IntersectionObserver(callback, observerInit);
20
+ // If we have an instance of IO and a list with elements, observer the elements
21
+ if (observer.current && observerList && observerList.length > 0) {
22
+ observerList.forEach((element)=>{
23
+ var _observer_current;
24
+ (_observer_current = observer.current) === null || _observer_current === void 0 ? void 0 : _observer_current.observe(element);
25
+ });
26
+ }
27
+ // clean up previous elements being listened to
28
+ return ()=>{
29
+ if (observer.current) {
30
+ observer.current.disconnect();
31
+ }
32
+ };
33
+ }, [
34
+ observerList,
35
+ observerInit,
36
+ callback
37
+ ]);
38
+ return {
39
+ setObserverList,
40
+ setObserverInit,
41
+ observer
36
42
  };
37
- }, [observerList, observerInit, callback]);
38
- return {
39
- setObserverList,
40
- setObserverInit,
41
- observer
42
- };
43
43
  };
44
- //# sourceMappingURL=useIntersectionObserver.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useIsomorphicLayoutEffect","useState","useRef","useIntersectionObserver","callback","options","observer","observerList","setObserverList","observerInit","setObserverInit","current","IntersectionObserver","length","forEach","element","_observer_current","observe","disconnect"],"sources":["../../src/hooks/useIntersectionObserver.ts"],"sourcesContent":["import type { Dispatch, MutableRefObject, SetStateAction } from 'react';\nimport * as React from 'react';\nimport { useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\n\nconst { useState, useRef } = React;\n\n/**\n * React hook that allows easy usage of the browser API IntersectionObserver within React\n * @param callback - A function called when the percentage of the target element is visible crosses a threshold.\n * @param options - An optional object which customizes the observer. If options isn't specified, the observer uses the\n * document's viewport as the root, with no margin, and a 0% threshold (meaning that even a one-pixel change is\n * enough to trigger a callback).\n * @returns An array containing a callback to update the list of Elements the observer should listen to, a callback to\n * update the init options of the IntersectionObserver and a ref to the IntersectionObserver instance itself.\n */\n\nexport const useIntersectionObserver = (\n callback: IntersectionObserverCallback,\n options?: IntersectionObserverInit,\n): {\n setObserverList: Dispatch<SetStateAction<Element[] | undefined>>;\n setObserverInit: Dispatch<SetStateAction<IntersectionObserverInit | undefined>>;\n observer: MutableRefObject<IntersectionObserver | undefined>;\n} => {\n const observer = useRef<IntersectionObserver>();\n const [observerList, setObserverList] = useState<Element[]>();\n const [observerInit, setObserverInit] = useState<IntersectionObserverInit | undefined>(options);\n\n // Observer elements in passed in list and clean up previous list\n // This effect is only triggered when observerList is updated\n useIsomorphicLayoutEffect(() => {\n observer.current = new IntersectionObserver(callback, observerInit);\n\n // If we have an instance of IO and a list with elements, observer the elements\n if (observer.current && observerList && observerList.length > 0) {\n observerList.forEach(element => {\n observer.current?.observe(element);\n });\n }\n\n // clean up previous elements being listened to\n return () => {\n if (observer.current) {\n observer.current.disconnect();\n }\n };\n }, [observerList, observerInit, callback]);\n\n return { setObserverList, setObserverInit, observer };\n};\n"],"mappings":"AACA,YAAYA,KAAA,MAAW;AACvB,SAASC,yBAAyB,QAAQ;AAE1C,MAAM;EAAEC,QAAA;EAAUC;AAAM,CAAE,GAAGH,KAAA;AAE7B;;;;;;;;;AAUA,OAAO,MAAMI,uBAAA,GAA0BA,CACrCC,QAAA,EACAC,OAAA,KAKG;EACH,MAAMC,QAAA,GAAWJ,MAAA;EACjB,MAAM,CAACK,YAAA,EAAcC,eAAA,CAAgB,GAAGP,QAAA;EACxC,MAAM,CAACQ,YAAA,EAAcC,eAAA,CAAgB,GAAGT,QAAA,CAA+CI,OAAA;EAEvF;EACA;EACAL,yBAAA,CAA0B,MAAM;IAC9BM,QAAA,CAASK,OAAO,GAAG,IAAIC,oBAAA,CAAqBR,QAAA,EAAUK,YAAA;IAEtD;IACA,IAAIH,QAAA,CAASK,OAAO,IAAIJ,YAAA,IAAgBA,YAAA,CAAaM,MAAM,GAAG,GAAG;MAC/DN,YAAA,CAAaO,OAAO,CAACC,OAAA,IAAW;YAC9BC,iBAAA;QAAA,CAAAA,iBAAA,GAAAV,QAAA,CAASK,OAAO,cAAhBK,iBAAA,uBAAAA,iBAAA,CAAkBC,OAAA,CAAQF,OAAA;MAC5B;IACF;IAEA;IACA,OAAO,MAAM;MACX,IAAIT,QAAA,CAASK,OAAO,EAAE;QACpBL,QAAA,CAASK,OAAO,CAACO,UAAU;MAC7B;IACF;EACF,GAAG,CAACX,YAAA,EAAcE,YAAA,EAAcL,QAAA,CAAS;EAEzC,OAAO;IAAEI,eAAA;IAAiBE,eAAA;IAAiBJ;EAAS;AACtD"}
1
+ {"version":3,"sources":["useIntersectionObserver.ts"],"sourcesContent":["import type { Dispatch, MutableRefObject, SetStateAction } from 'react';\nimport * as React from 'react';\nimport { useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\n\nconst { useState, useRef } = React;\n\n/**\n * React hook that allows easy usage of the browser API IntersectionObserver within React\n * @param callback - A function called when the percentage of the target element is visible crosses a threshold.\n * @param options - An optional object which customizes the observer. If options isn't specified, the observer uses the\n * document's viewport as the root, with no margin, and a 0% threshold (meaning that even a one-pixel change is\n * enough to trigger a callback).\n * @returns An array containing a callback to update the list of Elements the observer should listen to, a callback to\n * update the init options of the IntersectionObserver and a ref to the IntersectionObserver instance itself.\n */\n\nexport const useIntersectionObserver = (\n callback: IntersectionObserverCallback,\n options?: IntersectionObserverInit,\n): {\n setObserverList: Dispatch<SetStateAction<Element[] | undefined>>;\n setObserverInit: Dispatch<SetStateAction<IntersectionObserverInit | undefined>>;\n observer: MutableRefObject<IntersectionObserver | undefined>;\n} => {\n const observer = useRef<IntersectionObserver>();\n const [observerList, setObserverList] = useState<Element[]>();\n const [observerInit, setObserverInit] = useState<IntersectionObserverInit | undefined>(options);\n\n // Observer elements in passed in list and clean up previous list\n // This effect is only triggered when observerList is updated\n useIsomorphicLayoutEffect(() => {\n observer.current = new IntersectionObserver(callback, observerInit);\n\n // If we have an instance of IO and a list with elements, observer the elements\n if (observer.current && observerList && observerList.length > 0) {\n observerList.forEach(element => {\n observer.current?.observe(element);\n });\n }\n\n // clean up previous elements being listened to\n return () => {\n if (observer.current) {\n observer.current.disconnect();\n }\n };\n }, [observerList, observerInit, callback]);\n\n return { setObserverList, setObserverInit, observer };\n};\n"],"names":["React","useIsomorphicLayoutEffect","useState","useRef","useIntersectionObserver","callback","options","observer","observerList","setObserverList","observerInit","setObserverInit","current","IntersectionObserver","length","forEach","element","observe","disconnect"],"mappings":"AACA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,yBAAyB,QAAQ,4BAA4B;AAEtE,MAAM,EAAEC,SAAQ,EAAEC,OAAM,EAAE,GAAGH;AAE7B;;;;;;;;CAQC,GAED,OAAO,MAAMI,0BAA0B,CACrCC,UACAC,UAKG;IACH,MAAMC,WAAWJ;IACjB,MAAM,CAACK,cAAcC,gBAAgB,GAAGP;IACxC,MAAM,CAACQ,cAAcC,gBAAgB,GAAGT,SAA+CI;IAEvF,iEAAiE;IACjE,6DAA6D;IAC7DL,0BAA0B,IAAM;QAC9BM,SAASK,OAAO,GAAG,IAAIC,qBAAqBR,UAAUK;QAEtD,+EAA+E;QAC/E,IAAIH,SAASK,OAAO,IAAIJ,gBAAgBA,aAAaM,MAAM,GAAG,GAAG;YAC/DN,aAAaO,OAAO,CAACC,CAAAA,UAAW;oBAC9BT;gBAAAA,CAAAA,oBAAAA,SAASK,OAAO,cAAhBL,+BAAAA,KAAAA,IAAAA,kBAAkBU,QAAQD;YAC5B;QACF,CAAC;QAED,+CAA+C;QAC/C,OAAO,IAAM;YACX,IAAIT,SAASK,OAAO,EAAE;gBACpBL,SAASK,OAAO,CAACM,UAAU;YAC7B,CAAC;QACH;IACF,GAAG;QAACV;QAAcE;QAAcL;KAAS;IAEzC,OAAO;QAAEI;QAAiBE;QAAiBJ;IAAS;AACtD,EAAE"}
@@ -3,38 +3,42 @@ import { debounce } from '../utilities/debounce';
3
3
  import { canUseDOM } from '@fluentui/react-utilities';
4
4
  /**
5
5
  * useResizeObserverRef_unstable simplifies resize observer connection and ensures debounce/cleanup
6
- */
7
- export const useResizeObserverRef_unstable = resizeCallback => {
8
- const container = React.useRef(null);
9
- // the handler for resize observer
10
- const handleResize = debounce((entries, observer) => {
11
- resizeCallback(entries, observer, container);
12
- });
13
- // Keep the reference of ResizeObserver in the state, as it should live through renders
14
- const [resizeObserver, setResizeObserver] = React.useState(() => canUseDOM() ? new ResizeObserver(handleResize) : undefined);
15
- React.useEffect(() => {
16
- // Update our state when resizeCallback changes
17
- resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
18
- setResizeObserver(canUseDOM() ? new ResizeObserver(handleResize) : undefined);
6
+ */ export const useResizeObserverRef_unstable = (resizeCallback)=>{
7
+ const container = React.useRef(null);
8
+ // the handler for resize observer
9
+ const handleResize = debounce((entries, observer)=>{
10
+ resizeCallback(entries, observer, container);
11
+ });
12
+ // Keep the reference of ResizeObserver in the state, as it should live through renders
13
+ const [resizeObserver, setResizeObserver] = React.useState(()=>canUseDOM() ? new ResizeObserver(handleResize) : undefined);
14
+ React.useEffect(()=>{
15
+ // Update our state when resizeCallback changes
16
+ container.current = null;
17
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
18
+ setResizeObserver(canUseDOM() ? new ResizeObserver(handleResize) : undefined);
19
19
  // eslint-disable-next-line react-hooks/exhaustive-deps
20
- }, [resizeCallback]);
21
- React.useEffect(() => {
22
- return () => {
23
- resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
24
- };
20
+ }, [
21
+ resizeCallback
22
+ ]);
23
+ React.useEffect(()=>{
24
+ return ()=>{
25
+ container.current = null;
26
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
27
+ };
25
28
  // eslint-disable-next-line react-hooks/exhaustive-deps
26
- }, []);
27
- const scrollRef = React.useCallback(instance => {
28
- if (container.current !== instance) {
29
- if (container.current) {
30
- resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.unobserve(container.current);
31
- }
32
- container.current = instance;
33
- if (container.current) {
34
- resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.observe(container.current);
35
- }
36
- }
37
- }, [resizeObserver]);
38
- return scrollRef;
29
+ }, []);
30
+ const scrollRef = React.useCallback((instance)=>{
31
+ if (container.current !== instance) {
32
+ if (container.current) {
33
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.unobserve(container.current);
34
+ }
35
+ container.current = instance;
36
+ if (container.current) {
37
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.observe(container.current);
38
+ }
39
+ }
40
+ }, [
41
+ resizeObserver
42
+ ]);
43
+ return scrollRef;
39
44
  };
40
- //# sourceMappingURL=useResizeObserverRef.js.map