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

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 (149) hide show
  1. package/CHANGELOG.json +40 -1
  2. package/CHANGELOG.md +15 -2
  3. package/lib/Hooks.js +0 -1
  4. package/lib/Hooks.js.map +1 -1
  5. package/lib/Utilities.js +0 -1
  6. package/lib/Utilities.js.map +1 -1
  7. package/lib/Virtualizer.js +0 -1
  8. package/lib/Virtualizer.js.map +1 -1
  9. package/lib/VirtualizerScrollView.js +0 -1
  10. package/lib/VirtualizerScrollView.js.map +1 -1
  11. package/lib/VirtualizerScrollViewDynamic.js +0 -1
  12. package/lib/VirtualizerScrollViewDynamic.js.map +1 -1
  13. package/lib/components/Virtualizer/Virtualizer.js +5 -7
  14. package/lib/components/Virtualizer/Virtualizer.js.map +1 -1
  15. package/lib/components/Virtualizer/Virtualizer.types.js +0 -1
  16. package/lib/components/Virtualizer/Virtualizer.types.js.map +1 -1
  17. package/lib/components/Virtualizer/index.js +1 -2
  18. package/lib/components/Virtualizer/index.js.map +1 -1
  19. package/lib/components/Virtualizer/renderVirtualizer.js +9 -13
  20. package/lib/components/Virtualizer/renderVirtualizer.js.map +1 -1
  21. package/lib/components/Virtualizer/useVirtualizer.js +348 -354
  22. package/lib/components/Virtualizer/useVirtualizer.js.map +1 -1
  23. package/lib/components/Virtualizer/{useVirtualizerStyles.js → useVirtualizerStyles.styles.js} +1 -1
  24. package/lib/components/Virtualizer/useVirtualizerStyles.styles.js.map +1 -0
  25. package/lib/components/VirtualizerScrollView/VirtualizerScrollView.js +5 -7
  26. package/lib/components/VirtualizerScrollView/VirtualizerScrollView.js.map +1 -1
  27. package/lib/components/VirtualizerScrollView/VirtualizerScrollView.types.js +1 -2
  28. package/lib/components/VirtualizerScrollView/VirtualizerScrollView.types.js.map +1 -1
  29. package/lib/components/VirtualizerScrollView/index.js +1 -2
  30. package/lib/components/VirtualizerScrollView/index.js.map +1 -1
  31. package/lib/components/VirtualizerScrollView/renderVirtualizerScrollView.js +4 -8
  32. package/lib/components/VirtualizerScrollView/renderVirtualizerScrollView.js.map +1 -1
  33. package/lib/components/VirtualizerScrollView/useVirtualizerScrollView.js +26 -32
  34. package/lib/components/VirtualizerScrollView/useVirtualizerScrollView.js.map +1 -1
  35. package/lib/components/VirtualizerScrollView/{useVirtualizerScrollViewStyles.js → useVirtualizerScrollViewStyles.styles.js} +2 -2
  36. package/lib/components/VirtualizerScrollView/useVirtualizerScrollViewStyles.styles.js.map +1 -0
  37. package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.js +5 -7
  38. package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.js.map +1 -1
  39. package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js +1 -2
  40. package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js.map +1 -1
  41. package/lib/components/VirtualizerScrollViewDynamic/index.js +1 -2
  42. package/lib/components/VirtualizerScrollViewDynamic/index.js.map +1 -1
  43. package/lib/components/VirtualizerScrollViewDynamic/renderVirtualizerScrollViewDynamic.js +4 -8
  44. package/lib/components/VirtualizerScrollViewDynamic/renderVirtualizerScrollViewDynamic.js.map +1 -1
  45. package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js +31 -37
  46. package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js.map +1 -1
  47. package/lib/components/VirtualizerScrollViewDynamic/{useVirtualizerScrollViewDynamicStyles.js → useVirtualizerScrollViewDynamicStyles.styles.js} +2 -2
  48. package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamicStyles.styles.js.map +1 -0
  49. package/lib/hooks/hooks.types.js +1 -2
  50. package/lib/hooks/hooks.types.js.map +1 -1
  51. package/lib/hooks/index.js +0 -1
  52. package/lib/hooks/index.js.map +1 -1
  53. package/lib/hooks/useDynamicVirtualizerMeasure.js +91 -91
  54. package/lib/hooks/useDynamicVirtualizerMeasure.js.map +1 -1
  55. package/lib/hooks/useIntersectionObserver.js +31 -32
  56. package/lib/hooks/useIntersectionObserver.js.map +1 -1
  57. package/lib/hooks/useResizeObserverRef.js +34 -32
  58. package/lib/hooks/useResizeObserverRef.js.map +1 -1
  59. package/lib/hooks/useVirtualizerMeasure.js +38 -47
  60. package/lib/hooks/useVirtualizerMeasure.js.map +1 -1
  61. package/lib/index.js +0 -1
  62. package/lib/index.js.map +1 -1
  63. package/lib/utilities/VirtualizerContext/VirtualizerContext.js +26 -22
  64. package/lib/utilities/VirtualizerContext/VirtualizerContext.js.map +1 -1
  65. package/lib/utilities/VirtualizerContext/index.js +0 -1
  66. package/lib/utilities/VirtualizerContext/index.js.map +1 -1
  67. package/lib/utilities/VirtualizerContext/types.js +1 -2
  68. package/lib/utilities/VirtualizerContext/types.js.map +1 -1
  69. package/lib/utilities/debounce.js +13 -14
  70. package/lib/utilities/debounce.js.map +1 -1
  71. package/lib/utilities/index.js +0 -1
  72. package/lib/utilities/index.js.map +1 -1
  73. package/lib-commonjs/Hooks.js +0 -3
  74. package/lib-commonjs/Hooks.js.map +1 -1
  75. package/lib-commonjs/Utilities.js +0 -3
  76. package/lib-commonjs/Utilities.js.map +1 -1
  77. package/lib-commonjs/Virtualizer.js +0 -3
  78. package/lib-commonjs/Virtualizer.js.map +1 -1
  79. package/lib-commonjs/VirtualizerScrollView.js +0 -3
  80. package/lib-commonjs/VirtualizerScrollView.js.map +1 -1
  81. package/lib-commonjs/VirtualizerScrollViewDynamic.js +0 -3
  82. package/lib-commonjs/VirtualizerScrollViewDynamic.js.map +1 -1
  83. package/lib-commonjs/components/Virtualizer/Virtualizer.js +3 -5
  84. package/lib-commonjs/components/Virtualizer/Virtualizer.js.map +1 -1
  85. package/lib-commonjs/components/Virtualizer/Virtualizer.types.js +0 -3
  86. package/lib-commonjs/components/Virtualizer/Virtualizer.types.js.map +1 -1
  87. package/lib-commonjs/components/Virtualizer/index.js +1 -4
  88. package/lib-commonjs/components/Virtualizer/index.js.map +1 -1
  89. package/lib-commonjs/components/Virtualizer/renderVirtualizer.js +1 -3
  90. package/lib-commonjs/components/Virtualizer/renderVirtualizer.js.map +1 -1
  91. package/lib-commonjs/components/Virtualizer/useVirtualizer.js +1 -3
  92. package/lib-commonjs/components/Virtualizer/useVirtualizer.js.map +1 -1
  93. package/lib-commonjs/components/Virtualizer/{useVirtualizerStyles.js → useVirtualizerStyles.styles.js} +1 -3
  94. package/lib-commonjs/components/Virtualizer/useVirtualizerStyles.styles.js.map +1 -0
  95. package/lib-commonjs/components/VirtualizerScrollView/VirtualizerScrollView.js +3 -5
  96. package/lib-commonjs/components/VirtualizerScrollView/VirtualizerScrollView.js.map +1 -1
  97. package/lib-commonjs/components/VirtualizerScrollView/VirtualizerScrollView.types.js +0 -3
  98. package/lib-commonjs/components/VirtualizerScrollView/VirtualizerScrollView.types.js.map +1 -1
  99. package/lib-commonjs/components/VirtualizerScrollView/index.js +1 -4
  100. package/lib-commonjs/components/VirtualizerScrollView/index.js.map +1 -1
  101. package/lib-commonjs/components/VirtualizerScrollView/renderVirtualizerScrollView.js +1 -3
  102. package/lib-commonjs/components/VirtualizerScrollView/renderVirtualizerScrollView.js.map +1 -1
  103. package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollView.js +1 -3
  104. package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollView.js.map +1 -1
  105. package/lib-commonjs/components/VirtualizerScrollView/{useVirtualizerScrollViewStyles.js → useVirtualizerScrollViewStyles.styles.js} +4 -6
  106. package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollViewStyles.styles.js.map +1 -0
  107. package/lib-commonjs/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.js +3 -5
  108. package/lib-commonjs/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.js.map +1 -1
  109. package/lib-commonjs/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js +0 -3
  110. package/lib-commonjs/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js.map +1 -1
  111. package/lib-commonjs/components/VirtualizerScrollViewDynamic/index.js +1 -4
  112. package/lib-commonjs/components/VirtualizerScrollViewDynamic/index.js.map +1 -1
  113. package/lib-commonjs/components/VirtualizerScrollViewDynamic/renderVirtualizerScrollViewDynamic.js +1 -3
  114. package/lib-commonjs/components/VirtualizerScrollViewDynamic/renderVirtualizerScrollViewDynamic.js.map +1 -1
  115. package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js +1 -3
  116. package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js.map +1 -1
  117. package/lib-commonjs/components/VirtualizerScrollViewDynamic/{useVirtualizerScrollViewDynamicStyles.js → useVirtualizerScrollViewDynamicStyles.styles.js} +4 -6
  118. package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamicStyles.styles.js.map +1 -0
  119. package/lib-commonjs/hooks/hooks.types.js +0 -3
  120. package/lib-commonjs/hooks/hooks.types.js.map +1 -1
  121. package/lib-commonjs/hooks/index.js +0 -3
  122. package/lib-commonjs/hooks/index.js.map +1 -1
  123. package/lib-commonjs/hooks/useDynamicVirtualizerMeasure.js +5 -7
  124. package/lib-commonjs/hooks/useDynamicVirtualizerMeasure.js.map +1 -1
  125. package/lib-commonjs/hooks/useIntersectionObserver.js +1 -3
  126. package/lib-commonjs/hooks/useIntersectionObserver.js.map +1 -1
  127. package/lib-commonjs/hooks/useResizeObserverRef.js +1 -3
  128. package/lib-commonjs/hooks/useResizeObserverRef.js.map +1 -1
  129. package/lib-commonjs/hooks/useVirtualizerMeasure.js +7 -9
  130. package/lib-commonjs/hooks/useVirtualizerMeasure.js.map +1 -1
  131. package/lib-commonjs/index.js +0 -3
  132. package/lib-commonjs/index.js.map +1 -1
  133. package/lib-commonjs/utilities/VirtualizerContext/VirtualizerContext.js +3 -5
  134. package/lib-commonjs/utilities/VirtualizerContext/VirtualizerContext.js.map +1 -1
  135. package/lib-commonjs/utilities/VirtualizerContext/index.js +0 -3
  136. package/lib-commonjs/utilities/VirtualizerContext/index.js.map +1 -1
  137. package/lib-commonjs/utilities/VirtualizerContext/types.js +0 -3
  138. package/lib-commonjs/utilities/VirtualizerContext/types.js.map +1 -1
  139. package/lib-commonjs/utilities/debounce.js +1 -3
  140. package/lib-commonjs/utilities/debounce.js.map +1 -1
  141. package/lib-commonjs/utilities/index.js +0 -3
  142. package/lib-commonjs/utilities/index.js.map +1 -1
  143. package/package.json +5 -5
  144. package/lib/components/Virtualizer/useVirtualizerStyles.js.map +0 -1
  145. package/lib/components/VirtualizerScrollView/useVirtualizerScrollViewStyles.js.map +0 -1
  146. package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamicStyles.js.map +0 -1
  147. package/lib-commonjs/components/Virtualizer/useVirtualizerStyles.js.map +0 -1
  148. package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollViewStyles.js.map +0 -1
  149. package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamicStyles.js.map +0 -1
