@linzjs/lui 21.23.0 → 21.23.1

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,3 +1,10 @@
1
+ ## [21.23.1](https://github.com/linz/lui/compare/v21.23.0...v21.23.1) (2024-02-22)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **Splitter:** stop flashing behavior ([#1074](https://github.com/linz/lui/issues/1074)) ([3ebae79](https://github.com/linz/lui/commit/3ebae794183327d144d0d6c8d8985f3bb3326fdf))
7
+
1
8
  # [21.23.0](https://github.com/linz/lui/compare/v21.22.0...v21.23.0) (2024-02-21)
2
9
 
3
10
 
@@ -2,6 +2,8 @@ import { RefObject } from 'react';
2
2
  /**
3
3
  * Ensures valueNow is set to a valid value within its allowed boundaries.
4
4
  * If boundaries and/or initialRatio are not specified, they will be defaulted.
5
+ * It's possible that multiple events trigger setValueNow simultaneosly with the same value.
6
+ * This multiple calls are expected, and setValueNow will resize only once.
5
7
  */
6
8
  export declare const useValueSeparator: ({ separator, ratio, onResized, boundaries: { min, max }, }: {
7
9
  ratio?: number | undefined;
@@ -0,0 +1,5 @@
1
+ import { RefObject } from 'react';
2
+ /**
3
+ * Calls setValueNow when the separator attributes change.
4
+ */
5
+ export declare const useValueSeparatorEffects: (setValueNow: (val?: number) => void, separator: RefObject<HTMLDivElement>, ratio?: number) => void;
package/dist/index.js CHANGED
@@ -58680,25 +58680,23 @@ var animateSeparator = function (separatorRef, animate) {
58680
58680
  };
58681
58681
 
58682
58682
  /**
58683
- * Ensures valueNow is set to a valid value within its allowed boundaries.
58684
- * If boundaries and/or initialRatio are not specified, they will be defaulted.
58683
+ * Moves separator as per ratio changes. Centers on first render if ratio is undefined.
58685
58684
  */
58686
- var useValueSeparator = function (_a) {
58687
- var separator = _a.separator, ratio = _a.ratio, onResized = _a.onResized, _b = _a.boundaries, min = _b.min, max = _b.max;
58688
- var prev = React.useRef();
58689
- var setValueNow = React.useCallback(function (val) {
58690
- var valueNow = getSeparatorAttributes({ ref: separator }).valueNow;
58691
- var value = val !== null && val !== void 0 ? val : (valueNow || min + (max - min) / 2);
58692
- var newValue = clampSeparator({ value: value, max: max, min: min });
58693
- resize(separator, newValue);
58694
- if (prev.current !== newValue) {
58695
- prev.current = newValue;
58696
- onResized === null || onResized === void 0 ? void 0 : onResized(newValue);
58697
- }
58698
- }, [onResized, min, max, prev]);
58685
+ var useRatioEffect = function (setValueNow, ratio) {
58686
+ var firstRun = React.useRef(true);
58699
58687
  React.useEffect(function () {
58700
- setValueNow(ratio);
58701
- }, [setValueNow, ratio]);
58688
+ if (firstRun.current || ratio !== undefined) {
58689
+ firstRun.current = false;
58690
+ // If ratio is undefined, setValueNow will place the separator in the middle as a starting point.
58691
+ // Whatever value is `the middle` will be determined by setValueNow
58692
+ setValueNow(ratio);
58693
+ }
58694
+ }, [setValueNow, ratio, firstRun]);
58695
+ };
58696
+ /**
58697
+ * Re-arranges the splitter if the limits or orientation change.
58698
+ */
58699
+ var useConfigEffect = function (setValueNow, separator) {
58702
58700
  React.useEffect(function () {
58703
58701
  var callback = function () {
58704
58702
  var value = getSeparatorAttributes({ ref: separator }).valueNow;
@@ -58711,6 +58709,11 @@ var useValueSeparator = function (_a) {
58711
58709
  });
58712
58710
  return function () { return observer.disconnect(); };
58713
58711
  }, [separator, setValueNow]);
58712
+ };
58713
+ /**
58714
+ * Broadcasts changes if separator aria-valuenow was altered.
58715
+ */
58716
+ var useValueNowEffect = function (setValueNow, separator) {
58714
58717
  React.useEffect(function () {
58715
58718
  var observer = new MutationObserver(function (_a) {
58716
58719
  var target = _a[0].target;
@@ -58725,6 +58728,36 @@ var useValueSeparator = function (_a) {
58725
58728
  observer.observe(separator.current, { attributeFilter: attributeFilter });
58726
58729
  return function () { return observer.disconnect(); };
58727
58730
  }, [separator, setValueNow]);
58731
+ };
58732
+ /**
58733
+ * Calls setValueNow when the separator attributes change.
58734
+ */
58735
+ var useValueSeparatorEffects = function (setValueNow, separator, ratio) {
58736
+ useRatioEffect(setValueNow, ratio);
58737
+ useConfigEffect(setValueNow, separator);
58738
+ useValueNowEffect(setValueNow, separator);
58739
+ };
58740
+
58741
+ /**
58742
+ * Ensures valueNow is set to a valid value within its allowed boundaries.
58743
+ * If boundaries and/or initialRatio are not specified, they will be defaulted.
58744
+ * It's possible that multiple events trigger setValueNow simultaneosly with the same value.
58745
+ * This multiple calls are expected, and setValueNow will resize only once.
58746
+ */
58747
+ var useValueSeparator = function (_a) {
58748
+ var separator = _a.separator, ratio = _a.ratio, onResized = _a.onResized, _b = _a.boundaries, min = _b.min, max = _b.max;
58749
+ var prev = React.useRef(null);
58750
+ var setValueNow = React.useCallback(function (val) {
58751
+ var valueNow = getSeparatorAttributes({ ref: separator }).valueNow;
58752
+ var value = val !== null && val !== void 0 ? val : (valueNow || min + (max - min) / 2);
58753
+ var newValue = clampSeparator({ value: value, max: max, min: min });
58754
+ resize(separator, newValue);
58755
+ if (prev.current !== newValue) {
58756
+ prev.current = newValue;
58757
+ onResized === null || onResized === void 0 ? void 0 : onResized(newValue);
58758
+ }
58759
+ }, [onResized, min, max, prev]);
58760
+ useValueSeparatorEffects(setValueNow, separator, ratio);
58728
58761
  return { setValueNow: setValueNow };
58729
58762
  };
58730
58763
  var resize = function (separator, value) {