react-resizable-panels 2.0.13 → 2.0.14

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.14
4
+
5
+ - Better account for high-precision `collapsedSize` values (#325)
6
+
3
7
  ## 2.0.13
4
8
 
5
9
  - Fix potential cycle in stacking-order logic for an unmounted node (#317)
@@ -687,15 +687,15 @@ function assert(expectedCondition, message) {
687
687
  const PRECISION = 10;
688
688
 
689
689
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
690
- actual = parseFloat(actual.toFixed(fractionDigits));
691
- expected = parseFloat(expected.toFixed(fractionDigits));
692
- const delta = actual - expected;
693
- if (delta === 0) {
690
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
694
691
  return 0;
695
692
  } else {
696
- return delta > 0 ? 1 : -1;
693
+ return actual > expected ? 1 : -1;
697
694
  }
698
695
  }
696
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
697
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
698
+ }
699
699
 
700
700
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
701
701
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1702,7 +1702,7 @@ function PanelGroupWithForwardedRef({
1702
1702
  pivotIndices
1703
1703
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1704
1704
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1705
- if (panelSize !== collapsedSize) {
1705
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1706
1706
  // Store size before collapse;
1707
1707
  // This is the size that gets restored if the expand() API is used.
1708
1708
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1741,11 +1741,11 @@ function PanelGroupWithForwardedRef({
1741
1741
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1742
1742
  const {
1743
1743
  collapsedSize = 0,
1744
- panelSize,
1744
+ panelSize = 0,
1745
1745
  minSize = 0,
1746
1746
  pivotIndices
1747
1747
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1748
- if (panelSize === collapsedSize) {
1748
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1749
1749
  // Restore this panel to the size it was before it was collapsed, if possible.
1750
1750
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1751
1751
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1810,7 +1810,8 @@ function PanelGroupWithForwardedRef({
1810
1810
  collapsible,
1811
1811
  panelSize
1812
1812
  } = panelDataHelper(panelDataArray, panelData, layout);
1813
- return collapsible === true && panelSize === collapsedSize;
1813
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1814
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1814
1815
  }, []);
1815
1816
 
1816
1817
  // External APIs are safe to memoize via committed values ref
@@ -1825,7 +1826,7 @@ function PanelGroupWithForwardedRef({
1825
1826
  panelSize
1826
1827
  } = panelDataHelper(panelDataArray, panelData, layout);
1827
1828
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1828
- return !collapsible || panelSize > collapsedSize;
1829
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1829
1830
  }, []);
1830
1831
  const registerPanel = useCallback(panelData => {
1831
1832
  const {
@@ -2034,8 +2035,8 @@ function PanelGroupWithForwardedRef({
2034
2035
  // It's possible that the panels in this group have changed since the last render
2035
2036
  return;
2036
2037
  }
2037
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
2038
- if (prevCollapsedSize !== nextCollapsedSize) {
2038
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
2039
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
2039
2040
  resizePanel(panelData, nextCollapsedSize);
2040
2041
  }
2041
2042
  } else if (prevPanelSize < nextMinSize) {
@@ -693,15 +693,15 @@ function assert(expectedCondition, message) {
693
693
  const PRECISION = 10;
694
694
 
695
695
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
696
- actual = parseFloat(actual.toFixed(fractionDigits));
697
- expected = parseFloat(expected.toFixed(fractionDigits));
698
- const delta = actual - expected;
699
- if (delta === 0) {
696
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
700
697
  return 0;
701
698
  } else {
702
- return delta > 0 ? 1 : -1;
699
+ return actual > expected ? 1 : -1;
703
700
  }
704
701
  }
702
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
703
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
704
+ }
705
705
 
706
706
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
707
707
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1808,7 +1808,7 @@ function PanelGroupWithForwardedRef({
1808
1808
  pivotIndices
1809
1809
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1810
1810
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1811
- if (panelSize !== collapsedSize) {
1811
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1812
1812
  // Store size before collapse;
1813
1813
  // This is the size that gets restored if the expand() API is used.
1814
1814
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1847,11 +1847,11 @@ function PanelGroupWithForwardedRef({
1847
1847
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1848
1848
  const {
1849
1849
  collapsedSize = 0,
1850
- panelSize,
1850
+ panelSize = 0,
1851
1851
  minSize = 0,
1852
1852
  pivotIndices
1853
1853
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1854
- if (panelSize === collapsedSize) {
1854
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1855
1855
  // Restore this panel to the size it was before it was collapsed, if possible.
1856
1856
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1857
1857
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1916,7 +1916,8 @@ function PanelGroupWithForwardedRef({
1916
1916
  collapsible,
1917
1917
  panelSize
1918
1918
  } = panelDataHelper(panelDataArray, panelData, layout);
1919
- return collapsible === true && panelSize === collapsedSize;
1919
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1920
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1920
1921
  }, []);
1921
1922
 
1922
1923
  // External APIs are safe to memoize via committed values ref
@@ -1931,7 +1932,7 @@ function PanelGroupWithForwardedRef({
1931
1932
  panelSize
1932
1933
  } = panelDataHelper(panelDataArray, panelData, layout);
1933
1934
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1934
- return !collapsible || panelSize > collapsedSize;
1935
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1935
1936
  }, []);
1936
1937
  const registerPanel = useCallback(panelData => {
1937
1938
  const {
@@ -2140,8 +2141,8 @@ function PanelGroupWithForwardedRef({
2140
2141
  // It's possible that the panels in this group have changed since the last render
2141
2142
  return;
2142
2143
  }
2143
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
2144
- if (prevCollapsedSize !== nextCollapsedSize) {
2144
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
2145
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
2145
2146
  resizePanel(panelData, nextCollapsedSize);
2146
2147
  }
2147
2148
  } else if (prevPanelSize < nextMinSize) {
@@ -669,15 +669,15 @@ function assert(expectedCondition, message) {
669
669
  const PRECISION = 10;
670
670
 
671
671
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
672
- actual = parseFloat(actual.toFixed(fractionDigits));
673
- expected = parseFloat(expected.toFixed(fractionDigits));
674
- const delta = actual - expected;
675
- if (delta === 0) {
672
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
676
673
  return 0;
677
674
  } else {
678
- return delta > 0 ? 1 : -1;
675
+ return actual > expected ? 1 : -1;
679
676
  }
680
677
  }
678
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
679
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
680
+ }
681
681
 
682
682
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
683
683
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1784,7 +1784,7 @@ function PanelGroupWithForwardedRef({
1784
1784
  pivotIndices
1785
1785
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1786
1786
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1787
- if (panelSize !== collapsedSize) {
1787
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1788
1788
  // Store size before collapse;
1789
1789
  // This is the size that gets restored if the expand() API is used.
1790
1790
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1823,11 +1823,11 @@ function PanelGroupWithForwardedRef({
1823
1823
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1824
1824
  const {
1825
1825
  collapsedSize = 0,
1826
- panelSize,
1826
+ panelSize = 0,
1827
1827
  minSize = 0,
1828
1828
  pivotIndices
1829
1829
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1830
- if (panelSize === collapsedSize) {
1830
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1831
1831
  // Restore this panel to the size it was before it was collapsed, if possible.
1832
1832
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1833
1833
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1892,7 +1892,8 @@ function PanelGroupWithForwardedRef({
1892
1892
  collapsible,
1893
1893
  panelSize
1894
1894
  } = panelDataHelper(panelDataArray, panelData, layout);
1895
- return collapsible === true && panelSize === collapsedSize;
1895
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1896
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1896
1897
  }, []);
1897
1898
 
1898
1899
  // External APIs are safe to memoize via committed values ref
@@ -1907,7 +1908,7 @@ function PanelGroupWithForwardedRef({
1907
1908
  panelSize
1908
1909
  } = panelDataHelper(panelDataArray, panelData, layout);
1909
1910
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1910
- return !collapsible || panelSize > collapsedSize;
1911
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1911
1912
  }, []);
1912
1913
  const registerPanel = useCallback(panelData => {
1913
1914
  const {
@@ -2116,8 +2117,8 @@ function PanelGroupWithForwardedRef({
2116
2117
  // It's possible that the panels in this group have changed since the last render
2117
2118
  return;
2118
2119
  }
2119
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
2120
- if (prevCollapsedSize !== nextCollapsedSize) {
2120
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
2121
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
2121
2122
  resizePanel(panelData, nextCollapsedSize);
2122
2123
  }
2123
2124
  } else if (prevPanelSize < nextMinSize) {
@@ -663,15 +663,15 @@ function assert(expectedCondition, message) {
663
663
  const PRECISION = 10;
664
664
 
665
665
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
666
- actual = parseFloat(actual.toFixed(fractionDigits));
667
- expected = parseFloat(expected.toFixed(fractionDigits));
668
- const delta = actual - expected;
669
- if (delta === 0) {
666
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
670
667
  return 0;
671
668
  } else {
672
- return delta > 0 ? 1 : -1;
669
+ return actual > expected ? 1 : -1;
673
670
  }
674
671
  }
672
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
673
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
674
+ }
675
675
 
676
676
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
677
677
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1678,7 +1678,7 @@ function PanelGroupWithForwardedRef({
1678
1678
  pivotIndices
1679
1679
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1680
1680
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1681
- if (panelSize !== collapsedSize) {
1681
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1682
1682
  // Store size before collapse;
1683
1683
  // This is the size that gets restored if the expand() API is used.
1684
1684
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1717,11 +1717,11 @@ function PanelGroupWithForwardedRef({
1717
1717
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1718
1718
  const {
1719
1719
  collapsedSize = 0,
1720
- panelSize,
1720
+ panelSize = 0,
1721
1721
  minSize = 0,
1722
1722
  pivotIndices
1723
1723
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1724
- if (panelSize === collapsedSize) {
1724
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1725
1725
  // Restore this panel to the size it was before it was collapsed, if possible.
1726
1726
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1727
1727
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1786,7 +1786,8 @@ function PanelGroupWithForwardedRef({
1786
1786
  collapsible,
1787
1787
  panelSize
1788
1788
  } = panelDataHelper(panelDataArray, panelData, layout);
1789
- return collapsible === true && panelSize === collapsedSize;
1789
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1790
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1790
1791
  }, []);
1791
1792
 
1792
1793
  // External APIs are safe to memoize via committed values ref
@@ -1801,7 +1802,7 @@ function PanelGroupWithForwardedRef({
1801
1802
  panelSize
1802
1803
  } = panelDataHelper(panelDataArray, panelData, layout);
1803
1804
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1804
- return !collapsible || panelSize > collapsedSize;
1805
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1805
1806
  }, []);
1806
1807
  const registerPanel = useCallback(panelData => {
1807
1808
  const {
@@ -2010,8 +2011,8 @@ function PanelGroupWithForwardedRef({
2010
2011
  // It's possible that the panels in this group have changed since the last render
2011
2012
  return;
2012
2013
  }
2013
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
2014
- if (prevCollapsedSize !== nextCollapsedSize) {
2014
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
2015
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
2015
2016
  resizePanel(panelData, nextCollapsedSize);
2016
2017
  }
2017
2018
  } else if (prevPanelSize < nextMinSize) {
@@ -689,15 +689,15 @@ function assert(expectedCondition, message) {
689
689
  const PRECISION = 10;
690
690
 
691
691
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
692
- actual = parseFloat(actual.toFixed(fractionDigits));
693
- expected = parseFloat(expected.toFixed(fractionDigits));
694
- const delta = actual - expected;
695
- if (delta === 0) {
692
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
696
693
  return 0;
697
694
  } else {
698
- return delta > 0 ? 1 : -1;
695
+ return actual > expected ? 1 : -1;
699
696
  }
700
697
  }
698
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
699
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
700
+ }
701
701
 
702
702
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
703
703
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1704,7 +1704,7 @@ function PanelGroupWithForwardedRef({
1704
1704
  pivotIndices
1705
1705
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1706
1706
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1707
- if (panelSize !== collapsedSize) {
1707
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1708
1708
  // Store size before collapse;
1709
1709
  // This is the size that gets restored if the expand() API is used.
1710
1710
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1743,11 +1743,11 @@ function PanelGroupWithForwardedRef({
1743
1743
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1744
1744
  const {
1745
1745
  collapsedSize = 0,
1746
- panelSize,
1746
+ panelSize = 0,
1747
1747
  minSize = 0,
1748
1748
  pivotIndices
1749
1749
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1750
- if (panelSize === collapsedSize) {
1750
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1751
1751
  // Restore this panel to the size it was before it was collapsed, if possible.
1752
1752
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1753
1753
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1812,7 +1812,8 @@ function PanelGroupWithForwardedRef({
1812
1812
  collapsible,
1813
1813
  panelSize
1814
1814
  } = panelDataHelper(panelDataArray, panelData, layout);
1815
- return collapsible === true && panelSize === collapsedSize;
1815
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1816
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1816
1817
  }, []);
1817
1818
 
1818
1819
  // External APIs are safe to memoize via committed values ref
@@ -1827,7 +1828,7 @@ function PanelGroupWithForwardedRef({
1827
1828
  panelSize
1828
1829
  } = panelDataHelper(panelDataArray, panelData, layout);
1829
1830
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1830
- return !collapsible || panelSize > collapsedSize;
1831
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1831
1832
  }, []);
1832
1833
  const registerPanel = useCallback(panelData => {
1833
1834
  const {
@@ -2036,8 +2037,8 @@ function PanelGroupWithForwardedRef({
2036
2037
  // It's possible that the panels in this group have changed since the last render
2037
2038
  return;
2038
2039
  }
2039
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
2040
- if (prevCollapsedSize !== nextCollapsedSize) {
2040
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
2041
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
2041
2042
  resizePanel(panelData, nextCollapsedSize);
2042
2043
  }
2043
2044
  } else if (prevPanelSize < nextMinSize) {
@@ -700,15 +700,15 @@ function assert(expectedCondition, message) {
700
700
  const PRECISION = 10;
701
701
 
702
702
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
703
- actual = parseFloat(actual.toFixed(fractionDigits));
704
- expected = parseFloat(expected.toFixed(fractionDigits));
705
- const delta = actual - expected;
706
- if (delta === 0) {
703
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
707
704
  return 0;
708
705
  } else {
709
- return delta > 0 ? 1 : -1;
706
+ return actual > expected ? 1 : -1;
710
707
  }
711
708
  }
709
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
710
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
711
+ }
712
712
 
713
713
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
714
714
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1815,7 +1815,7 @@ function PanelGroupWithForwardedRef({
1815
1815
  pivotIndices
1816
1816
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1817
1817
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1818
- if (panelSize !== collapsedSize) {
1818
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1819
1819
  // Store size before collapse;
1820
1820
  // This is the size that gets restored if the expand() API is used.
1821
1821
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1854,11 +1854,11 @@ function PanelGroupWithForwardedRef({
1854
1854
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1855
1855
  const {
1856
1856
  collapsedSize = 0,
1857
- panelSize,
1857
+ panelSize = 0,
1858
1858
  minSize = 0,
1859
1859
  pivotIndices
1860
1860
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1861
- if (panelSize === collapsedSize) {
1861
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1862
1862
  // Restore this panel to the size it was before it was collapsed, if possible.
1863
1863
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1864
1864
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1923,7 +1923,8 @@ function PanelGroupWithForwardedRef({
1923
1923
  collapsible,
1924
1924
  panelSize
1925
1925
  } = panelDataHelper(panelDataArray, panelData, layout);
1926
- return collapsible === true && panelSize === collapsedSize;
1926
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1927
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1927
1928
  }, []);
1928
1929
 
1929
1930
  // External APIs are safe to memoize via committed values ref
@@ -1938,7 +1939,7 @@ function PanelGroupWithForwardedRef({
1938
1939
  panelSize
1939
1940
  } = panelDataHelper(panelDataArray, panelData, layout);
1940
1941
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1941
- return !collapsible || panelSize > collapsedSize;
1942
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1942
1943
  }, []);
1943
1944
  const registerPanel = useCallback(panelData => {
1944
1945
  const {
@@ -2147,8 +2148,8 @@ function PanelGroupWithForwardedRef({
2147
2148
  // It's possible that the panels in this group have changed since the last render
2148
2149
  return;
2149
2150
  }
2150
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
2151
- if (prevCollapsedSize !== nextCollapsedSize) {
2151
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
2152
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
2152
2153
  resizePanel(panelData, nextCollapsedSize);
2153
2154
  }
2154
2155
  } else if (prevPanelSize < nextMinSize) {
@@ -676,15 +676,15 @@ function assert(expectedCondition, message) {
676
676
  const PRECISION = 10;
677
677
 
678
678
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
679
- actual = parseFloat(actual.toFixed(fractionDigits));
680
- expected = parseFloat(expected.toFixed(fractionDigits));
681
- const delta = actual - expected;
682
- if (delta === 0) {
679
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
683
680
  return 0;
684
681
  } else {
685
- return delta > 0 ? 1 : -1;
682
+ return actual > expected ? 1 : -1;
686
683
  }
687
684
  }
685
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
686
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
687
+ }
688
688
 
689
689
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
690
690
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1791,7 +1791,7 @@ function PanelGroupWithForwardedRef({
1791
1791
  pivotIndices
1792
1792
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1793
1793
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1794
- if (panelSize !== collapsedSize) {
1794
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1795
1795
  // Store size before collapse;
1796
1796
  // This is the size that gets restored if the expand() API is used.
1797
1797
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1830,11 +1830,11 @@ function PanelGroupWithForwardedRef({
1830
1830
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1831
1831
  const {
1832
1832
  collapsedSize = 0,
1833
- panelSize,
1833
+ panelSize = 0,
1834
1834
  minSize = 0,
1835
1835
  pivotIndices
1836
1836
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1837
- if (panelSize === collapsedSize) {
1837
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1838
1838
  // Restore this panel to the size it was before it was collapsed, if possible.
1839
1839
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1840
1840
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1899,7 +1899,8 @@ function PanelGroupWithForwardedRef({
1899
1899
  collapsible,
1900
1900
  panelSize
1901
1901
  } = panelDataHelper(panelDataArray, panelData, layout);
1902
- return collapsible === true && panelSize === collapsedSize;
1902
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1903
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1903
1904
  }, []);
1904
1905
 
1905
1906
  // External APIs are safe to memoize via committed values ref
@@ -1914,7 +1915,7 @@ function PanelGroupWithForwardedRef({
1914
1915
  panelSize
1915
1916
  } = panelDataHelper(panelDataArray, panelData, layout);
1916
1917
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1917
- return !collapsible || panelSize > collapsedSize;
1918
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1918
1919
  }, []);
1919
1920
  const registerPanel = useCallback(panelData => {
1920
1921
  const {
@@ -2123,8 +2124,8 @@ function PanelGroupWithForwardedRef({
2123
2124
  // It's possible that the panels in this group have changed since the last render
2124
2125
  return;
2125
2126
  }
2126
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
2127
- if (prevCollapsedSize !== nextCollapsedSize) {
2127
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
2128
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
2128
2129
  resizePanel(panelData, nextCollapsedSize);
2129
2130
  }
2130
2131
  } else if (prevPanelSize < nextMinSize) {
@@ -662,15 +662,15 @@ function assert(expectedCondition, message) {
662
662
  const PRECISION = 10;
663
663
 
664
664
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
665
- actual = parseFloat(actual.toFixed(fractionDigits));
666
- expected = parseFloat(expected.toFixed(fractionDigits));
667
- const delta = actual - expected;
668
- if (delta === 0) {
665
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
669
666
  return 0;
670
667
  } else {
671
- return delta > 0 ? 1 : -1;
668
+ return actual > expected ? 1 : -1;
672
669
  }
673
670
  }
671
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
672
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
673
+ }
674
674
 
675
675
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
676
676
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1639,7 +1639,7 @@ function PanelGroupWithForwardedRef({
1639
1639
  pivotIndices
1640
1640
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1641
1641
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1642
- if (panelSize !== collapsedSize) {
1642
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1643
1643
  // Store size before collapse;
1644
1644
  // This is the size that gets restored if the expand() API is used.
1645
1645
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1678,11 +1678,11 @@ function PanelGroupWithForwardedRef({
1678
1678
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1679
1679
  const {
1680
1680
  collapsedSize = 0,
1681
- panelSize,
1681
+ panelSize = 0,
1682
1682
  minSize = 0,
1683
1683
  pivotIndices
1684
1684
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1685
- if (panelSize === collapsedSize) {
1685
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1686
1686
  // Restore this panel to the size it was before it was collapsed, if possible.
1687
1687
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1688
1688
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1747,7 +1747,8 @@ function PanelGroupWithForwardedRef({
1747
1747
  collapsible,
1748
1748
  panelSize
1749
1749
  } = panelDataHelper(panelDataArray, panelData, layout);
1750
- return collapsible === true && panelSize === collapsedSize;
1750
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1751
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1751
1752
  }, []);
1752
1753
 
1753
1754
  // External APIs are safe to memoize via committed values ref
@@ -1762,7 +1763,7 @@ function PanelGroupWithForwardedRef({
1762
1763
  panelSize
1763
1764
  } = panelDataHelper(panelDataArray, panelData, layout);
1764
1765
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1765
- return !collapsible || panelSize > collapsedSize;
1766
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1766
1767
  }, []);
1767
1768
  const registerPanel = useCallback(panelData => {
1768
1769
  const {
@@ -1915,8 +1916,8 @@ function PanelGroupWithForwardedRef({
1915
1916
  // It's possible that the panels in this group have changed since the last render
1916
1917
  return;
1917
1918
  }
1918
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
1919
- if (prevCollapsedSize !== nextCollapsedSize) {
1919
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
1920
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
1920
1921
  resizePanel(panelData, nextCollapsedSize);
1921
1922
  }
1922
1923
  } else if (prevPanelSize < nextMinSize) {
@@ -638,15 +638,15 @@ function assert(expectedCondition, message) {
638
638
  const PRECISION = 10;
639
639
 
640
640
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
641
- actual = parseFloat(actual.toFixed(fractionDigits));
642
- expected = parseFloat(expected.toFixed(fractionDigits));
643
- const delta = actual - expected;
644
- if (delta === 0) {
641
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
645
642
  return 0;
646
643
  } else {
647
- return delta > 0 ? 1 : -1;
644
+ return actual > expected ? 1 : -1;
648
645
  }
649
646
  }
647
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
648
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
649
+ }
650
650
 
651
651
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
652
652
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1615,7 +1615,7 @@ function PanelGroupWithForwardedRef({
1615
1615
  pivotIndices
1616
1616
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1617
1617
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1618
- if (panelSize !== collapsedSize) {
1618
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1619
1619
  // Store size before collapse;
1620
1620
  // This is the size that gets restored if the expand() API is used.
1621
1621
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1654,11 +1654,11 @@ function PanelGroupWithForwardedRef({
1654
1654
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1655
1655
  const {
1656
1656
  collapsedSize = 0,
1657
- panelSize,
1657
+ panelSize = 0,
1658
1658
  minSize = 0,
1659
1659
  pivotIndices
1660
1660
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1661
- if (panelSize === collapsedSize) {
1661
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1662
1662
  // Restore this panel to the size it was before it was collapsed, if possible.
1663
1663
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1664
1664
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1723,7 +1723,8 @@ function PanelGroupWithForwardedRef({
1723
1723
  collapsible,
1724
1724
  panelSize
1725
1725
  } = panelDataHelper(panelDataArray, panelData, layout);
1726
- return collapsible === true && panelSize === collapsedSize;
1726
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1727
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1727
1728
  }, []);
1728
1729
 
1729
1730
  // External APIs are safe to memoize via committed values ref
@@ -1738,7 +1739,7 @@ function PanelGroupWithForwardedRef({
1738
1739
  panelSize
1739
1740
  } = panelDataHelper(panelDataArray, panelData, layout);
1740
1741
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1741
- return !collapsible || panelSize > collapsedSize;
1742
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1742
1743
  }, []);
1743
1744
  const registerPanel = useCallback(panelData => {
1744
1745
  const {
@@ -1891,8 +1892,8 @@ function PanelGroupWithForwardedRef({
1891
1892
  // It's possible that the panels in this group have changed since the last render
1892
1893
  return;
1893
1894
  }
1894
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
1895
- if (prevCollapsedSize !== nextCollapsedSize) {
1895
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
1896
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
1896
1897
  resizePanel(panelData, nextCollapsedSize);
1897
1898
  }
1898
1899
  } else if (prevPanelSize < nextMinSize) {
@@ -665,15 +665,15 @@ function assert(expectedCondition, message) {
665
665
  const PRECISION = 10;
666
666
 
667
667
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
668
- actual = parseFloat(actual.toFixed(fractionDigits));
669
- expected = parseFloat(expected.toFixed(fractionDigits));
670
- const delta = actual - expected;
671
- if (delta === 0) {
668
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
672
669
  return 0;
673
670
  } else {
674
- return delta > 0 ? 1 : -1;
671
+ return actual > expected ? 1 : -1;
675
672
  }
676
673
  }
674
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
675
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
676
+ }
677
677
 
678
678
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
679
679
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1680,7 +1680,7 @@ function PanelGroupWithForwardedRef({
1680
1680
  pivotIndices
1681
1681
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1682
1682
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1683
- if (panelSize !== collapsedSize) {
1683
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1684
1684
  // Store size before collapse;
1685
1685
  // This is the size that gets restored if the expand() API is used.
1686
1686
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1719,11 +1719,11 @@ function PanelGroupWithForwardedRef({
1719
1719
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1720
1720
  const {
1721
1721
  collapsedSize = 0,
1722
- panelSize,
1722
+ panelSize = 0,
1723
1723
  minSize = 0,
1724
1724
  pivotIndices
1725
1725
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1726
- if (panelSize === collapsedSize) {
1726
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1727
1727
  // Restore this panel to the size it was before it was collapsed, if possible.
1728
1728
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1729
1729
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1788,7 +1788,8 @@ function PanelGroupWithForwardedRef({
1788
1788
  collapsible,
1789
1789
  panelSize
1790
1790
  } = panelDataHelper(panelDataArray, panelData, layout);
1791
- return collapsible === true && panelSize === collapsedSize;
1791
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1792
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1792
1793
  }, []);
1793
1794
 
1794
1795
  // External APIs are safe to memoize via committed values ref
@@ -1803,7 +1804,7 @@ function PanelGroupWithForwardedRef({
1803
1804
  panelSize
1804
1805
  } = panelDataHelper(panelDataArray, panelData, layout);
1805
1806
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1806
- return !collapsible || panelSize > collapsedSize;
1807
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1807
1808
  }, []);
1808
1809
  const registerPanel = useCallback(panelData => {
1809
1810
  const {
@@ -2012,8 +2013,8 @@ function PanelGroupWithForwardedRef({
2012
2013
  // It's possible that the panels in this group have changed since the last render
2013
2014
  return;
2014
2015
  }
2015
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
2016
- if (prevCollapsedSize !== nextCollapsedSize) {
2016
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
2017
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
2017
2018
  resizePanel(panelData, nextCollapsedSize);
2018
2019
  }
2019
2020
  } else if (prevPanelSize < nextMinSize) {
@@ -651,15 +651,15 @@ function assert(expectedCondition, message) {
651
651
  const PRECISION = 10;
652
652
 
653
653
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
654
- actual = parseFloat(actual.toFixed(fractionDigits));
655
- expected = parseFloat(expected.toFixed(fractionDigits));
656
- const delta = actual - expected;
657
- if (delta === 0) {
654
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
658
655
  return 0;
659
656
  } else {
660
- return delta > 0 ? 1 : -1;
657
+ return actual > expected ? 1 : -1;
661
658
  }
662
659
  }
660
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
661
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
662
+ }
663
663
 
664
664
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
665
665
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1538,7 +1538,7 @@ function PanelGroupWithForwardedRef({
1538
1538
  pivotIndices
1539
1539
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1540
1540
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1541
- if (panelSize !== collapsedSize) {
1541
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1542
1542
  // Store size before collapse;
1543
1543
  // This is the size that gets restored if the expand() API is used.
1544
1544
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1577,11 +1577,11 @@ function PanelGroupWithForwardedRef({
1577
1577
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1578
1578
  const {
1579
1579
  collapsedSize = 0,
1580
- panelSize,
1580
+ panelSize = 0,
1581
1581
  minSize = 0,
1582
1582
  pivotIndices
1583
1583
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1584
- if (panelSize === collapsedSize) {
1584
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1585
1585
  // Restore this panel to the size it was before it was collapsed, if possible.
1586
1586
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1587
1587
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1646,7 +1646,8 @@ function PanelGroupWithForwardedRef({
1646
1646
  collapsible,
1647
1647
  panelSize
1648
1648
  } = panelDataHelper(panelDataArray, panelData, layout);
1649
- return collapsible === true && panelSize === collapsedSize;
1649
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1650
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1650
1651
  }, []);
1651
1652
 
1652
1653
  // External APIs are safe to memoize via committed values ref
@@ -1661,7 +1662,7 @@ function PanelGroupWithForwardedRef({
1661
1662
  panelSize
1662
1663
  } = panelDataHelper(panelDataArray, panelData, layout);
1663
1664
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1664
- return !collapsible || panelSize > collapsedSize;
1665
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1665
1666
  }, []);
1666
1667
  const registerPanel = useCallback(panelData => {
1667
1668
  const {
@@ -1814,8 +1815,8 @@ function PanelGroupWithForwardedRef({
1814
1815
  // It's possible that the panels in this group have changed since the last render
1815
1816
  return;
1816
1817
  }
1817
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
1818
- if (prevCollapsedSize !== nextCollapsedSize) {
1818
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
1819
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
1819
1820
  resizePanel(panelData, nextCollapsedSize);
1820
1821
  }
1821
1822
  } else if (prevPanelSize < nextMinSize) {
@@ -627,15 +627,15 @@ function assert(expectedCondition, message) {
627
627
  const PRECISION = 10;
628
628
 
629
629
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
630
- actual = parseFloat(actual.toFixed(fractionDigits));
631
- expected = parseFloat(expected.toFixed(fractionDigits));
632
- const delta = actual - expected;
633
- if (delta === 0) {
630
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
634
631
  return 0;
635
632
  } else {
636
- return delta > 0 ? 1 : -1;
633
+ return actual > expected ? 1 : -1;
637
634
  }
638
635
  }
636
+ function fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {
637
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
638
+ }
639
639
 
640
640
  function fuzzyNumbersEqual(actual, expected, fractionDigits) {
641
641
  return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
@@ -1514,7 +1514,7 @@ function PanelGroupWithForwardedRef({
1514
1514
  pivotIndices
1515
1515
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1516
1516
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1517
- if (panelSize !== collapsedSize) {
1517
+ if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1518
1518
  // Store size before collapse;
1519
1519
  // This is the size that gets restored if the expand() API is used.
1520
1520
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -1553,11 +1553,11 @@ function PanelGroupWithForwardedRef({
1553
1553
  const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);
1554
1554
  const {
1555
1555
  collapsedSize = 0,
1556
- panelSize,
1556
+ panelSize = 0,
1557
1557
  minSize = 0,
1558
1558
  pivotIndices
1559
1559
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
1560
- if (panelSize === collapsedSize) {
1560
+ if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {
1561
1561
  // Restore this panel to the size it was before it was collapsed, if possible.
1562
1562
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);
1563
1563
  const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
@@ -1622,7 +1622,8 @@ function PanelGroupWithForwardedRef({
1622
1622
  collapsible,
1623
1623
  panelSize
1624
1624
  } = panelDataHelper(panelDataArray, panelData, layout);
1625
- return collapsible === true && panelSize === collapsedSize;
1625
+ assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1626
+ return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);
1626
1627
  }, []);
1627
1628
 
1628
1629
  // External APIs are safe to memoize via committed values ref
@@ -1637,7 +1638,7 @@ function PanelGroupWithForwardedRef({
1637
1638
  panelSize
1638
1639
  } = panelDataHelper(panelDataArray, panelData, layout);
1639
1640
  assert(panelSize != null, `Panel size not found for panel "${panelData.id}"`);
1640
- return !collapsible || panelSize > collapsedSize;
1641
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
1641
1642
  }, []);
1642
1643
  const registerPanel = useCallback(panelData => {
1643
1644
  const {
@@ -1790,8 +1791,8 @@ function PanelGroupWithForwardedRef({
1790
1791
  // It's possible that the panels in this group have changed since the last render
1791
1792
  return;
1792
1793
  }
1793
- if (prevCollapsible && nextCollapsible && prevPanelSize === prevCollapsedSize) {
1794
- if (prevCollapsedSize !== nextCollapsedSize) {
1794
+ if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {
1795
+ if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {
1795
1796
  resizePanel(panelData, nextCollapsedSize);
1796
1797
  }
1797
1798
  } else if (prevPanelSize < nextMinSize) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-resizable-panels",
3
- "version": "2.0.13",
3
+ "version": "2.0.14",
4
4
  "description": "React components for resizable panel groups/layouts",
5
5
  "author": "Brian Vaughn <brian.david.vaughn@gmail.com>",
6
6
  "license": "MIT",
@@ -60,6 +60,12 @@
60
60
  }
61
61
  },
62
62
  "types": "dist/react-resizable-panels.cjs.d.ts",
63
+ "scripts": {
64
+ "lint": "eslint \"src/**/*.{ts,tsx}\"",
65
+ "test": "jest --config=jest.config.js",
66
+ "test:watch": "jest --config=jest.config.js --watch",
67
+ "watch": "parcel watch --port=2345"
68
+ },
63
69
  "devDependencies": {
64
70
  "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
65
71
  "@babel/plugin-proposal-optional-chaining": "7.21.0",
@@ -77,11 +83,5 @@
77
83
  },
78
84
  "browserslist": [
79
85
  "Chrome 79"
80
- ],
81
- "scripts": {
82
- "lint": "eslint \"src/**/*.{ts,tsx}\"",
83
- "test": "jest --config=jest.config.js",
84
- "test:watch": "jest --config=jest.config.js --watch",
85
- "watch": "parcel watch --port=2345"
86
- }
87
- }
86
+ ]
87
+ }
@@ -144,6 +144,55 @@ describe("PanelGroup", () => {
144
144
  });
145
145
  verifyExpandedPanelGroupLayout(mostRecentLayout, [30, 70]);
146
146
  });
147
+
148
+ it("should report the correct state with collapsedSizes that have many decimal places", () => {
149
+ act(() => {
150
+ root.render(
151
+ <PanelGroup direction="horizontal">
152
+ <Panel
153
+ collapsedSize={3.8764385221078133}
154
+ collapsible
155
+ defaultSize={50}
156
+ minSize={15}
157
+ ref={leftPanelRef}
158
+ />
159
+ <PanelResizeHandle />
160
+ <Panel collapsible defaultSize={50} ref={rightPanelRef} />
161
+ </PanelGroup>
162
+ );
163
+ });
164
+
165
+ act(() => {
166
+ leftPanelRef.current?.collapse();
167
+ });
168
+ expect(leftPanelRef.current?.isCollapsed()).toBe(true);
169
+ expect(leftPanelRef.current?.isExpanded()).toBe(false);
170
+
171
+ act(() => {
172
+ root.render(
173
+ <PanelGroup direction="horizontal">
174
+ <Panel
175
+ collapsedSize={3.8764385221078132}
176
+ collapsible
177
+ defaultSize={50}
178
+ minSize={15}
179
+ ref={leftPanelRef}
180
+ />
181
+ <PanelResizeHandle />
182
+ <Panel collapsible defaultSize={50} ref={rightPanelRef} />
183
+ </PanelGroup>
184
+ );
185
+ });
186
+
187
+ expect(leftPanelRef.current?.isCollapsed()).toBe(true);
188
+ expect(leftPanelRef.current?.isExpanded()).toBe(false);
189
+
190
+ act(() => {
191
+ leftPanelRef.current?.expand();
192
+ });
193
+ expect(leftPanelRef.current?.isCollapsed()).toBe(false);
194
+ expect(leftPanelRef.current?.isExpanded()).toBe(true);
195
+ });
147
196
  });
148
197
 
149
198
  describe("resize", () => {
package/src/PanelGroup.ts CHANGED
@@ -31,6 +31,10 @@ import { getResizeHandleElement } from "./utils/dom/getResizeHandleElement";
31
31
  import { isKeyDown, isMouseEvent, isTouchEvent } from "./utils/events";
32
32
  import { getResizeEventCursorPosition } from "./utils/events/getResizeEventCursorPosition";
33
33
  import { initializeDefaultStorage } from "./utils/initializeDefaultStorage";
34
+ import {
35
+ fuzzyCompareNumbers,
36
+ fuzzyNumbersEqual,
37
+ } from "./utils/numbers/fuzzyCompareNumbers";
34
38
  import {
35
39
  loadPanelGroupState,
36
40
  savePanelGroupState,
@@ -341,7 +345,7 @@ function PanelGroupWithForwardedRef({
341
345
  `Panel size not found for panel "${panelData.id}"`
342
346
  );
343
347
 
344
- if (panelSize !== collapsedSize) {
348
+ if (!fuzzyNumbersEqual(panelSize, collapsedSize)) {
345
349
  // Store size before collapse;
346
350
  // This is the size that gets restored if the expand() API is used.
347
351
  panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);
@@ -393,12 +397,12 @@ function PanelGroupWithForwardedRef({
393
397
 
394
398
  const {
395
399
  collapsedSize = 0,
396
- panelSize,
400
+ panelSize = 0,
397
401
  minSize = 0,
398
402
  pivotIndices,
399
403
  } = panelDataHelper(panelDataArray, panelData, prevLayout);
400
404
 
401
- if (panelSize === collapsedSize) {
405
+ if (fuzzyNumbersEqual(panelSize, collapsedSize)) {
402
406
  // Restore this panel to the size it was before it was collapsed, if possible.
403
407
  const prevPanelSize = panelSizeBeforeCollapseRef.current.get(
404
408
  panelData.id
@@ -484,7 +488,12 @@ function PanelGroupWithForwardedRef({
484
488
  panelSize,
485
489
  } = panelDataHelper(panelDataArray, panelData, layout);
486
490
 
487
- return collapsible === true && panelSize === collapsedSize;
491
+ assert(
492
+ panelSize != null,
493
+ `Panel size not found for panel "${panelData.id}"`
494
+ );
495
+
496
+ return collapsible === true && fuzzyNumbersEqual(panelSize, collapsedSize);
488
497
  }, []);
489
498
 
490
499
  // External APIs are safe to memoize via committed values ref
@@ -502,7 +511,7 @@ function PanelGroupWithForwardedRef({
502
511
  `Panel size not found for panel "${panelData.id}"`
503
512
  );
504
513
 
505
- return !collapsible || panelSize > collapsedSize;
514
+ return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
506
515
  }, []);
507
516
 
508
517
  const registerPanel = useCallback((panelData: PanelData) => {
@@ -780,9 +789,9 @@ function PanelGroupWithForwardedRef({
780
789
  if (
781
790
  prevCollapsible &&
782
791
  nextCollapsible &&
783
- prevPanelSize === prevCollapsedSize
792
+ fuzzyNumbersEqual(prevPanelSize, prevCollapsedSize)
784
793
  ) {
785
- if (prevCollapsedSize !== nextCollapsedSize) {
794
+ if (!fuzzyNumbersEqual(prevCollapsedSize, nextCollapsedSize)) {
786
795
  resizePanel(panelData, nextCollapsedSize);
787
796
  } else {
788
797
  // Stay collapsed
@@ -5,13 +5,17 @@ export function fuzzyCompareNumbers(
5
5
  expected: number,
6
6
  fractionDigits: number = PRECISION
7
7
  ): number {
8
- actual = parseFloat(actual.toFixed(fractionDigits));
9
- expected = parseFloat(expected.toFixed(fractionDigits));
10
-
11
- const delta = actual - expected;
12
- if (delta === 0) {
8
+ if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
13
9
  return 0;
14
10
  } else {
15
- return delta > 0 ? 1 : -1;
11
+ return actual > expected ? 1 : -1;
16
12
  }
17
13
  }
14
+
15
+ export function fuzzyNumbersEqual(
16
+ actual: number,
17
+ expected: number,
18
+ fractionDigits: number = PRECISION
19
+ ): boolean {
20
+ return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
21
+ }
Binary file
@@ -1,2 +0,0 @@
1
- 114864213
2
- 1680459541679979000
Binary file
Binary file
Binary file
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2023 Brian Vaughn
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.