@@ -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,40 @@ 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
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
17
+ setResizeObserver(canUseDOM() ? new ResizeObserver(handleResize) : undefined);
19
18
  // 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
- };
19
+ }, [
20
+ resizeCallback
21
+ ]);
22
+ React.useEffect(()=>{
23
+ return ()=>{
24
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
25
+ };
25
26
  // 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;
27
+ }, []);
28
+ const scrollRef = React.useCallback((instance)=>{
29
+ if (container.current !== instance) {
30
+ if (container.current) {
31
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.unobserve(container.current);
32
+ }
33
+ container.current = instance;
34
+ if (container.current) {
35
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.observe(container.current);
36
+ }
37
+ }
38
+ }, [
39
+ resizeObserver
40
+ ]);
41
+ return scrollRef;
39
42
  };
40
- //# sourceMappingURL=useResizeObserverRef.js.map
@@ -1 +1 @@
1
- {"version":3,"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"],"sources":["../../src/hooks/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"],"mappings":"AAAA,YAAYA,KAAA,MAAW;AACvB,SAASC,QAAQ,QAAQ;AACzB,SAASC,SAAS,QAAQ;AAG1B;;;AAGA,OAAO,MAAMC,6BAAA,GAAiCC,cAAA,IAA0C;EACtF,MAAMC,SAAA,GAAYL,KAAA,CAAMM,MAAM,CAAqB,IAAI;EACvD;EACA,MAAMC,YAAA,GAAeN,QAAA,CAAS,CAACO,OAAA,EAAgCC,QAAA,KAA6B;IAC1FL,cAAA,CAAeI,OAAA,EAASC,QAAA,EAAUJ,SAAA;EACpC;EAEA;EACA,MAAM,CAACK,cAAA,EAAgBC,iBAAA,CAAkB,GAAGX,KAAA,CAAMY,QAAQ,CAAC,MACzDV,SAAA,KAAc,IAAIW,cAAA,CAAeN,YAAA,IAAgBO,SAAS;EAG5Dd,KAAA,CAAMe,SAAS,CAAC,MAAM;IACpB;IACAL,cAAA,aAAAA,cAAA,uBAAAA,cAAA,CAAgBM,UAAU;IAC1BL,iBAAA,CAAkBT,SAAA,KAAc,IAAIW,cAAA,CAAeN,YAAA,IAAgBO,SAAS;IAC5E;EACF,GAAG,CAACV,cAAA,CAAe;EAEnBJ,KAAA,CAAMe,SAAS,CAAC,MAAM;IACpB,OAAO,MAAM;MACXL,cAAA,aAAAA,cAAA,uBAAAA,cAAA,CAAgBM,UAAU;IAC5B;IACA;EACF,GAAG,EAAE;EAEL,MAAMC,SAAA,GAAYjB,KAAA,CAAMkB,WAAW,CAChCC,QAAA,IAAkD;IACjD,IAAId,SAAA,CAAUe,OAAO,KAAKD,QAAA,EAAU;MAClC,IAAId,SAAA,CAAUe,OAAO,EAAE;QACrBV,cAAA,aAAAA,cAAA,uBAAAA,cAAA,CAAgBW,SAAS,CAAChB,SAAA,CAAUe,OAAO;MAC7C;MAEAf,SAAA,CAAUe,OAAO,GAAGD,QAAA;MACpB,IAAId,SAAA,CAAUe,OAAO,EAAE;QACrBV,cAAA,aAAAA,cAAA,uBAAAA,cAAA,CAAgBY,OAAO,CAACjB,SAAA,CAAUe,OAAO;MAC3C;IACF;EACF,GACA,CAACV,cAAA,CAAe;EAGlB,OAAOO,SAAA;AACT"}
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"}
@@ -2,52 +2,43 @@ import * as React from 'react';
2
2
  import { useResizeObserverRef_unstable } from './useResizeObserverRef';
