@linzjs/lui 21.26.2 → 21.27.0

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,17 @@
1
+ # [21.27.0](https://github.com/linz/lui/compare/v21.26.3...v21.27.0) (2024-04-24)
2
+
3
+
4
+ ### Features
5
+
6
+ * adds optional dataTestId to LuiLoadingSpinner ([#1113](https://github.com/linz/lui/issues/1113)) ([dbad239](https://github.com/linz/lui/commit/dbad239e66b27300220c08b9cd8d094564724ed1))
7
+
8
+ ## [21.26.3](https://github.com/linz/lui/compare/v21.26.2...v21.26.3) (2024-04-22)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **Splitter:** make transition be triggered manually ([#1112](https://github.com/linz/lui/issues/1112)) ([f07a612](https://github.com/linz/lui/commit/f07a612e9c28d8f88186d3d038b1a3334c7cb065))
14
+
1
15
  ## [21.26.2](https://github.com/linz/lui/compare/v21.26.1...v21.26.2) (2024-04-18)
2
16
 
3
17
 
@@ -8,6 +8,8 @@ interface LuiMiniSpinnerProps {
8
8
  divProps?: any;
9
9
  }
10
10
  export declare const LuiMiniSpinner: (props: LuiMiniSpinnerProps) => JSX.Element;
11
- export declare const LuiLoadingSpinner: () => JSX.Element;
11
+ export declare const LuiLoadingSpinner: (props: {
12
+ dataTestId?: string;
13
+ }) => JSX.Element;
12
14
  export declare function isChromatic(): boolean;
13
15
  export {};
@@ -1,5 +1,5 @@
1
1
  import { RefObject } from 'react';
2
- export declare const transition: (separator: RefObject<HTMLDivElement>) => {
2
+ export declare const transition: (props: RefObject<HTMLDivElement> | HTMLDivElement) => {
3
3
  stop: () => void;
4
4
  resume: () => void;
5
5
  };
package/dist/index.js CHANGED
@@ -31491,7 +31491,11 @@ var renderSettings = {
31491
31491
  preserveAspectRatio: 'xMidYMid slice'
31492
31492
  };
31493
31493
  var LuiLoadingSpinnerBase = function (props) {
31494
- return (React__default["default"].createElement("div", { className: "LuiLoadingSpinnerBase", "data-testid": "loading-spinner" },
31494
+ var testId = 'loading-spinner';
31495
+ if (props.dataTestId) {
31496
+ testId += "-".concat(props.dataTestId);
31497
+ }
31498
+ return (React__default["default"].createElement("div", { className: "LuiLoadingSpinnerBase", "data-testid": testId },
31495
31499
  React__default["default"].createElement(LuiLottieLight, { animationData: props.animationData, loop: true, autoplay: autoplay, rendererSettings: renderSettings, style: style })));
31496
31500
  };
31497
31501
  /**
@@ -31509,8 +31513,8 @@ var LuiMiniSpinner = function (props) {
31509
31513
  preserveAspectRatio: 'xMidYMid slice'
31510
31514
  }, style: { height: props.size, width: props.size } })));
31511
31515
  };
31512
- var LuiLoadingSpinner = function () {
31513
- return React__default["default"].createElement(LuiLoadingSpinnerBase, { animationData: loaderData });
31516
+ var LuiLoadingSpinner = function (props) {
31517
+ return (React__default["default"].createElement(LuiLoadingSpinnerBase, { animationData: loaderData, dataTestId: props.dataTestId }));
31514
31518
  };
31515
31519
  // this function was extracted from chromatic/isChromatic. It was causing TS issues for the consumer
31516
31520
  function isChromatic() {
@@ -58439,7 +58443,7 @@ var LuiPagination = function (_a) {
58439
58443
  React__default["default"].createElement("div", { className: "pagination" }, renderPaginationNumbers())))));
58440
58444
  };
58441
58445
 
58442
- var css_248z$2 = "/**\n @deprecated\n */\n/**\n @deprecated\n */\n/**\n @deprecated\n */\n.Separator {\n background-color: #eaeaea;\n position: absolute;\n display: flex;\n justify-content: space-around;\n transition-property: background-color;\n transition-delay: 750ms;\n transition-duration: 300ms;\n}\n.Separator-arrows {\n align-self: center;\n position: relative;\n opacity: 0;\n transition-property: opacity;\n transition-delay: 750ms;\n transition-duration: 300ms;\n}\n.Separator:focus-within, .Separator:hover, .Separator:focus, .Separator:active {\n background-color: #73c8e1;\n transition-delay: 0ms;\n transition-duration: 0ms;\n}\n.Separator:focus-within .Separator-arrows, .Separator:hover .Separator-arrows, .Separator:focus .Separator-arrows, .Separator:active .Separator-arrows {\n opacity: 1;\n transition-delay: 0ms;\n transition-duration: 0ms;\n display: inline-block;\n}";
58446
+ var css_248z$2 = "/**\n @deprecated\n */\n/**\n @deprecated\n */\n/**\n @deprecated\n */\n.Separator {\n background-color: #eaeaea;\n position: absolute;\n display: flex;\n justify-content: space-around;\n transition-property: background-color;\n transition-delay: 750ms;\n transition-duration: 0ms;\n}\n.Separator-arrows {\n align-self: center;\n position: relative;\n opacity: 0;\n transition-property: opacity;\n transition-delay: 750ms;\n transition-duration: 0ms;\n}\n.Separator:focus-within, .Separator:hover, .Separator:focus, .Separator:active {\n background-color: #73c8e1;\n transition-delay: 0ms;\n transition-duration: 0ms;\n}\n.Separator:focus-within .Separator-arrows, .Separator:hover .Separator-arrows, .Separator:focus .Separator-arrows, .Separator:active .Separator-arrows {\n opacity: 1;\n transition-delay: 0ms;\n transition-duration: 0ms;\n display: inline-block;\n}";
58443
58447
  styleInject(css_248z$2);
58444
58448
 
58445
58449
  var css_248z$1 = ".Control {\n transition: opacity 0.2s ease;\n position: absolute;\n margin-left: 0 !important;\n display: flex;\n justify-content: space-around;\n align-items: center;\n}";
@@ -58681,29 +58685,6 @@ var getSeparatorPosition = function (separatorRef, drag) {
58681
58685
  return clampSeparator({ value: value });
58682
58686
  };
58683
58687
 
58684
- var transitionFactory = function (attrs, ms) {
58685
- return attrs.map(function (key) { return "".concat(key, " ").concat(ms, "ms"); }).join(', ');
58686
- };
58687
- var barTransition = function (ms) {
58688
- return transitionFactory(['left', 'top', 'right', 'bottom'], ms);
58689
- };
58690
- var gridTransition = function (ms) {
58691
- return transitionFactory(['grid-template-columns', 'grid-template-rows'], ms);
58692
- };
58693
- var transition = function (separator) {
58694
- var _a;
58695
- var splitter = (_a = separator.current) === null || _a === void 0 ? void 0 : _a.parentElement;
58696
- var delay = function (ms) {
58697
- if (splitter) {
58698
- separator.current.style.transition = barTransition(ms);
58699
- splitter.style.transition = gridTransition(ms);
58700
- }
58701
- };
58702
- var stop = function () { return delay(0); };
58703
- var resume = function () { return delay(300); };
58704
- return { stop: stop, resume: resume };
58705
- };
58706
-
58707
58688
  /**
58708
58689
  * It captures window events to report a new position.
58709
58690
  * Provides necessary handlers for separator.
@@ -58747,7 +58728,6 @@ var animateSeparator = function (separatorRef, animate) {
58747
58728
  var splitter = separator === null || separator === void 0 ? void 0 : separator.parentElement;
58748
58729
  if (separator && splitter) {
58749
58730
  if (animate === 'clear-transition') {
58750
- transition(separatorRef).stop();
58751
58731
  splitter.style.cursor =
58752
58732
  separator.getAttribute('aria-orientation') === 'vertical'
58753
58733
  ? 'col-resize'
@@ -58755,22 +58735,40 @@ var animateSeparator = function (separatorRef, animate) {
58755
58735
  splitter.classList.add('resizing');
58756
58736
  }
58757
58737
  else {
58758
- transition(separatorRef).resume();
58759
58738
  splitter.style.cursor = '';
58760
58739
  splitter.classList.remove('resizing');
58761
58740
  }
58762
58741
  }
58763
58742
  };
58764
58743
 
58765
- var useSetValueNow_static = function (setValueNow, separator) {
58766
- var _a = React.useState(0), count = _a[0], setCount = _a[1];
58767
- React.useEffect(function () { return transition(separator).resume(); }, [count]);
58768
- return React.useCallback(function (val, config) {
58769
- transition(separator).stop();
58770
- setValueNow(val, config);
58771
- setCount(function (p) { return p + 1; });
58772
- }, [setValueNow]);
58744
+ var transitionFactory = function (attrs, ms) {
58745
+ return attrs.map(function (key) { return "".concat(key, " ").concat(ms, "ms"); }).join(', ');
58746
+ };
58747
+ var barTransition = function (ms) {
58748
+ return transitionFactory(['left', 'top', 'right', 'bottom'], ms);
58773
58749
  };
58750
+ var gridTransition = function (ms) {
58751
+ return transitionFactory(['grid-template-columns', 'grid-template-rows'], ms);
58752
+ };
58753
+ var transition = function (props) {
58754
+ var _a;
58755
+ var separator = Object.hasOwn(props, 'current')
58756
+ ? props
58757
+ : { current: props };
58758
+ var splitter = (_a = separator.current) === null || _a === void 0 ? void 0 : _a.parentElement;
58759
+ var delay = function (ms) {
58760
+ if (splitter) {
58761
+ separator.current.style.transition = barTransition(ms);
58762
+ splitter.style.transition = gridTransition(ms);
58763
+ }
58764
+ };
58765
+ var stop = function () { return delay(0); };
58766
+ var resume = function () {
58767
+ return delay((splitter === null || splitter === void 0 ? void 0 : splitter.classList.contains('resizing')) ? 0 : 300);
58768
+ };
58769
+ return { stop: stop, resume: resume };
58770
+ };
58771
+
58774
58772
  /**
58775
58773
  * Moves separator as per ratio changes. Centers on first render if ratio is undefined.
58776
58774
  */
@@ -58779,6 +58777,9 @@ var useRatioEffect = function (setValueNow, separator, ratio, startAt) {
58779
58777
  var _a = getSeparatorAttributes({ ref: separator }), valueMax = _a.valueMax, valueMin = _a.valueMin;
58780
58778
  var isCalculating = valueMax === Infinity || valueMin === -Infinity;
58781
58779
  React.useEffect(function () {
58780
+ if (!firstRun.current && ratio !== undefined && !isCalculating) {
58781
+ transition(separator).resume();
58782
+ }
58782
58783
  if (firstRun.current || ratio !== undefined || isCalculating) {
58783
58784
  firstRun.current = false;
58784
58785
  // If ratio is undefined, setValueNow will place the separator in the middle as a starting point.
@@ -58791,7 +58792,6 @@ var useRatioEffect = function (setValueNow, separator, ratio, startAt) {
58791
58792
  * Re-arranges the splitter if the limits or orientation change.
58792
58793
  */
58793
58794
  var useConfigEffect = function (setValueNow, separator) {
58794
- var setValueNow_static = useSetValueNow_static(setValueNow, separator);
58795
58795
  React.useEffect(function () {
58796
58796
  var callback = function (attr) {
58797
58797
  return function (_a) {
@@ -58808,7 +58808,7 @@ var useConfigEffect = function (setValueNow, separator) {
58808
58808
  // In such case, the newValueNow is moved along with the delimiter.
58809
58809
  var newValueNow = !wasInBoundary ? valueNow : newValue;
58810
58810
  if (wasInBoundary || valueMax < valueNow || valueMin > valueNow) {
58811
- setValueNow_static(newValueNow, { min: valueMin, max: valueMax });
58811
+ setValueNow(newValueNow, { min: valueMin, max: valueMax });
58812
58812
  }
58813
58813
  else {
58814
58814
  var threshold = 0.01;
@@ -58827,7 +58827,7 @@ var useConfigEffect = function (setValueNow, separator) {
58827
58827
  }
58828
58828
  var newVal = ((primary + offset) / container) * 100;
58829
58829
  if (Math.abs(newVal - valueNow) >= threshold) {
58830
- setValueNow_static(newVal, { min: valueMin, max: valueMax });
58830
+ setValueNow(newVal, { min: valueMin, max: valueMax });
58831
58831
  }
58832
58832
  }
58833
58833
  };
@@ -58857,16 +58857,22 @@ var useConfigEffect = function (setValueNow, separator) {
58857
58857
  var useValueNowEffect = function (setValueNow, separator) {
58858
58858
  React.useEffect(function () {
58859
58859
  var observer = new MutationObserver(function (_a) {
58860
- var target = _a[0].target;
58860
+ var _b = _a[0], target = _b.target, oldValue = _b.oldValue;
58861
58861
  var el = target;
58862
58862
  var splitter = target.parentElement;
58863
58863
  var newValueNow = Number(el.getAttribute('aria-valuenow'));
58864
58864
  if (!splitter.classList.contains('resizing')) {
58865
- setValueNow(newValueNow);
58865
+ if (Number(oldValue) !== newValueNow) {
58866
+ transition(separator).resume();
58867
+ setValueNow(newValueNow);
58868
+ }
58866
58869
  }
58867
58870
  });
58868
58871
  var attributeFilter = ['aria-valuenow'];
58869
- observer.observe(separator.current, { attributeFilter: attributeFilter });
58872
+ observer.observe(separator.current, {
58873
+ attributeFilter: attributeFilter,
58874
+ attributeOldValue: true
58875
+ });
58870
58876
  return function () { return observer.disconnect(); };
58871
58877
  }, [separator, setValueNow]);
58872
58878
  };
@@ -59155,19 +59161,26 @@ var Separator = React.forwardRef(function (_a, forwardRef) {
59155
59161
  var _a;
59156
59162
  var newValueNow = keyDownHandler(e);
59157
59163
  if (values().valueNow !== newValueNow) {
59164
+ transition(separator).resume();
59158
59165
  setValueNow(newValueNow);
59159
59166
  e.preventDefault();
59160
59167
  }
59161
59168
  (_a = props === null || props === void 0 ? void 0 : props.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(props, e);
59162
- }, className: clsx('Separator', props.className) }),
59169
+ }, className: clsx('Separator', props.className), onTransitionEnd: function (e) {
59170
+ var _a;
59171
+ transition(separator).stop();
59172
+ (_a = props.onTransitionEnd) === null || _a === void 0 ? void 0 : _a.call(props, e);
59173
+ } }),
59163
59174
  React__default["default"].createElement("span", __assign({}, parts === null || parts === void 0 ? void 0 : parts.container, { className: clsx('Separator-arrows', (_b = parts === null || parts === void 0 ? void 0 : parts.container) === null || _b === void 0 ? void 0 : _b.className), onMouseDown: cancelEvent, onTouchStart: cancelEvent }),
59164
59175
  React__default["default"].createElement(Control, __assign({}, parts === null || parts === void 0 ? void 0 : parts.primary, { side: "primary", onClick: function (e) {
59165
59176
  var _a, _b;
59177
+ transition(separator).resume();
59166
59178
  setValueNow(controlClickHandler(e, 'primary'));
59167
59179
  (_b = (_a = parts === null || parts === void 0 ? void 0 : parts.primary) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a, e);
59168
59180
  } })),
59169
59181
  React__default["default"].createElement(Control, __assign({}, parts === null || parts === void 0 ? void 0 : parts.secondary, { side: "secondary", onClick: function (e) {
59170
59182
  var _a, _b;
59183
+ transition(separator).resume();
59171
59184
  setValueNow(controlClickHandler(e, 'secondary'));
59172
59185
  (_b = (_a = parts === null || parts === void 0 ? void 0 : parts.secondary) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a, e);
59173
59186
  } })))));