3
3
  /**
4
4
  * React hook that measures virtualized space based on a static size to ensure optimized virtualization length.
5
- */
6
- export const useStaticVirtualizerMeasure = virtualizerProps => {
7
- const {
8
- defaultItemSize,
9
- direction = 'vertical'
10
- } = virtualizerProps;
11
- const [state, setState] = React.useState({
12
- virtualizerLength: 0,
13
- bufferSize: 0,
14
- bufferItems: 0
15
- });
16
- const {
17
- virtualizerLength,
18
- bufferItems,
19
- bufferSize
20
- } = state;
21
- const resizeCallback = React.useCallback((_entries, _observer, scrollRef) => {
22
- if (!(scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current)) {
23
- return;
24
- }
25
- const containerSize = direction === 'vertical' ? scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current.getBoundingClientRect().height : scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current.getBoundingClientRect().width;
26
- /*
27
- * Number of items required to cover viewport.
28
- */
29
- const length = Math.ceil(containerSize / defaultItemSize + 1);
30
- /*
31
- * Number of items to append at each end, i.e. 'preload' each side before entering view.
32
- */
33
- const newBufferItems = Math.max(Math.floor(length / 4), 2);
34
- /*
35
- * This is how far we deviate into the bufferItems to detect a redraw.
36
- */
37
- const newBufferSize = Math.max(Math.floor(length / 8 * defaultItemSize), 1);
38
- const totalLength = length + newBufferItems * 2 + 1;
39
- setState({
40
- virtualizerLength: totalLength,
41
- bufferItems: newBufferItems,
42
- bufferSize: newBufferSize
5
+ */ export const useStaticVirtualizerMeasure = (virtualizerProps)=>{
6
+ const { defaultItemSize , direction ='vertical' } = virtualizerProps;
7
+ const [state, setState] = React.useState({
8
+ virtualizerLength: 0,
9
+ bufferSize: 0,
10
+ bufferItems: 0
43
11
  });
44
- }, [defaultItemSize, direction]);
45
- const scrollRef = useResizeObserverRef_unstable(resizeCallback);
46
- return {
47
- virtualizerLength,
48
- bufferItems,
49
- bufferSize,
50
- scrollRef
51
- };
12
+ const { virtualizerLength , bufferItems , bufferSize } = state;
13
+ const resizeCallback = React.useCallback((_entries, _observer, scrollRef)=>{
14
+ if (!(scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current)) {
15
+ return;
16
+ }
17
+ const containerSize = direction === 'vertical' ? scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current.getBoundingClientRect().height : scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current.getBoundingClientRect().width;
18
+ /*
19
+ * Number of items required to cover viewport.
20
+ */ const length = Math.ceil(containerSize / defaultItemSize + 1);
21
+ /*
22
+ * Number of items to append at each end, i.e. 'preload' each side before entering view.
23
+ */ const newBufferItems = Math.max(Math.floor(length / 4), 2);
24
+ /*
25
+ * This is how far we deviate into the bufferItems to detect a redraw.
26
+ */ const newBufferSize = Math.max(Math.floor(length / 8 * defaultItemSize), 1);
27
+ const totalLength = length + newBufferItems * 2 + 1;
28
+ setState({
29
+ virtualizerLength: totalLength,
30
+ bufferItems: newBufferItems,
31
+ bufferSize: newBufferSize
32
+ });
33
+ }, [
34
+ defaultItemSize,
35
+ direction
36
+ ]);
37
+ const scrollRef = useResizeObserverRef_unstable(resizeCallback);
38
+ return {
39
+ virtualizerLength,
40
+ bufferItems,
41
+ bufferSize,
42
+ scrollRef
43
+ };
52
44
  };
53
- //# sourceMappingURL=useVirtualizerMeasure.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useResizeObserverRef_unstable","useStaticVirtualizerMeasure","virtualizerProps","defaultItemSize","direction","state","setState","useState","virtualizerLength","bufferSize","bufferItems","resizeCallback","useCallback","_entries","_observer","scrollRef","current","containerSize","getBoundingClientRect","height","width","length","Math","ceil","newBufferItems","max","floor","newBufferSize","totalLength"],"sources":["../../src/hooks/useVirtualizerMeasure.ts"],"sourcesContent":["import * as React from 'react';\nimport { VirtualizerMeasureProps } from './hooks.types';\nimport { useResizeObserverRef_unstable } from './useResizeObserverRef';\n\n/**\n * React hook that measures virtualized space based on a static size to ensure optimized virtualization length.\n */\nexport const useStaticVirtualizerMeasure = <TElement extends HTMLElement>(\n virtualizerProps: VirtualizerMeasureProps,\n): {\n virtualizerLength: number;\n bufferItems: number;\n bufferSize: number;\n scrollRef: (instance: TElement | null) => void;\n} => {\n const { defaultItemSize, direction = 'vertical' } = virtualizerProps;\n\n const [state, setState] = React.useState({\n virtualizerLength: 0,\n bufferSize: 0,\n bufferItems: 0,\n });\n\n const { virtualizerLength, bufferItems, bufferSize } = state;\n\n const resizeCallback = React.useCallback(\n (\n _entries: ResizeObserverEntry[],\n _observer: ResizeObserver,\n scrollRef?: React.MutableRefObject<HTMLElement | null>,\n ) => {\n if (!scrollRef?.current) {\n return;\n }\n\n const containerSize =\n direction === 'vertical'\n ? scrollRef?.current.getBoundingClientRect().height\n : scrollRef?.current.getBoundingClientRect().width;\n\n /*\n * Number of items required to cover viewport.\n */\n const length = Math.ceil(containerSize / defaultItemSize + 1);\n\n /*\n * Number of items to append at each end, i.e. 'preload' each side before entering view.\n */\n const newBufferItems = 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 newBufferSize = Math.max(Math.floor((length / 8) * defaultItemSize), 1);\n\n const totalLength = length + newBufferItems * 2 + 1;\n\n setState({\n virtualizerLength: totalLength,\n bufferItems: newBufferItems,\n bufferSize: newBufferSize,\n });\n },\n [defaultItemSize, direction],\n );\n\n const scrollRef = useResizeObserverRef_unstable(resizeCallback);\n\n return {\n virtualizerLength,\n bufferItems,\n bufferSize,\n scrollRef,\n };\n};\n"],"mappings":"AAAA,YAAYA,KAAA,MAAW;AAEvB,SAASC,6BAA6B,QAAQ;AAE9C;;;AAGA,OAAO,MAAMC,2BAAA,GACXC,gBAAA,IAMG;EACH,MAAM;IAAEC,eAAA;IAAiBC,SAAA,GAAY;EAAU,CAAE,GAAGF,gBAAA;EAEpD,MAAM,CAACG,KAAA,EAAOC,QAAA,CAAS,GAAGP,KAAA,CAAMQ,QAAQ,CAAC;IACvCC,iBAAA,EAAmB;IACnBC,UAAA,EAAY;IACZC,WAAA,EAAa;EACf;EAEA,MAAM;IAAEF,iBAAA;IAAmBE,WAAA;IAAaD;EAAU,CAAE,GAAGJ,KAAA;EAEvD,MAAMM,cAAA,GAAiBZ,KAAA,CAAMa,WAAW,CACtC,CACEC,QAAA,EACAC,SAAA,EACAC,SAAA,KACG;IACH,IAAI,EAACA,SAAA,aAAAA,SAAA,uBAAAA,SAAA,CAAWC,OAAO,CAAD,EAAG;MACvB;IACF;IAEA,MAAMC,aAAA,GACJb,SAAA,KAAc,aACVW,SAAA,aAAAA,SAAA,uBAAAA,SAAA,CAAWC,OAAO,CAACE,qBAAqB,GAAGC,MAAM,GACjDJ,SAAA,aAAAA,SAAA,uBAAAA,SAAA,CAAWC,OAAO,CAACE,qBAAqB,GAAGE,KAAK;IAEtD;;;IAGA,MAAMC,MAAA,GAASC,IAAA,CAAKC,IAAI,CAACN,aAAA,GAAgBd,eAAA,GAAkB;IAE3D;;;IAGA,MAAMqB,cAAA,GAAiBF,IAAA,CAAKG,GAAG,CAACH,IAAA,CAAKI,KAAK,CAACL,MAAA,GAAS,IAAI;IAExD;;;IAGA,MAAMM,aAAA,GAAgBL,IAAA,CAAKG,GAAG,CAACH,IAAA,CAAKI,KAAK,CAACL,MAAC,GAAS,IAAKlB,eAAA,GAAkB;IAE3E,MAAMyB,WAAA,GAAcP,MAAA,GAASG,cAAA,GAAiB,IAAI;IAElDlB,QAAA,CAAS;MACPE,iBAAA,EAAmBoB,WAAA;MACnBlB,WAAA,EAAac,cAAA;MACbf,UAAA,EAAYkB;IACd;EACF,GACA,CAACxB,eAAA,EAAiBC,SAAA,CAAU;EAG9B,MAAMW,SAAA,GAAYf,6BAAA,CAA8BW,cAAA;EAEhD,OAAO;IACLH,iBAAA;IACAE,WAAA;IACAD,UAAA;IACAM;EACF;AACF"}
1
+ {"version":3,"sources":["useVirtualizerMeasure.ts"],"sourcesContent":["import * as React from 'react';\nimport { VirtualizerMeasureProps } from './hooks.types';\nimport { useResizeObserverRef_unstable } from './useResizeObserverRef';\n\n/**\n * React hook that measures virtualized space based on a static size to ensure optimized virtualization length.\n */\nexport const useStaticVirtualizerMeasure = <TElement extends HTMLElement>(\n virtualizerProps: VirtualizerMeasureProps,\n): {\n virtualizerLength: number;\n bufferItems: number;\n bufferSize: number;\n scrollRef: (instance: TElement | null) => void;\n} => {\n const { defaultItemSize, direction = 'vertical' } = virtualizerProps;\n\n const [state, setState] = React.useState({\n virtualizerLength: 0,\n bufferSize: 0,\n bufferItems: 0,\n });\n\n const { virtualizerLength, bufferItems, bufferSize } = state;\n\n const resizeCallback = React.useCallback(\n (\n _entries: ResizeObserverEntry[],\n _observer: ResizeObserver,\n scrollRef?: React.MutableRefObject<HTMLElement | null>,\n ) => {\n if (!scrollRef?.current) {\n return;\n }\n\n const containerSize =\n direction === 'vertical'\n ? scrollRef?.current.getBoundingClientRect().height\n : scrollRef?.current.getBoundingClientRect().width;\n\n /*\n * Number of items required to cover viewport.\n */\n const length = Math.ceil(containerSize / defaultItemSize + 1);\n\n /*\n * Number of items to append at each end, i.e. 'preload' each side before entering view.\n */\n const newBufferItems = 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 newBufferSize = Math.max(Math.floor((length / 8) * defaultItemSize), 1);\n\n const totalLength = length + newBufferItems * 2 + 1;\n\n setState({\n virtualizerLength: totalLength,\n bufferItems: newBufferItems,\n bufferSize: newBufferSize,\n });\n },\n [defaultItemSize, direction],\n );\n\n const scrollRef = useResizeObserverRef_unstable(resizeCallback);\n\n return {\n virtualizerLength,\n bufferItems,\n bufferSize,\n scrollRef,\n };\n};\n"],"names":["React","useResizeObserverRef_unstable","useStaticVirtualizerMeasure","virtualizerProps","defaultItemSize","direction","state","setState","useState","virtualizerLength","bufferSize","bufferItems","resizeCallback","useCallback","_entries","_observer","scrollRef","current","containerSize","getBoundingClientRect","height","width","length","Math","ceil","newBufferItems","max","floor","newBufferSize","totalLength"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,6BAA6B,QAAQ,yBAAyB;AAEvE;;CAEC,GACD,OAAO,MAAMC,8BAA8B,CACzCC,mBAMG;IACH,MAAM,EAAEC,gBAAe,EAAEC,WAAY,WAAU,EAAE,GAAGF;IAEpD,MAAM,CAACG,OAAOC,SAAS,GAAGP,MAAMQ,QAAQ,CAAC;QACvCC,mBAAmB;QACnBC,YAAY;QACZC,aAAa;IACf;IAEA,MAAM,EAAEF,kBAAiB,EAAEE,YAAW,EAAED,WAAU,EAAE,GAAGJ;IAEvD,MAAMM,iBAAiBZ,MAAMa,WAAW,CACtC,CACEC,UACAC,WACAC,YACG;QACH,IAAI,CAACA,CAAAA,sBAAAA,uBAAAA,KAAAA,IAAAA,UAAWC,OAAO,AAAD,GAAG;YACvB;QACF,CAAC;QAED,MAAMC,gBACJb,cAAc,aACVW,sBAAAA,uBAAAA,KAAAA,IAAAA,UAAWC,OAAO,CAACE,qBAAqB,GAAGC,MAAM,GACjDJ,sBAAAA,uBAAAA,KAAAA,IAAAA,UAAWC,OAAO,CAACE,qBAAqB,GAAGE,KAAK;QAEtD;;OAEC,GACD,MAAMC,SAASC,KAAKC,IAAI,CAACN,gBAAgBd,kBAAkB;QAE3D;;OAEC,GACD,MAAMqB,iBAAiBF,KAAKG,GAAG,CAACH,KAAKI,KAAK,CAACL,SAAS,IAAI;QAExD;;OAEC,GACD,MAAMM,gBAAgBL,KAAKG,GAAG,CAACH,KAAKI,KAAK,CAAC,AAACL,SAAS,IAAKlB,kBAAkB;QAE3E,MAAMyB,cAAcP,SAASG,iBAAiB,IAAI;QAElDlB,SAAS;YACPE,mBAAmBoB;YACnBlB,aAAac;YACbf,YAAYkB;QACd;IACF,GACA;QAACxB;QAAiBC;KAAU;IAG9B,MAAMW,YAAYf,8BAA8BW;IAEhD,OAAO;QACLH;QACAE;QACAD;QACAM;IACF;AACF,EAAE"}
package/lib/index.js CHANGED
@@ -3,4 +3,3 @@ export { useIntersectionObserver, useStaticVirtualizerMeasure, useDynamicVirtual
3
3
  export { VirtualizerContextProvider, useVirtualizerContext_unstable } 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';
6
- //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"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"],"sources":["../src/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"],"mappings":"AAAA,SACEA,WAAW,EACXC,qBAAqB,EACrBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,6BAA6B,QACxB;AAQP,SACEC,uBAAuB,EACvBC,2BAA2B,EAC3BC,4BAA4B,EAC5BC,6BAA6B,QACxB;AAIP,SAASC,0BAA0B,EAAEC,8BAA8B,QAAQ;AAI3E,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,iCAAiC,EACjCC,oCAAoC,EACpCC,uCAAuC,QAClC;AAQP,SACEC,4BAA4B,EAC5BC,sCAAsC,EACtCC,wCAAwC,EACxCC,2CAA2C,EAC3CC,8CAA8C,QACzC"}
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"}